Popolo.Webpro 3.1.1

dotnet add package Popolo.Webpro --version 3.1.1
                    
NuGet\Install-Package Popolo.Webpro -Version 3.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Popolo.Webpro" Version="3.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Popolo.Webpro" Version="3.1.1" />
                    
Directory.Packages.props
<PackageReference Include="Popolo.Webpro" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Popolo.Webpro --version 3.1.1
                    
#r "nuget: Popolo.Webpro, 3.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Popolo.Webpro@3.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Popolo.Webpro&version=3.1.1
                    
Install as a Cake Addin
#tool nuget:?package=Popolo.Webpro&version=3.1.1
                    
Install as a Cake Tool

Popolo

Popolo is an open-source C# library for academic simulation of building thermal environments and HVAC systems. It provides physics-based models for heat transfer, thermophysical properties, climate data, occupant comfort, and HVAC equipment — designed for researchers who value long-term stability, portability, and minimal external dependencies.


Packages

Popolo is split into three NuGet packages so that the physics core can stay free of I/O concerns. Add only the layer you need; each higher-level package pulls in the lower ones automatically as Popolo dependencies, and none of them pull in any third-party runtime dependency.

Package Purpose Depends on
Popolo.Core Physics, solvers, zone / wall / window / HVAC equipment models. Pure computation, no I/O. — (no Popolo deps)
Popolo.IO File I/O for weather data (EPW / HASP / TMY1 / WEA2 / EXA / CSV) and JSON serialization of BuildingThermalModel, MultiRoom, Zone, Wall, Window, Sun, Incline. Required if you want to load or save anything. Popolo.Core
Popolo.Webpro Japan-local: integration with the WEBPRO compliance-calculation format. Most overseas users will not need this. Popolo.Core, Popolo.IO

If your simulation generates inputs programmatically (e.g., a synthetic weather schedule) and logs results with your own writer, Popolo.Core alone is enough. If you want to read real weather files or round-trip building models through JSON, add Popolo.IO as well.


Design Philosophy

  • No external runtime dependencies. The core library ships as a single Popolo.Core.dll assembly. You can drop it into any .NET project and start simulating — no NuGet tree to manage, no version conflicts.
  • Physics-based, not black-box. Every model is grounded in documented equations (ASHRAE, JIS, academic literature) and exposes its internal state through read-only interfaces so you can inspect intermediate quantities for research reproducibility.
  • Typed exceptions for diagnosable failures. Numerical divergence, out-of-range inputs, and unsupported configurations are surfaced as distinct Popolo*Exception subclasses, so downstream tools can react to them programmatically instead of parsing error strings.
  • Separation of concerns. File I/O (weather files, JSON), and country-specific compliance formats (WEBPRO) are shipped as separate packages (Popolo.IO, Popolo.Webpro) rather than bundled into the core. The physics core stays pure; serialization and format support can be added on top without touching the models.

Features

  • Numerical Computing
    • Linear algebra (dense & sparse matrices, QR decomposition, LU solve)
    • Root finding (univariate / multivariate, Newton–Raphson)
    • Optimization (Nelder–Mead, golden-section, Levenberg–Marquardt)
    • ODE integration, Gauss–Legendre quadrature, cubic splines, FFT
    • Random number generation (Mersenne Twister, Normal / Log-normal / Gamma)
  • Thermodynamic Properties
    • Liquid water and steam (IAPWS correlations)
    • Moist air (psychrometrics at arbitrary atmospheric pressure)
    • Refrigerants (R22, R134a, R410A, R407C, R32, etc.)
    • Lithium bromide aqueous solution
  • Climate
    • Solar position and irradiance on arbitrary inclined surfaces
    • Sky radiation (Berdahl–Fromberg, Brunt, cloud-cover correction)
    • Stochastic weather generation from daily statistics
    • Ground temperature
  • Heat Exchange & Equipment
    • Counterflow / parallel-flow / cross-flow heat exchange (ε-NTU, LMTD)
    • Tube-in-fin heat exchanger, evaporator, condenser (with frost modelling)
    • Air-to-air flat plate heat exchanger (sensible and enthalpy types)
    • Cooling tower (cross-flow / counter-flow)
    • Boiler (hot water, steam)
    • Compression refrigerator (simple / detailed centrifugal inverter chillers)
    • Absorption chiller (hot water driven, direct-fired, adsorption)
    • Air-source modular chillers, water heat pumps
  • Fluid & Network Systems
    • Centrifugal pumps and fans (with inverter / VFD control)
    • Fluid circuit network solver (Hardy-Cross style with nodal pressures)
    • Parallel / series / controllable branches
    • Water and air piping (insulated) with heat loss calculation
  • Renewable & Thermal Storage
    • Flat-plate solar thermal collector
    • Photovoltaic panel (simplified and detailed)
    • Stratified water tank (multi-node)
    • Ice-on-coil thermal storage
    • Simple ground heat exchanger
  • Building Envelope
    • Multi-layer wall heat conduction (response factor method)
    • PCM (phase change material) wall layers
    • Horizontal air chambers (radiative + convective)
    • Buried pipes (radiant floor heating / cooling)
    • Windows with venetian blinds, sunshades, simple shading
  • System Simulation
    • Multi-room thermal balance (MultiRoom, BuildingThermalModel)
    • Air handling unit with coils, humidifier, economizer
    • AHU / heat source sub-system orchestration
    • Variable Refrigerant Flow (VRF) with factory methods for Daikin VRV-X/VRV-A, Hitachi Set-Free SS, Toshiba MMY catalogues
  • Human-Centric Modelling
    • PMV / PPD (Fanger model)
    • SET*, two-node body model (Gagge model)
    • 16-segment multi-node human body model (Tanabe)
    • Occupant thermal preference distribution (Takakusaki model)
    • Stochastic occupant behaviour (Langevin model, office tenant / worker)

Requirements

  • .NET 10 or later
  • No third-party NuGet packages

Popolo.Core has no runtime dependencies. Building and testing the repository requires only the .NET SDK.


Installation

Start with Popolo.Core for the physics and solver models:

dotnet add package Popolo.Core

Add Popolo.IO when you need to read weather files (EPW / HASP / TMY1 etc.) or serialize/deserialize building models as JSON:

dotnet add package Popolo.IO

Alternatively, download Popolo.Core.dll (and optionally Popolo.IO.dll) from the releases page and reference them directly. Popolo has no third-party runtime dependencies.


Quick Example

Psychrometric calculation at standard atmospheric pressure:

using Popolo.Core.Physics;

var air = new MoistAir(
    dryBulbTemperature: 26.0,      // [°C]
    humidityRatio: 0.0105);        // [kg/kg(DA)]

Console.WriteLine($"Enthalpy         : {air.Enthalpy:F2} kJ/kg");
Console.WriteLine($"Wet-Bulb temp.   : {air.WetBulbTemperature:F2} °C");
Console.WriteLine($"Relative humidity: {air.RelativeHumidity:F1} %");

Solar position at Tokyo on the summer solstice:

using Popolo.Core.Climate;

var sun = new Sun(Sun.City.Tokyo);
sun.Update(new DateTime(2026, 6, 21, 12, 0, 0));

Console.WriteLine($"Altitude : {sun.Altitude * 180 / Math.PI:F2}°");
Console.WriteLine($"Azimuth  : {sun.Azimuth  * 180 / Math.PI:F2}°");

A centrifugal chiller + cooling tower system under 60% load:

using Popolo.Core.HVAC.HeatExchanger;
using Popolo.Core.HVAC.HeatSource;
using Popolo.Core.HVAC.FluidCircuit;
using Popolo.Core.HVAC.SystemModel;
using Popolo.Core.Physics;

const double Cp = 4.186;                          // [kJ/(kg·K)]
const double chFlow = 500.0 / (12 - 7) / Cp;      // rated chilled water flow
const double cdFlow = 1670.0 / 60;                // rated condenser flow

var chiller = new SimpleCentrifugalChiller(
    ratedCapacity: 500.0 / 6.0, minPLR: 0.2,
    ratedChWSupplyTemp: 12, ratedChWReturnTemp: 7,
    ratedCWEnteringTemp: 37, ratedCWFlow: chFlow,
    hasInverter: false);

var tower = new CoolingTower(
    ratedCWEnteringTemp: 37, ratedCWLeavingTemp: 32, ratedWetBulbTemp: 27,
    ratedFlow: cdFlow, airFlow: CoolingTower.AirFlowDirection.CrossFlow,
    hasInverter: false);

var system = new HeatSourceSystemModel(
    new IHeatSourceSubSystem[] { /* ... assemble your subsystem ... */ });
system.OutdoorAir = new MoistAir(35, 0.0195);
system.ChilledWaterSupplyTemperatureSetpoint = 7.0;
system.TimeStep = 3600;

See samples/Popolo.Samples/ for runnable examples.


Validation

Popolo is validated against ANSI/ASHRAE Standard 140-2023, the building energy simulation industry's reference benchmark (Method of Test for Evaluating Building Performance Simulation Software). The runner under tests/BESTEST_2023/ simulates the full Section 7 Class I Building Thermal Envelope and Fabric Load test suite (46 cases including C195–C470, C600–C695 low-mass, C800/810, C900–C995 high-mass, and the C960 sunspace) each build, then emits both reference-envelope diagnostics and a formal Annex A3 pass/fail report (results/A3_AcceptanceReport.txt).

Software Acceptance Criteria (Normative Annex A3): 40/40 PASS

Std 140-2023 Annex A3 is the standard's normative compliance criterion. For each test group, software must place a minimum count of range cases (both absolute case values and case-to-case sensitivities) inside statistically derived acceptance ranges:

Test Group Popolo Result Required to Pass
Thermal Fabric Low Mass 21 / 21 ≥ 18 / 21
Thermal Fabric High Mass 19 / 19 ≥ 17 / 19
Combined 40 / 40 ≥ 35 / 40

Popolo passes every Annex A3 range case for the Thermal Fabric test groups, exceeding the minimum required count for compliance. Acceptance ranges are constructed per Informative Annex B12.1 as the wider of a 3σ statistical band (median ± 2.024 × MAD over the reference-software set) and a ±5% non-statistical floor on the base-case median.

Informative Reference Envelope (Annex B8): ~90%

Across the broader Section 7 diagnostic suite (46 cases × 4 outputs: annual / peak heating / cooling), 164 of 184 individual case results (≈ 89%) fall inside the example envelopes published from the six reference simulation programs (BSIMAC, CSE, DeST, EnergyPlus, ESP-r, TRNSYS). Standard 140-2023 §4.4.1 explicitly states these envelopes "do not constitute formal acceptance criteria"; they are provided for diagnostic comparison only. Out-of-envelope cases reflect legitimate modeling differences (per Annex B11.1.4) and do not affect the Annex A3 compliance status above.


Exception Hierarchy

Popolo raises typed exceptions that downstream code can catch selectively:

Exception When it is thrown
PopoloArgumentException An argument violates a physical or numerical constraint (unsupported enum value, wrong array length, etc.)
PopoloOutOfRangeException A value is outside a known physical/mathematical bound. Carries Minimum / Maximum properties.
PopoloNumericalException An iterative solver failed to converge or hit a singular matrix. Carries SolverName.
PopoloInvalidOperationException A method call is invalid for the current object state (e.g. missing required property).
PopoloNotImplementedException An unimplemented code path was reached.

All of these inherit from their corresponding BCL base classes (ArgumentException, InvalidOperationException, etc.), so existing broad catch blocks continue to work unchanged.


Repository Layout

src/
  Popolo.Core/            # Physics core (no external dependencies)
    Building/             # Zones, envelope, multi-room thermal balance
    Climate/              # Sun, sky, weather generation, ground
    Energy/               # PV panels
    Exceptions/           # Popolo* exception hierarchy
    Geometry/             # 3D primitives, view factors
    HVAC/                 # Equipment and system models
    Numerics/             # Linear algebra, solvers, random generators
    OccupantBehavior/     # Tenant / worker behavioural models
    Physics/              # Thermodynamic property calculators
    ThermalComfort/       # Fanger, Gagge, Tanabe, Takakusaki models
    Utilities/            # Miscellaneous helpers

  Popolo.IO/              # File I/O (depends on Popolo.Core)
    Climate/Weather/      # EPW / HASP / TMY1 / WEA2 / EXA / CSV readers & writers
    Json/                 # JSON serializers for BuildingThermalModel, MultiRoom,
                          # Zone, Wall, Window, Sun, Incline

  Popolo.Webpro/          # Japan-local WEBPRO compliance format (depends on Popolo.IO)

tests/
  Popolo.Core.Tests/      # Unit tests for the core (xUnit)
  Popolo.IO.Tests/        # Unit tests for the I/O layer
  Popolo.Webpro.Tests/    # Unit tests for the WEBPRO integration
  BESTEST_2023/           # ANSI/ASHRAE Standard 140-2023 validation runner
                          # (formal Annex A3 compliance + Annex B8 envelope check)

samples/
  Popolo.Samples/         # Runnable usage examples

License

Popolo is distributed under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE for details.


Citation

If you use Popolo in academic work, please cite the project repository:

Togashi, E. Popolo: A C# library for building thermal environment
and HVAC system simulation. https://github.com/et0614/popolo

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.1.1 114 5/25/2026
3.1.0 100 5/11/2026
3.0.1 114 4/19/2026