diff --git a/.travis.yml b/.travis.yml index 55d43006b3e..7dd4087c74e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -97,6 +97,8 @@ env: - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Utilities\"" - TEST_ARG="make test-openmodelica PACKAGE=\"Buildings.Utilities\"" - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Utilities\"" + - TEST_ARG="make test-dymola PACKAGE=\"Buildings.Templates\"" + - TEST_ARG="make test-optimica PACKAGE=\"Buildings.Templates\"" before_install: - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin diff --git a/Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg b/Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg new file mode 100644 index 00000000000..a07e7995876 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + M + + diff --git a/Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg b/Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg new file mode 100644 index 00000000000..44a5dcbf9a1 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + M2 + + diff --git a/Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg b/Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg new file mode 100644 index 00000000000..7f96b73705f --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Coils/ChilledWaterSupplyReturn.svg b/Buildings/Resources/Images/Templates/Components/Coils/ChilledWaterSupplyReturn.svg new file mode 100644 index 00000000000..04c6cd69a97 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Coils/ChilledWaterSupplyReturn.svg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Coils/Cooling.svg b/Buildings/Resources/Images/Templates/Components/Coils/Cooling.svg new file mode 100644 index 00000000000..c834ff363af --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Coils/Cooling.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + C + C + + + diff --git a/Buildings/Resources/Images/Templates/Components/Coils/Heating.svg b/Buildings/Resources/Images/Templates/Components/Coils/Heating.svg new file mode 100644 index 00000000000..e6d2886dc17 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Coils/Heating.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + H + C + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Coils/HotWaterSupplyReturn.svg b/Buildings/Resources/Images/Templates/Components/Coils/HotWaterSupplyReturn.svg new file mode 100644 index 00000000000..7343943a523 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Coils/HotWaterSupplyReturn.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Dampers/BladesOpposed.svg b/Buildings/Resources/Images/Templates/Components/Dampers/BladesOpposed.svg new file mode 100644 index 00000000000..4586b78537d --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Dampers/BladesOpposed.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg b/Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg new file mode 100644 index 00000000000..ad3f0dd9709 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Dampers/BladesVAV.svg b/Buildings/Resources/Images/Templates/Components/Dampers/BladesVAV.svg new file mode 100644 index 00000000000..6ab7d2dd9df --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Dampers/BladesVAV.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Fans/Array.svg b/Buildings/Resources/Images/Templates/Components/Fans/Array.svg new file mode 100644 index 00000000000..ae06f1bdd6b --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Fans/Array.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Fans/Housed.svg b/Buildings/Resources/Images/Templates/Components/Fans/Housed.svg new file mode 100644 index 00000000000..4e10e9d4490 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Fans/Housed.svg @@ -0,0 +1,777 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Fans/Plug.svg b/Buildings/Resources/Images/Templates/Components/Fans/Plug.svg new file mode 100644 index 00000000000..555b55e7da2 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Fans/Plug.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg b/Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg new file mode 100644 index 00000000000..3a508f3acdf --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Filters/Filter.svg b/Buildings/Resources/Images/Templates/Components/Filters/Filter.svg new file mode 100644 index 00000000000..7100ef1fd91 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Filters/Filter.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/HeatExchangers/Generic.svg b/Buildings/Resources/Images/Templates/Components/HeatExchangers/Generic.svg new file mode 100644 index 00000000000..3eaf01503cd --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/HeatExchangers/Generic.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg new file mode 100644 index 00000000000..3251bcc00eb --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + DP + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureHigh.svg b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureHigh.svg new file mode 100644 index 00000000000..1b4c13d8b1c --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureHigh.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + H + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureLow.svg b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureLow.svg new file mode 100644 index 00000000000..d8f3a660d72 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureLow.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + L + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/HumidityRatio.svg b/Buildings/Resources/Images/Templates/Components/Sensors/HumidityRatio.svg new file mode 100644 index 00000000000..33ded78701e --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/HumidityRatio.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + x + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/ProbeAveraging.svg b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeAveraging.svg new file mode 100644 index 00000000000..eac1b98ebc8 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeAveraging.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg new file mode 100644 index 00000000000..29cc872049b --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg new file mode 100644 index 00000000000..eb1f63f0f0d --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg b/Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg new file mode 100644 index 00000000000..4f6abd45403 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + H + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg b/Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg new file mode 100644 index 00000000000..e20a0d52728 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + T + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg new file mode 100644 index 00000000000..0cdc3d65118 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + FR + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg new file mode 100644 index 00000000000..d8c5f80e565 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowCross.svg b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowCross.svg new file mode 100644 index 00000000000..8b37d379cfe --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowCross.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowMeter.svg b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowMeter.svg new file mode 100644 index 00000000000..010a33d052a --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowMeter.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + FM + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Valves/ThreeWay.svg b/Buildings/Resources/Images/Templates/Components/Valves/ThreeWay.svg new file mode 100644 index 00000000000..f66b2a0f944 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Valves/ThreeWay.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg b/Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg new file mode 100644 index 00000000000..e21401b50b9 --- /dev/null +++ b/Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Buildings/Resources/Images/Templates/Icons.svg b/Buildings/Resources/Images/Templates/Icons.svg new file mode 100644 index 00000000000..40fcfe9897c --- /dev/null +++ b/Buildings/Resources/Images/Templates/Icons.svg @@ -0,0 +1,3858 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SAOARAEASDCCNETWORKSPEEDVFDRUNENABLEEQUIPMENTGENERALCONTROLSFAN-PROPCENTRIFUGAL HOUSEDFANFAN-PLUGFURNACESUPPLYAIROUTSIDEAIREXHAUSTAIRRETURNAIRFILTERAIR FLOWSTATIONCOILOPPOSED BLADEDAMPERPARALLEL BLADEDAMPERVARIABLE SPEEDDRIVE2-WAYVALVESMOKE DETECTOR3-WAYVALVEPUMPINLINEPUMPACCUVALVECONTACT(BOXED)CONTACT(UNBOXED)CSCURRENT SWITCHBAROMETRIC DAMPERFLOWCROSSFMFLOW METERHXHEAT EXCHANGERRLIGHTCSAUXAUTOHOTM/SMOTOR STARTERRRELAY (1CONTACT)RRELAY (2CONTACTS)SWITCHVAV DAMPERFANARRAYSETPOINTSTATUSENABLECONTROLLERRHTTNETWORKDOAOMM2SENSORSDIGITAL POINTANALOG POINTNETWORK CONNECTION BETWEENCONTROLLER ANDDEVICEHUMIDITY SENSOR (RH)ORTEMPERATURE SENSOR(T)AVERAGING TEMPERATURE SENSORSTATIC PRESSURETIPAFSFANTEMPERATURE SENSOR& SENSORWELLSENSORWELLHARDWIRED DIGITAL OUTPUT(DO)OR DIGITAL INPUT(DI)HARDWIRED ANALOG OUTPUT(AO)OR ANALOG INPUT(AI)MODULATING ACTUATOR2-POSITIONACTUATORTCONTROLSEQUIPMENT(CONT'D) + diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZBase.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZBase.txt new file mode 100644 index 00000000000..4bcea649881 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZBase.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 2, 0, 1, 5, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 2, 1, 1, 0, 0, 0, 1, 5, 1", + "number of continuous time states": "30", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549318953e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502380372913e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601074219e+02, 2.93150390625e+02, 2.931504211427236e+02, 2.931504821777344e+02, 2.931505126953125e+02, 2.931505432128906e+02, 2.93150604247865e+02, 2.93150634765625e+02, 2.931506958007812e+02, 2.931507568359375e+02, 2.931508178710938e+02, 2.931508483886719e+02, 2.931509094238281e+02, 2.931510009764897e+02, 2.931510620117188e+02, 2.931511230470933e+02, 2.931512145996094e+02, 2.931512756347656e+02, 2.931513671872453e+02, 2.931514587401252e+02, 2.93151519775427e+02, 2.931516113283069e+02, 2.931517028811868e+02, 2.931517944335938e+02, 2.931519165036152e+02, 2.931520080564951e+02, 2.93152099609375e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.903674949471838e-04, 7.463307461038224e-04, 1.647834624751131e-03, 2.869447812114541e-03, 4.34494519039745e-03, 6.077618128984614e-03, 8.064855760242096e-03, 1.021790078947745e-02, 1.251461831880188e-02, 1.491985154069591e-02, 1.742303200321052e-02, 1.999452593716658e-02, 2.261420837873473e-02, 2.527040786028833e-02, 2.793705118878496e-02, 3.061215862208582e-02, 3.332453172289484e-02, 3.608017961429468e-02, 3.888478197722597e-02, 4.174218986162145e-02, 4.461644405677818e-02, 4.748644713956704e-02, 5.030480655675899e-02, 5.308878570577123e-02, 5.585563182830811e-02, 5.860516317634715e-02, 6.133721476490511e-02, 6.40516873946877e-02, 6.67484946612199e-02, 6.942756900553816e-02, 7.20655837351311e-02, 7.468001730552998e-02, 7.727309722530572e-02, 7.984520403250092e-02, 8.239668014003469e-02, 8.492783841161632e-02, 8.74389994129163e-02, 8.99287399490814e-02, 9.238674096353351e-02, 9.482327703948928e-02, 9.723878737797789e-02, 9.963368191828602e-02, 1.020083112478484e-01, 1.04363054595695e-01, 1.066982401294358e-01, 1.090153436443723e-01, 1.113162713992825e-01, 1.135994294826763e-01, 1.158651166474813e-01, 1.18113599717617e-01, 1.203451550330424e-01, 1.225600135658736e-01, 1.247584286362772e-01, 1.26940618257092e-01, 1.291068170549724e-01, 1.31257220591508e-01, 1.333920523826171e-01, 1.355188524412906e-01, 1.376382912953908e-01, 1.397456476626569e-01, 1.418412148844306e-01, 1.439252932884711e-01, 1.45998136194341e-01, 1.480600267249556e-01, 1.501112182017606e-01, 1.521519518131259e-01, 1.541824605023518e-01, 1.562030002951995e-01, 1.582137649071162e-01, 1.602296257213551e-01, 1.62243921900094e-01, 1.642533483289958e-01, 1.662583312925754e-01, 1.682592164284425e-01, 1.702563762664795e-01, 1.722501684349814e-01, 1.742409058600384e-01, 1.762289312692109e-01, 1.782145457595494e-01, 1.801980561224044e-01, 1.821797783419942e-01, 1.841800525203367e-01, 1.861835304591929e-01, 1.881906740915543e-01, 1.902019333530336e-01, 1.922177941545504e-01, 1.942386766562713e-01, 1.962650278948793e-01, 1.982972502030056e-01, 2.003357459123578e-01, 2.023808753426145e-01, 2.044330503021689e-01, 2.06495104736604e-01, 2.085758303611655e-01, 2.106674785595185e-01, 2.127705559709214e-01, 2.148855118900204e-01, 2.170128036597823e-01, 2.191528657482058e-01, 2.21306100487709e-01] +VAV_1.bus.VOut_flow=[-0e+00, 4.826665704886589e-05, 1.990246185865922e-04, 4.443106493562069e-04, 7.515020350850617e-04, 1.179754118635109e-03, 1.662148579800376e-03, 2.189400589478849e-03, 2.766936192144236e-03, 3.365441939848996e-03, 3.975835073726648e-03, 4.570887924827806e-03, 5.140258612965428e-03, 5.682222796326621e-03, 6.198313988430577e-03, 6.678706692243686e-03, 7.117701843789489e-03, 7.521155686400607e-03, 7.888382979832699e-03, 8.219062424292451e-03, 8.513146928109118e-03, 8.770796625023633e-03, 8.992319950463741e-03, 9.174841386690087e-03, 9.318735515681444e-03, 9.425420314073563e-03, 9.495376655197858e-03, 9.5291649713896e-03, 9.52740758845971e-03, 9.49078234724908e-03, 9.420015018275515e-03, 9.335669711322447e-03, 9.224899022204542e-03, 9.086983473218617e-03, 8.922777201058702e-03, 8.733196062220143e-03, 8.519217691644229e-03, 8.281871793966318e-03, 8.027253561514017e-03, 7.789641268442881e-03, 7.540065015404354e-03, 7.279001546266178e-03, 7.006930753518567e-03, 6.72433219867022e-03, 6.431679170196858e-03, 6.129443744241147e-03, 5.828890254682382e-03, 5.545726477933346e-03, 5.263652350973869e-03, 4.983515279240252e-03, 4.706134553998709e-03, 4.432306366169253e-03, 4.162800455507823e-03, 3.898358389699417e-03, 3.639698345432283e-03, 3.387506650091871e-03, 3.142448432711407e-03, 2.905161186638899e-03, 2.692346139611282e-03, 2.506124790112311e-03, 2.336558808044272e-03, 2.18461032232014e-03, 2.051210323711123e-03, 1.937257892292311e-03, 1.843621256269155e-03, 1.771140818362282e-03, 1.720629974224662e-03, 1.692876599812049e-03, 1.688646148782845e-03, 1.708681936318592e-03, 1.758625229050127e-03, 1.836929557581461e-03, 1.943150198852304e-03, 2.07805372761112e-03, 2.242391528080438e-03, 2.436902606859803e-03, 2.662315964820082e-03, 2.919350812114768e-03, 3.208718215551263e-03, 3.531120462680322e-03, 3.887259659045542e-03, 4.277826656071219e-03, 4.664348726138757e-03, 5.077289201819918e-03, 5.516805017927935e-03, 5.982934291886823e-03, 6.4757296132689e-03, 6.995240439230227e-03, 7.54152265184528e-03, 8.114638649916404e-03, 8.714652226688548e-03, 9.341631274687573e-03, 9.995654047090597e-03, 1.066334500664052e-02, 1.129857559155753e-02, 1.194433014283675e-02, 1.259953484084385e-02, 1.326312958441132e-02, 1.393407920412714e-02, 1.461135717494364e-02, 1.529395487159491e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilElectricHeating.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilElectricHeating.txt new file mode 100644 index 00000000000..dc9b8f793a8 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilElectricHeating.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 0, 1, 1, 0, 2, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "2", + "nonlinear": "1, 0, 1, 2, 0, 1, 0, 1, 1, 1", + "number of continuous time states": "29", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601070217e+02, 2.931503906247453e+02, 2.931504211425781e+02, 2.931504516601562e+02, 2.931504821777344e+02, 2.931505126956399e+02, 2.931505737300322e+02, 2.931506042480469e+02, 2.931506652832031e+02, 2.931507263183594e+02, 2.93150756836083e+02, 2.931508178713848e+02, 2.931508789066866e+02, 2.931509399414062e+02, 2.931510314939587e+02, 2.931510925292969e+02, 2.931511840820312e+02, 2.931512451174422e+02, 2.931513366703221e+02, 2.931514282222925e+02, 2.931515197751723e+02, 2.931516113280522e+02, 2.931517028809321e+02, 2.931518249513902e+02, 2.931519470214844e+02, 2.931520385742188e+02, 2.931521606445312e+02, 2.931523132323127e+02, 2.931524353027708e+02, 2.931525573732288e+02, 2.931527099612649e+02, 2.931528625483916e+02, 2.931529846188496e+02, 2.931531677244639e+02, 2.931533203125e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.789618631189735e-04, 6.837572745504608e-04, 1.498918582302834e-03, 2.588054970390909e-03, 3.91164271877838e-03, 5.471896613283022e-03, 7.278160602017459e-03, 9.246804190025742e-03, 1.136815097772683e-02, 1.361609960962385e-02, 1.59855467785072e-02, 1.846039176580268e-02, 2.100733976972097e-02, 2.360921337475262e-02, 2.626170617498825e-02, 2.896181777830178e-02, 3.170939485421587e-02, 3.450736574366662e-02, 3.735931286476151e-02, 4.026776464934189e-02, 4.319763375722118e-02, 4.61246337488694e-02, 4.903482896972246e-02, 5.193749598130921e-02, 5.483123660087585e-02, 5.771488970722926e-02, 6.058746268613959e-02, 6.344814564517412e-02, 6.629624454759016e-02, 6.907938837787019e-02, 7.181566888666734e-02, 7.452656521510158e-02, 7.721281445718377e-02, 7.987513298289099e-02, 8.251412369325399e-02, 8.513033762138322e-02, 8.77181949945072e-02, 9.025763840589929e-02, 9.277028947631637e-02, 9.525699020833167e-02, 9.771851537706677e-02, 1.001555578886133e-01, 1.025687587949182e-01, 1.049587434235295e-01, 1.073186798010234e-01, 1.096519435922744e-01, 1.119617077464928e-01, 1.142485315155403e-01, 1.16512937182823e-01, 1.187554448843002e-01, 1.209765097697754e-01, 1.231793579697751e-01, 1.253722372500556e-01, 1.275474233595346e-01, 1.297051731934581e-01, 1.318456972518623e-01, 1.339692488527746e-01, 1.360760068124461e-01, 1.381662095507323e-01, 1.40253732593364e-01, 1.423338919988316e-01, 1.444030543256669e-01, 1.464614728937524e-01, 1.48509445727058e-01, 1.505472410481904e-01, 1.525751001205695e-01, 1.545932855367341e-01, 1.56602053400284e-01, 1.586016123280939e-01, 1.605921858373262e-01, 1.625832213193751e-01, 1.645834686783845e-01, 1.665810755556625e-01, 1.685765217593096e-01, 1.705702394247055e-01, 1.725626904886999e-01, 1.745543070863885e-01, 1.765454915506157e-01, 1.785366343448457e-01, 1.805281317332625e-01, 1.825203443783262e-01, 1.84514479289057e-01, 1.86530340108195e-01, 1.885527276496314e-01, 1.905822109403384e-01, 1.926193655152698e-01, 1.946647306448336e-01, 1.967188129708551e-01, 1.987821042332523e-01, 2.00855081269681e-01, 2.029382084702223e-01, 2.050319278988038e-01, 2.071366742068121e-01, 2.092580502346729e-01, 2.113950427118347e-01, 2.135461019127295e-01, 2.157116768223716e-01, 2.178922700898478e-01, 2.20088286087794e-01, 2.223001569509506e-01] +VAV_1.bus.VOut_flow=[-0e+00, 3.016260949055355e-05, 1.418019017245946e-04, 3.289538297463626e-04, 5.671758857422294e-04, 9.121556378582833e-04, 1.305064009076699e-03, 1.739415326553998e-03, 2.221167176391398e-03, 2.729717921732643e-03, 3.257051497834957e-03, 3.783637456088721e-03, 4.296763470228769e-03, 4.798930840255809e-03, 5.289267254021322e-03, 5.750895211594871e-03, 6.183668189368305e-03, 6.592094826991835e-03, 6.974939921876018e-03, 7.331385358362143e-03, 7.660958355290152e-03, 7.963462920412898e-03, 8.232056189418193e-03, 8.436614568387507e-03, 8.603972460723539e-03, 8.734474889934063e-03, 8.828572066709698e-03, 8.886802894328623e-03, 8.909771217821218e-03, 8.898135247871806e-03, 8.8534197527462e-03, 8.775769754540709e-03, 8.665558789508553e-03, 8.523605035114434e-03, 8.350799857646838e-03, 8.148101958523491e-03, 7.91654770541746e-03, 7.669450350470858e-03, 7.450627521040194e-03, 7.220285139881287e-03, 6.978893333346261e-03, 6.72691911541181e-03, 6.46482792004587e-03, 6.193082511036608e-03, 5.9121376152296e-03, 5.665056133940415e-03, 5.437837635710271e-03, 5.216290216975836e-03, 5.000611073976497e-03, 4.790980100763997e-03, 4.587562289088964e-03, 4.390509149243114e-03, 4.207635938966928e-03, 4.061065685673449e-03, 3.929121224710091e-03, 3.811760938508071e-03, 3.708933270387036e-03, 3.620576987777424e-03, 3.546621541397025e-03, 3.486989164885371e-03, 3.450341587462949e-03, 3.43367249224623e-03, 3.434540467297362e-03, 3.452996970026533e-03, 3.489085539902328e-03, 3.542842962582738e-03, 3.614298793328631e-03, 3.703478563092055e-03, 3.810401924354994e-03, 3.935083779178587e-03, 4.077535305158882e-03, 4.241912550799578e-03, 4.432189641797654e-03, 4.643035634654926e-03, 4.874638052933965e-03, 5.127181299030781e-03, 5.400845122787419e-03, 5.695806472004792e-03, 6.012240901474488e-03, 6.350316760164783e-03, 6.710207581641095e-03, 7.09207998586683e-03, 7.495701139368978e-03, 7.911985523543552e-03, 8.348300366172703e-03, 8.804631243762271e-03, 9.280971489909987e-03, 9.777309132539788e-03, 1.029363486030439e-02, 1.082994308524836e-02, 1.138622821750673e-02, 1.196248303613574e-02, 1.255871161563935e-02, 1.317490965186897e-02, 1.378599475662532e-02, 1.439819744940069e-02, 1.502067451150384e-02, 1.565276090700844e-02, 1.629381131393564e-02, 1.694318403657556e-02, 1.760024391114712e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorMultiStage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorMultiStage.txt new file mode 100644 index 00000000000..c517987a72b --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorMultiStage.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 1, 1, 2, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "2, 1, 1, 1, 0, 0, 1, 1, 1, 1", + "number of continuous time states": "30", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770021714e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502380371094e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601074219e+02, 2.93150390625e+02, 2.931504211425781e+02, 2.931504516601562e+02, 2.931504821777344e+02, 2.931505432128906e+02, 2.931505737307598e+02, 2.93150634765625e+02, 2.931506652832031e+02, 2.931507263183594e+02, 2.931507873535156e+02, 2.931508483886719e+02, 2.931509094238281e+02, 2.931509704593846e+02, 2.931510314941406e+02, 2.931511230466567e+02, 2.931511840820312e+02, 2.931512756347656e+02, 2.931513671875e+02, 2.9315142822302e+02, 2.931515502925686e+02, 2.931516418454485e+02, 2.931517333983284e+02, 2.931518249512083e+02, 2.931519470214844e+02, 2.931520385745462e+02, 2.931521606440947e+02, 2.931522827145527e+02, 2.931524047850107e+02, 2.931525268554688e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 2.849898140609589e-04, 1.028192274416488e-03, 2.187505689141707e-03, 3.687963732100075e-03, 5.438166997880449e-03, 7.458750918940396e-03, 9.736997936642393e-03, 1.218524154941205e-02, 1.476844026958925e-02, 1.744125743009904e-02, 2.018713967623265e-02, 2.298620046384072e-02, 2.58186379982889e-02, 2.867471223379738e-02, 3.154839776345556e-02, 3.444525331348258e-02, 3.738190925926196e-02, 4.036826797718432e-02, 4.341271220617877e-02, 4.652030300212718e-02, 4.964952003410456e-02, 5.277616195369474e-02, 5.587098618840897e-02, 5.894732639911737e-02, 6.201113760471344e-02, 6.506163171979419e-02, 6.809813204089769e-02, 7.112011277484138e-02, 7.412710290967553e-02, 7.71179610711422e-02, 8.008018810628813e-02, 8.302446664587146e-02, 8.59508327113072e-02, 8.885935590217142e-02, 9.175010942228308e-02, 9.462318159435887e-02, 9.74787013060868e-02, 1.003143428302708e-01, 1.031271259332332e-01, 1.059215201216295e-01, 1.086977730150822e-01, 1.114561444788736e-01, 1.141968424436901e-01, 1.169201365620851e-01, 1.196262347052996e-01, 1.22316037859343e-01, 1.249897557692423e-01, 1.276472537315736e-01, 1.302887325190391e-01, 1.329144537448883e-01, 1.355246181258003e-01, 1.381194342816929e-01, 1.406991108292493e-01, 1.432638262441023e-01, 1.458138197134654e-01, 1.483492547202936e-01, 1.508703547805668e-01, 1.533810091097013e-01, 1.55880681255414e-01, 1.583677918145206e-01, 1.608425939513681e-01, 1.633053112230754e-01, 1.657561522454019e-01, 1.681953256352437e-01, 1.706230400106339e-01, 1.730394747180673e-01, 1.754448522790998e-01, 1.778393817733429e-01, 1.802232122129228e-01, 1.826022593692809e-01, 1.849752417352512e-01, 1.873399547726968e-01, 1.896966948917416e-01, 1.920456863919023e-01, 1.943871825933456e-01, 1.96721407012921e-01, 1.99048612972216e-01, 2.013689941873921e-01, 2.03682775306659e-01, 2.059901925267308e-01, 2.082914555552229e-01, 2.105932848229171e-01, 2.1289383258551e-01, 2.151909381740229e-01, 2.174849157504967e-01, 2.197760459803874e-01, 2.220646281063139e-01, 2.24350915448656e-01, 2.26635191130329e-01, 2.289177084721391e-01, 2.311987221038851e-01, 2.334785125362342e-01, 2.357573045884918e-01, 2.380390768726669e-01, 2.403226820040772e-01, 2.426072110095406e-01, 2.448929333841902e-01, 2.47180189298848e-01, 2.494692482568525e-01, 2.517603635787964e-01] +VAV_1.bus.VOut_flow=[-0e+00, 2.610214494615439e-05, 1.511383097309551e-04, 3.72340485271961e-04, 6.793509629445515e-04, 1.130658748180527e-03, 1.65132102922882e-03, 2.223043917610903e-03, 2.850625313944451e-03, 3.505888855228606e-03, 4.179467348006193e-03, 4.842896519511256e-03, 5.479447709482426e-03, 6.088670626907524e-03, 6.673767197132544e-03, 7.223727797414121e-03, 7.733097009207691e-03, 8.208536460399931e-03, 8.649317242407091e-03, 9.055062288858587e-03, 9.425673527546301e-03, 9.761270341973131e-03, 1.006213485809475e-02, 1.032728877634119e-02, 1.055680226540017e-02, 1.075130980461836e-02, 1.091133350780788e-02, 1.103748555304065e-02, 1.113045307786822e-02, 1.119098815798474e-02, 1.12209217365749e-02, 1.123747974490175e-02, 1.122809758517244e-02, 1.119371323116324e-02, 1.113534069247663e-02, 1.105405291490425e-02, 1.095070147149547e-02, 1.082587527878363e-02, 1.069197425424007e-02, 1.056596710877005e-02, 1.042841476473471e-02, 1.027979882477059e-02, 1.012059558852751e-02, 9.951278691231439e-03, 9.772310920761784e-03, 9.584151909080485e-03, 9.406621707567392e-03, 9.239629822505742e-03, 9.073857041333814e-03, 8.910088955138248e-03, 8.749082684516907e-03, 8.591570743525184e-03, 8.438259076137796e-03, 8.289827549752642e-03, 8.146931718820085e-03, 8.010198522052162e-03, 7.880233258513893e-03, 7.757615679321302e-03, 7.662803273206163e-03, 7.592998753126803e-03, 7.53965146759684e-03, 7.503689773585589e-03, 7.486010440811348e-03, 7.487481000670985e-03, 7.508939646122828e-03, 7.551198490916009e-03, 7.615043591125643e-03, 7.701237526912792e-03, 7.810520854634955e-03, 7.943612558588118e-03, 8.106172300154663e-03, 8.297688773985174e-03, 8.51683532100239e-03, 8.764369850449521e-03, 9.041029684799577e-03, 9.347544051706791e-03, 9.684623558315706e-03, 1.005296948683025e-02, 1.045327194922329e-02, 1.088620533429796e-02, 1.135244442705932e-02, 1.18526423987275e-02, 1.23597489609968e-02, 1.288263030814384e-02, 1.343155707209978e-02, 1.400652574507663e-02, 1.460754411374158e-02, 1.523460883052578e-02, 1.588772455453118e-02, 1.656689221710033e-02, 1.72721164723415e-02, 1.800339288208004e-02, 1.87607320250857e-02, 1.954412776078558e-02, 2.030355314897177e-02, 2.105684296349142e-02, 2.181909956736761e-02, 2.258923614886412e-02, 2.336620204497948e-02, 2.414895146746356e-02, 2.493645995855331e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorVariable.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorVariable.txt new file mode 100644 index 00000000000..030d6bea74f --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilEvaporatorVariable.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 1, 2, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "2, 1, 1, 1, 0, 0, 1, 1, 1, 1", + "number of continuous time states": "30", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938965208e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502685546875e+02, 2.931502685548694e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601074219e+02, 2.93150390625e+02, 2.931504211425781e+02, 2.931504821777344e+02, 2.931505126953125e+02, 2.931505432133272e+02, 2.931506042480469e+02, 2.931506652830212e+02, 2.931506958007812e+02, 2.931507568359375e+02, 2.931508178710938e+02, 2.9315087890625e+02, 2.931509399410425e+02, 2.931510009763442e+02, 2.93151062011646e+02, 2.931511230469478e+02, 2.931511840822495e+02, 2.931512756347656e+02, 2.931513366699219e+02, 2.931514282226562e+02, 2.931515197752815e+02, 2.93151611328125e+02, 2.931516723634631e+02, 2.93151763916343e+02, 2.9315185546875e+02, 2.931519775387715e+02, 2.931520690916514e+02, 2.931521606445312e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 2.268350905088846e-04, 8.35084451513755e-04, 1.801975615990248e-03, 3.087021067373284e-03, 4.607012839858689e-03, 6.394672005891789e-03, 8.439441148571597e-03, 1.0651979076223e-02, 1.300671145176776e-02, 1.54669439406594e-02, 1.802103423124548e-02, 2.06434733833879e-02, 2.33129890429203e-02, 2.601731738642132e-02, 2.873651707798692e-02, 3.147145831837528e-02, 3.424495036177223e-02, 3.706330603043696e-02, 3.993244910882902e-02, 4.285650240087047e-02, 4.579872458253274e-02, 4.873749648758725e-02, 5.162973954580407e-02, 5.449447188973644e-02, 5.734380707144737e-02, 6.017734752191993e-02, 6.29947453382166e-02, 6.579574909277298e-02, 6.858014546874866e-02, 7.134775488271528e-02, 7.407569075356289e-02, 7.678298844940167e-02, 7.947002745044253e-02, 8.213709944755647e-02, 8.478447206952425e-02, 8.74123833844505e-02, 9.002110238022605e-02, 9.260775271177586e-02, 9.516434735398223e-02, 9.770013241316849e-02, 1.002155178797181e-01, 1.027108835958095e-01, 1.051865723958816e-01, 1.076429417597928e-01, 1.100802897525467e-01, 1.12486703194374e-01, 1.148529353557176e-01, 1.171897674651857e-01, 1.194991745448961e-01, 1.217890381813049e-01, 1.240556336072265e-01, 1.262995196244806e-01, 1.285506551349914e-01, 1.30801225845122e-01, 1.330457005001113e-01, 1.352914268368155e-01, 1.375445888663809e-01, 1.397982128321583e-01, 1.420532226364084e-01, 1.443203931593039e-01, 1.46592017736614e-01, 1.488673378102489e-01, 1.511486481592101e-01, 1.534345182722362e-01, 1.557236964483052e-01, 1.58012294735981e-01, 1.602968833476167e-01, 1.625797732243007e-01, 1.648587440883061e-01, 1.671192672902435e-01, 1.693698812012807e-01, 1.716106022974717e-01, 1.738261091374655e-01, 1.760201135286008e-01, 1.781959384679794e-01, 1.803473999556584e-01, 1.824686418422518e-01, 1.84565907716005e-01, 1.866391405927639e-01, 1.88684222656468e-01, 1.907044793342375e-01, 1.927004470693569e-01, 1.946792784402062e-01, 1.966399899580638e-01, 1.985815866375232e-01, 2.005134644224327e-01, 2.024449547872407e-01, 2.043680110778668e-01, 2.062872229102578e-01, 2.082395600208563e-01, 2.101968773482116e-01, 2.121588554987874e-01, 2.141250953904529e-01, 2.160952394082498e-01, 2.18146043511674e-01, 2.202397779384041e-01, 2.223772940676181e-01, 2.245753216164564e-01, 2.268224038922508e-01, 2.291156351566315e-01] +VAV_1.bus.VOut_flow=[-0e+00, 3.729504740603225e-05, 1.752593467553095e-04, 4.065130093872061e-04, 7.040264698532022e-04, 1.132395434424085e-03, 1.613826558611629e-03, 2.140220936788118e-03, 2.717669460913237e-03, 3.318510731421224e-03, 3.93376304118283e-03, 4.536576139102533e-03, 5.114264936654067e-03, 5.665909755231104e-03, 6.193447827254069e-03, 6.685368901754487e-03, 7.136032604788311e-03, 7.552303301876736e-03, 7.933411484774309e-03, 8.278947400835412e-03, 8.588780560922838e-03, 8.86299663975015e-03, 9.101836968096026e-03, 9.300863294031335e-03, 9.461321010827877e-03, 9.584826417267323e-03, 9.67182318389513e-03, 9.722835344875915e-03, 9.738454595016099e-03, 9.719324265092323e-03, 9.666134682763399e-03, 9.599913861462379e-03, 9.505554954310763e-03, 9.383719588401987e-03, 9.235207979612742e-03, 9.060867017838599e-03, 8.86159978904672e-03, 8.638329914892436e-03, 8.401097625159382e-03, 8.176481950372023e-03, 7.939344416254586e-03, 7.690338326386068e-03, 7.430039927605757e-03, 7.158929679027804e-03, 6.877479540569192e-03, 6.586158294036688e-03, 6.353769579151754e-03, 6.238559717390587e-03, 6.186084339946973e-03, 6.200134234716102e-03, 6.310421042144299e-03, 6.497996150663492e-03, 6.761968266551963e-03, 7.150198713990798e-03, 7.649884796270476e-03, 8.25132166821637e-03, 8.961741631128839e-03, 9.787507060710394e-03, 1.072060017521429e-02, 1.175930825384971e-02, 1.289884092114425e-02, 1.414009559102553e-02, 1.548176286060481e-02, 1.690433244542844e-02, 1.841050236725786e-02, 2.000213805961904e-02, 2.166317522632812e-02, 2.337845310517963e-02, 2.515837234771567e-02, 2.699594988520579e-02, 2.884861119133698e-02, 3.073870987145027e-02, 3.266455423200455e-02, 3.457017626420092e-02, 3.646594105175756e-02, 3.836128488183022e-02, 4.021358660469643e-02, 4.198215488678936e-02, 4.370337091476245e-02, 4.536408962952169e-02, 4.685127935374375e-02, 4.823477534231856e-02, 4.951701773228152e-02, 5.05844966444195e-02, 5.146412011574231e-02, 5.218293361582284e-02, 5.268602021293657e-02, 5.29174356964604e-02, 5.293243372991888e-02, 5.272594410009186e-02, 5.223467422784431e-02, 5.150883859691295e-02, 5.054972868924204e-02, 4.935814904648382e-02, 4.793450943973773e-02, 4.627042793413599e-02, 4.436809503148857e-02, 4.223585010249007e-02, 3.993235610832473e-02, 3.742457055664954e-02, 3.477776423096657e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilWaterHeating3WVReheat.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilWaterHeating3WVReheat.txt new file mode 100644 index 00000000000..87f9a1fe8e5 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZCoilWaterHeating3WVReheat.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 2, 1, 5, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 2, 1, 1, 0, 0, 1, 5, 1", + "number of continuous time states": "32", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938966663e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244144991e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549317498e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502380371458e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601074219e+02, 2.93150390625e+02, 2.931504211425781e+02, 2.931504516601562e+02, 2.931504821780254e+02, 2.931505432128906e+02, 2.931505737304688e+02, 2.931506347654431e+02, 2.931506652832031e+02, 2.931507263183594e+02, 2.931507873535156e+02, 2.931508483886719e+02, 2.931509094234643e+02, 2.931509704589844e+02, 2.931510314941406e+02, 2.931510925293696e+02, 2.931511840820312e+02, 2.931512451175513e+02, 2.931513366695217e+02, 2.931513977050781e+02, 2.931514892578125e+02, 2.931515808105833e+02, 2.931516723634631e+02, 2.93151763916343e+02, 2.9315185546875e+02, 2.931519470214844e+02, 2.931520690916514e+02, 2.931521606445312e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.901867747308522e-04, 7.463656707092696e-04, 1.646621460766407e-03, 2.869795428100648e-03, 4.345380583254565e-03, 6.075973413066794e-03, 8.063973797758245e-03, 1.021755806243026e-02, 1.251442087812796e-02, 1.491813976991687e-02, 1.742090486244399e-02, 1.999076711906558e-02, 2.260983302504826e-02, 2.526562831285483e-02, 2.793941488651184e-02, 3.061274162936805e-02, 3.332327630039399e-02, 3.607703919591867e-02, 3.887971558195821e-02, 4.173516768999726e-02, 4.460744375411037e-02, 4.747544635707587e-02, 5.031574028324873e-02, 5.310088544923017e-02, 5.586870387196541e-02, 5.861902870753081e-02, 6.135172476999811e-02, 6.40667077651178e-02, 6.676390246217412e-02, 6.944325992796442e-02, 7.209622797246013e-02, 7.471338100733482e-02, 7.730903882283235e-02, 7.98835968734509e-02, 8.243741246551253e-02, 8.497080590682791e-02, 8.748411267741815e-02, 8.997763066613489e-02, 9.244700126568973e-02, 9.488792572473087e-02, 9.730779465702535e-02, 9.970701798876812e-02, 1.020859537451847e-01, 1.044449886315408e-01, 1.067844433520492e-01, 1.091046388521114e-01, 1.114065947880677e-01, 1.136912653403929e-01, 1.159579210786505e-01, 1.182068064808846e-01, 1.204381755312977e-01, 1.226522293996481e-01, 1.248491990546803e-01, 1.270292801713112e-01, 1.291986081939823e-01, 1.313620055537191e-01, 1.335119173349309e-01, 1.356483882423876e-01, 1.377714629804052e-01, 1.398811737194517e-01, 1.419776201136793e-01, 1.440608193503107e-01, 1.461365530855733e-01, 1.482092916731542e-01, 1.502725233018816e-01, 1.523263698695332e-01, 1.543710048708151e-01, 1.56406565047291e-01, 1.584331547072635e-01, 1.604509079605541e-01, 1.624599738204165e-01, 1.644604595982714e-01, 1.664524934507841e-01, 1.684361975379893e-01, 1.704180687665939e-01, 1.724058408597208e-01, 1.743897237426708e-01, 1.763700154397335e-01, 1.783470320029082e-01, 1.803210652197834e-01, 1.822923864196941e-01, 1.842612638241167e-01, 1.862279805560134e-01, 1.881927601339529e-01, 1.901558739842183e-01, 1.921175690253611e-01, 1.940832873688354e-01, 1.960630426319465e-01, 1.980462102681119e-01, 2.000332224118587e-01, 2.020244993153139e-01, 2.040204372442065e-01, 2.060214415766802e-01, 2.080278699421453e-01, 2.100400948712766e-01, 2.120584590911439e-01, 2.140833230424151e-01, 2.161150237855995e-01, 2.181562612751454e-01, 2.202144116163254e-01] +VAV_1.bus.VOut_flow=[-0e+00, 4.83736863753403e-05, 1.991076081616116e-04, 4.449939199567226e-04, 7.509460938981353e-04, 1.179920592658772e-03, 1.663073848874429e-03, 2.190379409503486e-03, 2.767758550878149e-03, 3.367437298447624e-03, 3.979843485903739e-03, 4.575707984835626e-03, 5.147745981023248e-03, 5.690288049927152e-03, 6.206355958878202e-03, 6.689209682137599e-03, 7.128738482076544e-03, 7.532373001143902e-03, 7.899416358610644e-03, 8.229539803070358e-03, 8.522692984822279e-03, 8.77903603483373e-03, 8.998875529839419e-03, 9.18117065548227e-03, 9.323535551334231e-03, 9.428445249795914e-03, 9.496374099592498e-03, 9.52787974879458e-03, 9.52358357828364e-03, 9.484163435247708e-03, 9.410345099741379e-03, 9.310839721130957e-03, 9.196078311009406e-03, 9.054299643786051e-03, 8.886356901774731e-03, 8.693161296592951e-03, 8.475686748120168e-03, 8.234962940115701e-03, 7.971816564461155e-03, 7.702652003072808e-03, 7.445138103965592e-03, 7.176583068828546e-03, 6.897462623537168e-03, 6.608252157574787e-03, 6.309420729125139e-03, 6.001435312449545e-03, 5.684757872260317e-03, 5.379026256943321e-03, 5.10286184428442e-03, 4.830295012871053e-03, 4.561556968837976e-03, 4.296865064220569e-03, 4.036422792842106e-03, 3.780419912186746e-03, 3.529033693337165e-03, 3.300844695684966e-03, 3.111219310205367e-03, 2.936617352822809e-03, 2.776973629322593e-03, 2.632212701630369e-03, 2.50225031525263e-03, 2.386991556768818e-03, 2.286336197104955e-03, 2.209761620315039e-03, 2.164905145943371e-03, 2.140803933472514e-03, 2.137607415541596e-03, 2.155454319788662e-03, 2.194476047068648e-03, 2.254795533349954e-03, 2.336528497863121e-03, 2.439784601107605e-03, 2.564667807626348e-03, 2.71127855582178e-03, 2.879710931859654e-03, 3.07355192489922e-03, 3.297132899943085e-03, 3.545211896650308e-03, 3.818026868608158e-03, 4.115810422945367e-03, 4.43879894316896e-03, 4.787220999770259e-03, 5.161305702471697e-03, 5.561280292231377e-03, 5.987371079866278e-03, 6.439801132940104e-03, 6.918798897292166e-03, 7.415206871892368e-03, 7.911292146796433e-03, 8.426523589360486e-03, 8.960591066418312e-03, 9.513185753721166e-03, 1.008401621519995e-02, 1.067278864083143e-02, 1.127921618328254e-02, 1.19030213091956e-02, 1.254393113777541e-02, 1.320167440822149e-02, 1.387599818925511e-02, 1.455490602056629e-02, 1.520287618041039e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Airflow.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Airflow.txt new file mode 100644 index 00000000000..725f4a9469c --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Airflow.txt @@ -0,0 +1,18 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 2, 0, 0, 1, 5, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 1, 2, 0, 0, 0, 1, 5, 1, 1", + "number of continuous time states": "36", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+04] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.935587463378906e+02, 2.939021911621094e+02, 2.943377990722656e+02, 2.941629943847656e+02, 2.940722351074219e+02, 2.940494079589844e+02, 2.939938049316406e+02, 2.939225463867188e+02, 2.938546447753906e+02, 2.9381591796875e+02, 2.937929077148438e+02, 2.937659606933594e+02, 2.937571105957031e+02, 2.9375634765625e+02, 2.937438659667969e+02, 2.937451171875e+02, 2.937531127929688e+02, 2.937454223632812e+02, 2.937491760253906e+02, 2.937567443847656e+02, 2.937489013671875e+02, 2.937528076171875e+02, 2.93760009765625e+02, 2.937518920898438e+02, 2.937564392089844e+02, 2.937629699707031e+02, 2.937546997070312e+02, 2.937598266601562e+02, 2.93765625e+02, 2.937571105957031e+02, 2.937629699707031e+02, 2.937679138183594e+02, 2.937595520019531e+02, 2.937659912109375e+02, 2.937698059082031e+02, 2.937616271972656e+02, 2.937688598632812e+02, 2.937715454101562e+02, 2.937637634277344e+02, 2.937714538574219e+02, 2.937728881835938e+02, 2.93765625e+02, 2.9377392578125e+02, 2.937738952636719e+02, 2.937676086425781e+02, 2.937762145996094e+02, 2.937746887207031e+02, 2.937695007324219e+02, 2.937782592773438e+02, 2.937751770019531e+02, 2.937713928222656e+02, 2.937800598144531e+02, 2.937755432128906e+02, 2.937732543945312e+02, 2.937816467285156e+02, 2.937757568359375e+02, 2.937749938964844e+02, 2.937830200195312e+02, 2.937759094238281e+02, 2.937769470214844e+02, 2.937839660644531e+02, 2.937760314941406e+02, 2.9377880859375e+02, 2.937847595214844e+02, 2.937762145996094e+02, 2.937806396484375e+02, 2.937851867675781e+02, 2.937765502929688e+02, 2.937822570800781e+02, 2.937853088378906e+02, 2.937769775390625e+02, 2.937839050292969e+02, 2.937851867675781e+02, 2.93777587890625e+02, 2.937853698730469e+02, 2.937847900390625e+02, 2.937784118652344e+02, 2.9378662109375e+02, 2.937841796875e+02, 2.937793579101562e+02, 2.937877502441406e+02, 2.937833862304688e+02, 2.937804870605469e+02, 2.937886352539062e+02, 2.937826538085938e+02, 2.937817077636719e+02, 2.937892456054688e+02, 2.937819213867188e+02, 2.937829895019531e+02, 2.937896118164062e+02, 2.937813720703125e+02, 2.937843322753906e+02, 2.937897033691406e+02, 2.937809753417969e+02, 2.9378564453125e+02, 2.937894897460938e+02, 2.937808227539062e+02, 2.937869262695312e+02, 2.937890014648438e+02, 2.937808837890625e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.932084655761719e+02, 2.932410888671875e+02, 2.932364501953125e+02, 2.932334594726562e+02, 2.932936401367188e+02, 2.933694458007812e+02, 2.933857421875e+02, 2.933811950683594e+02, 2.93352294921875e+02, 2.933258666992188e+02, 2.933309936523438e+02, 2.933170471191406e+02, 2.933013916015625e+02, 2.933141174316406e+02, 2.933076477050781e+02, 2.932956848144531e+02, 2.933121948242188e+02, 2.933078918457031e+02, 2.932974243164062e+02, 2.933141479492188e+02, 2.933089599609375e+02, 2.932989501953125e+02, 2.933160095214844e+02, 2.933095092773438e+02, 2.933008117675781e+02, 2.9331787109375e+02, 2.933099060058594e+02, 2.93302490234375e+02, 2.933196716308594e+02, 2.93309814453125e+02, 2.933042297363281e+02, 2.933214416503906e+02, 2.933097229003906e+02, 2.933060302734375e+02, 2.933229675292969e+02, 2.933092651367188e+02, 2.933079528808594e+02, 2.933244934082031e+02, 2.933088989257812e+02, 2.933098449707031e+02, 2.933255615234375e+02, 2.933082885742188e+02, 2.933118896484375e+02, 2.933263854980469e+02, 2.93307861328125e+02, 2.9331396484375e+02, 2.933267211914062e+02, 2.933075866699219e+02, 2.933160705566406e+02, 2.933265686035156e+02, 2.933074951171875e+02, 2.933181762695312e+02, 2.93325927734375e+02, 2.933075561523438e+02, 2.933203125e+02, 2.933247375488281e+02, 2.93307861328125e+02, 2.933224487304688e+02, 2.933231506347656e+02, 2.933086242675781e+02, 2.933243103027344e+02, 2.933212280273438e+02, 2.933096618652344e+02, 2.93326416015625e+02, 2.933190612792969e+02, 2.9331103515625e+02, 2.933280639648438e+02, 2.933169860839844e+02, 2.933125610351562e+02, 2.933294067382812e+02, 2.933150634765625e+02, 2.933144226074219e+02, 2.933302917480469e+02, 2.933132934570312e+02, 2.933164672851562e+02, 2.933306884765625e+02, 2.9331201171875e+02, 2.933184814453125e+02, 2.933303527832031e+02, 2.9331103515625e+02, 2.933207397460938e+02, 2.933292846679688e+02, 2.933105163574219e+02, 2.933228759765625e+02, 2.933275756835938e+02, 2.933105163574219e+02, 2.93324951171875e+02, 2.933253173828125e+02, 2.933110046386719e+02, 2.933269348144531e+02, 2.933229064941406e+02, 2.933119201660156e+02, 2.933287048339844e+02, 2.933203125e+02, 2.93313232421875e+02, 2.933302307128906e+02, 2.933178100585938e+02, 2.933149108886719e+02, 2.933313293457031e+02, 2.933155822753906e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500854492188e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 9.863148629665375e-02, 1.372568011283875e-01, 1.754816770553589e-01, 2.132712155580521e-01, 2.501983046531677e-01, 2.856027781963348e-01, 3.196139335632325e-01, 3.517191410064697e-01, 3.790517151355743e-01, 3.998578190803528e-01, 4.195109307765961e-01, 4.348271489143372e-01, 4.437201321125031e-01, 4.523179829120636e-01, 4.569849073886871e-01, 4.554584622383118e-01, 4.547916948795319e-01, 4.540855884552002e-01, 4.505287110805511e-01, 4.504989385604858e-01, 4.49882835149765e-01, 4.465540945529938e-01, 4.467290341854095e-01, 4.461459517478943e-01, 4.430427551269531e-01, 4.434212148189545e-01, 4.428218007087708e-01, 4.39941018819809e-01, 4.405165314674377e-01, 4.398471415042877e-01, 4.372068345546722e-01, 4.379767179489136e-01, 4.371769726276398e-01, 4.348013699054719e-01, 4.357460141181946e-01, 4.347801506519318e-01, 4.326934814453125e-01, 4.337911903858185e-01, 4.326256215572357e-01, 4.30847704410553e-01, 4.320628046989441e-01, 4.306808412075043e-01, 4.292478561401367e-01, 4.305479824542999e-01, 4.289388656616211e-01, 4.278521537780762e-01, 4.291961193084717e-01, 4.273695647716522e-01, 4.266473054885864e-01, 4.279880225658417e-01, 4.259589910507202e-01, 4.25608903169632e-01, 4.268837571144104e-01, 4.24692302942276e-01, 4.247169494628906e-01, 4.258556962013244e-01, 4.235751032829285e-01, 4.239490926265717e-01, 4.248870611190796e-01, 4.225917756557465e-01, 4.232896268367767e-01, 4.239619672298431e-01, 4.217365086078644e-01, 4.227433502674103e-01, 4.230653643608093e-01, 4.210236370563507e-01, 4.222695231437683e-01, 4.222226440906525e-01, 4.20434445142746e-01, 4.218664765357971e-01, 4.214287102222443e-01, 4.199601709842682e-01, 4.215183556079865e-01, 4.206825196743011e-01, 4.195926785469055e-01, 4.212165176868439e-01, 4.199998676776886e-01, 4.193052351474762e-01, 4.209283590316772e-01, 4.193710684776306e-01, 4.190993010997772e-01, 4.206453561782837e-01, 4.187923967838287e-01, 4.189516007900238e-01, 4.203239679336548e-01, 4.182960391044617e-01, 4.188505709171295e-01, 4.199555218219757e-01, 4.178804755210876e-01, 4.18779045343399e-01, 4.195573627948761e-01, 4.175495803356171e-01, 4.187431335449219e-01, 4.191271066665649e-01, 4.17304515838623e-01, 4.187350571155548e-01, 4.18681263923645e-01, 4.171460866928101e-01, 4.187454283237457e-01, 4.182412028312683e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Pressure.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Pressure.txt new file mode 100644 index 00000000000..c47fdb3e3fc --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZControlG36Pressure.txt @@ -0,0 +1,18 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 2, 0, 1, 5, 1, 0, 1, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "0, 1, 1, 2, 0, 0, 1, 5, 1, 1", + "number of continuous time states": "37", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+04] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.934417724609375e+02, 2.934788208007812e+02, 2.93883056640625e+02, 2.941762084960938e+02, 2.941072082519531e+02, 2.940464172363281e+02, 2.939945068359375e+02, 2.93953857421875e+02, 2.93924560546875e+02, 2.939037475585938e+02, 2.938895874023438e+02, 2.938804016113281e+02, 2.938748474121094e+02, 2.938716735839844e+02, 2.938701171875e+02, 2.938699035644531e+02, 2.938707885742188e+02, 2.938714904785156e+02, 2.938721923828125e+02, 2.938728637695312e+02, 2.9387353515625e+02, 2.938742065429688e+02, 2.938748474121094e+02, 2.9387548828125e+02, 2.938760986328125e+02, 2.938767395019531e+02, 2.938773498535156e+02, 2.938779296875e+02, 2.938785400390625e+02, 2.938791198730469e+02, 2.938796997070312e+02, 2.938802490234375e+02, 2.938807983398438e+02, 2.9388134765625e+02, 2.938818664550781e+02, 2.938823852539062e+02, 2.938828735351562e+02, 2.938837890625e+02, 2.938853454589844e+02, 2.938869934082031e+02, 2.93888671875e+02, 2.938904418945312e+02, 2.938922119140625e+02, 2.938939819335938e+02, 2.93895751953125e+02, 2.938974609375e+02, 2.938991088867188e+02, 2.939006652832031e+02, 2.939021301269531e+02, 2.939035034179688e+02, 2.9390478515625e+02, 2.939059448242188e+02, 2.939070129394531e+02, 2.93907958984375e+02, 2.939088439941406e+02, 2.939096374511719e+02, 2.939103698730469e+02, 2.939110107421875e+02, 2.9391162109375e+02, 2.939121398925781e+02, 2.939126281738281e+02, 2.939130554199219e+02, 2.939134521484375e+02, 2.93913818359375e+02, 2.939141235351562e+02, 2.939144287109375e+02, 2.939146728515625e+02, 2.939149169921875e+02, 2.939151306152344e+02, 2.939153137207031e+02, 2.939154663085938e+02, 2.939156188964844e+02, 2.939157409667969e+02, 2.939158630371094e+02, 2.939159851074219e+02, 2.939155883789062e+02, 2.939149475097656e+02, 2.939143676757812e+02, 2.939138488769531e+02, 2.939133605957031e+02, 2.939129028320312e+02, 2.939125061035156e+02, 2.939121704101562e+02, 2.939118347167969e+02, 2.939115295410156e+02, 2.939112548828125e+02, 2.939110107421875e+02, 2.939107971191406e+02, 2.939105834960938e+02, 2.93910400390625e+02, 2.939102478027344e+02, 2.939100952148438e+02, 2.939099426269531e+02, 2.939098205566406e+02, 2.939096984863281e+02, 2.939096069335938e+02, 2.939095153808594e+02, 2.93909423828125e+02, 2.939093627929688e+02, 2.939092712402344e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.934419555664062e+02, 2.934414978027344e+02, 2.934410705566406e+02, 2.934406127929688e+02, 2.934401245117188e+02, 2.934396362304688e+02, 2.934391784667969e+02, 2.934387512207031e+02, 2.934383850097656e+02, 2.934381103515625e+02, 2.934378967285156e+02, 2.934377136230469e+02, 2.934375915527344e+02, 2.934375e+02, 2.934374389648438e+02, 2.934374389648438e+02, 2.934374694824219e+02, 2.934375e+02, 2.934375e+02, 2.934375305175781e+02, 2.934375610351562e+02, 2.934375610351562e+02, 2.934375915527344e+02, 2.934375915527344e+02, 2.934376220703125e+02, 2.934376220703125e+02, 2.934376525878906e+02, 2.934376525878906e+02, 2.934376831054688e+02, 2.934376831054688e+02, 2.934377136230469e+02, 2.934377136230469e+02, 2.934377136230469e+02, 2.93437744140625e+02, 2.93437744140625e+02, 2.93437744140625e+02, 2.934377746582031e+02, 2.934378967285156e+02, 2.934382019042969e+02, 2.934385070800781e+02, 2.934388732910156e+02, 2.934392700195312e+02, 2.93439697265625e+02, 2.934401550292969e+02, 2.93440673828125e+02, 2.934411926269531e+02, 2.934417114257812e+02, 2.934422912597656e+02, 2.934428405761719e+02, 2.934433898925781e+02, 2.934439392089844e+02, 2.934444885253906e+02, 2.934450073242188e+02, 2.934454956054688e+02, 2.934459838867188e+02, 2.934464416503906e+02, 2.934468383789062e+02, 2.934472351074219e+02, 2.934476013183594e+02, 2.934479370117188e+02, 2.934482727050781e+02, 2.934485473632812e+02, 2.934488220214844e+02, 2.934490661621094e+02, 2.934492797851562e+02, 2.934494934082031e+02, 2.934496765136719e+02, 2.934498291015625e+02, 2.934499816894531e+02, 2.934501342773438e+02, 2.934502563476562e+02, 2.934503784179688e+02, 2.934504699707031e+02, 2.934505615234375e+02, 2.934506530761719e+02, 2.934502258300781e+02, 2.934495849609375e+02, 2.93448974609375e+02, 2.934484558105469e+02, 2.934479675292969e+02, 2.93447509765625e+02, 2.934471130371094e+02, 2.934467468261719e+02, 2.934464416503906e+02, 2.934461364746094e+02, 2.934458923339844e+02, 2.934456481933594e+02, 2.934454345703125e+02, 2.934452209472656e+02, 2.934450378417969e+02, 2.934448852539062e+02, 2.934447631835938e+02, 2.934446105957031e+02, 2.934444885253906e+02, 2.934443969726562e+02, 2.934443054199219e+02, 2.934442138671875e+02, 2.934441223144531e+02, 2.934440612792969e+02, 2.934440002441406e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.934419250488281e+02, 2.934414672851562e+02, 2.934410705566406e+02, 2.934406127929688e+02, 2.934401245117188e+02, 2.934396362304688e+02, 2.934391784667969e+02, 2.934387512207031e+02, 2.934384155273438e+02, 2.934381103515625e+02, 2.934378967285156e+02, 2.934377136230469e+02, 2.934375915527344e+02, 2.934375e+02, 2.934374389648438e+02, 2.934374389648438e+02, 2.934374694824219e+02, 2.934375e+02, 2.934375e+02, 2.934375305175781e+02, 2.934375610351562e+02, 2.934375610351562e+02, 2.934375915527344e+02, 2.934375915527344e+02, 2.934376220703125e+02, 2.934376220703125e+02, 2.934376525878906e+02, 2.934376525878906e+02, 2.934376831054688e+02, 2.934376831054688e+02, 2.934377136230469e+02, 2.934377136230469e+02, 2.934377136230469e+02, 2.93437744140625e+02, 2.93437744140625e+02, 2.93437744140625e+02, 2.934377746582031e+02, 2.934378967285156e+02, 2.934381713867188e+02, 2.934385070800781e+02, 2.934388732910156e+02, 2.934392700195312e+02, 2.93439697265625e+02, 2.934401550292969e+02, 2.934406433105469e+02, 2.93441162109375e+02, 2.934417114257812e+02, 2.934422607421875e+02, 2.934428100585938e+02, 2.93443359375e+02, 2.934439086914062e+02, 2.934444580078125e+02, 2.934449768066406e+02, 2.934454650878906e+02, 2.934459228515625e+02, 2.934463806152344e+02, 2.934468078613281e+02, 2.934471740722656e+02, 2.934475402832031e+02, 2.934478759765625e+02, 2.934481811523438e+02, 2.93448486328125e+02, 2.9344873046875e+02, 2.93448974609375e+02, 2.934491882324219e+02, 2.934494018554688e+02, 2.934495849609375e+02, 2.934497375488281e+02, 2.934498901367188e+02, 2.934500122070312e+02, 2.934501037597656e+02, 2.934501953125e+02, 2.934502868652344e+02, 2.934503479003906e+02, 2.934503784179688e+02, 2.934402465820312e+02, 2.934006042480469e+02, 2.933429565429688e+02, 2.932843627929688e+02, 2.9323583984375e+02, 2.932007446289062e+02, 2.931778869628906e+02, 2.931643981933594e+02, 2.931567993164062e+02, 2.931532287597656e+02, 2.931514587402344e+02, 2.93150634765625e+02, 2.931502685546875e+02, 2.931501159667969e+02, 2.931500549316406e+02, 2.931500244140625e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.VOut_flow=[-0e+00, -3.610116839408875e-01, -3.538279831409454e-01, -3.435310125350952e-01, -3.311296105384827e-01, -3.173570036888123e-01, -3.02636593580246e-01, -2.872562110424042e-01, -2.725309133529663e-01, -2.59420245885849e-01, -2.479426711797714e-01, -2.382409572601318e-01, -2.304006516933441e-01, -2.244787216186523e-01, -2.204907536506653e-01, -2.184202820062637e-01, -2.181845754384995e-01, -2.194383293390274e-01, -2.204081118106842e-01, -2.213384658098221e-01, -2.22231537103653e-01, -2.230890393257141e-01, -2.239126861095428e-01, -2.247038930654526e-01, -2.254642248153687e-01, -2.261947840452194e-01, -2.268970459699631e-01, -2.275721877813339e-01, -2.282214164733887e-01, -2.288458496332169e-01, -2.29446604847908e-01, -2.300243675708771e-01, -2.305802702903748e-01, -2.311148792505264e-01, -2.316294014453888e-01, -2.321248650550842e-01, -2.326016575098038e-01, -2.330606281757355e-01, -2.305851578712463e-01, -2.240454256534576e-01, -2.166936993598938e-01, -2.08601638674736e-01, -1.998070180416107e-01, -1.903840154409409e-01, -1.804280877113342e-01, -1.700559854507446e-01, -1.594088673591614e-01, -1.486285626888275e-01, -1.378551423549652e-01, -1.272368580102921e-01, -1.168856993317604e-01, -1.069054454565048e-01, -9.737575054168701e-02, -8.835174143314362e-02, -7.986700534820557e-02, -7.194868475198746e-02, -6.459435075521462e-02, -5.779412761330611e-02, -5.153068900108337e-02, -4.577890411019325e-02, -4.051071032881737e-02, -3.570312261581421e-02, -3.13180536031723e-02, -2.732563763856888e-02, -2.369491010904312e-02, -2.039441093802452e-02, -1.739821955561638e-02, -1.468299422413111e-02, -1.222140993922947e-02, -9.990708902478237e-03, -7.969752885401249e-03, -6.138545460999012e-03, -4.481189418584108e-03, -2.983622951433063e-03, -1.628385274671018e-03, -4.021319036837667e-04, 7.087611593306065e-04, 1.71466579195112e-03, 2.622732892632484e-03, 3.442055778577924e-03, 4.182243254035711e-03, 4.851446952670819e-03, 5.456919781863689e-03, 6.003669463098049e-03, 6.501183845102787e-03, 6.945909466594458e-03, 7.347847800701857e-03, 7.711565587669611e-03, 8.039064705371857e-03, 8.33478756248951e-03, 8.602102287113667e-03, 8.843645453453064e-03, 9.062264114618301e-03, 9.259219281375408e-03, 9.437223896384239e-03, 9.597626514732838e-03, 9.742790833115578e-03, 9.874169714748859e-03, 9.992325678467751e-03, 1.009922195225954e-02, 1.019540056586266e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZDedicatedDampersPressure.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZDedicatedDampersPressure.txt new file mode 100644 index 00000000000..8fd9a646f67 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZDedicatedDampersPressure.txt @@ -0,0 +1,18 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 3, 0, 0, 10, 1, 1, 0, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 0, 1, 3, 1, 0, 0, 10, 1", + "number of continuous time states": "32", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938966663e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244144991e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549317498e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502380371458e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295898438e+02, 2.931503601074219e+02, 2.93150390625e+02, 2.931504211425781e+02, 2.931504516601562e+02, 2.931504821780254e+02, 2.931505432128906e+02, 2.931505737304688e+02, 2.931506347654431e+02, 2.931506652832031e+02, 2.931507263183594e+02, 2.931507873535156e+02, 2.931508483886719e+02, 2.931509094234643e+02, 2.931509704589844e+02, 2.931510314941406e+02, 2.931510925293696e+02, 2.931511840820312e+02, 2.931512451175513e+02, 2.931513366695217e+02, 2.931513977050781e+02, 2.931514892578125e+02, 2.931515808105833e+02, 2.931516723634631e+02, 2.93151763916343e+02, 2.9315185546875e+02, 2.931519470214844e+02, 2.931520690916514e+02, 2.931521606445312e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.904103212640396e-04, 7.473180645021388e-04, 1.648743013684822e-03, 2.873359599767521e-03, 4.350889821798118e-03, 6.083620037352944e-03, 8.073772242500133e-03, 1.022955349758017e-02, 1.252847826035978e-02, 1.493405979775616e-02, 1.743832059466757e-02, 2.000932837822247e-02, 2.262921198550505e-02, 2.52856070446944e-02, 2.79596879162217e-02, 3.063310965409154e-02, 3.334365736362021e-02, 3.609737555571126e-02, 3.889997743586934e-02, 4.175532896112585e-02, 4.462746718935469e-02, 4.749530215434447e-02, 5.033526080455256e-02, 5.312003716644473e-02, 5.588744580745697e-02, 5.863733478361336e-02, 6.136956146046673e-02, 6.408404526622902e-02, 6.678072587272676e-02, 6.945954689777102e-02, 7.211191889533047e-02, 7.472851313610085e-02, 7.732359725805149e-02, 7.989757416285057e-02, 8.245078625732874e-02, 8.498357620282369e-02, 8.749626457467372e-02, 8.998915671401635e-02, 9.245790146430367e-02, 9.489825222977127e-02, 9.731755491739416e-02, 9.971620455391138e-02, 1.020945740673617e-01, 1.044530501596135e-01, 1.067919460860442e-01, 1.091115827936941e-01, 1.114130171884801e-01, 1.136972034526091e-01, 1.159633898052705e-01, 1.182118281722069e-01, 1.204427501873579e-01, 1.226563793721879e-01, 1.248529243436998e-01, 1.270325882300555e-01, 1.292015586243428e-01, 1.313646430593214e-01, 1.335142270146495e-01, 1.356503998986514e-01, 1.377731766135517e-01, 1.398826340337816e-01, 1.419788122070011e-01, 1.440617730247337e-01, 1.461373130446876e-01, 1.482098579170665e-01, 1.502729256328786e-01, 1.523266231894689e-01, 1.543711240803533e-01, 1.564065650473976e-01, 1.584330503991173e-01, 1.604507291464421e-01, 1.624597205005163e-01, 1.644601466740995e-01, 1.664521358230575e-01, 1.684358250090305e-01, 1.704177707433701e-01, 1.724055726388904e-01, 1.743895151266983e-01, 1.763698962306571e-01, 1.783470022005858e-01, 1.803211695277341e-01, 1.822926248382377e-01, 1.842616810567367e-01, 1.862285617017973e-01, 1.881935647972435e-01, 1.901569021636302e-01, 1.921188356236363e-01, 1.940849115952989e-01, 1.960649648819182e-01, 1.980484603438785e-01, 2.000358301157782e-01, 2.020274497444487e-01, 2.040237900047291e-01, 2.060251817678734e-01, 2.08032042267404e-01, 2.100447142317796e-01, 2.120635552892314e-01, 2.140888960752095e-01, 2.16121103458514e-01, 2.18162951896024e-01, 2.202216386795044e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanRelief.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanRelief.txt new file mode 100644 index 00000000000..cef6a73b209 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanRelief.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 2, 0, 1, 5, 1, 0, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0", + "nonlinear": "1, 2, 1, 0, 0, 0, 1, 5, 1", + "number of continuous time states": "29", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502685543965e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295899893e+02, 2.931503601077129e+02, 2.931504211425781e+02, 2.931504516598288e+02, 2.931504821777344e+02, 2.931505126953125e+02, 2.931505737304688e+02, 2.931506042483015e+02, 2.931506652832031e+02, 2.931507263179956e+02, 2.931507568359375e+02, 2.931508178710938e+02, 2.931508789063228e+02, 2.931509399416245e+02, 2.931510009769263e+02, 2.931510925288967e+02, 2.931511535641985e+02, 2.931512145996094e+02, 2.931513061523438e+02, 2.931513671876819e+02, 2.931514587405618e+02, 2.931515502925322e+02, 2.931516418454121e+02, 2.93151733398292e+02, 2.931518249511719e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499633789062e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.554221310491496e-04, 6.02572601716051e-04, 1.327918786271533e-03, 2.28917375399002e-03, 3.475339523597557e-03, 4.885089322303964e-03, 6.476504678826906e-03, 8.219076646913076e-03, 1.010184386593189e-02, 1.209142587706885e-02, 1.418885787680293e-02, 1.635644271441025e-02, 1.85792251981654e-02, 2.084904895499401e-02, 2.316147508984937e-02, 2.551518093187349e-02, 2.791132175977039e-02, 3.035217906460109e-02, 3.284044623801264e-02, 3.53778928355537e-02, 3.793490473276988e-02, 4.047329008884787e-02, 4.299612983232017e-02, 4.551084474214744e-02, 4.801575466990471e-02, 5.050952224641012e-02, 5.29910299435335e-02, 5.545940593326886e-02, 5.791391636387851e-02, 6.034603426223358e-02, 6.275795342798879e-02, 6.515297464238233e-02, 6.753096418588553e-02, 6.989184682822007e-02, 7.223556329808718e-02, 7.456207688618793e-02, 7.687141636491512e-02, 7.916167487094007e-02, 8.143359746184287e-02, 8.368805661946516e-02, 8.59251626348662e-02, 8.814499816948497e-02, 9.034765354693126e-02, 9.253323130020591e-02, 9.470183659604647e-02, 9.685964702617965e-02, 9.900497670609046e-02, 1.011357181189412e-01, 1.032519767422825e-01, 1.05353906750679e-01, 1.074415986696826e-01, 1.095151791623196e-01, 1.115747674380928e-01, 1.136204705568739e-01, 1.15652409760461e-01, 1.176706994741262e-01, 1.196754440045218e-01, 1.216772381085927e-01, 1.236744500767046e-01, 1.256619793565666e-01, 1.276401104101604e-01, 1.296090474294277e-01, 1.315690437338957e-01, 1.335202781383513e-01, 1.354630039635651e-01, 1.373973885197839e-01, 1.393236634823662e-01, 1.412420110117393e-01, 1.43152624823101e-01, 1.450658612464618e-01, 1.469824355199074e-01, 1.488957797419987e-01, 1.508062892496062e-01, 1.527142506532494e-01, 1.546200066804886e-01, 1.565238404538837e-01, 1.584260499980087e-01, 1.603269184355657e-01, 1.62226732469852e-01, 1.641257531657835e-01, 1.660242374185663e-01, 1.679293228956968e-01, 1.698434980899704e-01, 1.717610111512436e-01, 1.736822082454234e-01, 1.75607469901689e-01, 1.775371423094483e-01, 1.794715532957753e-01, 1.814110008849595e-01, 1.833558278039571e-01, 1.853062906311976e-01, 1.872627255410875e-01, 1.892253742467414e-01, 1.911966358371682e-01, 1.931781494454928e-01, 1.951678140048315e-01, 1.971658858018205e-01, 1.991726866764419e-01, 2.011884878688377e-01, 2.03213557600975e-01] +VAV_1.bus.VOut_flow=[-0e+00, 1.002694966873784e-04, 4.123538287168865e-04, 9.267714178612501e-04, 1.644035994437116e-03, 2.552647303164986e-03, 3.620548097285894e-03, 4.848905334894146e-03, 6.228435114973782e-03, 7.738870475729319e-03, 9.378355675814644e-03, 1.111124559774996e-02, 1.295083625960663e-02, 1.489285009420167e-02, 1.688953104571458e-02, 1.894239398385718e-02, 2.106769087912473e-02, 2.326082957341716e-02, 2.551736333250407e-02, 2.783296499530172e-02, 3.020338456590688e-02, 3.262445863759374e-02, 3.504015534013746e-02, 3.74571447382322e-02, 3.98958599301027e-02, 4.235317558050156e-02, 4.482615975728042e-02, 4.731202975946678e-02, 4.980818524960701e-02, 5.231218249244549e-02, 5.479700568571098e-02, 5.726725176733036e-02, 5.973200676024958e-02, 6.218989989121613e-02, 6.463972391617823e-02, 6.708040233538765e-02, 6.951100032130945e-02, 7.193072770110354e-02, 7.431429737201384e-02, 7.666901834246818e-02, 7.900472591631684e-02, 8.13214638133256e-02, 8.361927719725784e-02, 8.589815185930379e-02, 8.81581460830432e-02, 9.039934245342524e-02, 9.261180276870479e-02, 9.479868437931263e-02, 9.696381770009198e-02, 9.91074198984775e-02, 1.01229727268219e-01, 1.033309941542005e-01, 1.054115036833466e-01, 1.074715464292598e-01, 1.095114157708511e-01, 1.115314489458272e-01, 1.135319541113865e-01, 1.155132516407252e-01, 1.174713703650349e-01, 1.194073906340856e-01, 1.213237746749331e-01, 1.232208284530247e-01, 1.250988087080183e-01, 1.26958028363233e-01, 1.287987407393684e-01, 1.306212289611161e-01, 1.324257654498043e-01, 1.342126548388306e-01, 1.359821247368665e-01, 1.377344582658271e-01, 1.394720992202145e-01, 1.411954201282963e-01, 1.429032634684802e-01, 1.445959178225825e-01, 1.462736560851979e-01, 1.479367762804031e-01, 1.495855168249298e-01, 1.512201608442511e-01, 1.528409318568507e-01, 1.544480885467627e-01, 1.560418735880412e-01, 1.576225157796274e-01, 1.591962587163019e-01, 1.60765263066706e-01, 1.623245667431966e-01, 1.638745032637898e-01, 1.654154487313252e-01, 1.669476919036707e-01, 1.684715606064435e-01, 1.699873379627722e-01, 1.714953368983917e-01, 1.729958316152203e-01, 1.744891082208818e-01, 1.759754259704105e-01, 1.774607900357036e-01, 1.789493578513428e-01, 1.804348709236366e-01, 1.81917707852876e-01, 1.833982886462502e-01, 1.848769769878896e-01, 1.863541454076767e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanSupplyBlowThrough.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanSupplyBlowThrough.txt new file mode 100644 index 00000000000..55898108458 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_AirHandlersFans_Validation_VAVMZFanSupplyBlowThrough.txt @@ -0,0 +1,19 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 1, 0, 0, 1, 5, 1, 1, 0, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 0, 1, 0, 1, 1, 0, 0, 1, 5, 1", + "number of continuous time states": "30", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAV_1.bus.TAirSup=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244138442e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500549316406e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931500854492188e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.931501159667969e+02, 2.93150146484375e+02, 2.93150146484375e+02, 2.931501770019531e+02, 2.931501770019531e+02, 2.931502075195312e+02, 2.931502380371094e+02, 2.931502380371094e+02, 2.931502685546875e+02, 2.931502990722656e+02, 2.931503295895891e+02, 2.931503295898438e+02, 2.931503601074583e+02, 2.931503906251819e+02, 2.931504516601562e+02, 2.931504821772978e+02, 2.931505126953125e+02, 2.931505432128906e+02, 2.931506042480469e+02, 2.931506347657705e+02, 2.931506958007812e+02, 2.931507568359375e+02, 2.931507873535156e+02, 2.931508483886719e+02, 2.931509094238281e+02, 2.931509704590935e+02, 2.931510620117188e+02, 2.93151123046875e+02, 2.931511840820312e+02, 2.931512756345473e+02, 2.931513671874272e+02, 2.93151428222729e+02, 2.931515197756089e+02, 2.931516113284888e+02, 2.931517028808594e+02, 2.931518249509172e+02, 2.931519165037971e+02, 2.931520385742188e+02, 2.93152130127135e+02, 2.93152252197593e+02, 2.931523742671416e+02, 2.931524963375996e+02, 2.931526184080576e+02, 2.931527404785156e+02] +VAV_1.bus.TAirMix=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02, 2.931500244140625e+02] +VAV_1.bus.TOut=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAV_1.bus.fanSup.V_flow=[0e+00, 1.829000628343488e-04, 7.197420676760761e-04, 1.592682746358498e-03, 2.788720072585885e-03, 4.237857531206956e-03, 5.942178672307592e-03, 7.870138563096939e-03, 9.975265174831082e-03, 1.223785533689005e-02, 1.462027580598464e-02, 1.709923349448175e-02, 1.965088652814932e-02, 2.224892316402563e-02, 2.487655154543743e-02, 2.753691588263097e-02, 3.022441364466171e-02, 3.292984466923775e-02, 3.565344019098711e-02, 3.839608720052512e-02, 4.115807555093987e-02, 4.391532198846861e-02, 4.66540384566494e-02, 4.938306545836188e-02, 5.209504212767619e-02, 5.478798970580101e-02, 5.74619758190826e-02, 6.011732011055358e-02, 6.275460092661397e-02, 6.537453302970778e-02, 6.797777551880474e-02, 7.056382236958872e-02, 7.313517664408292e-02, 7.569296323311082e-02, 7.823841927975568e-02, 8.077277393834287e-02, 8.329732355460726e-02, 8.581316351299038e-02, 8.831827461531219e-02, 9.081049619165417e-02, 9.329310656859524e-02, 9.57661726954102e-02, 9.822973931271285e-02, 1.00683851277557e-01, 1.03128575370104e-01, 1.055639713165947e-01, 1.079871634335877e-01, 1.103987026101801e-01, 1.128000195690239e-01, 1.151911742571602e-01, 1.175722479820251e-01, 1.199432932043054e-01, 1.223043695308469e-01, 1.246555514676687e-01, 1.269968846950032e-01, 1.293284567265553e-01, 1.316503280835022e-01, 1.339625434683112e-01, 1.362637915751952e-01, 1.385539532007607e-01, 1.408341174695162e-01, 1.431043711667835e-01, 1.453647155731344e-01, 1.476152102921478e-01, 1.498559149286818e-01, 1.520868741871792e-01, 1.543081195613273e-01, 1.565197222342418e-01, 1.587217285408204e-01, 1.609141831843313e-01, 1.630973245831648e-01, 1.652713017500454e-01, 1.674359677002054e-01, 1.695914078440366e-01, 1.71737639052842e-01, 1.738747358322144e-01, 1.760027428842163e-01, 1.781217198153399e-01, 1.80231711329282e-01, 1.823327794366507e-01, 1.844249789849992e-01, 1.865083421278342e-01, 1.88584150366555e-01, 1.906540577307559e-01, 1.927161121680864e-01, 1.947703908653626e-01, 1.96817007717726e-01, 1.988560249633857e-01, 2.008875320086339e-01, 2.029116182607575e-01, 2.049283582265216e-01, 2.06937814456911e-01, 2.089401003132277e-01, 2.109352634008516e-01, 2.129241828888578e-01, 2.149091237559615e-01, 2.168879551355147e-01, 2.188607844960546e-01, 2.208277396638673e-01, 2.227889131699815e-01, 2.247444242238998e-01] +VAV_1.bus.VOut_flow=[-0e+00, 5.576723836641253e-05, 2.262588784012335e-04, 5.02959905094465e-04, 8.566020825975588e-04, 1.336431325927651e-03, 1.881217311535537e-03, 2.479430036627425e-03, 3.139184908258117e-03, 3.822893354026362e-03, 4.525126785941374e-03, 5.21967284783581e-03, 5.890972623469717e-03, 6.544782622328203e-03, 7.185022308837962e-03, 7.780663797677073e-03, 8.330440339689717e-03, 8.853953239974975e-03, 9.351242916782394e-03, 9.822354760569365e-03, 1.026733486070029e-02, 1.068623297279971e-02, 1.10791000042674e-02, 1.140349811351402e-02, 1.168371657697231e-02, 1.192648708820343e-02, 1.213186903611128e-02, 1.229991188608814e-02, 1.243066041280774e-02, 1.252414664601952e-02, 1.258196210211871e-02, 1.261642854161039e-02, 1.261712236793014e-02, 1.258404465912953e-02, 1.251718684180008e-02, 1.241653219107312e-02, 1.228205880834123e-02, 1.211373423516653e-02, 1.193034454533021e-02, 1.175181633393152e-02, 1.155150042268013e-02, 1.132936953536285e-02, 1.108539257013165e-02, 1.081954055549566e-02, 1.053177837558531e-02, 1.022207419081422e-02, 9.920944702072563e-03, 9.625649043921897e-03, 9.322779854996967e-03, 9.013120382726676e-03, 8.697452023625374e-03, 8.376562659219718e-03, 8.051238329164354e-03, 7.722271591228435e-03, 7.390455125538388e-03, 7.056579392554906e-03, 6.721441713978067e-03, 6.385839304252694e-03, 6.07008717016869e-03, 5.778453030817366e-03, 5.498129134186444e-03, 5.230604114473053e-03, 4.977371661497369e-03, 4.739923759935763e-03, 4.519752858906891e-03, 4.318349077293435e-03, 4.137204015883683e-03, 3.977805161299945e-03, 3.841641915179406e-03, 3.730201139520589e-03, 3.643026487744158e-03, 3.580330539288255e-03, 3.545660824550313e-03, 3.540413441096789e-03, 3.565983810323421e-03, 3.623765194788575e-03, 3.715148302581427e-03, 3.841520802165484e-03, 4.004267574152645e-03, 4.204766827171263e-03, 4.444395352924898e-03, 4.724519256555794e-03, 5.025836375966221e-03, 5.320392137907656e-03, 5.643562375187468e-03, 5.995513004664514e-03, 6.376409341687328e-03, 6.786403045160389e-03, 7.225638473311234e-03, 7.694251134000789e-03, 8.192365356350316e-03, 8.720091060283573e-03, 9.277531858301035e-03, 9.864770378769247e-03, 1.046643699065193e-02, 1.103880977524812e-02, 1.16242061979639e-02, 1.222145571519367e-02, 1.282939663788185e-02, 1.344685942317828e-02, 1.407268084585667e-02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Coils.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Coils.txt new file mode 100644 index 00000000000..fcf3a539e49 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Coils.txt @@ -0,0 +1,49 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "2", + "nonlinear": "0, 1, 1, 1, 1, 0, 1", + "number of continuous time states": "13", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+02] +coiCoo.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +coiCoo.bus.y_actual=[0e+00, 5.281694466248155e-04, 3.941664937883615e-03, 1.247709523886442e-02, 2.779555320739746e-02, 5.107414722442627e-02, 8.257031440734863e-02, 1.204207092523575e-01, 1.626090854406357e-01, 2.075263261795044e-01, 2.538827061653137e-01, 3.006649613380432e-01, 3.470892906188965e-01, 3.925524950027466e-01, 4.366018176078797e-01, 4.789092540740967e-01, 5.192505717277527e-01, 5.574813485145569e-01, 5.935185551643372e-01, 6.27329409122467e-01, 6.589224934577942e-01, 6.883383393287659e-01, 7.156407833099365e-01, 7.409093379974365e-01, 7.642349004745483e-01, 7.85717248916626e-01, 8.054574131965637e-01, 8.235682249069214e-01, 8.401467204093934e-01, 8.552989363670349e-01, 8.691281676292419e-01, 8.817324638366699e-01, 8.932054042816162e-01, 9.036359786987305e-01, 9.131078124046326e-01, 9.216998815536499e-01, 9.294861555099487e-01, 9.365363717079163e-01, 9.429145455360413e-01, 9.486798048019409e-01, 9.538872838020325e-01, 9.585869908332825e-01, 9.628259539604187e-01, 9.666460752487183e-01, 9.700870513916016e-01, 9.731841087341309e-01, 9.759703874588013e-01, 9.784753918647766e-01, 9.807265400886536e-01, 9.827483892440796e-01, 9.845635294914246e-01, 9.861917495727539e-01, 9.876530170440674e-01, 9.889628291130066e-01, 9.901362061500549e-01, 9.911872744560242e-01, 9.921284914016724e-01, 9.929710626602173e-01, 9.93725061416626e-01, 9.943996667861938e-01, 9.950029850006104e-01, 9.955424666404724e-01, 9.960246682167053e-01, 9.964554905891418e-01, 9.968402981758118e-01, 9.971839189529419e-01, 9.974907040596008e-01, 9.977644681930542e-01, 9.980087280273438e-01, 9.982267022132874e-01, 9.984210729598999e-01, 9.985944032669067e-01, 9.987490177154541e-01, 9.988868236541748e-01, 9.990097284317017e-01, 9.991193413734436e-01, 9.992168545722961e-01, 9.993038177490234e-01, 9.993811845779419e-01, 9.994499683380127e-01, 9.995111227035522e-01, 9.995654821395874e-01, 9.996138215065002e-01, 9.996567368507385e-01, 9.996948838233948e-01, 9.997288584709167e-01, 9.997590780258179e-01, 9.997859597206116e-01, 9.998098611831665e-01, 9.998311400413513e-01, 9.998500943183899e-01, 9.998669028282166e-01, 9.998818635940552e-01, 9.998951554298401e-01, 9.999069571495056e-01, 9.999174475669861e-01, 9.999266862869263e-01, 9.999348521232605e-01, 9.999420642852783e-01, 9.999483227729797e-01, 9.999539256095886e-01] +coiCoo.hex.m1_flow=[1.406250021318556e-06, 2.002072869800031e-04, 9.158572182059288e-03, 2.879834733903408e-02, 3.152541816234589e-02, 3.452939167618752e-02, 3.905384615063667e-02, 4.528073221445084e-02, 5.339531600475311e-02, 6.36335164308548e-02, 7.625211775302887e-02, 9.150707721710205e-02, 1.0963024944067e-01, 1.308019906282425e-01, 1.55127838253975e-01, 1.82619035243988e-01, 2.131793051958084e-01, 2.465950399637222e-01, 2.825339138507843e-01, 3.20557028055191e-01, 3.601428866386414e-01, 4.00716632604599e-01, 4.416830241680145e-01, 4.824582636356354e-01, 5.225013494491577e-01, 5.61340868473053e-01, 5.985833406448364e-01, 6.339449286460876e-01, 6.672017574310304e-01, 6.982334256172179e-01, 7.269927263259888e-01, 7.534891366958618e-01, 7.777782678604126e-01, 7.999497056007385e-01, 8.201159834861755e-01, 8.384042978286743e-01, 8.549493551254272e-01, 8.698891997337341e-01, 8.833573460578918e-01, 8.954824805259705e-01, 9.063871502876282e-01, 9.161844849586487e-01, 9.249815344810486e-01, 9.328740835189819e-01, 9.399527311325073e-01, 9.462974071502686e-01, 9.519829750061035e-01, 9.570755362510681e-01, 9.616362452507019e-01, 9.657191634178162e-01, 9.693737626075745e-01, 9.726428985595703e-01, 9.755694270133972e-01, 9.781866669654846e-01, 9.805262684822083e-01, 9.82617974281311e-01, 9.844878315925598e-01, 9.861589670181274e-01, 9.876523613929749e-01, 9.889867305755615e-01, 9.901788234710693e-01, 9.912435412406921e-01, 9.921944141387939e-01, 9.930431246757507e-01, 9.938006997108459e-01, 9.944767355918884e-01, 9.950798153877258e-01, 9.956178069114685e-01, 9.960975646972656e-01, 9.965254068374634e-01, 9.969068169593811e-01, 9.972468614578247e-01, 9.975501298904419e-01, 9.978203177452087e-01, 9.980611801147461e-01, 9.982759356498718e-01, 9.984670281410217e-01, 9.986372590065002e-01, 9.987888932228088e-01, 9.989234805107117e-01, 9.990432858467102e-01, 9.991496801376343e-01, 9.992443323135376e-01, 9.993283152580261e-01, 9.994029998779297e-01, 9.99469518661499e-01, 9.995285868644714e-01, 9.995812177658081e-01, 9.996280074119568e-01, 9.996696710586548e-01, 9.997067451477051e-01, 9.997397065162659e-01, 9.997689723968506e-01, 9.997949600219727e-01, 9.998180270195007e-01, 9.998384714126587e-01, 9.998566508293152e-01, 9.99872624874115e-01, 9.998866319656372e-01, 9.998989701271057e-01, 9.999098777770996e-01] +coiCoo.hex.m2_flow=[1e+00, 1e+00] +coiCoo.hex.m1_flow_nominal=[1e+00, 1e+00] +coiCoo.hex.m2_flow_nominal=[1e+00, 1e+00] +coiCoo.hex.Q2_flow=[-6.713470611430239e-06, -1.762336045503616e-01, -9.00266845703125e+02, -3.372742919921875e+03, -3.69112109375e+03, -4.041030029296875e+03, -4.56596826171875e+03, -5.283310546875001e+03, -6.207830078125e+03, -7.3568193359375e+03, -8.7457822265625e+03, -1.03810302734375e+04, -1.22359423828125e+04, -1.40770732421875e+04, -1.5656072265625e+04, -1.709747265625e+04, -1.861216015625e+04, -2.0330892578125e+04, -2.2202203125e+04, -2.4240953125e+04, -2.6361271484375e+04, -2.8497265625e+04, -3.059082421875e+04, -3.25944765625e+04, -3.44723125e+04, -3.620012890625e+04, -3.776437109375e+04, -3.916180859375e+04, -4.038471875000001e+04, -4.14643046875e+04, -4.24146484375e+04, -4.322758984375e+04, -4.39294296875e+04, -4.453464453125e+04, -4.50565625e+04, -4.5507109375e+04, -4.589672265625e+04, -4.623444140625e+04, -4.6527921875e+04, -4.678366796875e+04, -4.700718359375e+04, -4.7203078125e+04, -4.73752734375e+04, -4.752704296875e+04, -4.766119140625e+04, -4.778006640625e+04, -4.78856953125e+04, -4.79797734375e+04, -4.806378125e+04, -4.81389765625e+04, -4.82064453125e+04, -4.8267109375e+04, -4.83218203125e+04, -4.837125390625e+04, -4.8416015625e+04, -4.845666015625e+04, -4.849365625e+04, -4.85274140625e+04, -4.85583046875e+04, -4.85866484375e+04, -4.861271875e+04, -4.863676953125e+04, -4.865901953125e+04, -4.867966015625e+04, -4.869886328125e+04, -4.871678515625e+04, -4.873355859375e+04, -4.87493046875e+04, -4.876412890625e+04, -4.87781328125e+04, -4.87913984375e+04, -4.880399609375e+04, -4.881600390625e+04, -4.88274765625e+04, -4.883846484375e+04, -4.884901953125e+04, -4.88591796875e+04, -4.8868984375e+04, -4.887846875e+04, -4.888765625e+04, -4.8896578125e+04, -4.89052578125e+04, -4.891371484375e+04, -4.892196875e+04, -4.893004296875e+04, -4.893794921875e+04, -4.894569921875e+04, -4.895330859375e+04, -4.89607890625e+04, -4.896814453125e+04, -4.897538671875e+04, -4.898252734375e+04, -4.898956640625e+04, -4.899651171875e+04, -4.900337109375e+04, -4.90101484375e+04, -4.901684765625e+04, -4.902346875e+04, -4.903001953125e+04, -4.90365e+04, -4.904291796875e+04] +coiCoo.Q_flow_nominal=[-5e+04, -5e+04] +coiHea.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +coiHea.bus.y_actual=[0e+00, 5.281694466248155e-04, 3.941664937883615e-03, 1.247709523886442e-02, 2.779555320739746e-02, 5.107414722442627e-02, 8.257031440734863e-02, 1.204207092523575e-01, 1.626090854406357e-01, 2.075263261795044e-01, 2.538827061653137e-01, 3.006649613380432e-01, 3.470892906188965e-01, 3.925524950027466e-01, 4.366018176078797e-01, 4.789092540740967e-01, 5.192505717277527e-01, 5.574813485145569e-01, 5.935185551643372e-01, 6.27329409122467e-01, 6.589224934577942e-01, 6.883383393287659e-01, 7.156407833099365e-01, 7.409093379974365e-01, 7.642349004745483e-01, 7.85717248916626e-01, 8.054574131965637e-01, 8.235682249069214e-01, 8.401467204093934e-01, 8.552989363670349e-01, 8.691281676292419e-01, 8.817324638366699e-01, 8.932054042816162e-01, 9.036359786987305e-01, 9.131078124046326e-01, 9.216998815536499e-01, 9.294861555099487e-01, 9.365363717079163e-01, 9.429145455360413e-01, 9.486798048019409e-01, 9.538872838020325e-01, 9.585869908332825e-01, 9.628259539604187e-01, 9.666460752487183e-01, 9.700870513916016e-01, 9.731841087341309e-01, 9.759703874588013e-01, 9.784753918647766e-01, 9.807265400886536e-01, 9.827483892440796e-01, 9.845635294914246e-01, 9.861917495727539e-01, 9.876530170440674e-01, 9.889628291130066e-01, 9.901362061500549e-01, 9.911872744560242e-01, 9.921284914016724e-01, 9.929710626602173e-01, 9.93725061416626e-01, 9.943996667861938e-01, 9.950029850006104e-01, 9.955424666404724e-01, 9.960246682167053e-01, 9.964554905891418e-01, 9.968402981758118e-01, 9.971839189529419e-01, 9.974907040596008e-01, 9.977644681930542e-01, 9.980087280273438e-01, 9.982267022132874e-01, 9.984210729598999e-01, 9.985944032669067e-01, 9.987490177154541e-01, 9.988868236541748e-01, 9.990097284317017e-01, 9.991193413734436e-01, 9.992168545722961e-01, 9.993038177490234e-01, 9.993811845779419e-01, 9.994499683380127e-01, 9.995111227035522e-01, 9.995654821395874e-01, 9.996138215065002e-01, 9.996567368507385e-01, 9.996948838233948e-01, 9.997288584709167e-01, 9.997590780258179e-01, 9.997859597206116e-01, 9.998098611831665e-01, 9.998311400413513e-01, 9.998500943183899e-01, 9.998669028282166e-01, 9.998818635940552e-01, 9.998951554298401e-01, 9.999069571495056e-01, 9.999174475669861e-01, 9.999266862869263e-01, 9.999348521232605e-01, 9.999420642852783e-01, 9.999483227729797e-01, 9.999539256095886e-01] +coiHea.hex.m1_flow=[1.406250021318556e-06, 2.002072869800031e-04, 9.158572182059288e-03, 2.879834733903408e-02, 3.152541816234589e-02, 3.452939167618752e-02, 3.905384615063667e-02, 4.528073221445084e-02, 5.339531600475311e-02, 6.36335164308548e-02, 7.625211775302887e-02, 9.150707721710205e-02, 1.0963024944067e-01, 1.308019906282425e-01, 1.55127838253975e-01, 1.82619035243988e-01, 2.131793051958084e-01, 2.465950399637222e-01, 2.825339138507843e-01, 3.20557028055191e-01, 3.601428866386414e-01, 4.00716632604599e-01, 4.416830241680145e-01, 4.824582636356354e-01, 5.225013494491577e-01, 5.61340868473053e-01, 5.985833406448364e-01, 6.339449286460876e-01, 6.672017574310304e-01, 6.982334256172179e-01, 7.269927263259888e-01, 7.534891366958618e-01, 7.777782678604126e-01, 7.999497056007385e-01, 8.201159834861755e-01, 8.384042978286743e-01, 8.549493551254272e-01, 8.698891997337341e-01, 8.833573460578918e-01, 8.954824805259705e-01, 9.063871502876282e-01, 9.161844849586487e-01, 9.249815344810486e-01, 9.328740835189819e-01, 9.399527311325073e-01, 9.462974071502686e-01, 9.519829750061035e-01, 9.570755362510681e-01, 9.616362452507019e-01, 9.657191634178162e-01, 9.693737626075745e-01, 9.726428985595703e-01, 9.755694270133972e-01, 9.781866669654846e-01, 9.805262684822083e-01, 9.82617974281311e-01, 9.844878315925598e-01, 9.861589670181274e-01, 9.876523613929749e-01, 9.889867305755615e-01, 9.901788234710693e-01, 9.912435412406921e-01, 9.921944141387939e-01, 9.930431246757507e-01, 9.938006997108459e-01, 9.944767355918884e-01, 9.950798153877258e-01, 9.956178069114685e-01, 9.960975646972656e-01, 9.965254068374634e-01, 9.969068169593811e-01, 9.972468614578247e-01, 9.975501298904419e-01, 9.978203177452087e-01, 9.980611801147461e-01, 9.982759356498718e-01, 9.984670281410217e-01, 9.986372590065002e-01, 9.987888932228088e-01, 9.989234805107117e-01, 9.990432858467102e-01, 9.991496801376343e-01, 9.992443323135376e-01, 9.993283152580261e-01, 9.994029998779297e-01, 9.99469518661499e-01, 9.995285868644714e-01, 9.995812177658081e-01, 9.996280074119568e-01, 9.996696710586548e-01, 9.997067451477051e-01, 9.997397065162659e-01, 9.997689723968506e-01, 9.997949600219727e-01, 9.998180270195007e-01, 9.998384714126587e-01, 9.998566508293152e-01, 9.99872624874115e-01, 9.998866319656372e-01, 9.998989701271057e-01, 9.999098777770996e-01] +coiHea.hex.m2_flow=[1e+00, 1e+00] +coiHea.hex.m1_flow_nominal=[1e+00, 1e+00] +coiHea.hex.m2_flow_nominal=[1e+00, 1e+00] +coiHea.hex.Q2_flow=[0e+00, 1.145710182189941e+01, 2.2978759765625e+03, 6.63223095703125e+03, 7.128404296875e+03, 7.65306103515625e+03, 8.408404296875e+03, 9.397877929687502e+03, 1.063192578125e+04, 1.21382587890625e+04, 1.39465498046875e+04, 1.60595322265625e+04, 1.8414814453125e+04, 2.0920830078125e+04, 2.350941796875e+04, 2.61097421875e+04, 2.865373828125e+04, 3.11018359375e+04, 3.33505390625e+04, 3.542798046875e+04, 3.729994140625e+04, 3.89642578125e+04, 4.042826953125e+04, 4.170555859375e+04, 4.281323046875e+04, 4.376985546875e+04, 4.459377734375e+04, 4.530273046875e+04, 4.59122734375e+04, 4.64366328125e+04, 4.688825e+04, 4.727780859375e+04, 4.76144453125e+04, 4.790593359375e+04, 4.81588515625e+04, 4.837877734375e+04, 4.857042578125e+04, 4.87378046875e+04, 4.888428125e+04, 4.901270703125e+04, 4.912551953125e+04, 4.92247734375e+04, 4.93122421875e+04, 4.9389421875e+04, 4.9457625e+04, 4.9517953125e+04, 4.95713828125e+04, 4.961873828125e+04, 4.966075390625e+04, 4.969805078125e+04, 4.973119140625e+04, 4.976063671875e+04, 4.978683984375e+04, 4.981015234375e+04, 4.983089453125e+04, 4.984935546875e+04, 4.986580078125e+04, 4.988044921875e+04, 4.98935e+04, 4.990512890625e+04, 4.99154921875e+04, 4.992473046875e+04, 4.993296484375e+04, 4.994030078125e+04, 4.994683984375e+04, 4.995266796875e+04, 4.9957859375e+04, 4.9962484375e+04, 4.9966609375e+04, 4.997028125e+04, 4.997355078125e+04, 4.997646875e+04, 4.997906640625e+04, 4.998137890625e+04, 4.998344140625e+04, 4.998527734375e+04, 4.998691015625e+04, 4.99883671875e+04, 4.99896640625e+04, 4.99908125e+04, 4.99918359375e+04, 4.999274609375e+04, 4.99935546875e+04, 4.999426953125e+04, 4.999490625e+04, 4.99954765625e+04, 4.999598046875e+04, 4.99964296875e+04, 4.9996828125e+04, 4.999718359375e+04, 4.99975e+04, 4.999778125e+04, 4.999803125e+04, 4.999825e+04, 4.999844921875e+04, 4.999862109375e+04, 4.999877734375e+04, 4.99989140625e+04, 4.999903515625e+04, 4.999913671875e+04, 4.999923046875e+04] +coiHea.Q_flow_nominal=[5e+04, 5e+04] +coiEle.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +coiEle.hex.m_flow=[1e+00, 1e+00] +coiEle.hex.m_flow_nominal=[1e+00, 1e+00] +coiEle.hex.Q_flow=[0e+00, 1e+04, 2e+04, 3e+04, 4e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04, 5e+04] +coiEle.Q_flow_nominal=[5e+04, 5e+04] +coiEva.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +coiEva.hex.m_flow=[1.132799983024597e+00, 1.132799983024597e+00] +coiEva.hex.m_flow_nominal=[1.132799983024597e+00, 1.132799983024597e+00] +coiEva.hex.QSen_flow=[0e+00, 0e+00, -5.66994091796875e+03, -8.11473583984375e+03, -1.03938232421875e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04, -1.2560240234375e+04] +coiEva.hex.QLat_flow=[0e+00, 0e+00, -9.164449462890625e+02, -1.764842651367188e+03, -2.7789482421875e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03, -3.9057236328125e+03] +coiEva.Q_flow_nominal=[-1.82769609375e+04, -1.82769609375e+04] +coiMul.bus.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +coiMul.hex.m_flow=[4.531199932098389e+00, 4.531199932098389e+00] +coiMul.hex.m_flow_nominal=[4.531199932098389e+00, 4.531199932098389e+00] +coiMul.hex.QSen_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -2.3271404296875e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04, -5.216828125e+04] +coiMul.hex.QLat_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -8.0922998046875e+03, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04, -1.2997642578125e+04] +coiMul.Q_flow_nominal=[-7.28735234375e+04, -7.28735234375e+04] +non.m_flow=[1e+00, 1e+00] +non.m_flow_nominal=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Dampers.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Dampers.txt new file mode 100644 index 00000000000..35252e05129 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Dampers.txt @@ -0,0 +1,28 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "0, 0", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+02] +mod.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mod.bus.y_actual=[0e+00, 5.273207789286971e-04, 3.93623998388648e-03, 1.24744912609458e-02, 2.779442071914673e-02, 5.107245221734047e-02, 8.257108926773071e-02, 1.204183325171471e-01, 1.626055240631104e-01, 2.075200527906418e-01, 2.538755238056183e-01, 3.006600141525269e-01, 3.470855355262756e-01, 3.925494253635406e-01, 4.366007149219513e-01, 4.789118468761444e-01, 5.192551016807556e-01, 5.574837923049927e-01, 5.935178399085999e-01, 6.273276209831238e-01, 6.589217185974121e-01, 6.883384585380554e-01, 7.156403660774231e-01, 7.409075498580933e-01, 7.642318606376648e-01, 7.857134342193604e-01, 8.054555058479309e-01, 8.235636353492737e-01, 8.401416540145875e-01, 8.552939891815186e-01, 8.691229224205017e-01, 8.817264437675476e-01, 8.9319908618927e-01, 9.036296010017395e-01, 9.131025075912476e-01, 9.216963052749634e-01, 9.29485023021698e-01, 9.365367889404297e-01, 9.429159760475159e-01, 9.486814141273499e-01, 9.538882374763489e-01, 9.58587110042572e-01, 9.628247022628784e-01, 9.666438698768616e-01, 9.700837135314941e-01, 9.731800556182861e-01, 9.759656190872192e-01, 9.784700870513916e-01, 9.807206988334656e-01, 9.827421307563782e-01, 9.845568537712097e-01, 9.861853718757629e-01, 9.876460433006287e-01, 9.889557361602783e-01, 9.901295304298401e-01, 9.911810755729675e-01, 9.921228289604187e-01, 9.929643273353577e-01, 9.937203526496887e-01, 9.943978190422058e-01, 9.950039982795715e-01, 9.955458641052246e-01, 9.960305094718933e-01, 9.964631795883179e-01, 9.968493580818176e-01, 9.971938729286194e-01, 9.975012540817261e-01, 9.977753758430481e-01, 9.98019814491272e-01, 9.982377886772156e-01, 9.984322190284729e-01, 9.986054301261902e-01, 9.987596869468689e-01, 9.988970160484314e-01, 9.990193247795105e-01, 9.991281628608704e-01, 9.992249011993408e-01, 9.993105530738831e-01, 9.99386727809906e-01, 9.994543790817261e-01, 9.995148181915283e-01, 9.995679259300232e-01, 9.996150732040405e-01, 9.996572732925415e-01, 9.996946454048157e-01, 9.997275471687317e-01, 9.997571110725403e-01, 9.997837543487549e-01, 9.998070001602173e-01, 9.998278021812439e-01, 9.998466968536377e-01, 9.998633861541748e-01, 9.998781681060791e-01, 9.99891459941864e-01, 9.999034404754639e-01, 9.999139308929443e-01, 9.999233484268188e-01, 9.999318718910217e-01, 9.999393224716187e-01, 9.999459981918335e-01, 9.99951958656311e-01] +mod.dam.m_flow=[4.687500165800884e-08, 5.008081771507022e-08, 7.64485292847894e-08, 2.12829306178719e-07, 1.176377281808527e-06, 1.155472000391455e-05, 1.393755665048957e-04, 1.112448284402491e-03, 3.472911426797509e-03, 5.339581519365311e-03, 8.273989893496037e-03, 1.287144888192415e-02, 1.994960568845272e-02, 3.061909414827824e-02, 4.630098119378093e-02, 6.865287572145462e-02, 9.928697347640991e-02, 1.390821784734726e-01, 1.868894696235657e-01, 2.377327978610992e-01, 2.829835116863251e-01, 3.227478861808777e-01, 3.629264533519745e-01, 4.032918214797974e-01, 4.433438181877136e-01, 4.826471507549286e-01, 5.208351612091064e-01, 5.576139688491821e-01, 5.927554368972779e-01, 6.261000037193297e-01, 6.575466394424438e-01, 6.870418190956116e-01, 7.145747542381287e-01, 7.401652932167053e-01, 7.63860821723938e-01, 7.857259511947632e-01, 8.058409690856934e-01, 8.242936134338379e-01, 8.411805033683777e-01, 8.565990328788757e-01, 8.706493973731995e-01, 8.834301233291626e-01, 8.950371742248535e-01, 9.055631756782532e-01, 9.150960445404053e-01, 9.237186908721924e-01, 9.315093159675598e-01, 9.385406970977783e-01, 9.448807835578918e-01, 9.505924582481384e-01, 9.557338953018188e-01, 9.603586196899414e-01, 9.645156860351562e-01, 9.682499170303345e-01, 9.716023802757263e-01, 9.746102690696716e-01, 9.773075580596924e-01, 9.797205328941345e-01, 9.81890857219696e-01, 9.838374853134155e-01, 9.855806231498718e-01, 9.871400594711304e-01, 9.885357618331909e-01, 9.89782452583313e-01, 9.908957481384277e-01, 9.918895959854126e-01, 9.927765130996704e-01, 9.935678243637085e-01, 9.942737221717834e-01, 9.949033856391907e-01, 9.954651594161987e-01, 9.959656596183777e-01, 9.964115023612976e-01, 9.96808648109436e-01, 9.971622824668884e-01, 9.974769949913025e-01, 9.977568984031677e-01, 9.980046153068542e-01, 9.982249140739441e-01, 9.984208345413208e-01, 9.985955953598022e-01, 9.987492561340332e-01, 9.988856315612793e-01, 9.990078210830688e-01, 9.99116063117981e-01, 9.99211311340332e-01, 9.992967844009399e-01, 9.993739724159241e-01, 9.994412064552307e-01, 9.995015263557434e-01, 9.995561242103577e-01, 9.996044635772705e-01, 9.996472001075745e-01, 9.996857643127441e-01, 9.997204542160034e-01, 9.997508525848389e-01, 9.99778151512146e-01, 9.998027682304382e-01, 9.998244047164917e-01, 9.998436570167542e-01, 9.99860942363739e-01] +mod.dam.m_flow_nominal=[1e+00, 1e+00] +pre.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pre.bus.y_actual=[0e+00, 0e+00, 0e+00, 0e+00, 2.265240997076035e-01, 3.319839835166931e-01, 4.17055070400238e-01, 4.919662475585938e-01, 5.481975674629211e-01, 6.011870503425598e-01, 6.40691876411438e-01, 6.770857572555542e-01, 7.11178183555603e-01, 7.384111285209656e-01, 7.633197903633118e-01, 7.86928653717041e-01, 8.08451235294342e-01, 8.264709711074829e-01, 8.424299359321594e-01, 8.572483658790588e-01, 8.710386753082275e-01, 8.837535977363586e-01, 8.953604102134705e-01, 9.059340357780457e-01, 9.161989092826843e-01, 9.258739948272705e-01, 9.346705079078674e-01, 9.425155520439148e-01, 9.4943767786026e-01, 9.555110931396484e-01, 9.608255624771118e-01, 9.65471625328064e-01, 9.695340991020203e-01, 9.730890989303589e-01, 9.762039184570312e-01, 9.789366722106934e-01, 9.813379049301147e-01, 9.834508299827576e-01, 9.853127598762512e-01, 9.869557619094849e-01, 9.884074926376343e-01, 9.896917939186096e-01, 9.908292889595032e-01, 9.91837739944458e-01, 9.927327036857605e-01, 9.935275316238403e-01, 9.942339658737183e-01, 9.948621988296509e-01, 9.954212307929993e-01, 9.959188103675842e-01, 9.96362030506134e-01, 9.96756911277771e-01, 9.971088171005249e-01, 9.97422456741333e-01, 9.977021217346191e-01, 9.979508519172668e-01, 9.981693029403687e-01, 9.983589053153992e-01, 9.985233545303345e-01, 9.986650943756104e-01, 9.987868666648865e-01, 9.988913536071777e-01, 9.989879727363586e-01, 9.990065693855286e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01, 9.990000128746033e-01] +pre.dam.m_flow=[1.009988784790039e-02, 1.062656193971634e-02, 1.403130404651165e-02, 2.255905047059059e-02, 3.78597229719162e-02, 6.110644713044167e-02, 9.255589544773102e-02, 1.303281486034394e-01, 1.724038571119308e-01, 2.171599268913269e-01, 2.633039057254791e-01, 3.098255693912506e-01, 3.559456765651703e-01, 4.010687172412872e-01, 4.44750338792801e-01, 4.866698980331421e-01, 5.266064405441284e-01, 5.64419686794281e-01, 6.000353693962097e-01, 6.334290504455566e-01, 6.646136045455933e-01, 6.93631112575531e-01, 7.205469608306885e-01, 7.454436421394348e-01, 7.684146165847778e-01, 7.895610928535461e-01, 8.08987021446228e-01, 8.267984390258789e-01, 8.430989980697632e-01, 8.57992947101593e-01, 8.7158203125e-01, 8.839636445045471e-01, 8.952315449714661e-01, 9.054735898971558e-01, 9.147734642028809e-01, 9.232087731361389e-01, 9.308525323867798e-01, 9.377719759941101e-01, 9.440306425094604e-01, 9.496864676475525e-01, 9.547936916351318e-01, 9.594022631645203e-01, 9.6355801820755e-01, 9.673030972480774e-01, 9.706760048866272e-01, 9.737119078636169e-01, 9.764429330825806e-01, 9.788981676101685e-01, 9.811044931411743e-01, 9.830859899520874e-01, 9.848648905754089e-01, 9.864611029624939e-01, 9.878928065299988e-01, 9.891764521598816e-01, 9.903269410133362e-01, 9.913547039031982e-01, 9.922612905502319e-01, 9.930509328842163e-01, 9.937379360198975e-01, 9.943317770957947e-01, 9.948431849479675e-01, 9.952830076217651e-01, 9.956614971160889e-01, 9.959869384765625e-01, 9.962670803070068e-01, 9.965085983276367e-01, 9.967172145843506e-01, 9.968976974487305e-01, 9.970541596412659e-01, 9.971901178359985e-01, 9.973085522651672e-01, 9.974116683006287e-01, 9.975017309188843e-01, 9.975804686546326e-01, 9.976493716239929e-01, 9.977098107337952e-01, 9.977627992630005e-01, 9.978091716766357e-01, 9.978498816490173e-01, 9.978857636451721e-01, 9.979174733161926e-01, 9.979451298713684e-01, 9.979695081710815e-01, 9.979912042617798e-01, 9.980103373527527e-01, 9.980270862579346e-01, 9.980419874191284e-01, 9.980554580688477e-01, 9.980671405792236e-01, 9.980775713920593e-01, 9.980869889259338e-01, 9.980952739715576e-01, 9.98102605342865e-01, 9.981092214584351e-01, 9.981151223182678e-01, 9.981203079223633e-01, 9.981249570846558e-01, 9.981291890144348e-01, 9.981328248977661e-01, 9.981361031532288e-01, 9.981390237808228e-01] +pre.dam.m_flow_nominal=[1e+00, 1e+00] +two.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +two.bus.y1_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +two.dam.m_flow=[4.687500165800884e-08, 4.687500165800884e-08, 4.687500165800884e-08, 4.687500165800884e-08, 4.687500165800884e-08, 4.687500165800884e-08, 1.206106645668115e-07, 1.23601694212994e-06, 2.207565557910129e-05, 3.205210668966174e-04, 2.063086023554206e-03, 4.232218954712152e-03, 6.593580357730389e-03, 1.033525913953781e-02, 1.61668360233307e-02, 2.507426589727402e-02, 3.835711255669594e-02, 5.760470405220985e-02, 8.45247209072113e-02, 1.204550415277481e-01, 1.653263121843338e-01, 2.160439044237137e-01, 2.647428810596466e-01, 3.059346675872803e-01, 3.459935784339905e-01, 3.86458545923233e-01, 4.268021583557129e-01, 4.665576815605164e-01, 5.053225159645082e-01, 5.427729487419127e-01, 5.786594748497009e-01, 6.12797737121582e-01, 6.450667977333069e-01, 6.753944158554077e-01, 7.037549018859863e-01, 7.301551699638367e-01, 7.546329498291016e-01, 7.772443890571594e-01, 7.980663180351257e-01, 8.171834945678711e-01, 8.346916437149048e-01, 8.506892919540405e-01, 8.65277111530304e-01, 8.785549402236938e-01, 8.90620231628418e-01, 9.01566743850708e-01, 9.114845395088196e-01, 9.204583168029785e-01, 9.285687804222107e-01, 9.358908534049988e-01, 9.424950480461121e-01, 9.484462738037109e-01, 9.538048505783081e-01, 9.586259722709656e-01, 9.629604816436768e-01, 9.668548703193665e-01, 9.7035151720047e-01, 9.734835028648376e-01, 9.763033986091614e-01, 9.7883540391922e-01, 9.811049699783325e-01, 9.83137309551239e-01, 9.849578738212585e-01, 9.865855574607849e-01, 9.880402088165283e-01, 9.893397688865662e-01, 9.905004501342773e-01, 9.915367960929871e-01, 9.924618005752563e-01, 9.932874441146851e-01, 9.940245747566223e-01, 9.94681715965271e-01, 9.952674508094788e-01, 9.957894086837769e-01, 9.962544441223145e-01, 9.966685771942139e-01, 9.970369935035706e-01, 9.973633289337158e-01, 9.976536631584167e-01, 9.979118704795837e-01, 9.981423616409302e-01, 9.983450770378113e-01, 9.985252022743225e-01, 9.986865520477295e-01, 9.988295435905457e-01, 9.989553689956665e-01, 9.990683794021606e-01, 9.991704225540161e-01, 9.992594122886658e-01, 9.993391633033752e-01, 9.994114637374878e-01, 9.994754195213318e-01, 9.995320439338684e-01, 9.995831251144409e-01, 9.99629020690918e-01, 9.996693134307861e-01, 9.9970543384552e-01, 9.997380971908569e-01, 9.997667670249939e-01, 9.997923374176025e-01, 9.998152852058411e-01] +two.dam.m_flow_nominal=[1e+00, 1e+00] +non.m_flow=[1e+00, 1e+00] +non.m_flow_nominal=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Fans.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Fans.txt new file mode 100644 index 00000000000..67d33508335 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Fans.txt @@ -0,0 +1,30 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "0, 3, 0, 1, 0, 1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0", + "nonlinear": "4, 1, 1", + "number of continuous time states": "24", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+02] +arr.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +arr.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.552700126325044e-14, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +arr.bus.y1_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +arr.fan[1].m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.987292245030403e-02, 6.933762878179554e-02, 1.149922162294388e-01, 1.532558351755142e-01, 1.826459318399429e-01, 2.040838152170181e-01, 2.191961705684662e-01, 2.295937240123749e-01, 2.366187274456024e-01, 2.412988096475601e-01, 2.443821579217911e-01, 2.463947832584381e-01, 2.476983517408371e-01, 2.485372126102448e-01, 2.490741610527039e-01, 2.494163662195206e-01, 2.496330887079239e-01, 2.497697323560715e-01, 2.498558759689331e-01, 2.499100416898727e-01, 2.49943733215332e-01, 2.499644011259079e-01, 2.499771863222122e-01, 2.499853372573853e-01, 2.499906718730927e-01, 2.499942034482956e-01, 2.499964386224747e-01, 2.499977350234985e-01, 2.499985098838806e-01, 2.499990016222e-01, 2.499992847442627e-01, 2.499995082616806e-01, 2.499996572732925e-01, 2.499997913837433e-01, 2.499998807907104e-01, 2.5e-01, 2.500001490116119e-01, 2.500002086162567e-01, 2.500002384185791e-01, 2.500003278255463e-01, 2.50000387430191e-01, 2.500002980232239e-01, 2.500002980232239e-01, 2.500002980232239e-01, 2.500002384185791e-01, 2.260756194591522e-01, 1.806382536888123e-01, 1.349905133247375e-01, 9.672701358795166e-02, 6.732277572154986e-02, 6.981958448886888e-02, 1.001490205526349e-01, 1.353989988565442e-01, 1.666379868984222e-01, 1.913481801748276e-01, 2.097030729055405e-01, 2.228026390075684e-01, 2.318963557481766e-01, 2.380823045969009e-01, 2.422253638505936e-01, 2.449663132429123e-01, 2.467616349458694e-01, 2.479279637336731e-01, 2.48680517077446e-01, 2.491632103919983e-01, 2.494711875915527e-01, 2.496666461229324e-01, 2.497903257608414e-01, 2.498685121536255e-01, 2.499177753925323e-01, 2.49948650598526e-01, 2.499679774045944e-01, 2.499800771474838e-01, 2.499876171350479e-01, 2.49992161989212e-01, 2.499947100877762e-01, 2.499959170818329e-01, 2.499964088201523e-01, 2.499973028898239e-01, 2.499983459711075e-01, 2.499992400407791e-01, 2.499997764825821e-01, 2.499998211860657e-01, 2.499996572732925e-01, 2.499987185001373e-01, 2.499978691339493e-01, 2.499979436397552e-01, 2.499983906745911e-01, 2.499992996454239e-01, 2.49999925494194e-01, 2.500002980232239e-01, 2.500002086162567e-01, 2.499999701976776e-01, 2.499997168779373e-01, 2.499997019767761e-01] +arr.m_flow_nominal=[1e+00, 1e+00] +cst.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.552700126325044e-14, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cst.bus.y1_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cst.fan.m_flow=[-0e+00, -0e+00, -0e+00, -0e+00, -0e+00, -0e+00, 7.949168980121613e-02, 2.773505151271822e-01, 4.599688649177551e-01, 6.130233407020569e-01, 7.305837273597717e-01, 8.163352608680725e-01, 8.767846822738647e-01, 9.183748960494995e-01, 9.464749097824097e-01, 9.651952385902405e-01, 9.775286316871643e-01, 9.855791330337524e-01, 9.907934069633484e-01, 9.94148850440979e-01, 9.962966442108154e-01, 9.976654648780823e-01, 9.985323548316956e-01, 9.990789294242859e-01, 9.994235038757324e-01, 9.99640166759491e-01, 9.997749328613281e-01, 9.998576045036316e-01, 9.999087452888489e-01, 9.99941349029541e-01, 9.999626874923706e-01, 9.999768137931824e-01, 9.999857544898987e-01, 9.999909400939941e-01, 9.999940395355225e-01, 9.999960064888e-01, 9.999971389770508e-01, 9.999980330467224e-01, 9.999986290931702e-01, 9.999991655349731e-01, 9.999995231628418e-01, 1e+00, 1.000000596046448e+00, 1.000000834465027e+00, 1.000000953674316e+00, 1.000001311302185e+00, 1.000001549720764e+00, 1.000001192092896e+00, 1.000001192092896e+00, 1.000001192092896e+00, 1.000000953674316e+00, 9.043024778366089e-01, 7.22553014755249e-01, 5.399620532989502e-01, 3.869080543518066e-01, 2.692911028861995e-01, 2.792783379554755e-01, 4.005960822105398e-01, 5.41595995426177e-01, 6.66551947593689e-01, 7.653927206993103e-01, 8.388122916221619e-01, 8.912105560302734e-01, 9.275854229927063e-01, 9.523292183876038e-01, 9.689014554023743e-01, 9.798652529716492e-01, 9.870465397834778e-01, 9.917118549346924e-01, 9.947220683097839e-01, 9.966528415679932e-01, 9.978847503662109e-01, 9.986665844917297e-01, 9.991613030433655e-01, 9.99474048614502e-01, 9.996711015701294e-01, 9.99794602394104e-01, 9.998719096183777e-01, 9.999203085899353e-01, 9.999504685401917e-01, 9.999686479568481e-01, 9.999788403511047e-01, 9.999836683273315e-01, 9.999856352806091e-01, 9.999892115592957e-01, 9.999933838844299e-01, 9.999969601631165e-01, 9.999991059303284e-01, 9.999992847442627e-01, 9.999986290931702e-01, 9.999948740005493e-01, 9.999914765357971e-01, 9.99991774559021e-01, 9.999935626983643e-01, 9.999971985816956e-01, 9.999997019767761e-01, 1.000001192092896e+00, 1.000000834465027e+00, 9.999998807907104e-01, 9.999988675117493e-01, 9.999988079071045e-01] +cst.m_flow_nominal=[1e+00, 1e+00] +var.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +var.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.552700126325044e-14, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +var.bus.y1_actual=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +var.fan.m_flow=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.949168980121613e-02, 2.773505151271822e-01, 4.599688649177551e-01, 6.130233407020569e-01, 7.305837273597717e-01, 8.163352608680725e-01, 8.767846822738647e-01, 9.183748960494995e-01, 9.464749097824097e-01, 9.651952385902405e-01, 9.775286316871643e-01, 9.855791330337524e-01, 9.907934069633484e-01, 9.94148850440979e-01, 9.962966442108154e-01, 9.976654648780823e-01, 9.985323548316956e-01, 9.990789294242859e-01, 9.994235038757324e-01, 9.99640166759491e-01, 9.997749328613281e-01, 9.998576045036316e-01, 9.999087452888489e-01, 9.99941349029541e-01, 9.999626874923706e-01, 9.999768137931824e-01, 9.999857544898987e-01, 9.999909400939941e-01, 9.999940395355225e-01, 9.999960064888e-01, 9.999971389770508e-01, 9.999980330467224e-01, 9.999986290931702e-01, 9.999991655349731e-01, 9.999995231628418e-01, 1e+00, 1.000000596046448e+00, 1.000000834465027e+00, 1.000000953674316e+00, 1.000001311302185e+00, 1.000001549720764e+00, 1.000001192092896e+00, 1.000001192092896e+00, 1.000001192092896e+00, 1.000000953674316e+00, 9.043024778366089e-01, 7.22553014755249e-01, 5.399620532989502e-01, 3.869080543518066e-01, 2.692911028861995e-01, 2.792783379554755e-01, 4.005960822105398e-01, 5.41595995426177e-01, 6.66551947593689e-01, 7.653927206993103e-01, 8.388122916221619e-01, 8.912105560302734e-01, 9.275854229927063e-01, 9.523292183876038e-01, 9.689014554023743e-01, 9.798652529716492e-01, 9.870465397834778e-01, 9.917118549346924e-01, 9.947220683097839e-01, 9.966528415679932e-01, 9.978847503662109e-01, 9.986665844917297e-01, 9.991613030433655e-01, 9.99474048614502e-01, 9.996711015701294e-01, 9.99794602394104e-01, 9.998719096183777e-01, 9.999203085899353e-01, 9.999504685401917e-01, 9.999686479568481e-01, 9.999788403511047e-01, 9.999836683273315e-01, 9.999856352806091e-01, 9.999892115592957e-01, 9.999933838844299e-01, 9.999969601631165e-01, 9.999991059303284e-01, 9.999992847442627e-01, 9.999986290931702e-01, 9.999948740005493e-01, 9.999914765357971e-01, 9.99991774559021e-01, 9.999935626983643e-01, 9.999971985816956e-01, 9.999997019767761e-01, 1.000001192092896e+00, 1.000000834465027e+00, 9.999998807907104e-01, 9.999988675117493e-01, 9.999988079071045e-01] +var.m_flow_nominal=[1e+00, 1e+00] +non.m_flow=[-0e+00, -0e+00] +non.m_flow_nominal=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Routing.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Routing.txt new file mode 100644 index 00000000000..40fb7cf994e --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Routing.txt @@ -0,0 +1,27 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +mulMul.ports_a[1].m_flow=[1e+00, 1e+00] +mulMul.ports_b[1].m_flow=[-1e+00, -1e+00] +mulMul.m_flow_nominal=[3e+00, 3e+00] +mulMulCom.ports_a[1].m_flow=[1e+00, 1e+00] +mulMulCom.ports_b[1].m_flow=[-1e+00, -1e+00] +mulMulCom.m_flow_nominal=[3e+00, 3e+00] +mulSin.ports_a[1].m_flow=[1e+00, 1e+00] +mulSin.port_b.m_flow=[-3e+00, -3e+00] +mulSin.m_flow_nominal=[3e+00, 3e+00] +sinMul.port_a.m_flow=[3e+00, 3e+00] +sinMul.ports_b[1].m_flow=[-1e+00, -1e+00] +sinMul.m_flow_nominal=[3e+00, 3e+00] +pas.port_a.m_flow=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Sensors.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Sensors.txt new file mode 100644 index 00000000000..4f36840016a --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Sensors.txt @@ -0,0 +1,24 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "0, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +dp.y=[1e+02, 1e+02] +dp.senRelPre.p_rel=[1e+02, 1e+02] +hum.y=[1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02] +hum.toDryAir.XiDry=[1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02, 1.01010100916028e-02] +ent.y=[4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04] +ent.senSpeEnt.h_out=[4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04, 4.53009453125e+04] +tem.y=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +tem.senTem.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +vol.y=[8.333333134651184e-01, 8.333333134651184e-01] +vol.senVolFlo.V_flow=[8.333333134651184e-01, 8.333333134651184e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Valves.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Valves.txt new file mode 100644 index 00000000000..1083559dd73 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_Components_Validation_Valves.txt @@ -0,0 +1,32 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 1", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "0, 0", + "number of continuous time states": "10", + "numerical Jacobians": "0" +} +time=[0e+00, 2e+02] +modThr.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +modThr.bus.y_actual=[1e+00, 8.790805339813232e-01, 7.75789737701416e-01, 6.905837059020996e-01, 6.235478520393372e-01, 5.744723677635193e-01, 5.424033999443054e-01, 5.244083404541016e-01, 5.175338983535767e-01, 5.193436145782471e-01, 5.278277397155762e-01, 5.413409471511841e-01, 5.585353970527649e-01, 5.783171653747559e-01, 5.998072624206543e-01, 6.222983002662659e-01, 6.452284455299377e-01, 6.681598424911499e-01, 6.90754771232605e-01, 7.127569317817688e-01, 7.339764833450317e-01, 7.542782425880432e-01, 7.735719680786133e-01, 7.918034195899963e-01, 8.089463710784912e-01, 8.24996292591095e-01, 8.399657607078552e-01, 8.538803458213806e-01, 8.667755126953125e-01, 8.786937594413757e-01, 8.896821141242981e-01, 8.997906446456909e-01, 9.090710282325745e-01, 9.175752401351929e-01, 9.253550171852112e-01, 9.324610233306885e-01, 9.389421343803406e-01, 9.448452591896057e-01, 9.502153396606445e-01, 9.550943374633789e-01, 9.595224857330322e-01, 9.635372757911682e-01, 9.671738147735596e-01, 9.704648852348328e-01, 9.734407663345337e-01, 9.76129412651062e-01, 9.785568118095398e-01, 9.807466268539429e-01, 9.827207922935486e-01, 9.844993948936462e-01, 9.861008524894714e-01, 9.875419139862061e-01, 9.888378977775574e-01, 9.900028109550476e-01, 9.910493493080139e-01, 9.919890761375427e-01, 9.928312301635742e-01, 9.935880303382874e-01, 9.942691922187805e-01, 9.948804378509521e-01, 9.954280853271484e-01, 9.959183931350708e-01, 9.963571429252625e-01, 9.967495799064636e-01, 9.971005320549011e-01, 9.974144697189331e-01, 9.976950883865356e-01, 9.979456663131714e-01, 9.981694221496582e-01, 9.983690977096558e-01, 9.985473155975342e-01, 9.987063407897949e-01, 9.988481998443604e-01, 9.989748597145081e-01, 9.990876913070679e-01, 9.991881251335144e-01, 9.992773532867432e-01, 9.993565678596497e-01, 9.994270801544189e-01, 9.994898438453674e-01, 9.995457530021667e-01, 9.995948672294617e-01, 9.996384382247925e-01, 9.996775388717651e-01, 9.997124671936035e-01, 9.997427463531494e-01, 9.997698664665222e-01, 9.997944831848145e-01, 9.998165369033813e-01, 9.99835729598999e-01, 9.998529553413391e-01, 9.998687505722046e-01, 9.998828172683716e-01, 9.998951554298401e-01, 9.999062418937683e-01, 9.999164342880249e-01, 9.99925434589386e-01, 9.999333620071411e-01, 9.999405145645142e-01, 9.999470114707947e-01, 9.999527931213379e-01] +modThr.val.res1.m_flow=[1e+00, 7.478956580162048e-01, 5.431653261184692e-01, 4.039646685123444e-01, 3.160865902900696e-01, 2.6297527551651e-01, 2.328645288944244e-01, 2.174226939678192e-01, 2.117845416069031e-01, 2.132551372051239e-01, 2.202800661325455e-01, 2.319246679544449e-01, 2.475828230381012e-01, 2.668196856975555e-01, 2.892798781394959e-01, 3.146217465400696e-01, 3.424874246120453e-01, 3.724910914897919e-01, 4.042130410671234e-01, 4.37204122543335e-01, 4.709984362125397e-01, 5.051311850547791e-01, 5.391577482223511e-01, 5.726704001426697e-01, 6.053106784820557e-01, 6.367780566215515e-01, 6.668346524238586e-01, 6.95305347442627e-01, 7.220747470855714e-01, 7.470805644989013e-01, 7.703055739402771e-01, 7.9176926612854e-01, 8.115200400352478e-01, 8.296274542808533e-01, 8.461759090423584e-01, 8.612590432167053e-01, 8.749752044677734e-01, 8.874235153198242e-01, 8.9870285987854e-01, 9.089075922966003e-01, 9.181292653083801e-01, 9.264537692070007e-01, 9.339617490768433e-01, 9.407281279563904e-01, 9.468219876289368e-01, 9.523068070411682e-01, 9.572407603263855e-01, 9.616768956184387e-01, 9.656635522842407e-01, 9.692448377609253e-01, 9.724606275558472e-01, 9.753472208976746e-01, 9.779372811317444e-01, 9.802605509757996e-01, 9.823436737060547e-01, 9.842110276222229e-01, 9.858818054199219e-01, 9.873811006546021e-01, 9.887288212776184e-01, 9.899367690086365e-01, 9.910178780555725e-01, 9.919848442077637e-01, 9.928494095802307e-01, 9.936221241950989e-01, 9.943126440048218e-01, 9.949300289154053e-01, 9.954814910888672e-01, 9.959737062454224e-01, 9.964129328727722e-01, 9.968048930168152e-01, 9.971544742584229e-01, 9.974663257598877e-01, 9.977445602416992e-01, 9.979928135871887e-01, 9.982139468193054e-01, 9.984107613563538e-01, 9.985854625701904e-01, 9.987406730651855e-01, 9.988787174224854e-01, 9.990016222000122e-01, 9.991111159324646e-01, 9.992071986198425e-01, 9.992925524711609e-01, 9.993690252304077e-01, 9.994373917579651e-01, 9.994966983795166e-01, 9.995497465133667e-01, 9.995979070663452e-01, 9.996411204338074e-01, 9.996786117553711e-01, 9.99712347984314e-01, 9.997431635856628e-01, 9.997707605361938e-01, 9.997949004173279e-01, 9.998166561126709e-01, 9.998365044593811e-01, 9.998541474342346e-01, 9.998696446418762e-01, 9.998836517333984e-01, 9.998964071273804e-01, 9.999076128005981e-01] +modThr.val.res3.m_flow=[6.890625172673026e-07, 1.193637475371361e-01, 2.193467170000076e-01, 2.994289398193359e-01, 3.604223132133484e-01, 4.037711620330811e-01, 4.314523637294769e-01, 4.467516839504242e-01, 4.525510370731354e-01, 4.510267972946167e-01, 4.438576996326447e-01, 4.323604106903076e-01, 4.175933301448822e-01, 4.004174768924713e-01, 3.815376758575439e-01, 3.61540287733078e-01, 3.409108817577362e-01, 3.200467228889465e-01, 2.992708384990692e-01, 2.788430750370026e-01, 2.589682936668396e-01, 2.3980313539505e-01, 2.214624583721161e-01, 2.04025536775589e-01, 1.875424087047577e-01, 1.720392107963562e-01, 1.575226038694382e-01, 1.439834982156754e-01, 1.314004063606262e-01, 1.197425127029419e-01, 1.089722588658333e-01, 9.904742985963821e-02, 8.992274850606918e-02, 8.155123889446259e-02, 7.388529926538467e-02, 6.68775886297226e-02, 6.048174574971199e-02, 5.465309321880341e-02, 4.934831708669662e-02, 4.452682286500931e-02, 4.014949128031731e-02, 3.61798107624054e-02, 3.258334845304489e-02, 2.932803519070148e-02, 2.638410031795502e-02, 2.372395247220993e-02, 2.132214047014713e-02, 1.914536394178867e-02, 1.694334298372269e-02, 1.46173695102334e-02, 1.233547739684582e-02, 1.024242118000984e-02, 8.409201167523861e-03, 6.85128616169095e-03, 5.553211085498333e-03, 4.485352430492633e-03, 3.615588182583446e-03, 2.908821450546389e-03, 2.335723023861651e-03, 1.873545232228935e-03, 1.501979422755539e-03, 1.203765044920146e-03, 9.64670383837074e-04, 7.731062942184508e-04, 6.19694881606847e-04, 4.96787833981216e-04, 3.984138311352581e-04, 3.197231271769851e-04, 2.567714836914092e-04, 2.064020081888884e-04, 1.660893321968615e-04, 1.33814275613986e-04, 1.079520297935233e-04, 8.721649646759033e-05, 7.059859490254894e-05, 5.728293035645038e-05, 4.662464198190719e-05, 3.807695247814991e-05, 3.119910979876295e-05, 2.565041177149396e-05, 2.116277937602717e-05, 1.75803779711714e-05, 1.467766014684457e-05, 1.229715689987643e-05, 1.034718752634944e-05, 8.793457709543873e-06, 7.509706847486086e-06, 6.431636393244844e-06, 5.535592663363786e-06, 4.812643510376802e-06, 4.204769538773689e-06, 3.685337787828757e-06, 3.249673682148568e-06, 2.891388476200518e-06, 2.586127720860532e-06, 2.322361069673207e-06, 2.099657876897254e-06, 1.912955212901579e-06, 1.752237949403934e-06, 1.612197706890584e-06, 1.493271042818378e-06] +modThr.val.m_flow_nominal=[1e+00, 1e+00] +modTwo.bus.y=[0e+00, 2.000000029802322e-01, 4.000000059604645e-01, 6.000000238418579e-01, 8.00000011920929e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +modTwo.bus.y_actual=[1e+00, 8.790805339813232e-01, 7.75789737701416e-01, 6.905837059020996e-01, 6.235478520393372e-01, 5.744723677635193e-01, 5.424033999443054e-01, 5.244083404541016e-01, 5.175338983535767e-01, 5.193436145782471e-01, 5.278277397155762e-01, 5.413409471511841e-01, 5.585353970527649e-01, 5.783171653747559e-01, 5.998072624206543e-01, 6.222983002662659e-01, 6.452284455299377e-01, 6.681598424911499e-01, 6.90754771232605e-01, 7.127569317817688e-01, 7.339764833450317e-01, 7.542782425880432e-01, 7.735719680786133e-01, 7.918034195899963e-01, 8.089463710784912e-01, 8.24996292591095e-01, 8.399657607078552e-01, 8.538803458213806e-01, 8.667755126953125e-01, 8.786937594413757e-01, 8.896821141242981e-01, 8.997906446456909e-01, 9.090710282325745e-01, 9.175752401351929e-01, 9.253550171852112e-01, 9.324610233306885e-01, 9.389421343803406e-01, 9.448452591896057e-01, 9.502153396606445e-01, 9.550943374633789e-01, 9.595224857330322e-01, 9.635372757911682e-01, 9.671738147735596e-01, 9.704648852348328e-01, 9.734407663345337e-01, 9.76129412651062e-01, 9.785568118095398e-01, 9.807466268539429e-01, 9.827207922935486e-01, 9.844993948936462e-01, 9.861008524894714e-01, 9.875419139862061e-01, 9.888378977775574e-01, 9.900028109550476e-01, 9.910493493080139e-01, 9.919890761375427e-01, 9.928312301635742e-01, 9.935880303382874e-01, 9.942691922187805e-01, 9.948804378509521e-01, 9.954280853271484e-01, 9.959183931350708e-01, 9.963571429252625e-01, 9.967495799064636e-01, 9.971005320549011e-01, 9.974144697189331e-01, 9.976950883865356e-01, 9.979456663131714e-01, 9.981694221496582e-01, 9.983690977096558e-01, 9.985473155975342e-01, 9.987063407897949e-01, 9.988481998443604e-01, 9.989748597145081e-01, 9.990876913070679e-01, 9.991881251335144e-01, 9.992773532867432e-01, 9.993565678596497e-01, 9.994270801544189e-01, 9.994898438453674e-01, 9.995457530021667e-01, 9.995948672294617e-01, 9.996384382247925e-01, 9.996775388717651e-01, 9.997124671936035e-01, 9.997427463531494e-01, 9.997698664665222e-01, 9.997944831848145e-01, 9.998165369033813e-01, 9.99835729598999e-01, 9.998529553413391e-01, 9.998687505722046e-01, 9.998828172683716e-01, 9.998951554298401e-01, 9.999062418937683e-01, 9.999164342880249e-01, 9.99925434589386e-01, 9.999333620071411e-01, 9.999405145645142e-01, 9.999470114707947e-01, 9.999527931213379e-01] +modTwo.val.m_flow=[1e+00, 7.478956580162048e-01, 5.431653261184692e-01, 4.039646685123444e-01, 3.160865902900696e-01, 2.6297527551651e-01, 2.328645288944244e-01, 2.174226939678192e-01, 2.117845416069031e-01, 2.132551372051239e-01, 2.202800661325455e-01, 2.319246679544449e-01, 2.475828230381012e-01, 2.668196856975555e-01, 2.892798781394959e-01, 3.146217465400696e-01, 3.424874246120453e-01, 3.724910914897919e-01, 4.042130410671234e-01, 4.37204122543335e-01, 4.709984362125397e-01, 5.051311850547791e-01, 5.391577482223511e-01, 5.726704001426697e-01, 6.053106784820557e-01, 6.367780566215515e-01, 6.668346524238586e-01, 6.95305347442627e-01, 7.220747470855714e-01, 7.470805644989013e-01, 7.703055739402771e-01, 7.9176926612854e-01, 8.115200400352478e-01, 8.296274542808533e-01, 8.461759090423584e-01, 8.612590432167053e-01, 8.749752044677734e-01, 8.874235153198242e-01, 8.9870285987854e-01, 9.089075922966003e-01, 9.181292653083801e-01, 9.264537692070007e-01, 9.339617490768433e-01, 9.407281279563904e-01, 9.468219876289368e-01, 9.523068070411682e-01, 9.572407603263855e-01, 9.616768956184387e-01, 9.656635522842407e-01, 9.692448377609253e-01, 9.724606275558472e-01, 9.753472208976746e-01, 9.779372811317444e-01, 9.802605509757996e-01, 9.823436737060547e-01, 9.842110276222229e-01, 9.858818054199219e-01, 9.873811006546021e-01, 9.887288212776184e-01, 9.899367690086365e-01, 9.910178780555725e-01, 9.919848442077637e-01, 9.928494095802307e-01, 9.936221241950989e-01, 9.943126440048218e-01, 9.949300289154053e-01, 9.954814910888672e-01, 9.959737062454224e-01, 9.964129328727722e-01, 9.968048930168152e-01, 9.971544742584229e-01, 9.974663257598877e-01, 9.977445602416992e-01, 9.979928135871887e-01, 9.982139468193054e-01, 9.984107613563538e-01, 9.985854625701904e-01, 9.987406730651855e-01, 9.988787174224854e-01, 9.990016222000122e-01, 9.991111159324646e-01, 9.992071986198425e-01, 9.992925524711609e-01, 9.993690252304077e-01, 9.994373917579651e-01, 9.994966983795166e-01, 9.995497465133667e-01, 9.995979070663452e-01, 9.996411204338074e-01, 9.996786117553711e-01, 9.99712347984314e-01, 9.997431635856628e-01, 9.997707605361938e-01, 9.997949004173279e-01, 9.998166561126709e-01, 9.998365044593811e-01, 9.998541474342346e-01, 9.998696446418762e-01, 9.998836517333984e-01, 9.998964071273804e-01, 9.999076128005981e-01] +modTwo.val.m_flow_nominal=[1e+00, 1e+00] +twoThr.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +twoThr.bus.y1_actual=[1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +twoThr.val.res1.m_flow=[1e+00, 9.334071278572083e-01, 8.641188740730286e-01, 7.937407493591309e-01, 7.238484621047974e-01, 6.558513045310974e-01, 5.990045070648193e-01, 5.611834526062012e-01, 5.403614044189453e-01, 5.337616801261902e-01, 5.384514927864075e-01, 5.516812205314636e-01, 5.710247159004211e-01, 5.944427847862244e-01, 6.202890276908875e-01, 6.472693681716919e-01, 6.744058132171631e-01, 7.009925842285156e-01, 7.265428900718689e-01, 7.507414221763611e-01, 7.734041810035706e-01, 7.944455146789551e-01, 8.138507604598999e-01, 8.3165442943573e-01, 8.47922682762146e-01, 8.62740695476532e-01, 8.762041330337524e-01, 8.884129524230957e-01, 8.994673490524292e-01, 9.094646573066711e-01, 9.184974431991577e-01, 9.266527891159058e-01, 9.340115189552307e-01, 9.406481385231018e-01, 9.466312527656555e-01, 9.52023446559906e-01, 9.568816423416138e-01, 9.612573981285095e-01, 9.651978015899658e-01, 9.687449932098389e-01, 9.719375371932983e-01, 9.748102426528931e-01, 9.773945212364197e-01, 9.797188639640808e-01, 9.818089008331299e-01, 9.836878180503845e-01, 9.853765368461609e-01, 9.868937730789185e-01, 9.882566928863525e-01, 9.894806742668152e-01, 9.905794858932495e-01, 9.915657043457031e-01, 9.924506545066833e-01, 9.93244469165802e-01, 9.939562678337097e-01, 9.945944547653198e-01, 9.951655268669128e-01, 9.956780672073364e-01, 9.96138870716095e-01, 9.965519905090332e-01, 9.969218373298645e-01, 9.972526431083679e-01, 9.97548520565033e-01, 9.978130459785461e-01, 9.980494379997253e-01, 9.982608556747437e-01, 9.984497427940369e-01, 9.986183643341064e-01, 9.987688660621643e-01, 9.98903214931488e-01, 9.990230798721313e-01, 9.991300106048584e-01, 9.992254376411438e-01, 9.993105530738831e-01, 9.993864297866821e-01, 9.994539618492126e-01, 9.995139241218567e-01, 9.995672106742859e-01, 9.996145963668823e-01, 9.996567964553833e-01, 9.996944069862366e-01, 9.997274279594421e-01, 9.997566938400269e-01, 9.997829794883728e-01, 9.998065233230591e-01, 9.998268485069275e-01, 9.998450875282288e-01, 9.998616576194763e-01, 9.998764991760254e-01, 9.998894333839417e-01, 9.999009966850281e-01, 9.999116063117981e-01, 9.999211430549622e-01, 9.999294281005859e-01, 9.999368786811829e-01, 9.99943733215332e-01, 9.999498128890991e-01, 9.999551177024841e-01, 9.999599456787109e-01, 9.999643564224243e-01, 9.999681711196899e-01] +twoThr.val.res3.m_flow=[6.890625172673026e-07, 1.198841780424118e-01, 2.231033891439438e-01, 3.109214603900909e-01, 3.851138949394226e-01, 4.476020634174347e-01, 4.939699172973633e-01, 5.223386883735657e-01, 5.372079610824585e-01, 5.418171286582947e-01, 5.385468602180481e-01, 5.291871428489685e-01, 5.151311755180359e-01, 4.974899291992188e-01, 4.771665334701538e-01, 4.5491623878479e-01, 4.31374192237854e-01, 4.070723056793213e-01, 3.824562728404999e-01, 3.578976094722748e-01, 3.337014615535736e-01, 3.101129233837128e-01, 2.873226702213287e-01, 2.654735743999481e-01, 2.446677535772324e-01, 2.249727100133896e-01, 2.064268738031387e-01, 1.89044177532196e-01, 1.728186905384063e-01, 1.577288061380387e-01, 1.437410265207291e-01, 1.308130621910095e-01, 1.188962981104851e-01, 1.079378724098206e-01, 9.788243472576141e-02, 8.867353945970535e-02, 8.02549347281456e-02, 7.257163524627686e-02, 6.556963175535202e-02, 5.919793993234634e-02, 5.340693145990372e-02, 4.815004020929337e-02, 4.338307306170464e-02, 3.90646792948246e-02, 3.515634685754776e-02, 3.162223845720291e-02, 2.842921949923038e-02, 2.554667368531227e-02, 2.294631861150265e-02, 2.060218900442123e-02, 1.844007149338722e-02, 1.6168013215065e-02, 1.38202840462327e-02, 1.157632656395435e-02, 9.557577781379223e-03, 7.813064381480207e-03, 6.34667742997407e-03, 5.130770150572069e-03, 4.131928551942117e-03, 3.319656709209085e-03, 2.663156250491738e-03, 2.13450170122087e-03, 1.709797070361674e-03, 1.369136269204319e-03, 1.096180407330394e-03, 8.774817106314003e-04, 7.024799706414342e-04, 5.625657504424453e-04, 4.507200210355222e-04, 3.613155276980251e-04, 2.898461534641683e-04, 2.327065012650564e-04, 1.869945117505267e-04, 1.504124666098505e-04, 1.211568887811154e-04, 9.777071682037786e-05, 7.910146814538166e-05, 6.417348049581051e-05, 5.22012596775312e-05, 4.257765613147058e-05, 3.482537067611702e-05, 2.86630693153711e-05, 2.369305366300978e-05, 1.963780778169166e-05, 1.633408646739554e-05, 1.371636517433217e-05, 1.156656890088925e-05, 9.772977136890404e-06, 8.292442544188816e-06, 7.106150405888911e-06, 6.115966243669391e-06, 5.276376668916782e-06, 4.577760137181031e-06, 4.007757979707094e-06, 3.526047066770843e-06, 3.113284265054972e-06, 2.767686510196654e-06, 2.480327566445339e-06, 2.234978865089943e-06, 2.022936314460821e-06, 1.844291773522855e-06] +twoThr.val.m_flow_nominal=[1e+00, 1e+00] +twoTwo.bus.y1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +twoTwo.bus.y1_actual=[1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +twoTwo.val.m_flow=[1.001071691513062e+00, 9.349798560142517e-01, 8.00357460975647e-01, 6.45935595035553e-01, 5.058907866477966e-01, 3.951599597930908e-01, 3.223147094249725e-01, 2.823455333709717e-01, 2.627753615379333e-01, 2.568937540054321e-01, 2.610580623149872e-01, 2.732172906398773e-01, 2.921682894229889e-01, 3.171637654304504e-01, 3.47653090953827e-01, 3.830720186233521e-01, 4.227124452590942e-01, 4.656658470630646e-01, 5.108307600021362e-01, 5.569853782653809e-01, 6.028996706008911e-01, 6.474525332450867e-01, 6.897236108779907e-01, 7.290413975715637e-01, 7.649884819984436e-01, 7.973755598068237e-01, 8.261974453926086e-01, 8.515849709510803e-01, 8.737584948539735e-01, 8.929892778396605e-01, 9.09570574760437e-01, 9.23797070980072e-01, 9.359520077705383e-01, 9.462994337081909e-01, 9.550801515579224e-01, 9.625104665756226e-01, 9.687820672988892e-01, 9.740632176399231e-01, 9.785012602806091e-01, 9.822232723236084e-01, 9.853395819664001e-01, 9.879447221755981e-01, 9.901195764541626e-01, 9.919331669807434e-01, 9.934440851211548e-01, 9.947018623352051e-01, 9.957482814788818e-01, 9.966186285018921e-01, 9.973423480987549e-01, 9.97944176197052e-01, 9.984449148178101e-01, 9.988616704940796e-01, 9.992088675498962e-01, 9.994983077049255e-01, 9.997400045394897e-01, 9.999420046806335e-01, 1.000110864639282e+00, 1.000252842903137e+00, 1.000372529029846e+00, 1.000473380088806e+00, 1.000558495521545e+00, 1.000630497932434e+00, 1.000691533088684e+00, 1.000743269920349e+00, 1.000787496566772e+00, 1.000825166702271e+00, 1.000857472419739e+00, 1.000885128974915e+00, 1.000908970832825e+00, 1.000929474830627e+00, 1.000947237014771e+00, 1.000962615013123e+00, 1.000975966453552e+00, 1.000987648963928e+00, 1.00099778175354e+00, 1.001006603240967e+00, 1.001014351844788e+00, 1.001021027565002e+00, 1.00102698802948e+00, 1.001032114028931e+00, 1.001036643981934e+00, 1.001040577888489e+00, 1.001044034957886e+00, 1.001047134399414e+00, 1.001049876213074e+00, 1.001052260398865e+00, 1.001054406166077e+00, 1.00105619430542e+00, 1.001057982444763e+00, 1.001059412956238e+00, 1.001060724258423e+00, 1.001061916351318e+00, 1.001062989234924e+00, 1.001063823699951e+00, 1.001064658164978e+00, 1.001065492630005e+00, 1.001066088676453e+00, 1.0010666847229e+00, 1.001067280769348e+00, 1.001067757606506e+00, 1.001068115234375e+00] +twoTwo.val.m_flow_nominal=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnly.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnly.txt new file mode 100644 index 00000000000..01cb58950b7 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnly.txt @@ -0,0 +1,15 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +VAVBox_1.damVAV.m_flow=[1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01, 1.52911439538002e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnlyControlG36.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnlyControlG36.txt new file mode 100644 index 00000000000..7a7e3764744 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxCoolingOnlyControlG36.txt @@ -0,0 +1,18 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +VAVBox_1.bus.TAirSup=[2.881499938964844e+02, 2.881499938964844e+02] +VAVBox_1.bus.TAirDis=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAVBox_1.bus.TZon=[3.031499938964844e+02, 3.031499938964844e+02] +VAVBox_1.damVAV.m_flow=[1.52911439538002e-01, 6.630999967455864e-03, 1.109313406050205e-02, 1.497852057218552e-02, 1.827635802328587e-02, 2.174478769302368e-02, 2.541116252541542e-02, 2.926483750343323e-02, 3.331105411052704e-02, 3.755940124392509e-02, 4.19941321015358e-02, 4.656396061182022e-02, 5.122861638665199e-02, 5.592766031622887e-02, 6.059535965323449e-02, 6.52245357632637e-02, 6.979543715715408e-02, 7.42269828915596e-02, 7.736549526453018e-02, 8.010240644216537e-02, 8.27019140124321e-02, 8.5137739777565e-02, 8.742186427116394e-02, 8.956070989370346e-02, 9.156154841184616e-02, 9.343422949314117e-02, 9.518521279096603e-02, 9.682107716798782e-02, 9.835001826286316e-02, 9.977896511554718e-02, 1.011137217283249e-01, 1.023596748709679e-01, 1.035242527723312e-01, 1.046120896935463e-01, 1.056274026632309e-01, 1.065762639045715e-01, 1.074628531932831e-01, 1.082905828952789e-01, 1.090639680624008e-01, 1.097868084907532e-01, 1.104622855782509e-01, 1.110928058624268e-01, 1.116825714707375e-01, 1.12233929336071e-01, 1.127487123012543e-01, 1.132302358746529e-01, 1.13680474460125e-01, 1.141011342406273e-01, 1.144946292042732e-01, 1.14862747490406e-01, 1.152070388197899e-01, 1.155286505818367e-01, 1.158298403024673e-01, 1.161116063594818e-01, 1.163748949766159e-01, 1.166214495897293e-01, 1.168522164225578e-01, 1.17067925632e-01, 1.17269828915596e-01, 1.174589246511459e-01, 1.176359206438065e-01, 1.178012192249298e-01, 1.179562211036682e-01, 1.181013435125351e-01, 1.182369366288185e-01, 1.183640137314796e-01, 1.184830665588379e-01, 1.185943484306335e-01, 1.186985373497009e-01, 1.187962293624878e-01, 1.188877373933792e-01, 1.189730986952782e-01, 1.190532445907593e-01, 1.191283389925957e-01, 1.191984713077545e-01, 1.192642152309418e-01, 1.193259060382843e-01, 1.193835139274597e-01, 1.194374486804008e-01, 1.194880753755569e-01, 1.195355430245399e-01, 1.195797398686409e-01, 1.196212619543076e-01, 1.196602955460548e-01, 1.196966469287872e-01, 1.197307258844376e-01, 1.197627484798431e-01, 1.197926998138428e-01, 1.198206543922424e-01, 1.198468953371048e-01, 1.198716089129448e-01, 1.198945119976997e-01, 1.19916059076786e-01, 1.199363023042679e-01, 1.199551820755005e-01, 1.199728697538376e-01, 1.199894621968269e-01, 1.200050190091133e-01, 1.200195178389549e-01, 1.200331449508667e-01, 1.200459450483322e-01] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheatControlG36.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheatControlG36.txt new file mode 100644 index 00000000000..018a92e8f27 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Templates_ZoneEquipment_Validation_VAVBoxReheatControlG36.txt @@ -0,0 +1,18 @@ +last-generated=2023-05-24 +statistics-initialization= +{ + "nonlinear": "1, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": " ", + "nonlinear": "1, 0", + "number of continuous time states": "9", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +VAVBox_1.bus.TAirSup=[2.881499938964844e+02, 2.881499938964844e+02] +VAVBox_1.bus.TAirDis=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +VAVBox_1.bus.TZon=[3.031499938964844e+02, 3.031499938964844e+02] +VAVBox_1.damVAV.m_flow=[1.52911439538002e-01, 7.93386809527874e-03, 1.822215504944324e-02, 2.834273315966129e-02, 3.308305144309998e-02, 3.728657588362694e-02, 4.162502661347389e-02, 4.594834521412849e-02, 5.020522326231003e-02, 5.435183271765709e-02, 5.832608789205551e-02, 6.212321668863297e-02, 6.573684513568878e-02, 6.916320323944092e-02, 7.24029466509819e-02, 7.54595547914505e-02, 7.833714783191681e-02, 8.104180544614792e-02, 8.358154445886612e-02, 8.596255630254745e-02, 8.819428831338882e-02, 9.028284996747971e-02, 9.223799407482147e-02, 9.406661242246628e-02, 9.577523916959763e-02, 9.73728820681572e-02, 9.886585921049118e-02, 1.00259967148304e-01, 1.015625447034836e-01, 1.027794629335403e-01, 1.039159819483757e-01, 1.049769595265388e-01, 1.05968676507473e-01, 1.068950518965721e-01, 1.077597215771675e-01, 1.085681021213531e-01, 1.093234270811081e-01, 1.100285202264786e-01, 1.106877624988556e-01, 1.113040596246719e-01, 1.118801385164261e-01, 1.124177575111389e-01, 1.129210144281387e-01, 1.133916079998016e-01, 1.138308420777321e-01, 1.142420470714569e-01, 1.146267727017403e-01, 1.149860993027687e-01, 1.15322157740593e-01, 1.15636944770813e-01, 1.15931548178196e-01, 1.162061914801598e-01, 1.164638921618462e-01, 1.16705060005188e-01, 1.169300377368927e-01, 1.171408221125603e-01, 1.173382699489594e-01, 1.175227910280228e-01, 1.176954135298729e-01, 1.178572475910187e-01, 1.180087924003601e-01, 1.181500405073166e-01, 1.182826533913612e-01, 1.18407279253006e-01, 1.185232773423195e-01, 1.186320036649704e-01, 1.187340244650841e-01, 1.188293620944023e-01, 1.189184486865997e-01, 1.190020442008972e-01, 1.19080550968647e-01, 1.191534548997879e-01, 1.192220598459244e-01, 1.192863956093788e-01, 1.193464025855064e-01, 1.19402676820755e-01, 1.19455486536026e-01, 1.195048391819e-01, 1.195509284734726e-01, 1.195942759513855e-01, 1.196349263191223e-01, 1.196726560592651e-01, 1.197082176804543e-01, 1.197416260838509e-01, 1.197725087404251e-01, 1.198015585541725e-01, 1.198289096355438e-01, 1.198545023798943e-01, 1.198781579732895e-01, 1.199006289243698e-01, 1.199217513203621e-01, 1.199411749839783e-01, 1.199595928192139e-01, 1.199769303202629e-01, 1.199930459260941e-01, 1.2000822275877e-01, 1.200225129723549e-01, 1.200358793139458e-01, 1.200481578707695e-01, 1.200598850846291e-01, 1.200709044933319e-01] diff --git a/Buildings/Resources/Scripts/BuildingsPy/conf.yml b/Buildings/Resources/Scripts/BuildingsPy/conf.yml index df2a9b96750..282db9a2ac9 100644 --- a/Buildings/Resources/Scripts/BuildingsPy/conf.yml +++ b/Buildings/Resources/Scripts/BuildingsPy/conf.yml @@ -270,6 +270,18 @@ optimica: comment: See https://github.com/lbl-srg/modelica-buildings/issues/2235 translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow + optimica: + comment: > + Array size mismatch in modification of the attribute quantity for the variable TZon. + This is a bug in OCT tracked under Modelon#2023022839000276. + translate: false +- model_name: Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure + optimica: + comment: > + Array size mismatch in modification of the attribute quantity for the variable TZon. + This is a bug in OCT tracked under Modelon#2023022839000276. + translate: false - model_name: Buildings.ThermalZones.Detailed.Examples.FFD.ForcedConvection optimica: comment: See https://github.com/lbl-srg/modelica-buildings/issues/2231 diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZBase.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZBase.mos new file mode 100644 index 00000000000..e3d38f620d9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZBase.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZBase", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZBase"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mos new file mode 100644 index 00000000000..ab6d9d37a77 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilElectricHeating", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZCoilElectricHeating"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mos new file mode 100644 index 00000000000..dff6a331204 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorMultiStage", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZCoilEvaporatorMultiStage"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mos new file mode 100644 index 00000000000..eb46e31a5de --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorVariable", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZCoilEvaporatorVariable"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mos new file mode 100644 index 00000000000..0e4dcc654e5 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilWaterHeating3WVReheat", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZCoilWaterHeating3WVReheat"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mos new file mode 100644 index 00000000000..288d1e302e1 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow", + method="cvode", + tolerance=1e-6, + stopTime=10000, + resultFile="VAVMZControlG36Airflow"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mos new file mode 100644 index 00000000000..0abf6c30e03 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure", + method="cvode", + tolerance=1e-6, + stopTime=10000, + resultFile="VAVMZControlG36Pressure"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mos new file mode 100644 index 00000000000..82467d81e47 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZDedicatedDampersPressure", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZDedicatedDampersPressure"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mos new file mode 100644 index 00000000000..da6ed92788c --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZFanRelief", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZFanRelief"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mos b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mos new file mode 100644 index 00000000000..723a342e506 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.AirHandlersFans.Validation.VAVMZFanSupplyBlowThrough", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVMZFanSupplyBlowThrough"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAV_1.bus.TAirSup", "VAV_1.bus.TAirMix", "VAV_1.bus.TOut"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAV_1.bus.fanSup.V_flow", "VAV_1.bus.VOut_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Coils.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Coils.mos new file mode 100644 index 00000000000..d9d91b7124b --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Coils.mos @@ -0,0 +1,88 @@ +simulateModel("Buildings.Templates.Components.Validation.Coils", + method="cvode", + tolerance=1e-6, + stopTime=200.0, + resultFile="Coils"); +createPlot( + id=1, + subPlot=1, + position={0, 0, 400, 400}, + y={"coiCoo.bus.y", "coiCoo.bus.y_actual", "coiCoo.hex.m1_flow", "coiCoo.hex.m2_flow", "coiCoo.hex.m1_flow_nominal", "coiCoo.hex.m2_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"coiCoo.hex.Q2_flow", "coiCoo.Q_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=2, + subPlot=1, + position={0, 100, 400, 400}, + y={"coiHea.bus.y", "coiHea.bus.y_actual", "coiHea.hex.m1_flow", "coiHea.hex.m2_flow", "coiHea.hex.m1_flow_nominal", "coiHea.hex.m2_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=2, + subPlot=2, + y={"coiHea.hex.Q2_flow", "coiHea.Q_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=3, + subPlot=1, + position={100, 0, 400, 400}, + y={"coiEle.bus.y", "coiEle.hex.m_flow", "coiEle.hex.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=3, + subPlot=2, + y={"coiEle.hex.Q_flow", "coiEle.Q_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=4, + subPlot=1, + position={200, 0, 400, 400}, + y={"coiEva.bus.y", "coiEva.hex.m_flow", "coiEva.hex.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=4, + subPlot=2, + y={"coiEva.hex.QSen_flow", "coiEva.hex.QLat_flow", "coiEva.Q_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=5, + subPlot=1, + position={200, 100, 400, 400}, + y={"coiMul.bus.y", "coiMul.hex.m_flow", "coiMul.hex.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=5, + subPlot=2, + y={"coiMul.hex.QSen_flow", "coiMul.hex.QLat_flow", "coiMul.Q_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=6, + subPlot=1, + position={300, 0, 400, 400}, + y={"non.m_flow", "non.m_flow_nominal"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Dampers.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Dampers.mos new file mode 100644 index 00000000000..17d28c65fd5 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Dampers.mos @@ -0,0 +1,33 @@ +simulateModel("Buildings.Templates.Components.Validation.Dampers", + method="cvode", + tolerance=1e-6, + stopTime=200.0, + resultFile="Dampers"); +createPlot( + id=1, + position={0, 0, 400, 400}, + y={"mod.bus.y", "mod.bus.y_actual", "mod.dam.m_flow", "mod.dam.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=2, + position={100, 0, 400, 400}, + y={"pre.bus.y", "pre.bus.y_actual", "pre.dam.m_flow", "pre.dam.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=3, + position={200, 0, 400, 400}, + y={"two.bus.y1", "two.bus.y1_actual", "two.dam.m_flow", "two.dam.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=4, + position={300, 0, 400, 400}, + y={"non.m_flow", "non.m_flow_nominal"}, + autoscale=true, + grid=true +); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Fans.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Fans.mos new file mode 100644 index 00000000000..116124d4d16 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Fans.mos @@ -0,0 +1,33 @@ +simulateModel("Buildings.Templates.Components.Validation.Fans", + method="cvode", + tolerance=1e-6, + stopTime=200.0, + resultFile="Fans"); +createPlot( + id=1, + position={0, 0, 400, 400}, + y={"arr.bus.y", "arr.bus.y1", "arr.bus.y1_actual", "arr.fan[1].m_flow", "arr.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=2, + position={100, 0, 400, 400}, + y={"cst.bus.y1", "cst.bus.y1_actual", "cst.fan.m_flow", "cst.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=3, + position={200, 0, 400, 400}, + y={"var.bus.y", "var.bus.y1", "var.bus.y1_actual", "var.fan.m_flow", "var.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=4, + position={300, 0, 400, 400}, + y={"non.m_flow", "non.m_flow_nominal"}, + autoscale=true, + grid=true +); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Routing.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Routing.mos new file mode 100644 index 00000000000..ac942cb360a --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Routing.mos @@ -0,0 +1,40 @@ +simulateModel("Buildings.Templates.Components.Validation.Routing", + method="cvode", + tolerance=1e-6, + stopTime=1, + resultFile="Routing"); +createPlot( + id=1, + position={0, 0, 400, 600}, + y={"mulMul.ports_a[1].m_flow", "mulMul.ports_b[1].m_flow", "mulMul.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"mulMulCom.ports_a[1].m_flow", "mulMulCom.ports_b[1].m_flow", "mulMulCom.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=3, + y={"mulSin.ports_a[1].m_flow", "mulSin.port_b.m_flow", "mulSin.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=4, + y={"sinMul.port_a.m_flow", "sinMul.ports_b[1].m_flow", "sinMul.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=5, + y={"pas.port_a.m_flow"}, + autoscale=true, + grid=true +); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Sensors.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Sensors.mos new file mode 100644 index 00000000000..2c5329037ad --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Sensors.mos @@ -0,0 +1,41 @@ +simulateModel("Buildings.Templates.Components.Validation.Sensors", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="Sensors"); +createPlot( + id=1, + subPlot=1, + position={0, 0, 600, 600}, + y={"dp.y", "dp.senRelPre.p_rel"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"hum.y", "hum.toDryAir.XiDry"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=3, + y={"ent.y", "ent.senSpeEnt.h_out"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=4, + y={"tem.y", "tem.senTem.T"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=5, + y={"vol.y", "vol.senVolFlo.V_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Valves.mos b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Valves.mos new file mode 100644 index 00000000000..594dea382df --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Valves.mos @@ -0,0 +1,33 @@ +simulateModel("Buildings.Templates.Components.Validation.Valves", + method="cvode", + tolerance=1e-6, + stopTime=200.0, + resultFile="Valves"); +createPlot( + id=1, + position={0, 0, 400, 400}, + y={"modThr.bus.y", "modThr.bus.y_actual", "modThr.val.res1.m_flow", "modThr.val.res3.m_flow", "modThr.val.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=2, + position={100, 0, 400, 400}, + y={"modTwo.bus.y", "modTwo.bus.y_actual", "modTwo.val.m_flow", "modTwo.val.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=3, + position={200, 0, 400, 400}, + y={"twoThr.bus.y1", "twoThr.bus.y1_actual", "twoThr.val.res1.m_flow", "twoThr.val.res3.m_flow", "twoThr.val.m_flow_nominal"}, + autoscale=true, + grid=true +); +createPlot( + id=4, + position={300, 0, 400, 400}, + y={"twoTwo.bus.y1", "twoTwo.bus.y1_actual", "twoTwo.val.m_flow", "twoTwo.val.m_flow_nominal"}, + autoscale=true, + grid=true +); diff --git a/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mos b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mos new file mode 100644 index 00000000000..898996d2622 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly", + method="cvode", + tolerance=1e-6, + stopTime=1.0, + resultFile="VAVBoxCoolingOnly"); +createPlot( + id=1, + position={20, 20, 500, 500}, + y={"VAVBox_1.damVAV.m_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mos b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mos new file mode 100644 index 00000000000..0dc9eb36750 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnlyControlG36", + method="cvode", + tolerance=1e-6, + stopTime=3600, + resultFile="VAVBoxCoolingOnlyControlG36"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAVBox_1.bus.TAirSup", "VAVBox_1.bus.TAirDis", "VAVBox_1.bus.TZon"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAVBox_1.damVAV.m_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mos b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mos new file mode 100644 index 00000000000..bb3fae39d39 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mos @@ -0,0 +1,20 @@ +simulateModel("Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheatControlG36", + method="cvode", + tolerance=1e-6, + stopTime=3600, + resultFile="VAVBoxReheatControlG36"); +createPlot( + id=1, + subPlot=1, + position={20, 20, 500, 500}, + y={"VAVBox_1.bus.TAirSup", "VAVBox_1.bus.TAirDis", "VAVBox_1.bus.TZon"}, + autoscale=true, + grid=true +); +createPlot( + id=1, + subPlot=2, + y={"VAVBox_1.damVAV.m_flow"}, + autoscale=true, + grid=true +); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZBase.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZBase.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZBase.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilElectricHeating.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilElectricHeating.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilElectricHeating.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorMultiStage.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorMultiStage.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorMultiStage.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorVariable.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorVariable.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilEvaporatorVariable.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilWaterHeating3WVReheat.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilWaterHeating3WVReheat.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZCoilWaterHeating3WVReheat.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow.mos new file mode 100644 index 00000000000..9db3c5c2164 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Airflow.mos @@ -0,0 +1,7 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure.mos new file mode 100644 index 00000000000..e5e4781e9e9 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZControlG36Pressure.mos @@ -0,0 +1,7 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZDedicatedDampersPressure.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZDedicatedDampersPressure.mos new file mode 100644 index 00000000000..9db3c5c2164 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZDedicatedDampersPressure.mos @@ -0,0 +1,7 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanRelief.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanRelief.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanRelief.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanSupplyBlowThrough.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanSupplyBlowThrough.mos new file mode 100644 index 00000000000..52b34531c27 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.AirHandlersFans.Validation.VAVMZFanSupplyBlowThrough.mos @@ -0,0 +1,8 @@ +compareVars := + { + "VAV_1.bus.TAirSup", + "VAV_1.bus.TAirMix", + "VAV_1.bus.TOut", + "VAV_1.bus.fanSup.V_flow", + "VAV_1.bus.VOut_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Coils.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Coils.mos new file mode 100644 index 00000000000..9494a9f10b6 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Coils.mos @@ -0,0 +1,38 @@ +compareVars := + { + "coiCoo.bus.y", + "coiCoo.bus.y_actual", + "coiCoo.hex.m1_flow", + "coiCoo.hex.m2_flow", + "coiCoo.hex.m1_flow_nominal", + "coiCoo.hex.m2_flow_nominal", + "coiCoo.hex.Q2_flow", + "coiCoo.Q_flow_nominal", + "coiHea.bus.y", + "coiHea.bus.y_actual", + "coiHea.hex.m1_flow", + "coiHea.hex.m2_flow", + "coiHea.hex.m1_flow_nominal", + "coiHea.hex.m2_flow_nominal", + "coiHea.hex.Q2_flow", + "coiHea.Q_flow_nominal", + "coiEle.bus.y", + "coiEle.hex.m_flow", + "coiEle.hex.m_flow_nominal", + "coiEle.hex.Q_flow", + "coiEle.Q_flow_nominal", + "coiEva.bus.y", + "coiEva.hex.m_flow", + "coiEva.hex.m_flow_nominal", + "coiEva.hex.QSen_flow", + "coiEva.hex.QLat_flow", + "coiEva.Q_flow_nominal", + "coiMul.bus.y", + "coiMul.hex.m_flow", + "coiMul.hex.m_flow_nominal", + "coiMul.hex.QSen_flow", + "coiMul.hex.QLat_flow", + "coiMul.Q_flow_nominal", + "non.m_flow", + "non.m_flow_nominal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Dampers.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Dampers.mos new file mode 100644 index 00000000000..b4258978a94 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Dampers.mos @@ -0,0 +1,17 @@ +compareVars := + { + "mod.bus.y", + "mod.bus.y_actual", + "mod.dam.m_flow", + "mod.dam.m_flow_nominal", + "pre.bus.y", + "pre.bus.y_actual", + "pre.dam.m_flow", + "pre.dam.m_flow_nominal", + "two.bus.y1", + "two.bus.y1_actual", + "two.dam.m_flow", + "two.dam.m_flow_nominal", + "non.m_flow", + "non.m_flow_nominal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Fans.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Fans.mos new file mode 100644 index 00000000000..71605cec0ab --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Fans.mos @@ -0,0 +1,19 @@ +compareVars := + { + "arr.bus.y", + "arr.bus.y1", + "arr.bus.y1_actual", + "arr.fan[1].m_flow", + "arr.m_flow_nominal", + "cst.bus.y1", + "cst.bus.y1_actual", + "cst.fan.m_flow", + "cst.m_flow_nominal", + "var.bus.y", + "var.bus.y1", + "var.bus.y1_actual", + "var.fan.m_flow", + "var.m_flow_nominal", + "non.m_flow", + "non.m_flow_nominal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Routing.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Routing.mos new file mode 100644 index 00000000000..49b0b8415e0 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Routing.mos @@ -0,0 +1,16 @@ +compareVars := + { + "mulMul.ports_a[1].m_flow", + "mulMul.ports_b[1].m_flow", + "mulMul.m_flow_nominal", + "mulMulCom.ports_a[1].m_flow", + "mulMulCom.ports_b[1].m_flow", + "mulMulCom.m_flow_nominal", + "mulSin.ports_a[1].m_flow", + "mulSin.port_b.m_flow", + "mulSin.m_flow_nominal", + "sinMul.port_a.m_flow", + "sinMul.ports_b[1].m_flow", + "sinMul.m_flow_nominal", + "pas.port_a.m_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Sensors.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Sensors.mos new file mode 100644 index 00000000000..9c6bd635cb5 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Sensors.mos @@ -0,0 +1,13 @@ +compareVars := + { + "dp.y", + "dp.senRelPre.p_rel", + "hum.y", + "hum.toDryAir.XiDry", + "ent.y", + "ent.senSpeEnt.h_out", + "tem.y", + "tem.senTem.T", + "vol.y", + "vol.senVolFlo.V_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Valves.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Valves.mos new file mode 100644 index 00000000000..80313a02bd9 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.Components.Validation.Valves.mos @@ -0,0 +1,21 @@ +compareVars := + { + "modThr.bus.y", + "modThr.bus.y_actual", + "modThr.val.res1.m_flow", + "modThr.val.res3.m_flow", + "modThr.val.m_flow_nominal", + "modTwo.bus.y", + "modTwo.bus.y_actual", + "modTwo.val.m_flow", + "modTwo.val.m_flow_nominal", + "twoThr.bus.y1", + "twoThr.bus.y1_actual", + "twoThr.val.res1.m_flow", + "twoThr.val.res3.m_flow", + "twoThr.val.m_flow_nominal", + "twoTwo.bus.y1", + "twoTwo.bus.y1_actual", + "twoTwo.val.m_flow", + "twoTwo.val.m_flow_nominal" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly.mos new file mode 100644 index 00000000000..8576bff9fd2 --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly.mos @@ -0,0 +1,4 @@ +compareVars := + { + "VAVBox_1.damVAV.m_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnlyControlG36.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnlyControlG36.mos new file mode 100644 index 00000000000..e5912f579af --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnlyControlG36.mos @@ -0,0 +1,7 @@ +compareVars := + { + "VAVBox_1.bus.TAirSup", + "VAVBox_1.bus.TAirDis", + "VAVBox_1.bus.TZon", + "VAVBox_1.damVAV.m_flow" + }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheatControlG36.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheatControlG36.mos new file mode 100644 index 00000000000..e5912f579af --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheatControlG36.mos @@ -0,0 +1,7 @@ +compareVars := + { + "VAVBox_1.bus.TAirSup", + "VAVBox_1.bus.TAirDis", + "VAVBox_1.bus.TZon", + "VAVBox_1.damVAV.m_flow" + }; diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo new file mode 100644 index 00000000000..5deb0e55bef --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/G36VAVMultiZone.mo @@ -0,0 +1,505 @@ +within Buildings.Templates.AirHandlersFans.Components.Controls; +block G36VAVMultiZone + "Guideline 36 controller" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone( + final typ=Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone); + + parameter String idZon[nZon] + "Zone (or terminal unit) names" + annotation(Evaluate=true, + Dialog(group="Configuration")); + + parameter String namGro[:] + "Name of zone groups" + annotation ( + Evaluate=true, + Dialog(group="Configuration")); + + parameter String namGroZon[nZon] + "Name of group which each zone belongs to" + annotation(Evaluate=true, + Dialog(group="Configuration")); + + final parameter Integer nGro(final min=1)= + size(namGro, 1) + "Number of zone groups" + annotation(Evaluate=true, + Dialog(group="Configuration")); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone ashCliZon= + datAll.ashCliZon + "ASHRAE climate zone" + annotation (Dialog(group="Configuration")); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone tit24CliZon= + datAll.tit24CliZon + "California Title 24 climate zone" + annotation (Dialog(group="Configuration")); + + final parameter Boolean isZonInGro[nGro, nZon]= + {{namGro[i]==namGroZon[j] for j in 1:nZon} for i in 1:nGro} + "True if zone belongs to group" + annotation(Evaluate=true); + + final parameter Integer isZonInGroInt[nGro, nZon]= + {{if isZonInGro[i, j] then 1 else 0 for j in 1:nZon} for i in 1:nGro} + "1 if zone belongs to group, 0 otherwise" + annotation(Evaluate=true); + + final parameter Integer isZonInGroIntTra[nZon, nGro]= + {{isZonInGroInt[i, j] for i in 1:size(isZonInGroInt, 1)} for j in 1:size(isZonInGroInt, 2)} + "Transpose of isZonInGroInt: 1 if zone belongs to group, 0 otherwise" + annotation(Evaluate=true); + + final parameter Integer nZonPerGro[nGro](each final min=1) = { + sum(isZonInGroInt[i]) for i in 1:nGro} + "Number of zones that each group contains" + annotation(Evaluate=true); + + parameter Boolean have_perZonRehBox=false + "Set to true if there are any VAV-reheat boxes on perimeter zones" + annotation (Dialog(group="Configuration")); + + /* + * Parameters for Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller + */ + + final parameter Modelica.Units.SI.VolumeFlowRate VOutUnc_flow_nominal= + dat.VOutUnc_flow_nominal + "Uncorrected design outdoor air flow rate, including diversity where applicable"; + final parameter Modelica.Units.SI.VolumeFlowRate VOutTot_flow_nominal= + dat.VOutTot_flow_nominal + "Design total outdoor air flow rate"; + final parameter Modelica.Units.SI.VolumeFlowRate VOutAbsMin_flow_nominal= + dat.VOutAbsMin_flow_nominal + "Design outdoor air flow rate when all zones with CO2 sensors or occupancy sensors are unpopulated"; + final parameter Modelica.Units.SI.VolumeFlowRate VOutMin_flow_nominal= + dat.VOutMin_flow_nominal + "Design minimum outdoor air flow rate when all zones are occupied at their design population, including diversity"; + + final parameter Modelica.Units.SI.PressureDifference dpDamOutMinAbs= + dat.dpDamOutMinAbs + "Differential pressure across the minimum outdoor air damper that provides the absolute minimum outdoor airflow"; + final parameter Modelica.Units.SI.PressureDifference dpDamOutMin_nominal= + dat.dpDamOutMin_nominal + "Differential pressure across the minimum outdoor air damper that provides the design minimum outdoor airflow"; + + final parameter Modelica.Units.SI.PressureDifference pAirSupSet_rel_max= + dat.pAirSupSet_rel_max + "Maximum supply duct static pressure setpoint"; + + final parameter Modelica.Units.SI.PressureDifference pAirRetSet_rel_min= + dat.pAirRetSet_rel_min + "Return fan minimum discharge static pressure setpoint"; + + final parameter Modelica.Units.SI.PressureDifference pAirRetSet_rel_max= + dat.pAirRetSet_rel_max + "Return fan maximum discharge static pressure setpoint"; + + final parameter Real yFanSup_min= + dat.yFanSup_min + "Lowest allowed fan speed if fan is on"; + + final parameter Modelica.Units.SI.Temperature TAirSupSet_min( + displayUnit="degC")=dat.TAirSupSet_min + "Lowest supply air temperature setpoint"; + + final parameter Modelica.Units.SI.Temperature TAirSupSet_max( + displayUnit="degC")=dat.TAirSupSet_max + "Highest supply air temperature setpoint"; + + final parameter Modelica.Units.SI.Temperature TOutRes_min( + displayUnit="degC")=dat.TOutRes_min + "Lowest value of the outdoor air temperature reset range"; + + final parameter Modelica.Units.SI.Temperature TOutRes_max( + displayUnit="degC")=dat.TOutRes_max + "Highest value of the outdoor air temperature reset range"; + + final parameter Real yFanRel_min= + dat.yFanRel_min + "Minimum relief fan speed"; + + final parameter Real yFanRet_min= + dat.yFanRet_min + "Minimum return fan speed"; + + final parameter Modelica.Units.SI.VolumeFlowRate dVFanRet_flow= + dat.dVFanRet_flow + "Airflow differential between supply and return fans to maintain building pressure at setpoint"; + + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller ctl( + final eneStd=stdEne, + final venStd=stdVen, + final ashCliZon=ashCliZon, + final tit24CliZon=tit24CliZon, + final have_frePro=have_frePro, + final freSta=typFreSta, + final minOADes=typSecOut, + final buiPreCon=buiPreCon, + final ecoHigLimCon=typCtlEco, + final have_hotWatCoi=coiHeaPre.typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating or + coiHeaReh.typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating, + final have_eleHeaCoi=coiHeaPre.typ==Buildings.Templates.Components.Types.Coil.ElectricHeating or + coiHeaReh.typ==Buildings.Templates.Components.Types.Coil.ElectricHeating, + final have_perZonRehBox=have_perZonRehBox, + final VUncDesOutAir_flow=VOutUnc_flow_nominal, + final VDesTotOutAir_flow=VOutTot_flow_nominal, + final VAbsOutAir_flow=VOutAbsMin_flow_nominal, + final VDesOutAir_flow=VOutAbsMin_flow_nominal, + final pMaxSet=pAirSupSet_rel_max, + final supFanSpe_min=yFanSup_min, + final retFanSpe_min=yFanRet_min, + final TSupCoo_min=TAirSupSet_min, + final TSupCoo_max=TAirSupSet_max, + final TOut_min=TOutRes_min, + final TOut_max=TOutRes_max, + final have_CO2Sen=have_CO2Sen, + final dpAbsMinOutDam=dpDamOutMinAbs, + final dpDesMinOutDam=dpDamOutMin_nominal, + final difFloSet=dVFanRet_flow, + final p_rel_RetFan_min=pAirRetSet_rel_min, + final p_rel_RetFan_max=pAirRetSet_rel_max) + "AHU controller" + annotation (Placement(transformation(extent={{-40,-72},{40,72}}))); + + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone + aggZonVen_A621( + final nZon=nZon, + final nGro=nGro, + final zonGroMat=isZonInGroInt, + final zonGroMatTra=isZonInGroIntTra) + if stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1 + "Aggregate zone level ventilation signals - ASHRAE 62.1" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + + Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.Title24.SumZone + aggZonVen_T24( + final nZon=nZon, + final nGro=nGro, + final zonGroMat=isZonInGroInt, + final have_CO2Sen=have_CO2Sen) + if stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 + "Aggregate zone level ventilation signals - California Title 24" + annotation (Placement(transformation(extent={{-90,-40},{-70,-20}}))); + + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatusDuplicator repSigZon( + final nZon=nZon, + final nZonGro=nGro) + "Replicate zone signals" + annotation (Placement(transformation(extent={{-190,100},{-182,140}}))); + + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.GroupStatus staGro[nGro]( + final nBuiZon=fill(nZon, nGro), + final nGroZon=nZonPerGro, + final zonGroMsk=isZonInGro) + "Evaluate zone group status" + annotation (Placement(transformation(extent={{-170,100},{-150,140}}))); + + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.OperationMode opeModSel[nGro]( + final nZon=nZonPerGro) + "Operation mode selection for each zone group" + annotation (Placement(transformation(extent={{-130,104},{-110,136}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TAirSupSet( + final nout=nZon) + "Pass signal to terminal unit bus" + annotation (Placement(transformation(extent={{60,46},{80,66}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqZonTemRes( + final nin=nZon, + final k=fill(1, nZon)) + "Sum up signals" + annotation (Placement(transformation(extent={{-140,10},{-120,30}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum reqZonPreRes( + final nin=nZon, + final k=fill(1, nZon)) + "Sum up signals" + annotation (Placement(transformation(extent={{-140,50},{-120,70}}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant u1FreSta(k=false) + "RFE: Freezestat and freezestat reset are currently not modeled" + annotation (Placement(transformation(extent={{-140,-90},{-120,-70}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant u1SofSwiRes(k=false) + "RFE: Freezestat and freezestat reset are currently not modeled" + annotation (Placement(transformation(extent={{-140,-130},{-120,-110}}))); + Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator y1FanSup_actual( + final nout=nZon) + "Pass signal to terminal unit bus" + annotation (Placement(transformation(extent={{-10,-170},{10,-150}}))); + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TAirSup( + final nout=nZon) + "Pass signal to terminal unit bus" + annotation (Placement(transformation(extent={{-10,-130},{10,-110}}))); + Buildings.Controls.OBC.CDL.Routing.IntegerVectorReplicator intVecRep( + final nin=nGro, + final nout=nZon) + "Repeat group signal nZon times" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Buildings.Controls.OBC.CDL.Integers.MultiSum asgOpeMod[nZon]( + each final nin=nGro, + final k=isZonInGroIntTra) + "Assign group operating mode to each zone belonging to group" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneGroupSystem ahuMod( + final nGro=nGro) + "Compute the AHU operating mode" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); +equation + /* Control point connection - start */ + + // Inputs from AHU bus + connect(bus.pAirSup_rel, ctl.dpDuc); + connect(bus.TOut, ctl.TOut); + connect(bus.TAirSup, ctl.TAirSup); + connect(bus.VOut_flow, ctl.VAirOut_flow); + connect(bus.VOutMin_flow, ctl.VAirOut_flow); + + connect(bus.dpAirOutMin, ctl.dpMinOutDam); + connect(bus.hAirOut, ctl.hAirOut); + connect(bus.TAirRet, ctl.TAirRet); + connect(bus.hAirRet, ctl.hAirRet); + connect(bus.pBui_rel, ctl.dpBui); + + connect(bus.TAirMix, ctl.TAirMix); + + connect(bus.fanSup.y1_actual, ctl.u1SupFan); + connect(bus.fanRel.y1_actual, ctl.u1RelFan); + + connect(bus.fanSup.V_flow, ctl.VAirSup_flow); + connect(bus.fanRet.V_flow, ctl.VAirRet_flow); + connect(bus.coiCoo.y_actual, ctl.uCooCoi_actual); + connect(bus.coiHea.y_actual, ctl.uHeaCoi_actual); + + connect(bus.fanSup.y1_actual, y1FanSup_actual.u); + connect(bus.TAirSup, TAirSup.u); + + // Inputs from terminal bus + connect(busTer.yReqZonPreRes, reqZonPreRes.u); + connect(busTer.yReqZonTemRes, reqZonTemRes.u); + + connect(busTer.VAdjPopBreZon_flow, aggZonVen_A621.VAdjPopBreZon_flow); + connect(busTer.VAdjAreBreZon_flow, aggZonVen_A621.VAdjAreBreZon_flow); + connect(busTer.VAirDis_flow, aggZonVen_A621.VZonPri_flow); + connect(busTer.VMinOA_flow, aggZonVen_A621.VMinOA_flow); + + connect(busTer.VZonAbsMin_flow, aggZonVen_T24.VZonAbsMin_flow); + connect(busTer.VZonDesMin_flow, aggZonVen_T24.VZonDesMin_flow); + connect(busTer.yCO2, aggZonVen_T24.uCO2); + + connect(busTer.y1OveOccZon, repSigZon.zonOcc); + connect(busTer.y1OccSch, repSigZon.u1Occ); + connect(busTer.tNexOcc, repSigZon.tNexOcc); + connect(busTer.yCooTim, repSigZon.uCooTim); + connect(busTer.yWarTim, repSigZon.uWarTim); + connect(busTer.yOccHeaHig, repSigZon.u1OccHeaHig); + connect(busTer.yHigOccCoo, repSigZon.u1HigOccCoo); + connect(busTer.yUnoHeaHig, repSigZon.u1UnoHeaHig); + connect(busTer.TZonHeaUnoSet, repSigZon.THeaSetOff); + connect(busTer.yEndSetBac, repSigZon.u1EndSetBac); + connect(busTer.yHigUnoCoo, repSigZon.u1HigUnoCoo); + connect(busTer.TZonCooUnoSet, repSigZon.TCooSetOff); + connect(busTer.yEndSetUp, repSigZon.u1EndSetUp); + connect(busTer.TZon, repSigZon.TZon); + connect(busTer.y1Win, repSigZon.u1Win); + + // Outputs to AHU bus + connect(ctl.yMinOutDam, bus.damOutMin.y); + connect(ctl.y1MinOutDam, bus.damOutMin.y1); + connect(ctl.yRetDam, bus.damRet.y); + connect(ctl.yRelDam, bus.damRel.y); + connect(ctl.yOutDam, bus.damOut.y); + connect(ctl.y1EneCHWPum, bus.y1PumChiWat); + connect(ctl.y1SupFan, bus.fanSup.y1); + connect(ctl.ySupFan, bus.fanSup.y); + connect(ctl.y1RetFan, bus.fanRet.y1); + connect(ctl.yRetFan, bus.fanRet.y); + connect(ctl.y1RelFan, bus.fanRel.y1); + connect(ctl.yRelFan, bus.fanRel.y); + connect(ctl.yCooCoi, bus.coiCoo.y); + connect(ctl.yHeaCoi, bus.coiHea.y); + + connect(ctl.yAla, bus.ala); + + connect(ctl.yChiWatResReq, bus.reqChiWatRes); + connect(ctl.yChiPlaReq, bus.reqChiWatPla); + connect(ctl.yHotWatResReq, bus.reqHeaWatRes); + connect(ctl.yHotWatPlaReq, bus.reqHeaWatPla); + + // Outputs to terminal unit bus + connect(TAirSupSet.y, busTer.TAirSupSet); + connect(TAirSup.y, busTer.TAirSup); + connect(y1FanSup_actual.y, busTer.y1FanSup_actual); + + /* Control point connection - stop */ + + connect(staGro.uGroOcc, opeModSel.u1Occ) + annotation (Line(points={{-148,139},{-134, + 139},{-134,134.4},{-132,134.4}}, color={255,0,255})); + connect(staGro.nexOcc, opeModSel.tNexOcc) annotation (Line(points={{-148,137}, + {-136,137},{-136,132.8},{-132,132.8}}, color={0,0,127})); + connect(staGro.yCooTim, opeModSel.maxCooDowTim) annotation (Line(points={{-148, + 133},{-138,133},{-138,131.2},{-132,131.2}},color={0,0,127})); + connect(staGro.yWarTim, opeModSel.maxWarUpTim) annotation (Line(points={{-148, + 131},{-140,131},{-140,128},{-132,128}}, color={0,0,127})); + connect(staGro.yOccHeaHig, opeModSel.u1OccHeaHig) annotation (Line(points={{-148, + 127},{-136,127},{-136,126.4},{-132,126.4}},color={255,0,255})); + connect(staGro.yHigOccCoo, opeModSel.u1HigOccCoo) annotation (Line(points={{-148, + 125},{-138,125},{-138,129.6},{-132,129.6}},color={255,0,255})); + connect(staGro.yEndSetBac, opeModSel.u1EndSetBac) annotation (Line(points={{-148, + 118},{-140,118},{-140,116.8},{-132,116.8}}, + color={255,0,255})); + connect(staGro.TZonMin, opeModSel.TZonMin) annotation (Line(points={{-148,105}, + {-140,105},{-140,113.6},{-132,113.6}}, color={0,0,127})); + connect(staGro.yHotZon, opeModSel.totHotZon) annotation (Line(points={{-148,115}, + {-142,115},{-142,110.4},{-132,110.4}}, color={255,127,0})); + connect(staGro.ySetUp, opeModSel.u1SetUp) annotation (Line(points={{-148,113},{ + -146,113},{-146,107.2},{-132,107.2}}, color={255,0,255})); + connect(staGro.yEndSetUp, opeModSel.u1EndSetUp) annotation (Line(points={{-148, + 111},{-136,111},{-136,105.6},{-132,105.6}}, color={255,0,255})); + connect(staGro.yOpeWin, opeModSel.uOpeWin) annotation (Line(points={{-148,101}, + {-134,101},{-134,123.2},{-132,123.2}}, color={255,127,0})); + connect(reqZonTemRes.y,ctl. uZonTemResReq) annotation (Line(points={{-118,20}, + {-60,20},{-60,54},{-44,54}}, color={255,127,0})); + connect(reqZonPreRes.y,ctl. uZonPreResReq) + annotation (Line(points={{-118,60},{-60,60},{-60,67.0909},{-44,67.0909}}, + color={255,127,0})); + + connect(repSigZon.y1ZonOcc, staGro.zonOcc) + annotation (Line(points={{-181.2,139},{-172,139}}, + color={255,0,255})); + connect(repSigZon.y1Occ, staGro.u1Occ) + annotation (Line(points={{-181.2,137},{-172,137}}, + color={255,0,255})); + connect(repSigZon.ytNexOcc, staGro.tNexOcc) + annotation (Line(points={{-181.2,135},{-172,135}}, + color={0,0,127})); + connect(repSigZon.yCooTim, staGro.uCooTim) + annotation (Line(points={{-181.2,131},{-172,131}}, + color={0,0,127})); + connect(repSigZon.yWarTim, staGro.uWarTim) + annotation (Line(points={{-181.2,129},{-172,129}}, + color={0,0,127})); + connect(repSigZon.y1OccHeaHig, staGro.u1OccHeaHig) + annotation (Line(points={{-181.2,125},{-172,125}}, + color={255,0,255})); + connect(repSigZon.y1HigOccCoo, staGro.u1HigOccCoo) annotation (Line(points={{-181.2, + 123},{-172,123}}, color={255,0,255})); + connect(repSigZon.y1UnoHeaHig, staGro.u1UnoHeaHig) + annotation (Line(points={{-181.2,119},{-172,119}}, + color={255,0,255})); + connect(repSigZon.yTHeaSetOff, staGro.THeaSetOff) + annotation (Line(points={{-181.2,117},{-172,117}}, + color={0,0,127})); + connect(repSigZon.y1EndSetBac, staGro.u1EndSetBac) + annotation (Line(points={{-181.2,115},{-172,115}}, + color={255,0,255})); + connect(repSigZon.y1HigUnoCoo, staGro.u1HigUnoCoo) + annotation (Line(points={{-181.2,111},{-172,111}}, + color={255,0,255})); + connect(repSigZon.yTCooSetOff, staGro.TCooSetOff) + annotation (Line(points={{-181.2,109},{-172,109}}, + color={0,0,127})); + connect(repSigZon.y1EndSetUp, staGro.u1EndSetUp) + annotation (Line(points={{-181.2,107},{-172,107}}, + color={255,0,255})); + connect(repSigZon.yTZon, staGro.TZon) + annotation (Line(points={{-181.2,103},{-172,103}}, + color={0,0,127})); + connect(repSigZon.y1Win, staGro.u1Win) + annotation (Line(points={{-181.2,101},{-172,101}}, + color={255,0,255})); + connect(staGro.yColZon, opeModSel.totColZon) annotation (Line(points={{-148,122}, + {-136,122},{-136,121.6},{-132,121.6}}, + color={255,127,0})); + connect(staGro.ySetBac, opeModSel.u1SetBac) annotation (Line(points={{-148,120}, + {-138,120},{-138,118.4},{-132,118.4}}, + color={255,0,255})); + connect(aggZonVen_A621.VSumAdjPopBreZon_flow, ctl.VSumAdjPopBreZon_flow) + annotation (Line(points={{-68,8},{-58,8},{-58,40.9091},{-44,40.9091}}, + color={0,0,127})); + connect(aggZonVen_A621.VSumAdjAreBreZon_flow, ctl.VSumAdjAreBreZon_flow) + annotation (Line(points={{-68,4},{-56,4},{-56,37.6364},{-44,37.6364}}, + color={0,0,127})); + connect(aggZonVen_A621.VSumZonPri_flow, ctl.VSumZonPri_flow) annotation (Line( + points={{-68,-4},{-54,-4},{-54,32.7273},{-44,32.7273}}, color={0,0,127})); + connect(aggZonVen_A621.uOutAirFra_max, ctl.uOutAirFra_max) annotation (Line( + points={{-68,-8},{-52,-8},{-52,27.8182},{-44,27.8182}}, color={0,0,127})); + connect(aggZonVen_T24.VSumZonAbsMin_flow, ctl.VSumZonAbsMin_flow) annotation ( + Line(points={{-68,-24},{-50,-24},{-50,21.2727},{-44,21.2727}}, color={0,0,127})); + connect(aggZonVen_T24.VSumZonDesMin_flow, ctl.VSumZonDesMin_flow) annotation ( + Line(points={{-68,-30},{-48,-30},{-48,18},{-44,18}}, color={0,0,127})); + connect(aggZonVen_T24.yMaxCO2, ctl.uCO2Loo_max) annotation (Line(points={{-68,-35}, + {-46,-35},{-46,-3.27273},{-44,-3.27273}}, color={0,0,127})); + connect(ctl.TAirSupSet, TAirSupSet.u) annotation (Line(points={{44,55.6364},{ + 58,55.6364},{58,56}}, color={0,0,127})); + connect(opeModSel.yOpeMod, aggZonVen_A621.uOpeMod) annotation (Line(points={{-108, + 120},{-100,120},{-100,9},{-92,9}}, color={255,127,0})); + connect(opeModSel.yOpeMod, aggZonVen_T24.uOpeMod) annotation (Line(points={{-108, + 120},{-100,120},{-100,-22},{-92,-22}}, color={255,127,0})); + connect(opeModSel.yOpeMod, intVecRep.u) + annotation (Line(points={{-108,120},{-82,120}}, color={255,127,0})); + connect(asgOpeMod.y, busTer.yOpeMod) annotation (Line(points={{-18,120},{200,120}, + {200,0},{220,0}}, color={255,127,0}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(intVecRep.y, asgOpeMod.u) + annotation (Line(points={{-58,120},{-42,120}}, color={255,127,0})); + connect(opeModSel.yOpeMod, ahuMod.uOpeMod) annotation (Line(points={{-108,120}, + {-100,120},{-100,80},{-92,80}}, color={255,127,0})); + connect(ahuMod.yAhuOpeMod, ctl.uAhuOpeMod) annotation (Line(points={{-68,80}, + {-60,80},{-60,70.3636},{-44,70.3636}},color={255,127,0})); + + connect(u1FreSta.y, ctl.u1FreSta) annotation (Line(points={{-118,-80},{-60, + -80},{-60,-26.1818},{-44,-26.1818}}, color={255,0,255})); + connect(u1SofSwiRes.y, ctl.u1SofSwiRes) annotation (Line(points={{-118,-120}, + {-56,-120},{-56,-32.7273},{-44,-32.7273}}, color={255,0,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

Description

+

+This is an implementation of the control sequence specified in ASHRAE (2021) +for multiple-zone VAV air handlers. +It contains the following components. +

+ +

Details

+

+The AI point for the measured outdoor air flow rate ctl.VOut_flow +used for minimum outdoor airflow control is connected to both bus.VOutMin_flow +(dedicated minimum OA damper) and bus.VOut_flow (single common OA damper). +Those two variables are exclusive from one another. +In case of dedicated OA dampers, the total outdoor airflow is not measured, +hence no bus.VOut_flow signal is available for that configuration. +

+

References

+ +")); +end G36VAVMultiZone; diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo b/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo new file mode 100644 index 00000000000..64cf9d79bc3 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/OpenLoop.mo @@ -0,0 +1,134 @@ +within Buildings.Templates.AirHandlersFans.Components.Controls; +block OpenLoop "Open loop controller" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone( + final typ=Buildings.Templates.AirHandlersFans.Types.Controller.OpenLoop); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamOut(k=1) + if secOutRel.typDamOut == Buildings.Templates.Components.Types.Damper.Modulating + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-180,170}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant yDamOut1(k=true) + if secOutRel.typDamOut == Buildings.Templates.Components.Types.Damper.TwoPosition + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-170,144}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamOutMin(k=1) + if secOutRel.typDamOutMin == Buildings.Templates.Components.Types.Damper.Modulating + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-150,170}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant yDamOutMin1(k=true) + if secOutRel.typDamOutMin == Buildings.Templates.Components.Types.Damper.TwoPosition + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-140,144}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamRet(k=1) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-120,170}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamRel(k=1) + if secOutRel.typDamRel == Buildings.Templates.Components.Types.Damper.Modulating + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-90,170}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant yDamRel1(k=true) + if secOutRel.typDamRel == Buildings.Templates.Components.Types.Damper.TwoPosition + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-60,170}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiCoo(k=1) if coiCoo.typ + == Buildings.Templates.Components.Types.Coil.WaterBasedCooling or coiCoo.typ + == Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-60,110}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant yCoiCooSta(k=1) + if coiCoo.typ == Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,110}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanSup(k=1) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,70}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant y1FanSup(k=true) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={40,70}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiHea(k=1) + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,110}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanRet(k=1) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={160,70}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant y1FanRet(k=true) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={200,70}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanRel(k=1) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={80,70}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant y1FanRel(k=true) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={120,70}))); +equation + /* Control point connection - start */ + + connect(yCoiCoo.y, bus.coiCoo.y); + connect(yCoiHea.y, bus.coiHea.y); + connect(yCoiCooSta.y, bus.coiCoo.y); + + connect(y1FanSup.y, bus.fanSup.y1); + connect(yFanSup.y, bus.fanSup.y); + connect(y1FanRel.y, bus.fanRel.y1); + connect(yFanRel.y, bus.fanRel.y); + connect(y1FanRet.y, bus.fanRet.y1); + connect(yFanRet.y, bus.fanRet.y); + + connect(yDamOut.y, bus.damOut.y); + connect(yDamOut1.y, bus.damOut.y1); + connect(yDamOutMin.y, bus.damOutMin.y); + connect(yDamOutMin1.y, bus.damOutMin.y1); + connect(yDamRel.y, bus.damRel.y); + connect(yDamRel1.y, bus.damRel.y1); + connect(yDamRet.y, bus.damRet.y); + /* Control point connection - stop */ + + annotation ( + defaultComponentName="conAHU", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is an open loop controller providing control inputs +for the templates within + +Buildings.Templates.AirHandlersFans. +It is mainly used for testing purposes. +

+")); +end OpenLoop; diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/package.mo b/Buildings/Templates/AirHandlersFans/Components/Controls/package.mo new file mode 100644 index 00000000000..59d0a99a924 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.AirHandlersFans.Components; +package Controls "Controllers" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

+All control blocks that form the control sequence of a system +are instantiated into one single class, a so-called control section. +This package contains such control sections. +

+")); +end Controls; diff --git a/Buildings/Templates/AirHandlersFans/Components/Controls/package.order b/Buildings/Templates/AirHandlersFans/Components/Controls/package.order new file mode 100644 index 00000000000..d0ddec1fb52 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Controls/package.order @@ -0,0 +1,2 @@ +G36VAVMultiZone +OpenLoop diff --git a/Buildings/Templates/AirHandlersFans/Components/Data/OutdoorReliefReturnSection.mo b/Buildings/Templates/AirHandlersFans/Components/Data/OutdoorReliefReturnSection.mo new file mode 100644 index 00000000000..48a399aa1a3 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Data/OutdoorReliefReturnSection.mo @@ -0,0 +1,69 @@ +within Buildings.Templates.AirHandlersFans.Components.Data; +record OutdoorReliefReturnSection "Record for outdoor/relief/return air section" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Damper typDamOut + "Outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Damper typDamOutMin + "Minimum outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Damper typDamRel + "Relief damper type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Damper typDamRet + "Return damper type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Type of relief fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of return fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.MassFlowRate mOutMin_flow_nominal( + final min=0, + start=0.2 * damOut.m_flow_nominal) + "Minimum outdoor air mass flow rate at design conditions" + annotation (Dialog(group="Dampers and economizers", + enable=typDamOutMin<>Buildings.Templates.Components.Types.Damper.None)); + + parameter Buildings.Templates.Components.Data.Damper damOut( + final typ=typDamOut) + "Outdoor air damper" + annotation (Dialog(group="Dampers and economizers", + enable=typDamOut <> Buildings.Templates.Components.Types.Damper.None)); + parameter Buildings.Templates.Components.Data.Damper damOutMin( + final typ=typDamOutMin) + "Minimum outdoor air damper" + annotation (Dialog(group="Dampers and economizers", + enable=typDamOutMin <> Buildings.Templates.Components.Types.Damper.None)); + parameter Buildings.Templates.Components.Data.Damper damRel( + final typ=typDamRel) + "Relief damper" + annotation (Dialog(group="Dampers and economizers", + enable=typDamRel <> Buildings.Templates.Components.Types.Damper.None)); + parameter Buildings.Templates.Components.Data.Damper damRet( + final typ=typDamRet) + "Return damper" + annotation (Dialog(group="Dampers and economizers", + enable=typDamRet <> Buildings.Templates.Components.Types.Damper.None)); + parameter Buildings.Templates.Components.Data.Fan fanRel( + final typ=typFanRel) + "Relief fan" + annotation (Dialog(group="Fans", + enable=typFanRel <>Buildings.Templates.Components.Types.Fan.None)); + parameter Buildings.Templates.Components.Data.Fan fanRet( + final typ=typFanRet) + "Return fan" + annotation (Dialog(group="Fans", + enable=typFanRet <>Buildings.Templates.Components.Types.Fan.None)); + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection. +

+")); +end OutdoorReliefReturnSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/Data/PartialController.mo b/Buildings/Templates/AirHandlersFans/Components/Data/PartialController.mo new file mode 100644 index 00000000000..d3fc315f5c7 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Data/PartialController.mo @@ -0,0 +1,25 @@ +within Buildings.Templates.AirHandlersFans.Components.Data; +record PartialController "Record for controller interface class" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.AirHandlersFans.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanSup + "Type of supply fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Type of relief fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of return fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for the class + +Buildings.Templates.AirHandlersFans.Components.Controls.Interfaces.PartialController. +

+")); +end PartialController; diff --git a/Buildings/Templates/AirHandlersFans/Components/Data/VAVMultiZoneController.mo b/Buildings/Templates/AirHandlersFans/Components/Data/VAVMultiZoneController.mo new file mode 100644 index 00000000000..e8fd549c1d0 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Data/VAVMultiZoneController.mo @@ -0,0 +1,154 @@ +within Buildings.Templates.AirHandlersFans.Components.Data; +record VAVMultiZoneController "Record for multiple-zone VAV controller" + extends Buildings.Templates.AirHandlersFans.Components.Data.PartialController; + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typSecOut + "Type of outdoor air section" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes buiPreCon + "Type of building pressure control system" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation(Evaluate=true, Dialog(group="Energy and ventilation standards", enable=false)); + + parameter Modelica.Units.SI.Temperature TAirSupSet_min( + final min=273.15, + displayUnit="degC")=12+273.15 + "Lowest supply air temperature setpoint" + annotation (Dialog(group="Temperature setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone)); + + parameter Modelica.Units.SI.Temperature TAirSupSet_max( + final min=273.15, + displayUnit="degC")=18+273.15 + "Highest supply air temperature setpoint" + annotation (Dialog(group="Temperature setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone)); + + parameter Modelica.Units.SI.Temperature TOutRes_min( + final min=273.15, + displayUnit="degC")=16+273.15 + "Lowest value of the outdoor air temperature reset range" + annotation (Dialog(group="Temperature setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone)); + + parameter Modelica.Units.SI.Temperature TOutRes_max( + final min=273.15, + displayUnit="degC")=21+273.15 + "Highest value of the outdoor air temperature reset range" + annotation (Dialog(group="Temperature setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone)); + + parameter Modelica.Units.SI.VolumeFlowRate VOutUnc_flow_nominal( + start=0) + "Uncorrected design outdoor air flow rate, including diversity where applicable" + annotation (Dialog(group="Ventilation setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Modelica.Units.SI.VolumeFlowRate VOutTot_flow_nominal( + start=0) + "Design total outdoor air flow rate" + annotation (Dialog(group="Ventilation setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Modelica.Units.SI.VolumeFlowRate VOutAbsMin_flow_nominal( + start=0) + "Design outdoor air flow rate when all zones with CO2 sensors or occupancy sensors are unpopulated" + annotation (Dialog(group="Ventilation setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + parameter Modelica.Units.SI.VolumeFlowRate VOutMin_flow_nominal( + start=0) + "Design minimum outdoor air flow rate when all zones are occupied at their design population, including diversity" + annotation (Dialog(group="Ventilation setpoints", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + + parameter Modelica.Units.SI.PressureDifference pAirSupSet_rel_max( + final min=0, + displayUnit="Pa", + start=500) + "Duct design maximum static pressure" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone)); + parameter Modelica.Units.SI.PressureDifference dpDamOutMinAbs( + final min=2.4, + displayUnit="Pa", + start=5) + "Differential pressure across the minimum outdoor air damper that provides the absolute minimum outdoor airflow" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 + and typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure)); + parameter Modelica.Units.SI.PressureDifference dpDamOutMin_nominal( + final min=5, + displayUnit="Pa", + start=15) + "Differential pressure across the minimum outdoor air damper that provides the design minimum outdoor airflow" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + typSecOut==Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure)); + + parameter Modelica.Units.SI.PressureDifference pAirRetSet_rel_min( + final min=2.4, + displayUnit="Pa")=10 + "Return fan minimum discharge static pressure setpoint" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + buiPreCon==Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp)); + + parameter Modelica.Units.SI.PressureDifference pAirRetSet_rel_max( + final min=10, + displayUnit="Pa")=40 + "Return fan maximum discharge static pressure setpoint" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + buiPreCon==Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp)); + + parameter Modelica.Units.SI.VolumeFlowRate dVFanRet_flow( + final min=0, + start=0.1) + "Airflow differential between supply and return fans to maintain building pressure at setpoint" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + buiPreCon==Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir)); + + parameter Real yFanSup_min( + final unit="1", + final min=0, + final max=1)= 0.1 + "Lowest allowed fan speed if fan is on" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + typFanSup<>Buildings.Templates.Components.Types.Fan.None)); + + parameter Real yFanRel_min( + final unit="1", + final min=0, + final max=1)=0.1 + "Minimum relief fan speed" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + typFanRel<>Buildings.Templates.Components.Types.Fan.None)); + + parameter Real yFanRet_min( + final unit="1", + final min=0, + final max=1)=0.1 + "Minimum return fan speed" + annotation (Dialog(group="Information provided by testing, adjusting, and balancing contractor", + enable=typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + typFanRet<>Buildings.Templates.Components.Types.Fan.None)); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +multiple-zone VAV controllers within + +Buildings.Templates.AirHandlersFans.Components.Controls. +

+")); +end VAVMultiZoneController; diff --git a/Buildings/Templates/AirHandlersFans/Components/Data/package.mo b/Buildings/Templates/AirHandlersFans/Components/Data/package.mo new file mode 100644 index 00000000000..4a93c2540f6 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.AirHandlersFans.Components; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters. +

+")); +end Data; diff --git a/Buildings/Templates/AirHandlersFans/Components/Data/package.order b/Buildings/Templates/AirHandlersFans/Components/Data/package.order new file mode 100644 index 00000000000..567ce4daa32 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Data/package.order @@ -0,0 +1,3 @@ +OutdoorReliefReturnSection +PartialController +VAVMultiZoneController diff --git a/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/None.mo b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/None.mo new file mode 100644 index 00000000000..0b5ece79689 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/None.mo @@ -0,0 +1,14 @@ +within Buildings.Templates.AirHandlersFans.Components.HeatRecovery; +model None "No heat recovery" + extends + .Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery( + final typ=Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None); + + annotation (Documentation(info=" +

+This model represents a configuration with no heat recovery unit. +It resolves to four fluid ports that are not connected +to each other and for which pressure conditions must be provided. +

+")); +end None; diff --git a/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.mo b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.mo new file mode 100644 index 00000000000..845e18618a6 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.mo @@ -0,0 +1,8 @@ +within Buildings.Templates.AirHandlersFans.Components; +package HeatRecovery "Models for heat recovery" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +This package contains models for heat recovery units. +")); +end HeatRecovery; diff --git a/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.order b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.order new file mode 100644 index 00000000000..b0047fa49f0 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/HeatRecovery/package.order @@ -0,0 +1 @@ +None diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialController.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialController.mo new file mode 100644 index 00000000000..397c2c543bc --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialController.mo @@ -0,0 +1,63 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial block PartialController "Interface class for AHU controller" + + parameter Buildings.Templates.AirHandlersFans.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Integer nZon + "Number of served zones"; + + outer parameter Buildings.Templates.Data.AllSystems datAll + "Top-level (whole building) system parameters"; + outer parameter Buildings.Templates.Components.Types.Fan typFanSup + "Type of supply fan"; + outer parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of relief/return fan"; + + replaceable parameter + Buildings.Templates.AirHandlersFans.Components.Data.PartialController dat( + final typ=typ, + final typFanSup=typFanSup, + final typFanRet=typFanRet) + "Design and operating parameters" + annotation (Placement(transformation(extent={{190,170},{210,190}}))); + + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "AHU control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-200,0}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-100,0}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busTer[nZon] + "Terminal unit control bus" + annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={220,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-151,-114},{149,-154}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-200},{220, + 200}})), + Documentation(info=" +

+This partial class provides a standard interface for air handler controllers. +

+")); +end PartialController; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialControllerVAVMultizone.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialControllerVAVMultizone.mo new file mode 100644 index 00000000000..998f231451f --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialControllerVAVMultizone.mo @@ -0,0 +1,111 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial block PartialControllerVAVMultizone + "Interface class for multiple-zone VAV controller" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialController( + redeclare Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController + dat( + typSecOut=secOutRel.typSecOut, + buiPreCon=buiPreCon, + stdVen=stdVen)); + + outer replaceable + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection + secOutRel "Outdoor/relief/return air section"; + outer replaceable Buildings.Templates.Components.Coils.None coiCoo + "Cooling coil"; + outer replaceable Buildings.Templates.Components.Coils.None coiHeaPre + "Heating coil (preheat position)"; + outer replaceable Buildings.Templates.Components.Coils.None coiHeaReh + "Heating coil (reheat position)"; + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer typCtlEco= + Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb + "Economizer control type" + annotation (Evaluate=true, + Dialog( + group="Economizer", + enable=secOutRel.have_eco)); + + parameter Buildings.Templates.AirHandlersFans.Types.ControlFanReturn typCtlFanRet= + Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured + "Return fan control type" + annotation (Evaluate=true, + Dialog( + group="Configuration", + enable=typFanRet <> Buildings.Templates.Components.Types.Fan.None)); + + parameter Boolean use_TMix=true + "Set to true if mixed air temperature measurement is enabled" + annotation(Dialog( + group="Economizer", + enable=typ<>Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + secOutRel.typ<>Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir)); + + parameter Boolean have_frePro=true + "Set to true to include freeze protection" + annotation(Evaluate=true); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat typFreSta= + Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat + "Option for low limit (freeze) protection" + annotation(Evaluate=true, Dialog(enable=have_frePro)); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typSecOut= + secOutRel.typSecOut + "Type of outdoor air section" + annotation (Dialog(group="Economizer")); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes buiPreCon= + if secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper + then Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefDamper + elseif secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefFan + then Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefFan + elseif secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan + then (if typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured + then Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanMeasuredAir + elseif typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure + then Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReturnFanDp + else Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefDamper) + else Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefDamper + "Type of building pressure control system" + annotation (Dialog(group="Economizer")); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard stdEne= + datAll.stdEne + "Energy standard" + annotation(Dialog(enable= + typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone), + Evaluate=true); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen= + datAll.stdVen + "Ventilation standard" + annotation(Dialog(enable= + typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone), + Evaluate=true); + + parameter Boolean have_CO2Sen=false + "Set to true if there are zones with CO2 sensor" + annotation (Dialog(group="Configuration", + enable= + typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone and + typSecOut==Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + +initial equation + if typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone then + // We check the fallback "else" clause. + if buiPreCon==Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.ReliefDamper then + assert(secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper, + "In "+ getInstanceName() + ": "+ + "The system configuration is incompatible with available options for building pressure control."); + end if; + end if; + + annotation (Documentation(info=" +

+This partial class provides a standard interface for multiple-zone VAV controllers. +

+")); +end PartialControllerVAVMultizone; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialHeatRecovery.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialHeatRecovery.mo new file mode 100644 index 00000000000..cfe5b146e87 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialHeatRecovery.mo @@ -0,0 +1,69 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial model PartialHeatRecovery "Interface class for heat recovery" + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.AirHandlersFans.Types.HeatRecovery typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true, __ctrl_flow(enable=false)); + + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + if typ <> Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None + "Control bus" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aOut( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None + "Outdoor air inlet" + annotation (Placement(transformation(extent={{-110,-70},{-90,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bOut( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None + "Outdoor air outlet" + annotation (Placement(transformation(extent={{110,-70},{90,-50}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aRel( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None + "Relief/exhaust air inlet" + annotation (Placement(transformation(extent={{90,50},{110,70}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bRel( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None + "Relief/exhaust air outlet" + annotation (Placement(transformation(extent={{-90,50},{-110,70}}))); + annotation (Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-149,-110},{151,-150}}, + textColor={0,0,255}, + textString="%name")}), Documentation(info=" +

+This class provides a standard interface for the +heat recovery unit of an air handler. +

+")); +end PartialHeatRecovery; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorReliefReturnSection.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorReliefReturnSection.mo new file mode 100644 index 00000000000..b832fd2cdbe --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorReliefReturnSection.mo @@ -0,0 +1,415 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial model PartialOutdoorReliefReturnSection + "Interface class for outdoor/relief/return air section" + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection typ + "Outdoor/relief/return air section type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typSecOut + "Outdoor air section type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection typSecRel + "Relief/return air section type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamOut + "Outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamOutMin + "Minimum outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamRel + "Relief damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamRet + "Return damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Relief fan type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Return fan type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_eco + "Set to true in case of economizer function" + annotation (Evaluate=true, Dialog(group="Configuration")); + inner parameter Boolean have_recHea = false + "Set to true in case of heat recovery" + annotation (Evaluate=true, + Dialog(group="Configuration")); + inner parameter Buildings.Templates.AirHandlersFans.Types.ControlFanReturn typCtlFanRet= + Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured + "Return fan control type" + annotation (Evaluate=true, + Dialog( + group="Configuration", + enable=typFanRet<>Buildings.Templates.Components.Types.Fan.None)); + inner parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer typCtlEco= + Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb + "Economizer control type" + annotation (Evaluate=true, + Dialog( + group="Configuration", + enable=have_eco)); + + parameter + Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection + dat( + final typDamOut=typDamOut, + final typDamOutMin=typDamOutMin, + final typDamRet=typDamRet, + final typDamRel=typDamRel, + final typFanRel=typFanRel, + final typFanRet=typFanRet) + "Design and operating parameters" + annotation (Placement(transformation(extent={{150,110},{170,130}}))); + + final parameter Modelica.Units.SI.MassFlowRate mAirSup_flow_nominal= + dat.damOut.m_flow_nominal + "Supply air mass flow rate"; + final parameter Modelica.Units.SI.MassFlowRate mAirRet_flow_nominal= + dat.damRet.m_flow_nominal + "Return air mass flow rate"; + final parameter Modelica.Units.SI.MassFlowRate mOutMin_flow_nominal= + dat.mOutMin_flow_nominal + "Minimum outdoor air mass flow rate at design conditions"; + + final parameter Modelica.Units.SI.PressureDifference dpDamOut_nominal= + dat.damOut.dp_nominal + "Outdoor air damper pressure drop"; + final parameter Modelica.Units.SI.PressureDifference dpDamOutMin_nominal= + dat.damOutMin.dp_nominal + "Minimum outdoor air damper pressure drop"; + final parameter Modelica.Units.SI.PressureDifference dpDamRel_nominal= + dat.damRel.dp_nominal + "Relief air damper pressure drop"; + final parameter Modelica.Units.SI.PressureDifference dpDamRet_nominal= + dat.damRet.dp_nominal + "Return air damper pressure drop"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations"), + __ctrl_flow(enable=false)); + + parameter Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true, __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_b port_Rel( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirNoRelief + "Relief (exhaust) air" + annotation (Placement(transformation( + extent={{-190,70},{-170,90}}),iconTransformation(extent={{-810,590},{-790, + 610}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_Out( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Outdoor air intake" + annotation (Placement(transformation( + extent={{-190,-90},{-170,-70}}),iconTransformation(extent={{-810,-610},{-790, + -590}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_Sup( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Supply air" + annotation ( + Placement(transformation(extent={{170,-90},{190,-70}}), + iconTransformation(extent={{790,-610},{810,-590}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_Ret( + redeclare final package Medium =MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Return air" + annotation (Placement(transformation(extent={{170,70},{190,90}}), + iconTransformation(extent={{790,588},{810,608}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bPre( + redeclare final package Medium = MediumAir) + "Optional fluid connector for differential pressure sensor" + annotation (Placement(transformation(extent={{90,130},{70,150}}), + iconTransformation(extent={{390,790},{370,810}}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,140}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,800}))); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-800,-800}, {800,800}}), + graphics={ + Line( + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None, + points={{440,440},{440,576}}, + color={0,0,0}), + Line( + visible=typFanRel <> Buildings.Templates.Components.Types.Fan.None, + points={{-240,440},{-240,570}}, + color={0,0,0}), + Text( + extent={{-149,-834},{151,-874}}, + textColor={0,0,255}, + textString="%name"), + Bitmap( + visible=typFanRet==Buildings.Templates.Components.Types.Fan.SingleVariable, + extent={{540,500},{340,700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Housed.svg"), + Bitmap( + visible=typFanRet==Buildings.Templates.Components.Types.Fan.ArrayVariable, + extent={{540,500},{340,700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Array.svg"), + Bitmap( + visible=typFanRet<>Buildings.Templates.Components.Types.Fan.None, + extent={{358,280},{520,440}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg"), + Bitmap( + visible=typDamRel==Buildings.Templates.Components.Types.Damper.TwoPosition, + extent={{-680,360},{-600,440}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typDamRel==Buildings.Templates.Components.Types.Damper.Modulating, + extent={{-680,360},{-600,440}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + extent={{-510,440},{-770,700}}, + visible=typDamRel<>Buildings.Templates.Components.Types.Damper.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesOpposed.svg"), + Bitmap( + visible=typFanRel==Buildings.Templates.Components.Types.Fan.SingleVariable, + extent={{-140,500},{-340,700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg"), + Bitmap( + visible=typFanRel==Buildings.Templates.Components.Types.Fan.ArrayVariable, + extent={{-140,500},{-340,700}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Array.svg"), + Bitmap( + visible=typFanRel<>Buildings.Templates.Components.Types.Fan.None, + extent={{-320,278},{-158,440}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg"), + Bitmap( + visible=typ<>Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir, + extent={{-240,-40},{-160,40}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + extent={{-160,-130},{100,130}}, + visible=typ<>Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg", + origin={-30,-30}, + rotation=-90), + Bitmap( + extent={{-770,-760},{-510,-500}}, + visible=typDamOut<>Buildings.Templates.Components.Types.Damper.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg"), + Bitmap( + visible=typDamOut==Buildings.Templates.Components.Types.Damper.TwoPosition, + extent={{-680,-840},{-600,-760}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typDamOut==Buildings.Templates.Components.Types.Damper.Modulating, + extent={{-680,-840},{-600,-760}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + extent={{-510,-240},{-770,-500}}, + visible=typDamOutMin<>Buildings.Templates.Components.Types.Damper.None, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg"), + Bitmap( + visible=typDamOutMin==Buildings.Templates.Components.Types.Damper.TwoPosition, + extent={{-680,-240},{-600,-160}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typDamOutMin==Buildings.Templates.Components.Types.Damper.Modulating, + extent={{-680,-240},{-600,-160}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Line(points={{-100,700},{800,700}}, color={0,0,0}), + Line( + visible=typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirNoRelief, + points={{-800,500},{-100,500}}, + color={0,0,0}), + Line( + visible=typ==Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirNoRelief, + points={{-100,700},{-100,500}}, + color={0,0,0}), + Line(points={{96,500},{796,500}}, color={0,0,0}), + Line(points={{100,-500},{800,-500}},color={0,0,0}), + Line(points={{-800,-500},{-100,-500}},color={0,0,0}), + Line(points={{-800,-700},{800,-700}}, color={0,0,0}), + Line( + visible=typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir, + points={{100,500},{100,-500}}, + color={0,0,0}), + Line( + visible=typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir, + points={{-100,500},{-100,-300}}, + color={0,0,0}), + Line( + points={{-800,700},{-100,700}}, + color={0,0,0}, + visible=typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirNoRelief), + Line( + points={{-100,500},{100,500}}, + color={0,0,0}, + visible=typ == Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir), + Line( + points={{-100,-500},{100,-500}}, + color={0,0,0}, + visible=typ == Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir), + Line( + points={{-800,-300},{-100,-300}}, + color={0,0,0}, + visible=typDamOutMin <> Buildings.Templates.Components.Types.Damper.None), + Line( + points={{-100,-300},{-100,-500}}, + color={0,0,0}, + visible=typDamOutMin == Buildings.Templates.Components.Types.Damper.None and + typ <> Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.HundredPctOutdoorAir), + Bitmap( + visible=typSecOut==Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure, + extent={{-680,-142},{-600,-62}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg"), + Bitmap( + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, + extent={{-260,-500},{-60,-300}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg"), + Bitmap( + visible=typSecOut==Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, + extent={{-200,-240},{-120,-160}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Bitmap( + visible=typFanRet<>Buildings.Templates.Components.Types.Fan.None and + typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured, + extent={{580,360},{660,440}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Line(points={{664,446}}, color={28,108,200}), + Bitmap( + visible=typDamOutMin<>Buildings.Templates.Components.Types.Damper.None, + extent={{-338,-240},{-258,-160}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( + visible=typDamOutMin <> Buildings.Templates.Components.Types.Damper.None, + extent={{-400,-240},{-200,-440}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap( + visible=typDamOutMin<>Buildings.Templates.Components.Types.Damper.None and + (typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb or + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb), + extent={{-460,-160},{-380,-240}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg"), + Bitmap( + visible=typDamOutMin <> Buildings.Templates.Components.Types.Damper.None + and (typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb + or typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb), + extent={{-520,-240},{-320,-440}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap( + visible=typDamOutMin==Buildings.Templates.Components.Types.Damper.None, + extent={{-340,-840},{-260,-760}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( + visible=typDamOutMin == Buildings.Templates.Components.Types.Damper.None, + extent={{-400,-760},{-200,-560}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap( + visible=typDamOutMin==Buildings.Templates.Components.Types.Damper.None and + (typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb or + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb), + extent={{-460,-840},{-380,-760}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg"), + Bitmap( + visible=typDamOutMin == Buildings.Templates.Components.Types.Damper.None + and (typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb + or typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb), + extent={{-520,-760},{-320,-560}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap( + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper, + extent={{-260,-700},{-60,-500}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg"), + Bitmap( + visible=typSecOut==Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper, + extent={{-200,-840},{-120,-760}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Bitmap( + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + and typCtlFanRet == Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure, + extent={{260,760},{340,840}}, + fileName= + "modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg"), + Line( + points={{-160,-700},{-160,-760}}, + color={0,0,0}, + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper), + Line( + points={{-160,-238},{-160,-300}}, + color={0,0,0}, + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow), + Polygon( + points={{260,805},{220,805},{220,660},{230,660},{230,795},{260,795},{ + 260,805}}, + lineColor={0,0,0}, + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + and typCtlFanRet == Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure), + Polygon( + points={{492,605},{625,605},{625,440},{615,440},{615,595},{492,595},{ + 492,605}}, + lineColor={0,0,0}, + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + and typCtlFanRet == Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured), + Rectangle( + extent={{340,805},{380,795}}, + lineColor={0,0,0}, + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + and typCtlFanRet == Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure), + Polygon( + points={{-680,-95},{-725,-95},{-725,-340},{-715,-340},{-715,-105},{-680, + -105},{-680,-95}}, + lineColor={0,0,0}, + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure), + Polygon( + points={{-600,-95},{-555,-95},{-555,-340},{-565,-340},{-565,-105},{-600, + -105},{-600,-95}}, + lineColor={0,0,0}, + visible=typSecOut == Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure)}), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-140},{180,140}})), + Documentation(info=" +

+This class provides a standard interface for the outdoor/relief/return +air section of an air handler. +Typical components in that section include +

+ +")); + +end PartialOutdoorReliefReturnSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorSection.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorSection.mo new file mode 100644 index 00000000000..0b4bcfb55f3 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialOutdoorSection.mo @@ -0,0 +1,104 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial model PartialOutdoorSection "Interface class for outdoor air section" + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typ + "Outdoor air section type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamOut + "Outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamOutMin + "Minimum outdoor air damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + outer parameter Boolean have_recHea + "Set to true in case of heat recovery"; + outer parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer typCtlEco + "Economizer control type"; + + parameter + Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection + dat "Design and operating parameters"; + + final parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= + dat.damOut.m_flow_nominal + "Air mass flow rate"; + final parameter Modelica.Units.SI.MassFlowRate mOutMin_flow_nominal= + dat.mOutMin_flow_nominal + "Minimum outdoor air mass flow rate"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations"), + __ctrl_flow(enable=false)); + + parameter Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true, __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-190,-10},{-170,10}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{190,-10},{170,10}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aHeaRec( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) if have_recHea + "Optional fluid connector for heat recovery" + annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bHeaRec( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) if have_recHea + "Optional fluid connector for heat recovery" + annotation (Placement(transformation(extent={{-70,130},{-90,150}}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,140}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,140}))); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-180,-140}, + {180,140}}), graphics={ + Text( + extent={{-149,-150},{151,-190}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-140},{180,140}})), + Documentation(info=" +

+This class provides a standard interface for the outdoor +air section of an air handler. +Typical components in that section include +

+ +")); +end PartialOutdoorSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialReliefReturnSection.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialReliefReturnSection.mo new file mode 100644 index 00000000000..611af7ef6ad --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/PartialReliefReturnSection.mo @@ -0,0 +1,169 @@ +within Buildings.Templates.AirHandlersFans.Components.Interfaces; +partial model PartialReliefReturnSection "Interface class for relief/return air section" + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection typ + "Relief/return air section type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Damper typDamRel + "Relief damper type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Relief fan type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Return fan type" + annotation (Evaluate=true, Dialog(group="Configuration")); + + outer parameter Buildings.Templates.AirHandlersFans.Types.ControlFanReturn typCtlFanRet + "Return fan control type"; + outer parameter Boolean have_recHea + "Set to true in case of heat recovery"; + outer parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer typCtlEco + "Economizer control type"; + + parameter + Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection + dat "Design and operating parameters"; + + final parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= + if typFanRet <> Buildings.Templates.Components.Types.Fan.None then dat.fanRet.m_flow_nominal + elseif typFanRel <> Buildings.Templates.Components.Types.Fan.None then dat.fanRel.m_flow_nominal + elseif typDamRel <> Buildings.Templates.Components.Types.Damper.None then dat.damRel.m_flow_nominal + else dat.damRet.m_flow_nominal + "Air mass flow rate" + annotation (Dialog(group="Nominal condition")); + + final parameter Modelica.Units.SI.PressureDifference dpFan_nominal= + if typFanRel <> Buildings.Templates.Components.Types.Fan.None then + dat.fanRel.dp_nominal + elseif typFanRet <> Buildings.Templates.Components.Types.Fan.None then + dat.fanRet.dp_nominal + else 0 + "Relief/return fan total pressure rise" + annotation ( + Dialog(group="Nominal condition", + enable=typFanRel <> Buildings.Templates.Components.Types.Fan.None or + typFanRet <> Buildings.Templates.Components.Types.Fan.None)); + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations"), + __ctrl_flow(enable=false)); + + parameter Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true, __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{170,-10},{190,10}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.NoRelief + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-170,-10},{-190,10}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aHeaRec( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) if have_recHea + "Optional fluid connector for heat recovery" + annotation (Placement(transformation(extent={{-90,-150},{-70,-130}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bHeaRec( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) if have_recHea + "Optional fluid connector for heat recovery" + annotation (Placement(transformation(extent={{-30,-150},{-50,-130}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bRet( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.NoReturn + "Optional fluid connector for return branch" + annotation (Placement(transformation(extent={{10,-150},{-10,-130}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bPre( + redeclare final package Medium = MediumAir) + "Fluid connector for differential pressure sensor" + annotation (Placement(transformation(extent={{90,-150},{70,-130}}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,140}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,140}))); + Buildings.Fluid.FixedResistances.Junction splEco( + redeclare final package Medium = MediumAir, + final m_flow_nominal={1,-1,-1}*m_flow_nominal, + final dp_nominal=fill(0, 3), + final energyDynamics=energyDynamics, + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + "Splitter with air economizer" + annotation (Placement(transformation(extent={{10,-10},{-10,10}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure pAirRet_rel( + redeclare final package Medium = MediumAir, + final have_sen=typFanRet<>Buildings.Templates.Components.Types.Fan.None and + typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure) + "Return fan discharge static pressure sensor" + annotation (Placement(transformation(extent={{50,30},{70,50}}))); +equation + /* Control point connection - start */ + connect(pAirRet_rel.y, bus.pAirRet_rel); + /* Control point connection - end */ + connect(splEco.port_3, port_bRet) + annotation (Line(points={{0,-10},{0,-140}}, color={0,127,255})); + connect(pAirRet_rel.port_a, splEco.port_1) annotation (Line(points={{50,40},{20,40}, + {20,0},{10,0}}, color={0,127,255})); + connect(pAirRet_rel.port_b, port_bPre) + annotation (Line(points={{70,40},{80,40},{80,-140}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-180,-140}, + {180,140}}), graphics={ + Text( + extent={{-149,-150},{151,-190}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-180,-140},{180,140}})), + Documentation(info=" +

+This class provides a standard interface for the relief/return +air section of an air handler. +Typical components in that section include +

+ +")); +end PartialReliefReturnSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.mo b/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.mo new file mode 100644 index 00000000000..e79f4802096 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.AirHandlersFans.Components; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

+This package contains interface classes. +

+")); +end Interfaces; diff --git a/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.order b/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.order new file mode 100644 index 00000000000..cd9ee37903c --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/Interfaces/package.order @@ -0,0 +1,6 @@ +PartialController +PartialControllerVAVMultizone +PartialHeatRecovery +PartialOutdoorReliefReturnSection +PartialOutdoorSection +PartialReliefReturnSection diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/MixedAirWithDamper.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/MixedAirWithDamper.mo new file mode 100644 index 00000000000..37f58c08f48 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/MixedAirWithDamper.mo @@ -0,0 +1,118 @@ +within Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection; +model MixedAirWithDamper "Mixed air system with return air damper" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.OutdoorReliefReturnSection.MixedAirWithDamper, + final typSecOut=secOut.typ, + final typSecRel=secRel.typ, + final typDamOut=secOut.typDamOut, + final typDamOutMin=secOut.typDamOutMin, + final typDamRel=secRel.typDamRel, + final typDamRet=damRet.typ, + final typFanRel=secRel.typFanRel, + final typFanRet=secRel.typFanRet, + final have_eco=true, + final have_recHea=recHea.typ<>Buildings.Templates.AirHandlersFans.Types.HeatRecovery.None); + + replaceable + Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper + secOut constrainedby + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection( + redeclare final package MediumAir = MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final dat=dat) + "Outdoor air section" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.AirHandlersFans.Components.OutdoorSection.SingleDamper secOut + "Single damper for ventilation and economizer, with airflow measurement station"), + choice(redeclare replaceable Buildings.Templates.AirHandlersFans.Components.OutdoorSection.DedicatedDampersAirflow secOut + "Separate dampers for ventilation and economizer, with airflow measurement station"), + choice(redeclare replaceable Buildings.Templates.AirHandlersFans.Components.OutdoorSection.DedicatedDampersPressure secOut + "Separate dampers for ventilation and economizer, with differential pressure sensor")), + Dialog(group="Configuration"), + Placement(transformation(extent={{-58,-94},{-22,-66}}))); + + replaceable + Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan + secRel constrainedby + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + redeclare final package MediumAir = MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final dat=dat) + "Relief/return air section" + annotation ( + choices( + choice( + redeclare Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReturnFan secRel + "Return fan with modulating relief damper"), + choice( + redeclare Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefFan + secRel + "Relief fan with two-position relief damper"), + choice( + redeclare Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefDamper + secRel + "Modulating relief damper without fan")), + Dialog(group="Configuration"), + Placement(transformation(extent={{-18,66},{18,94}}))); + + Buildings.Templates.Components.Dampers.Modulating damRet( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damRet, + final text_rotation=90) + "Return damper" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,0}))); + + // Currently only the configuration without heat recovery is supported. + replaceable Buildings.Templates.AirHandlersFans.Components.HeatRecovery.None recHea + constrainedby + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialHeatRecovery( + redeclare final package MediumAir = MediumAir, + final allowFlowReversal=allowFlowReversal) + "Heat recovery" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + +equation + /* Control point connection - start */ + connect(damRet.bus, bus.damRet); + connect(bus, secRel.bus); + connect(secOut.bus, bus); + connect(recHea.bus, bus); + /* Control point connection - end */ + connect(port_Rel, secRel.port_b) + annotation (Line(points={{-180,80},{-18,80}}, color={0,127,255})); + connect(secRel.port_a, port_Ret) + annotation (Line(points={{18,80},{180,80}}, color={0,127,255})); + connect(secRel.port_bRet, damRet.port_a) + annotation (Line(points={{0,66},{0,10}}, color={0,127,255})); + connect(port_Out, secOut.port_a) + annotation (Line(points={{-180,-80},{-58,-80}}, color={0,127,255})); + connect(secOut.port_b, port_Sup) + annotation (Line(points={{-22,-80},{180,-80}}, color={0,127,255})); + connect(damRet.port_b, port_Sup) + annotation (Line(points={{0,-10},{0,-80},{180,-80}}, color={0,127,255})); + connect(secRel.port_bPre, port_bPre) annotation (Line(points={{8,66},{8,60},{80, + 60},{80,140}}, color={0,127,255})); + connect(recHea.port_aRel, secRel.port_bHeaRec) annotation (Line(points={{-70,6}, + {-60,6},{-60,56},{-4,56},{-4,66}}, color={0,127,255})); + connect(secRel.port_aHeaRec, recHea.port_bRel) annotation (Line(points={{-8,66}, + {-8,60},{-100,60},{-100,6},{-90,6}}, color={0,127,255})); + connect(recHea.port_aOut, secOut.port_bHeaRec) annotation (Line(points={{-90,-6}, + {-100,-6},{-100,-60},{-48,-60},{-48,-66}}, color={0,127,255})); + connect(recHea.port_bOut, secOut.port_aHeaRec) annotation (Line(points={{-70,-6}, + {-60,-6},{-60,-56},{-44,-56},{-44,-66}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer. +

+")); +end MixedAirWithDamper; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.mo new file mode 100644 index 00000000000..39c3f35acb6 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.mo @@ -0,0 +1,20 @@ +within Buildings.Templates.AirHandlersFans.Components; +package OutdoorReliefReturnSection "Models for outdoor/relief/return air section" + extends Modelica.Icons.VariantsPackage; + + + + +annotation (Documentation(info=" +

+Components inside that package represent the outdoor/relief/return air section of an +air handler. +They are composed of + +Buildings.Templates.AirHandlersFans.Components.OutdoorSection +and + +Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection. +

+")); +end OutdoorReliefReturnSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.order b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.order new file mode 100644 index 00000000000..4409476a142 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorReliefReturnSection/package.order @@ -0,0 +1 @@ +MixedAirWithDamper diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersAirflow.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersAirflow.mo new file mode 100644 index 00000000000..99d22dad14e --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersAirflow.mo @@ -0,0 +1,96 @@ +within Buildings.Templates.AirHandlersFans.Components.OutdoorSection; +model DedicatedDampersAirflow + "Separate dampers for ventilation and economizer, with airflow measurement station" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection( + final typ=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersAirflow, + final typDamOut=damOut.typ, + final typDamOutMin=damOutMin.typ); + + Buildings.Templates.Components.Dampers.Modulating damOut( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damOut) + "Economizer outdoor air damper" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,0}))); + Buildings.Templates.Components.Dampers.Modulating damOutMin( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damOutMin) + "Minimum outdoor air damper" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,60}))); + + Buildings.Templates.Components.Sensors.Temperature TOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=true, + final m_flow_nominal=mOutMin_flow_nominal) + "Outdoor air temperature sensor" + annotation (Placement(transformation(extent={{70,50},{90,70}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VOutMin_flow( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=true, + final m_flow_nominal=mOutMin_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS) + "Minimum outdoor air volume flow rate sensor" + annotation (Placement(transformation(extent={{110,50},{130,70}}))); + Buildings.Templates.Components.Sensors.SpecificEnthalpy hAirOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen= + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb or + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb, + final m_flow_nominal=mOutMin_flow_nominal) + "Outdoor air enthalpy sensor" + annotation (Placement(transformation(extent={{30,50},{50,70}}))); +equation + /* Control point connection - start */ + connect(damOut.bus, bus.damOut); + connect(damOutMin.bus, bus.damOutMin); + connect(TOut.y, bus.TOut); + connect(hAirOut.y, bus.hAirOut); + connect(VOutMin_flow.y, bus.VOutMin_flow); + /* Control point connection - end */ + connect(damOut.port_b, port_b) + annotation (Line(points={{10,0},{180,0}}, color={0,127,255})); + connect(TOut.port_b, VOutMin_flow.port_a) + annotation (Line(points={{90,60},{110,60}},color={0,127,255})); + connect(VOutMin_flow.port_b, port_b) annotation (Line(points={{130,60},{160, + 60},{160,0},{180,0}}, + color={0,127,255})); + connect(damOutMin.port_b, hAirOut.port_a) + annotation (Line(points={{10,60},{30,60}}, color={0,127,255})); + connect(hAirOut.port_b, TOut.port_a) + annotation (Line(points={{50,60},{70,60}}, color={0,127,255})); + connect(port_a, damOut.port_a) + annotation (Line(points={{-180,0},{-10,0}}, color={0,127,255})); + connect(damOutMin.port_a, damOut.port_a) annotation (Line(points={{-10,60},{ + -20,60},{-20,0},{-10,0}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer and +minimum OA control with a separate minimum OA damper and airflow measurement. +

+"), Icon(graphics={ + Line( + points={{0,140},{0,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{-180,60},{0,60}}, + color={28,108,200}, + thickness=1)})); +end DedicatedDampersAirflow; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersPressure.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersPressure.mo new file mode 100644 index 00000000000..997a78c66e5 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/DedicatedDampersPressure.mo @@ -0,0 +1,98 @@ +within Buildings.Templates.AirHandlersFans.Components.OutdoorSection; +model DedicatedDampersPressure + "Separate dampers for ventilation and economizer, with differential pressure sensor" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection( + final typ=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.DedicatedDampersPressure, + final typDamOut=damOut.typ, + final typDamOutMin=damOutMin.typ); + + Buildings.Templates.Components.Dampers.Modulating damOut( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damOut) + "Economizer outdoor air damper" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,0}))); + Buildings.Templates.Components.Dampers.TwoPosition damOutMin( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damOutMin) + "Minimum outdoor air damper" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,60}))); + + Buildings.Templates.Components.Sensors.Temperature TOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=true, + final m_flow_nominal=mOutMin_flow_nominal) + "Outdoor air temperature sensor" + annotation (Placement(transformation(extent={{70,50},{90,70}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure dpAirOutMin( + redeclare final package Medium = MediumAir, + final have_sen=true) + "Minimum outdoor air damper differential pressure sensor" + annotation (Placement(transformation(extent={{-10,90},{10,110}}))); + Buildings.Templates.Components.Sensors.SpecificEnthalpy hAirOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen= + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb or + typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb, + final m_flow_nominal=mOutMin_flow_nominal) + "Outdoor air enthalpy sensor" + annotation (Placement(transformation(extent={{30,50},{50,70}}))); +equation + /* Control point connection - start */ + connect(damOut.bus, bus.damOut); + connect(damOutMin.bus, bus.damOutMin); + connect(TOut.y, bus.TOut); + connect(hAirOut.y, bus.hAirOut); + connect(dpAirOutMin.y, bus.dpAirOutMin); + /* Control point connection - end */ + connect(TOut.port_b, port_b) annotation (Line(points={{90,60},{160,60},{160,0}, + {180,0}}, color={0,127,255})); + connect(damOut.port_b, port_b) + annotation (Line(points={{10,0},{180,0}}, color={0,127,255})); + + connect(damOutMin.port_a, dpAirOutMin.port_a) annotation (Line(points={{-10,60}, + {-20,60},{-20,100},{-10,100}}, + color={0,127,255})); + connect(damOutMin.port_b, dpAirOutMin.port_b) annotation (Line(points={{10,60},{ + 20,60},{20,100},{10,100}}, + color={0,127,255})); + connect(damOutMin.port_b, hAirOut.port_a) + annotation (Line(points={{10,60},{30,60}}, color={0,127,255})); + connect(hAirOut.port_b, TOut.port_a) + annotation (Line(points={{50,60},{70,60}}, color={0,127,255})); + connect(port_a, damOut.port_a) + annotation (Line(points={{-180,0},{-10,0}}, color={0,127,255})); + connect(damOut.port_a, damOutMin.port_a) annotation (Line(points={{-10,0},{ + -20,0},{-20,60},{-10,60}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer and +minimum OA control with a separate minimum OA damper and differential +pressure control. +

+"), Icon(graphics={ + Line( + points={{0,140},{0,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{-180,60},{0,60}}, + color={28,108,200}, + thickness=1)})); +end DedicatedDampersPressure; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/SingleDamper.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/SingleDamper.mo new file mode 100644 index 00000000000..655ae764472 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/SingleDamper.mo @@ -0,0 +1,78 @@ +within Buildings.Templates.AirHandlersFans.Components.OutdoorSection; +model SingleDamper + "Single damper for ventilation and economizer, with airflow measurement station" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSection( + final typ=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper, + final typDamOut=damOut.typ, + final typDamOutMin=Buildings.Templates.Components.Types.Damper.None); + + Buildings.Templates.Components.Dampers.Modulating damOut( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damOut) + "Outdoor air damper" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,0}))); + + Buildings.Templates.Components.Sensors.VolumeFlowRate VOut_flow( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=true, + final m_flow_nominal=m_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS) + "Outdoor air volume flow rate sensor" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Buildings.Templates.Components.Sensors.Temperature TOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=true, + final m_flow_nominal=m_flow_nominal) + "Outdoor air temperature sensor" + annotation (Placement(transformation(extent={{50,-10},{70,10}}))); + Buildings.Templates.Components.Sensors.SpecificEnthalpy hAirOut( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversal, + final have_sen=typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedEnthalpyWithFixedDryBulb + or typCtlEco == Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb, + final m_flow_nominal=m_flow_nominal) "Outdoor air enthalpy sensor" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +equation + /* Control point connection - start */ + connect(damOut.bus, bus.damOut); + connect(TOut.y, bus.TOut); + connect(hAirOut.y, bus.hAirOut); + connect(VOut_flow.y, bus.VOut_flow); + /* Control point connection - end */ + connect(TOut.port_b, VOut_flow.port_a) + annotation (Line(points={{70,0},{80,0}}, color={0,127,255})); + connect(VOut_flow.port_b, port_b) + annotation (Line(points={{100,0},{180,0}}, color={0,127,255})); + + connect(damOut.port_b, hAirOut.port_a) + annotation (Line(points={{10,0},{20,0}}, color={0,127,255})); + connect(hAirOut.port_b, TOut.port_a) + annotation (Line(points={{40,0},{50,0}}, color={0,127,255})); + connect(port_a, damOut.port_a) + annotation (Line(points={{-180,0},{-10,0}}, color={0,127,255})); + annotation (Icon(graphics={ + Line( + points={{0,140},{0,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1)}), Documentation(info=" +

+This model represents a configuration with an air economizer +and minimum OA control with a single common damper +and airflow measurement +

+")); +end SingleDamper; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.mo b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.mo new file mode 100644 index 00000000000..f221f60f42b --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.mo @@ -0,0 +1,15 @@ +within Buildings.Templates.AirHandlersFans.Components; +package OutdoorSection "Models for outdoor air section" + extends Modelica.Icons.VariantsPackage; + + + + + +annotation (Documentation(info=" +

+Components inside that package represent the outdoor air section of an +air handler. +

+")); +end OutdoorSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.order b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.order new file mode 100644 index 00000000000..ea94a32dbac --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/OutdoorSection/package.order @@ -0,0 +1,3 @@ +DedicatedDampersAirflow +DedicatedDampersPressure +SingleDamper diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoRelief.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoRelief.mo new file mode 100644 index 00000000000..d2418b8a804 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoRelief.mo @@ -0,0 +1,54 @@ +within Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection; +model NoRelief "No relief branch" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.NoRelief, + final typDamRel=Buildings.Templates.Components.Types.Damper.None, + final typFanRel=Buildings.Templates.Components.Types.Fan.None, + final typFanRet=fanRet.typ); + + replaceable Buildings.Templates.Components.Fans.None fanRet + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final dat=dat.fanRet, + final have_senFlo= + typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured, + final text_flip=true) + "Return fan" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Fans.None fanRet + "No fan"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.SingleVariable fanRet + "Single fan - Variable speed"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.ArrayVariable fanRet + "Fan array - Variable speed")), + Dialog(group="Exhaust/relief/return section"), + Placement(transformation(extent={{70,-10},{50,10}}))); + +equation + /* Control point connection - start */ + connect(fanRet.bus, bus.fanRet); + /* Control point connection - end */ + connect(fanRet.port_b, splEco.port_1) + annotation (Line(points={{50,0},{10,0}}, color={0,127,255})); + connect(fanRet.port_a, port_a) + annotation (Line(points={{70,0},{180,0}}, color={0,127,255})); + annotation (Icon(graphics={ + Line( + points={{0,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{0,0},{0,-140}}, + color={28,108,200}, + thickness=1)}), Documentation(info=" +

+This model represents a configuration with an air economizer +and no relief branch. +The return fan is optional. +

+")); +end NoRelief; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoReturn.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoReturn.mo new file mode 100644 index 00000000000..758bf00210f --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/NoReturn.mo @@ -0,0 +1,62 @@ +within Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection; +model NoReturn "No return branch" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.NoReturn, + final typDamRel=damRel.typ, + final typFanRel=Buildings.Templates.Components.Types.Fan.None, + final typFanRet=fanRet.typ); + + Buildings.Templates.Components.Dampers.TwoPosition damRel( + redeclare final package Medium = MediumAir, + final dat=dat.damRel, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final text_flip=true) + "Relief damper" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-150,0}))); + replaceable Buildings.Templates.Components.Fans.SingleVariable fanRet + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final dat=dat.fanRet, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final have_senFlo= + typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured, + final text_flip=true) + "Return fan" + annotation (choices(choice(redeclare replaceable + Buildings.Templates.Components.Fans.SingleVariable fanRet + "Single fan - Variable speed"), choice(redeclare replaceable + Buildings.Templates.Components.Fans.ArrayVariable fanRet + "Fan array - Variable speed")), + Placement( + transformation(extent={{70,-10},{50,10}}))); + +equation + /* Control point connection - start */ + connect(fanRet.bus, bus.fanRet); + connect(damRel.bus, bus.damRel); + /* Control point connection - end */ + connect(port_b, damRel.port_b) + annotation (Line(points={{-180,0},{-160,0}}, color={0,127,255})); + connect(damRel.port_a, splEco.port_2) + annotation (Line(points={{-140,0},{-10,0}}, color={0,127,255})); + connect(splEco.port_1, fanRet.port_b) + annotation (Line(points={{10,0},{50,0}}, color={0,127,255})); + connect(fanRet.port_a, port_a) + annotation (Line(points={{70,0},{180,0}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with no air economizer +for 100% outdoor air applications (such as DOAS). +

+"), Icon(graphics={ + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1)})); +end NoReturn; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefDamper.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefDamper.mo new file mode 100644 index 00000000000..d58972dd50d --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefDamper.mo @@ -0,0 +1,45 @@ +within Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection; +model ReliefDamper "Modulating relief damper without fan" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper, + final typDamRel=damRel.typ, + final typFanRel=Buildings.Templates.Components.Types.Fan.None, + final typFanRet=Buildings.Templates.Components.Types.Fan.None); + + Buildings.Templates.Components.Dampers.Modulating damRel( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damRel, + final text_flip=true, + typBla=Buildings.Templates.Components.Types.DamperBlades.Opposed) + "Relief damper" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-150,0}))); +equation + /* Control point connection - start */ + connect(damRel.bus, bus.damRel); + /* Control point connection - end */ + connect(port_b, damRel.port_b) + annotation (Line(points={{-180,0},{-160,0}}, color={0,127,255})); + connect(damRel.port_a, splEco.port_2) + annotation (Line(points={{-140,0},{-10,0}}, color={0,127,255})); + connect(splEco.port_1, port_a) + annotation (Line(points={{10,0},{180,0}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer +and an actuated relief damper (modulating) without fan. +

+"), Icon(graphics={ + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{0,0},{0,-140}}, + color={28,108,200}, + thickness=1)})); +end ReliefDamper; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefFan.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefFan.mo new file mode 100644 index 00000000000..db8259aa454 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReliefFan.mo @@ -0,0 +1,64 @@ +within Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection; +model ReliefFan "Relief fan with two-position relief damper" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefFan, + final typDamRel=damRel.typ, + final typFanRel=fanRel.typ, + final typFanRet=Buildings.Templates.Components.Types.Fan.None); + + Buildings.Templates.Components.Dampers.TwoPosition damRel( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final dat=dat.damRel, + final text_flip=true) + "Relief damper" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-150,0}))); + replaceable Buildings.Templates.Components.Fans.SingleVariable fanRel + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final dat=dat.fanRel, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final have_senFlo=false, + final text_flip=true, + typSin=Buildings.Templates.Components.Types.FanSingle.Propeller) + "Relief fan" + annotation (choices( + choice(redeclare replaceable Buildings.Templates.Components.Fans.SingleVariable fanRet + "Single fan - Variable speed"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.ArrayVariable fanRet + "Fan array - Variable speed")), Placement( + transformation(extent={{-100,-10},{-120,10}}))); +equation + /* Control point connection - start */ + connect(fanRel.bus, bus.fanRel); + connect(damRel.bus, bus.damRel); + /* Control point connection - end */ + connect(port_b, damRel.port_b) + annotation (Line(points={{-180,0},{-160,0}}, color={0,127,255})); + connect(damRel.port_a, fanRel.port_b) + annotation (Line(points={{-140,0},{-120,0}}, color={0,127,255})); + connect(fanRel.port_a, splEco.port_2) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(splEco.port_1, port_a) + annotation (Line(points={{10,0},{180,0}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer +and a relief fan with an actuated relief damper (two-position). +

+"), Icon(graphics={ + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{0,0},{0,-140}}, + color={28,108,200}, + thickness=1)})); +end ReliefFan; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReturnFan.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReturnFan.mo new file mode 100644 index 00000000000..b5fd39c4616 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/ReturnFan.mo @@ -0,0 +1,65 @@ +within Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection; +model ReturnFan "Return fan with modulating relief damper" + extends + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialReliefReturnSection( + final typ=Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan, + final typDamRel=damRel.typ, + final typFanRel=Buildings.Templates.Components.Types.Fan.None, + final typFanRet=fanRet.typ); + + Buildings.Templates.Components.Dampers.Modulating damRel( + redeclare final package Medium = MediumAir, + final dat=dat.damRel, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal, + final text_flip=true) + "Relief damper" + annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=0, + origin={-150,0}))); + replaceable Buildings.Templates.Components.Fans.SingleVariable fanRet + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final dat=dat.fanRet, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final have_senFlo= + typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured, + final text_flip=true) + "Return fan" + annotation (choices(choice(redeclare replaceable + Buildings.Templates.Components.Fans.SingleVariable fanRet + "Single fan - Variable speed"), choice(redeclare replaceable + Buildings.Templates.Components.Fans.ArrayVariable fanRet + "Fan array - Variable speed")), + Placement(transformation(extent={{70,-10},{50,10}}))); + +equation + /* Control point connection - start */ + connect(fanRet.bus, bus.fanRet); + connect(damRel.bus, bus.damRel); + /* Control point connection - end */ + connect(port_b, damRel.port_b) + annotation (Line(points={{-180,0},{-160,0}}, color={0,127,255})); + connect(fanRet.port_b, splEco.port_1) + annotation (Line(points={{50,0},{10,0}}, color={0,127,255})); + connect(damRel.port_a, splEco.port_2) + annotation (Line(points={{-140,0},{-10,0}}, color={0,127,255})); + connect(fanRet.port_a, port_a) + annotation (Line(points={{70,0},{180,0}}, color={0,127,255})); + annotation (Documentation(info=" +

+This model represents a configuration with an air economizer +and a return fan with an actuated relief damper (modulating). +

+"), Icon(graphics={ + Line( + points={{-180,0},{180,0}}, + color={28,108,200}, + thickness=1), + Line( + points={{0,0},{0,-140}}, + color={28,108,200}, + thickness=1)})); +end ReturnFan; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.mo b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.mo new file mode 100644 index 00000000000..7a4405a1d50 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.mo @@ -0,0 +1,15 @@ +within Buildings.Templates.AirHandlersFans.Components; +package ReliefReturnSection "Models for relief/return air section" + extends Modelica.Icons.VariantsPackage; + + + + + +annotation (Documentation(info=" +

+Components inside that package represent the relief/return air section of an +air handler. +

+")); +end ReliefReturnSection; diff --git a/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.order b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.order new file mode 100644 index 00000000000..578eba9e032 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/ReliefReturnSection/package.order @@ -0,0 +1,5 @@ +NoRelief +NoReturn +ReliefDamper +ReliefFan +ReturnFan diff --git a/Buildings/Templates/AirHandlersFans/Components/package.mo b/Buildings/Templates/AirHandlersFans/Components/package.mo new file mode 100644 index 00000000000..3188303effb --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.AirHandlersFans; +package Components "Package with component models" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

+This package contains component models that are used in + +Buildings.Templates.AirHandlersFans. +

+")); +end Components; diff --git a/Buildings/Templates/AirHandlersFans/Components/package.order b/Buildings/Templates/AirHandlersFans/Components/package.order new file mode 100644 index 00000000000..5e7e1159a72 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Components/package.order @@ -0,0 +1,7 @@ +Controls +HeatRecovery +OutdoorReliefReturnSection +OutdoorSection +ReliefReturnSection +Data +Interfaces diff --git a/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo b/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo new file mode 100644 index 00000000000..ae07f81f1e1 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo @@ -0,0 +1,64 @@ +within Buildings.Templates.AirHandlersFans.Data; +record PartialAirHandler "Record for air handler interface class" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.AirHandlersFans.Types.Configuration typ + "Type of system" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanSup + "Type of supply fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of return fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Type of relief fan" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_souChiWat + "Set to true if cooling coil requires fluid ports on the source side" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_souHeaWat + "Set to true if heating coil requires fluid ports on the source side" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.AirHandlersFans.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter String id="" + "System tag" + annotation (Dialog(tab="Advanced")); + parameter String id_souChiWat="" + "CHW supply system tag" + annotation (Dialog(tab="Advanced", enable=have_souChiWat)); + parameter String id_souHeaWat="" + "HHW supply system tag" + annotation (Dialog(tab="Advanced", enable=have_souHeaWat)); + + replaceable parameter Buildings.Templates.AirHandlersFans.Components.Data.PartialController + ctl( + final typFanSup=typFanSup, + final typFanRel=typFanRel, + final typFanRet=typFanRet, + final typ=typCtl) + "Controller" + annotation (Dialog(group="Controls")); + + parameter Modelica.Units.SI.MassFlowRate mAirSup_flow_nominal + "Supply air mass flow rate" + annotation (Dialog(enable=typ<>Buildings.Templates.AirHandlersFans.Types.Configuration.ExhaustOnly)); + parameter Modelica.Units.SI.MassFlowRate mAirRet_flow_nominal + "Return air mass flow rate" + annotation (Dialog(enable=typ<>Buildings.Templates.AirHandlersFans.Types.Configuration.SupplyOnly)); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for the class + +Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler. +

+

+The tab Advanced contains some optional parameters that can be used +for workflow automation, but are not used for simulation. +

+")); +end PartialAirHandler; diff --git a/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo new file mode 100644 index 00000000000..72d94578f86 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo @@ -0,0 +1,102 @@ +within Buildings.Templates.AirHandlersFans.Data; +record VAVMultiZone "Record for multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.Data.PartialAirHandler( + redeclare Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController + ctl( + final typSecOut=typSecOut, + final buiPreCon=buiPreCon, + final stdVen=stdVen), + final mAirSup_flow_nominal=if typFanSup<>Buildings.Templates.Components.Types.Fan.None + then fanSup.m_flow_nominal else 0, + final mAirRet_flow_nominal=if typFanRet<>Buildings.Templates.Components.Types.Fan.None + then fanRet.m_flow_nominal + elseif typFanRel<>Buildings.Templates.Components.Types.Fan.None + then fanRel.m_flow_nominal + elseif typFanSup<>Buildings.Templates.Components.Types.Fan.None + then fanSup.m_flow_nominal else 0); + + parameter Buildings.Templates.Components.Types.Coil typCoiHeaPre + "Type of heating coil in preheat position" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Coil typCoiCoo + "Type of cooling coil" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Coil typCoiHeaReh + "Type of heating coil in reheat position" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Valve typValCoiHeaPre + "Type of valve for heating coil in preheat position" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Valve typValCoiCoo + "Type of valve for cooling coil" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Valve typValCoiHeaReh + "Type of valve for heating coil in reheat position" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typSecOut + "Type of outdoor air section" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes buiPreCon + "Type of building pressure control system" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation(Evaluate=true, Dialog(group="Energy and ventilation standards", enable=false)); + + parameter Buildings.Templates.Components.Data.Fan fanSup( + final typ=typFanSup) + "Supply fan" + annotation (Dialog( + group="Fans", enable=typFanSup <> Buildings.Templates.Components.Types.Fan.None)); + + extends + Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection( + fanRel, + fanRet, + damOut( + m_flow_nominal=mAirSup_flow_nominal), + damOutMin( + m_flow_nominal=mOutMin_flow_nominal), + damRel( + m_flow_nominal=mAirRet_flow_nominal), + damRet( + m_flow_nominal=mAirRet_flow_nominal)); + + parameter Buildings.Templates.Components.Data.Coil coiHeaPre( + final typ=typCoiHeaPre, + final typVal=typValCoiHeaPre, + final have_sou=have_souHeaWat, + mAir_flow_nominal=mAirSup_flow_nominal) + "Heating coil in preheat position" + annotation (Dialog(group="Coils", + enable=typCoiHeaPre <> Buildings.Templates.Components.Types.Coil.None)); + + parameter Buildings.Templates.Components.Data.Coil coiCoo( + final typ=typCoiCoo, + final typVal=typValCoiCoo, + final have_sou=have_souChiWat, + mAir_flow_nominal=mAirSup_flow_nominal) + "Cooling coil" + annotation (Dialog( + group="Coils", enable=typCoiCoo <> Buildings.Templates.Components.Types.Coil.None)); + + parameter Buildings.Templates.Components.Data.Coil coiHeaReh( + final typ=typCoiHeaReh, + final typVal=typValCoiHeaReh, + final have_sou=have_souHeaWat, + mAir_flow_nominal=mAirSup_flow_nominal) + "Heating coil in reheat position" + annotation (Dialog(group="Coils", + enable=typCoiHeaReh <> Buildings.Templates.Components.Types.Coil.None)); + +annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "dat", + Documentation(info=" +

+This record provides the set of sizing and operating parameters for the class + +Buildings.Templates.AirHandlersFans.VAVMultiZone. +

+")); +end VAVMultiZone; diff --git a/Buildings/Templates/AirHandlersFans/Data/package.mo b/Buildings/Templates/AirHandlersFans/Data/package.mo new file mode 100644 index 00000000000..b5d21b2fde9 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.AirHandlersFans; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters. +

+")); +end Data; diff --git a/Buildings/Templates/AirHandlersFans/Data/package.order b/Buildings/Templates/AirHandlersFans/Data/package.order new file mode 100644 index 00000000000..d53cb21682b --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Data/package.order @@ -0,0 +1,2 @@ +PartialAirHandler +VAVMultiZone diff --git a/Buildings/Templates/AirHandlersFans/Interfaces/Bus.mo b/Buildings/Templates/AirHandlersFans/Interfaces/Bus.mo new file mode 100644 index 00000000000..1388e92f03c --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Interfaces/Bus.mo @@ -0,0 +1,42 @@ +within Buildings.Templates.AirHandlersFans.Interfaces; +expandable connector Bus "Control bus for air handler" + extends Modelica.Icons.SignalBus; + + Buildings.Templates.Components.Interfaces.Bus fanSup + "Supply fan points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus fanRel + "Relief fan points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus fanRet + "Return fan points" + annotation (HideResult=false); + + Buildings.Templates.Components.Interfaces.Bus coiHea + "Heating coil (preheat or reheat position, only one coil allowed) points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus coiCoo + "Cooling coil points" + annotation (HideResult=false); + + Buildings.Templates.Components.Interfaces.Bus damOut + "OA damper points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus damOutMin + "Minimum OA damper points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus damRel + "Relief damper points" + annotation (HideResult=false); + Buildings.Templates.Components.Interfaces.Bus damRet + "Return damper points" + annotation (HideResult=false); + + annotation ( + defaultComponentName="bus", Documentation(info=" +

+This expandable connector provides a standard interface for +all control signals required by an air handler controller. +

+")); +end Bus; diff --git a/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo b/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo new file mode 100644 index 00000000000..35c39095fa5 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo @@ -0,0 +1,236 @@ +within Buildings.Templates.AirHandlersFans.Interfaces; +partial model PartialAirHandler "Interface class for air handler" + inner replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + inner replaceable package MediumChiWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "CHW medium" + annotation(Dialog(enable=have_souChiWat), + __ctrl_flow(enable=false)); + inner replaceable package MediumHeaWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HHW medium" + annotation(Dialog(enable=have_souHeaWat), + __ctrl_flow(enable=false)); + + parameter Buildings.Templates.AirHandlersFans.Types.Configuration typ + "Type of system" + annotation (Evaluate=true, Dialog(group="Configuration")); + + inner parameter Integer nZon(min=1) + "Number of served zones" + annotation ( + Evaluate=true, + Dialog(group="Configuration")); + + replaceable parameter + Buildings.Templates.AirHandlersFans.Data.PartialAirHandler dat( + final typ=typ, + final typFanSup=typFanSup, + final typFanRel=typFanRel, + final typFanRet=typFanRet, + final have_souChiWat=have_souChiWat, + final have_souHeaWat=have_souHeaWat) + "Design and operating parameters" + annotation (Placement(transformation(extent={{270,250},{290,270}}))); + + final parameter String id=dat.id + "System tag" + annotation (Dialog(group="Configuration")); + + parameter Boolean have_porRel= + typ==Buildings.Templates.AirHandlersFans.Types.Configuration.ExhaustOnly + "Set to true for relief (exhaust) fluid port" + annotation ( + Evaluate=true, + Dialog( + group="Configuration", + enable=false)); + parameter Boolean have_souChiWat + "Set to true if system uses CHW" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_souHeaWat + "Set to true if system uses HHW" + annotation (Evaluate=true, Dialog(group="Configuration")); + + inner parameter Buildings.Templates.Components.Types.Fan typFanSup + "Type of supply fan" + annotation (Evaluate=true, Dialog(group="Configuration")); + inner parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of return fan" + annotation (Evaluate=true, Dialog(group="Configuration")); + inner parameter Buildings.Templates.Components.Types.Fan typFanRel + "Type of relief fan" + annotation (Evaluate=true, Dialog(group="Configuration")); + + // Design parameters + final parameter Modelica.Units.SI.MassFlowRate mAirSup_flow_nominal= + dat.mAirSup_flow_nominal + "Supply air mass flow rate" + annotation (Dialog(group="Nominal condition")); + final parameter Modelica.Units.SI.MassFlowRate mAirRet_flow_nominal= + dat.mAirRet_flow_nominal + "Return air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal + "Total CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal + "Total HHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal + "Total CHW heat flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal + "Total HHW heat flow rate" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations"), + __ctrl_flow(enable=false)); + + final parameter Boolean allowFlowReversalAir=true + "= true to allow flow reversal, false restricts to design direction - Air side" + annotation (Dialog(tab="Assumptions"), Evaluate=true, + __ctrl_flow(enable=false)); + parameter Boolean allowFlowReversalLiq=true + "= true to allow flow reversal, false restricts to design direction - CHW and HW side" + annotation (Dialog(tab="Assumptions", enable=have_souChiWat or have_souHeaWat), + Evaluate=true, + __ctrl_flow(enable=false)); + parameter Boolean show_T = false + "= true, if actual temperature at ports of subcomponents is computed" + annotation(Dialog(tab="Advanced",group="Diagnostics"), + __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_Out( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.Configuration.ExhaustOnly + "Outdoor air intake" + annotation (Placement(transformation( + extent={{-310,-210},{-290,-190}}), iconTransformation(extent={{-210, + -110},{-190,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_Sup( + redeclare final package Medium =MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) if typ + == Buildings.Templates.AirHandlersFans.Types.Configuration.SupplyOnly or typ == + Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct + "Supply air" annotation ( + Placement(transformation(extent={{290,-210},{310,-190}}), + iconTransformation(extent={{190,-110},{210,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_SupCol( + redeclare final package Medium =MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ == Buildings.Templates.AirHandlersFans.Types.Configuration.DualDuct + "Dual duct cold deck air supply" + annotation (Placement(transformation( + extent={{290,-250},{310,-230}}), iconTransformation(extent={{190, + -180},{210,-160}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_SupHot( + redeclare final package Medium =MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ == Buildings.Templates.AirHandlersFans.Types.Configuration.DualDuct + "Dual duct hot deck air supply" + annotation (Placement( + transformation(extent={{290,-170},{310,-150}}), iconTransformation( + extent={{190,-40},{210,-20}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_Ret( + redeclare final package Medium =MediumAir, + m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.Configuration.SupplyOnly + "Return air" + annotation (Placement(transformation(extent={{290,-90},{310,-70}}), + iconTransformation(extent={{190,90},{210,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_Rel( + redeclare final package Medium = MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.AirHandlersFans.Types.Configuration.SupplyOnly and have_porRel + "Relief (exhaust) air" + annotation (Placement(transformation(extent={{-310,-90},{-290,-70}}), + iconTransformation(extent={{-210,90}, {-190,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bChiWat( + redeclare final package Medium = MediumChiWat, + m_flow(max=if allowFlowReversalLiq then +Modelica.Constants.inf else 0), + h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + if have_souChiWat + "CHW return port" annotation ( + Placement(transformation(extent={{50,-290},{70,-270}}), + iconTransformation(extent={{40,-210},{60,-190}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aChiWat( + redeclare final package Medium = MediumChiWat, + m_flow(min=if allowFlowReversalLiq then -Modelica.Constants.inf else 0), + h_outflow(start=MediumChiWat.h_default, nominal=MediumChiWat.h_default)) + if have_souChiWat + "CHW supply port" annotation ( + Placement(transformation(extent={{90,-290},{110,-270}}), + iconTransformation(extent={{120,-210},{140,-190}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bHeaWat( + redeclare final package Medium = MediumHeaWat, + m_flow(max=if allowFlowReversalLiq then +Modelica.Constants.inf else 0), + h_outflow(start=MediumHeaWat.h_default, nominal=MediumHeaWat.h_default)) + if have_souHeaWat + "HHW return port" annotation ( + Placement(transformation(extent={{-30,-290},{-10,-270}}), + iconTransformation(extent={{-140,-210},{-120,-190}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aHeaWat( + redeclare final package Medium = MediumHeaWat, + m_flow(min=if allowFlowReversalLiq then -Modelica.Constants.inf else 0), + h_outflow(start=MediumHeaWat.h_default, nominal=MediumHeaWat.h_default)) + if have_souHeaWat + "HHW supply port" annotation ( + Placement(transformation(extent={{10,-290},{30,-270}}), + iconTransformation(extent={{-60,-210},{-40,-190}}))); + Buildings.Templates.AirHandlersFans.Interfaces.Bus bus + "AHU control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-300,0}), iconTransformation( + extent={{-20,-19},{20,19}}, + rotation=90, + origin={-199,160}))); + Buildings.BoundaryConditions.WeatherData.Bus busWea + "Weather bus" + annotation (Placement(transformation(extent={{-20,260},{20,300}}), + iconTransformation(extent={{-20,182},{20,218}}))); + Buildings.Templates.ZoneEquipment.Interfaces.Bus busTer[nZon] + "Terminal unit control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={300,0}), iconTransformation( + extent={{-20,-20},{20,20}}, + rotation=-90, + origin={198,160}))); + +annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-200},{200,200}}), graphics={ + Text( + extent={{-155,-218},{145,-258}}, + textColor={0,0,255}, + textString="%name"), Rectangle( + extent={{-200,200},{200,-200}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-300,-280},{300, + 280}})), + Documentation(info=" +

+This partial class provides a standard interface for air handler templates. +

+")); +end PartialAirHandler; diff --git a/Buildings/Templates/AirHandlersFans/Interfaces/package.mo b/Buildings/Templates/AirHandlersFans/Interfaces/package.mo new file mode 100644 index 00000000000..a48ce851615 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.AirHandlersFans; +package Interfaces "Interface classes" +extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

+This package contains interface classes. +

+")); +end Interfaces; diff --git a/Buildings/Templates/AirHandlersFans/Interfaces/package.order b/Buildings/Templates/AirHandlersFans/Interfaces/package.order new file mode 100644 index 00000000000..bcf5a99f5ac --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Interfaces/package.order @@ -0,0 +1,2 @@ +Bus +PartialAirHandler diff --git a/Buildings/Templates/AirHandlersFans/Types.mo b/Buildings/Templates/AirHandlersFans/Types.mo new file mode 100644 index 00000000000..6b4da8eca3c --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Types.mo @@ -0,0 +1,68 @@ +within Buildings.Templates.AirHandlersFans; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; + type Configuration = enumeration( + SupplyOnly + "Supply only system", + ExhaustOnly + "Exhaust only system", + DualDuct + "Dual duct system with supply and return", + SingleDuct + "Single duct system with supply and return") + "Enumeration to configure the AHU"; + type Controller = enumeration( + G36VAVMultiZone + "Guideline 36 controller for multiple-zone VAV", + OpenLoop + "Open loop controller") + "Enumeration to configure the AHU controller"; + type ControlFanReturn = enumeration( + AirflowMeasured + "Airflow tracking with airflow measurement stations", + BuildingPressure + "Building pressure (via discharge static pressure)") + "Enumeration to configure the return fan control"; + // RFE: Add support for heat recovery. + type HeatRecovery = enumeration( + None + "No heat recovery", + FlatPlate + "Flat plate heat exchanger", + EnthalpyWheel + "Enthalpy wheel", + RunAroundCoil + "Run-around coil") + "Enumeration to configure the heat recovery"; + type OutdoorReliefReturnSection = enumeration( + HundredPctOutdoorAir + "100 % outdoor air system", + MixedAirWithDamper + "Mixed air system with return air damper - Optional economizer function", + MixedAirNoDamper + "Mixed air system without return air damper - No economizer function", + MixedAirNoRelief + "Mixed air system without relief branch - Optional economizer function") + "Enumeration to configure the outdoor/relief/return air section"; + /* RFE: Add support for the following configurations. + Barometric + "Barometric relief damper without fan", + */ + type ReliefReturnSection = enumeration( + NoRelief + "No relief branch", + NoReturn + "No return branch", + ReliefDamper + "Modulating relief damper without fan", + ReliefFan + "Relief fan with two-position relief damper", + ReturnFan + "Return fan with modulating relief damper") + "Enumeration to configure the relief/return air section"; + annotation (Documentation(info=" +

+This package contains type definitions. +

+")); +end Types; diff --git a/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo new file mode 100644 index 00000000000..71637cb745b --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo @@ -0,0 +1,771 @@ +within Buildings.Templates.AirHandlersFans; +model VAVMultiZone "Multiple-zone VAV" +/* + HACK: In Dymola only (ticket SR00860858-01), bindings for the parameter record + cannot be made final if propagation from a top-level record (whole building) + is needed. + Instead those parameter declarations are annoted with enable=false + in the record class. +*/ + extends Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler( + nZon(final min=2), + redeclare Buildings.Templates.AirHandlersFans.Data.VAVMultiZone dat( + typCoiHeaPre=coiHeaPre.typ, + typCoiCoo=coiCoo.typ, + typCoiHeaReh=coiHeaReh.typ, + typValCoiHeaPre=coiHeaPre.typVal, + typValCoiCoo=coiCoo.typVal, + typValCoiHeaReh=coiHeaReh.typVal, + typDamOut=secOutRel.typDamOut, + typDamOutMin=secOutRel.typDamOutMin, + typDamRet=secOutRel.typDamRet, + typDamRel=secOutRel.typDamRel, + typSecOut=secOutRel.typSecOut, + typCtl=ctl.typ, + buiPreCon=ctl.buiPreCon, + stdVen=ctl.stdVen), + final typ=Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct, + final have_porRel=secOutRel.typ <> Types.OutdoorReliefReturnSection.MixedAirNoRelief, + final have_souChiWat=coiCoo.have_sou, + final have_souHeaWat=coiHeaPre.have_sou or coiHeaReh.have_sou, + final typFanSup=if + fanSupDra.typ <> Buildings.Templates.Components.Types.Fan.None then + fanSupDra.typ elseif fanSupBlo.typ <> Buildings.Templates.Components.Types.Fan.None + then fanSupBlo.typ else Buildings.Templates.Components.Types.Fan.None, + final typFanRel=secOutRel.typFanRel, + final typFanRet=secOutRel.typFanRet, + final mChiWat_flow_nominal=if coiCoo.have_sou then dat.coiCoo.mWat_flow_nominal else 0, + final mHeaWat_flow_nominal=(if coiHeaPre.have_sou then dat.coiHeaPre.mWat_flow_nominal else 0) + + (if coiHeaReh.have_sou then dat.coiHeaReh.mWat_flow_nominal else 0), + final QChiWat_flow_nominal=if coiCoo.have_sou then dat.coiCoo.Q_flow_nominal else 0, + final QHeaWat_flow_nominal=(if coiHeaPre.have_sou then dat.coiHeaPre.Q_flow_nominal else 0) + + (if coiHeaReh.have_sou then dat.coiHeaReh.Q_flow_nominal else 0)); + + final parameter Boolean have_senPreBui= + secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefDamper or + secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReliefFan or + secOutRel.typSecRel==Buildings.Templates.AirHandlersFans.Types.ReliefReturnSection.ReturnFan and + secOutRel.typCtlFanRet==Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure + "Set to true if building static pressure sensor is used" + annotation (Evaluate=true, Dialog(group="Configuration")); + + /* + RFE: Currently only the configuration with economizer is supported. + Hence, no choices annotation, but still replaceable to access parameter + dialog box of the component. + */ + inner Buildings.Templates.AirHandlersFans.Components.OutdoorReliefReturnSection.MixedAirWithDamper + secOutRel( + redeclare final package MediumAir = MediumAir, + final typCtlFanRet=ctl.typCtlFanRet, + final typCtlEco=ctl.typCtlEco, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversalAir, + dat( + final mOutMin_flow_nominal=dat.mOutMin_flow_nominal, + final damOut=dat.damOut, + final damOutMin=dat.damOutMin, + final damRel=dat.damRel, + final damRet=dat.damRet, + final fanRel=dat.fanRel, + final fanRet=dat.fanRet)) + "Outdoor/relief/return air section" + annotation ( + Dialog(group="Configuration"), Placement(transformation(extent={{-280,-220}, + {-120,-60}}))); + + Buildings.Templates.Components.Sensors.Temperature TAirMix( + redeclare final package Medium = MediumAir, + final have_sen=ctl.use_TMix, + final typ=Buildings.Templates.Components.Types.SensorTemperature.Averaging, + final m_flow_nominal=mAirSup_flow_nominal, + final allowFlowReversal=allowFlowReversalAir) + "Mixed air temperature sensor" + annotation (Placement( + transformation(extent={{-110,-210},{-90,-190}}))); + + inner replaceable Buildings.Templates.Components.Fans.None fanSupBlo + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversalAir, + final dat=dat.fanSup, + final have_senFlo=ctl.typCtlFanRet== + Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured) + "Supply fan - Blow through" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Fans.None fanSupBlo + "No fan"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.SingleVariable fanSupBlo + "Single fan - Variable speed"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.ArrayVariable fanSupBlo + "Fan array - Variable speed")), + Dialog(group="Configuration", + enable=fanSupDra.typ==Buildings.Templates.Components.Types.Fan.None), + Placement(transformation(extent={{-50,-210},{-30,-190}}))); + + Buildings.Templates.Components.Sensors.Temperature TAirCoiHeaLvg( + redeclare final package Medium = MediumAir, + final have_sen=coiHeaPre.typ <> Buildings.Templates.Components.Types.Coil.None + and coiCoo.typ <> Buildings.Templates.Components.Types.Coil.None, + final typ=Buildings.Templates.Components.Types.SensorTemperature.Averaging, + final m_flow_nominal=mAirSup_flow_nominal, + final allowFlowReversal=allowFlowReversalAir) + "Heating coil leaving air temperature sensor" + annotation ( + Placement(transformation(extent={{40,-210},{60,-190}}))); + + Buildings.Templates.Components.Sensors.Temperature TAirCoiCooLvg( + redeclare final package Medium = MediumAir, + final have_sen=coiCoo.typ <> Buildings.Templates.Components.Types.Coil.None + and coiHeaReh.typ <> Buildings.Templates.Components.Types.Coil.None, + final typ=Buildings.Templates.Components.Types.SensorTemperature.Averaging, + final m_flow_nominal=mAirSup_flow_nominal, + final allowFlowReversal=allowFlowReversalAir) + "Cooling coil leaving air temperature sensor" + annotation ( + Placement(transformation(extent={{100,-210},{120,-190}}))); + + inner replaceable Buildings.Templates.Components.Fans.SingleVariable fanSupDra + constrainedby Buildings.Templates.Components.Interfaces.PartialFan( + redeclare final package Medium = MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversalAir, + final dat=dat.fanSup, + final have_senFlo=ctl.typCtlFanRet== + Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured) + "Supply fan - Draw through" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Fans.None fanSupDra + "No fan"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.SingleVariable fanSupDra + "Single fan - Variable speed"), + choice(redeclare replaceable Buildings.Templates.Components.Fans.ArrayVariable fanSupDra + "Fan array - Variable speed")), + Dialog(group="Configuration", + enable=fanSupBlo.typ==Buildings.Templates.Components.Types.Fan.None), + Placement(transformation(extent={{172,-210},{192,-190}}))); + + Buildings.Templates.Components.Sensors.Temperature TAirSup( + redeclare final package Medium = MediumAir, + final have_sen=true, + final typ=Buildings.Templates.Components.Types.SensorTemperature.Standard, + final m_flow_nominal=mAirSup_flow_nominal, + final allowFlowReversal=allowFlowReversalAir) + "Supply air temperature sensor" + annotation (Placement( + transformation(extent={{210,-210},{230,-190}}))); + + Buildings.Templates.Components.Sensors.DifferentialPressure pBui_rel( + redeclare final package Medium = MediumAir, + final have_sen=have_senPreBui, + final text_flip=true) + "Building static pressure" + annotation (Placement(transformation(extent={{10,30},{-10,50}}))); + + Buildings.Fluid.Sources.Outside out( + redeclare final package Medium=MediumAir, + final nPorts=3) + "Outdoor conditions" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,90}))); + Buildings.Fluid.Sources.Boundary_pT bui( + redeclare final package Medium = MediumAir, + final use_p_in=have_senPreBui, + final nPorts=1) + "Building absolute pressure in representative space" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={40,60}))); + + Buildings.Templates.Components.Sensors.Temperature TAirRet( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversalAir, + final have_sen= + secOutRel.have_eco and + (ctl.typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb or + ctl.typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulbWithDifferentialDryBulb), + final typ=Buildings.Templates.Components.Types.SensorTemperature.Standard, + final m_flow_nominal=mAirRet_flow_nominal) + "Return air temperature sensor" + annotation ( + Placement(transformation(extent={{220,-90},{200,-70}}))); + + Buildings.Templates.Components.Sensors.SpecificEnthalpy hAirRet( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversalAir, + final have_sen= + secOutRel.have_eco and + ctl.typCtlEco==Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialEnthalpyWithFixedDryBulb, + final m_flow_nominal=mAirRet_flow_nominal) + "Return air enthalpy sensor" + annotation ( + Placement(transformation(extent={{250,-90},{230,-70}}))); + + Buildings.Templates.Components.Sensors.DifferentialPressure pAirSup_rel( + redeclare final package Medium = MediumAir, + final have_sen=true) + "Duct static pressure sensor" + annotation ( + Placement(transformation(extent={{250,-230},{270,-210}}))); + + inner replaceable Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaPre( + redeclare final package MediumHeaWat=MediumHeaWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + constrainedby Buildings.Templates.Components.Interfaces.PartialCoil( + final dat=dat.coiHeaPre, + redeclare final package MediumAir=MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversalAir=allowFlowReversalAir, + final allowFlowReversalLiq=allowFlowReversalLiq, + final show_T=show_T) + "Heating coil in preheat position" + annotation ( + choices( + choice( + redeclare replaceable Buildings.Templates.Components.Coils.None coiHeaPre + "No coil"), + choice( + redeclare replaceable Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaPre( + redeclare final package MediumHeaWat=MediumHeaWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + "Hot water coil with two-way valve"), + choice( + redeclare replaceable Buildings.Templates.Components.Coils.ElectricHeating coiHeaPre + "Modulating electric heating coil")), + Dialog(group="Configuration", + enable=coiHeaReh.typ==Buildings.Templates.Components.Types.Coil.None), + Placement(transformation(extent={{10,-210},{30,-190}}))); + + inner replaceable Buildings.Templates.Components.Coils.WaterBasedCooling coiCoo( + redeclare final package MediumChiWat=MediumChiWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + constrainedby Buildings.Templates.Components.Interfaces.PartialCoil( + final dat=dat.coiCoo, + redeclare final package MediumAir=MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversalAir=allowFlowReversalAir, + final allowFlowReversalLiq=allowFlowReversalLiq, + final show_T=show_T) + "Cooling coil" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Coils.None coiCoo + "No coil"), + choice(redeclare replaceable Buildings.Templates.Components.Coils.WaterBasedCooling coiCoo( + redeclare final package MediumChiWat=MediumChiWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + "Chilled water coil with two-way valve")), + Dialog(group="Configuration"), + Placement(transformation(extent={{70,-210},{90,-190}}))); + inner replaceable Buildings.Templates.Components.Coils.None coiHeaReh + constrainedby Buildings.Templates.Components.Interfaces.PartialCoil( + final dat=dat.coiHeaReh, + redeclare final package MediumAir=MediumAir, + final energyDynamics=energyDynamics, + final allowFlowReversalAir=allowFlowReversalAir, + final allowFlowReversalLiq=allowFlowReversalLiq, + final show_T=show_T) + "Heating coil in reheat position" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Coils.None coiHeaReh + "No coil"), + choice(redeclare replaceable Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaReh( + redeclare final package MediumHeaWat=MediumHeaWat) + "Hot water coil"), + choice( + redeclare replaceable Buildings.Templates.Components.Coils.ElectricHeating coiHeaReh + "Modulating electric heating coil")), + Dialog(group="Configuration", + enable=coiHeaPre.typ==Buildings.Templates.Components.Types.Coil.None and + ctl.typ<>Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone), + Placement(transformation(extent={{130,-210},{150,-190}}))); + Buildings.Fluid.FixedResistances.Junction junHeaWatSup( + redeclare final package Medium = MediumHeaWat, + final m_flow_nominal=mHeaWat_flow_nominal*{1,-1,-1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal=fill(0, 3), + final portFlowDirection_1=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) if have_souHeaWat + "HHW supply junction" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={20,-260}))); + Buildings.Fluid.FixedResistances.Junction junHeaWatRet( + redeclare final package Medium = MediumHeaWat, + final m_flow_nominal=mHeaWat_flow_nominal*{1,-1,1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal=fill(0, 3), + final portFlowDirection_1=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_3=if allowFlowReversalLiq then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) if have_souHeaWat + "HHW return junction" annotation ( + Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=90, + origin={-20,-240}))); + inner replaceable Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone ctl + constrainedby + Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialControllerVAVMultizone( + final dat=dat.ctl, + final nZon=nZon) + "Control selections" + annotation ( + Dialog(group="Controls"), + Placement(transformation(extent={{-220,-10},{-200,10}}))); + +initial equation + assert(typFanSup<>Buildings.Templates.Components.Types.Fan.None, + "In "+ getInstanceName() + ": "+ + "The template is configured with no supply fan, which is not supported."); + assert(not (fanSupBlo.typ<>Buildings.Templates.Components.Types.Fan.None and + fanSupDra.typ<>Buildings.Templates.Components.Types.Fan.None), + "In "+ getInstanceName() + ": "+ + "The template is configured with both a blow-through fan and a draw-through fan, which is not supported."); +equation + /* Control point connection - start */ + connect(TAirMix.y, bus.TAirMix); + connect(TAirCoiHeaLvg.y, bus.TAirCoiHeaLvg); + connect(TAirSup.y, bus.TAirSup); + connect(pAirSup_rel.y, bus.pAirSup_rel); + connect(hAirRet.y, bus.hAirRet); + connect(TAirRet.y, bus.TAirRet); + connect(fanSupDra.bus, bus.fanSup); + connect(fanSupBlo.bus, bus.fanSup); + connect(coiHeaPre.bus, bus.coiHea); + connect(coiCoo.bus, bus.coiCoo); + connect(coiHeaReh.bus, bus.coiHea); + connect(secOutRel.bus, bus); + connect(bui.p_in, bus.pBui); + connect(pBui_rel.y, bus.pBui_rel); + /* Control point connection - stop */ + + connect(port_aChiWat, coiCoo.port_aSou) annotation (Line(points={{100,-280},{ + 100,-268},{85,-268},{85,-210}}, + color={0,127,255})); + connect(coiCoo.port_bSou, port_bChiWat) annotation (Line(points={{75,-210},{ + 75,-268},{60,-268},{60,-280}}, + color={0,127,255})); + connect(busWea,coiCoo.busWea) annotation (Line( + points={{0,280},{0,100},{76,100},{76,-190}}, + color={255,204,51}, + thickness=0.5)); + connect(TAirMix.port_b, fanSupBlo.port_a) + annotation (Line(points={{-90,-200},{-50,-200}}, color={0,127,255})); + connect(coiHeaReh.port_b, fanSupDra.port_a) + annotation (Line(points={{150,-200},{172,-200}}, color={0,127,255})); + connect(busWea, out.weaBus) annotation (Line( + points={{0,280},{0,100},{-39.8,100}}, + color={255,204,51}, + thickness=0.5)); + connect(pBui_rel.port_b, out.ports[1]) annotation (Line(points={{-10,40},{-40, + 40},{-40,80},{-41.3333,80}}, + color={0,127,255})); + connect(bui.ports[1], pBui_rel.port_a) annotation (Line(points={{40,50},{40,40}, + {10,40}}, color={0,127,255})); + + connect(ctl.busTer, busTer) annotation (Line( + points={{-200,0},{300,0}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + connect(ctl.bus, bus) annotation (Line( + points={{-220,0},{-300,0}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(port_Ret, hAirRet.port_a) + annotation (Line(points={{300,-80},{250,-80}}, color={0,127,255})); + connect(hAirRet.port_b, TAirRet.port_a) + annotation (Line(points={{230,-80},{220,-80}}, color={0,127,255})); + connect(coiHeaPre.port_b, TAirCoiHeaLvg.port_a) + annotation (Line(points={{30,-200},{40,-200}}, color={0,127,255})); + connect(TAirCoiHeaLvg.port_b, coiCoo.port_a) + annotation (Line(points={{60,-200},{70,-200}}, color={0,127,255})); + connect(coiCoo.port_b, TAirCoiCooLvg.port_a) + annotation (Line(points={{90,-200},{100,-200}}, color={0,127,255})); + connect(TAirCoiCooLvg.port_b, coiHeaReh.port_a) + annotation (Line(points={{120,-200},{130,-200}}, color={0,127,255})); + connect(secOutRel.port_Sup, TAirMix.port_a) + annotation (Line(points={{-120,-200},{-110,-200}}, color={0,127,255})); + connect(secOutRel.port_bPre, out.ports[2]) annotation (Line(points={{-162,-60}, + {-162,80},{-40,80}}, color={0,127,255})); + connect(port_Rel, secOutRel.port_Rel) + annotation (Line(points={{-300,-80},{-280,-80}}, color={0,127,255})); + connect(port_Out, secOutRel.port_Out) + annotation (Line(points={{-300,-200},{-280,-200}}, color={0,127,255})); + connect(TAirSup.port_b, port_Sup) + annotation (Line(points={{230,-200},{300,-200}}, color={0,127,255})); + connect(TAirSup.port_b, pAirSup_rel.port_a) annotation (Line(points={{230,-200}, + {240,-200},{240,-220},{250,-220}}, color={0,127,255})); + connect(fanSupDra.port_b, TAirSup.port_a) + annotation (Line(points={{192,-200},{210,-200}}, color={0,127,255})); + connect(port_aHeaWat, junHeaWatSup.port_1) + annotation (Line(points={{20,-280},{20,-270}}, color={0,127,255})); + connect(port_bHeaWat, junHeaWatRet.port_2) + annotation (Line(points={{-20,-280},{-20,-250}}, color={0,127,255})); + connect(junHeaWatSup.port_3, coiHeaReh.port_aSou) annotation (Line(points={{ + 30,-260},{145,-260},{145,-210}}, color={0,127,255})); + connect(coiHeaReh.port_bSou, junHeaWatRet.port_3) annotation (Line(points={{135, + -210},{135,-240},{-10,-240}}, color={0,127,255})); + connect(coiHeaPre.port_bSou, junHeaWatRet.port_1) annotation (Line(points={{15, + -210},{15,-220},{-20,-220},{-20,-230}}, color={0,127,255})); + connect(junHeaWatSup.port_2, coiHeaPre.port_aSou) annotation (Line(points={{20,-250}, + {20,-220},{25,-220},{25,-210}}, color={0,127,255})); + connect(out.ports[3], pAirSup_rel.port_b) annotation (Line(points={{-38.6667, + 80},{280,80},{280,-220},{270,-220}}, + color={0,127,255})); + connect(secOutRel.port_Ret, TAirRet.port_b) annotation (Line(points={{-120,-80.2}, + {40,-80.2},{40,-80},{200,-80}}, color={0,127,255})); + connect(fanSupBlo.port_b, coiHeaPre.port_a) + annotation (Line(points={{-30,-200},{10,-200}}, color={0,127,255})); + annotation ( + defaultComponentName="VAV", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-200,120},{200,80}}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + fillColor={0,127,127}, + lineColor={0,127,127}), + Rectangle( + extent={{-200,-80},{200,-120}}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + fillColor={0,127,127}, + lineColor={0,127,127}), + Ellipse( + extent={{110,-80},{150,-120}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}, + visible=typFanSup <> Buildings.Templates.Components.Types.Fan.None), + Polygon( + points={{130,-81},{130,-119},{149,-100},{130,-81}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}, + visible=typFanSup <> Buildings.Templates.Components.Types.Fan.None), + Ellipse( + extent={{-20,120},{20,80}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Sphere, + fillColor={0,100,199}, + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + or typFanRel <> Buildings.Templates.Components.Types.Fan.None), + Polygon( + points={{0,119},{0,81},{-19,100},{0,119}}, + lineColor={0,0,0}, + pattern=LinePattern.None, + fillPattern=FillPattern.HorizontalCylinder, + fillColor={255,255,255}, + visible=typFanRet <> Buildings.Templates.Components.Types.Fan.None + or typFanRel <> Buildings.Templates.Components.Types.Fan.None), + Rectangle( + extent={{48,-80},{78,-120}}, + lineColor={0,0,0}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid, + lineThickness=0.5, + visible=coiCoo.typ <> Buildings.Templates.Components.Types.Coil.None), + Line( + points={{78,-80},{48,-120}}, + color={0,0,0}, + thickness=0.5, + visible=coiCoo.typ <> Buildings.Templates.Components.Types.Coil.None), + Rectangle( + extent={{-78,-80},{-48,-120}}, + lineColor={0,0,0}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid, + lineThickness=0.5, + visible=coiHeaPre.typ <> Buildings.Templates.Components.Types.Coil.None + or coiHeaReh.typ <> Buildings.Templates.Components.Types.Coil.None), + Line( + points={{-48,-80},{-78,-120}}, + color={0,0,0}, + thickness=0.5, + visible=coiHeaPre.typ <> Buildings.Templates.Components.Types.Coil.None + or coiHeaReh.typ <> Buildings.Templates.Components.Types.Coil.None), + Line( + points={{-160,-80},{-180,-120}}, + color={0,0,0}, + thickness=0.5), + Ellipse( + extent={{-174,-96},{-166,-104}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Line( + points={{-160,120},{-180,80}}, + color={0,0,0}, + thickness=0.5), + Ellipse( + extent={{-174,104},{-166,96}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Rectangle( + extent={{-80,20},{80,-20}}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + fillColor={0,127,127}, + lineColor={0,127,127}, + origin={-130,0}, + rotation=-90), + Line( + points={{20,10},{-20,-10}}, + color={0,0,0}, + thickness=0.5, + origin={-130,0}, + rotation=360), + Ellipse( + extent={{-134,4},{-126,-4}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Line( + points={{50,-200},{50,-120}}, + color={28,108,200}, + pattern=LinePattern.Dash, + thickness=5, + visible=have_souChiWat), + Line( + points={{-50,-200},{-50,-120}}, + color={238,46,47}, + thickness=5, + visible=have_souHeaWat), + Line( + points={{130,-200},{130,-194},{76,-194},{76,-120}}, + color={28,108,200}, + thickness=5, + visible=have_souChiWat), + Line( + points={{-130,-200},{-130,-194},{-76,-194},{-76,-120}}, + color={238,46,47}, + thickness=5, + visible=have_souHeaWat, + pattern=LinePattern.Dash)}), +Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-300,-280},{300,280}}), + graphics={ + Line(points={{300,-70},{-120,-70}}, color={0,0,0}), + Line(points={{300,-90},{-120,-90}}, color={0,0,0}), + Line(points={{300,-210},{-120,-210}}, color={0,0,0}), + Line(points={{300,-190},{-120,-190}}, color={0,0,0}), + Line( + visible=have_senPreBui, + points={{-16,40},{-10,40}}, + color={0,0,0}, + thickness=1), + Line( + visible=have_senPreBui, + points={{16,40},{10,40}}, + color={0,0,0}, + thickness=1), + Text( + visible=have_senPreBui, + extent={{18,46},{60,34}}, + textColor={0,0,0}, + horizontalAlignment=TextAlignment.Left, + fontName="sans-serif", + textString="REPRESENTATIVE SPACE INSIDE BUILDING"), + Text( + visible=have_senPreBui, + extent={{-60,46},{-18,34}}, + textColor={0,0,0}, + horizontalAlignment=TextAlignment.Right, + fontName="sans-serif", + textString="REFERENCE OUTSIDE BUILDING"), + Polygon(points={{251,-220},{251,-206},{250,-206},{250,-221},{256,-221},{ + 256,-220},{251,-220}}, lineColor={0,0,0}), + Rectangle(extent={{264,-220},{270,-221}}, lineColor={0,0,0})}), + Documentation(info=" +

Description

+

+This template represents a multiple-zone VAV air handler for +a single duct system serving at least two terminal units. +

+

+The possible configuration options are enumerated in the table below. +The user may refer to ASHRAE (2021) for further details. +The first option displayed in bold characters corresponds to the default configuration.
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration parameterOptionsNotes
Outdoor air section +Single damper for ventilation and economizer, with airflow measurement station
+Separate dampers for ventilation and economizer, with airflow measurement station
+Separate dampers for ventilation and economizer, with differential pressure sensor +
Relief/return air section +Return fan with modulating relief damper
+Modulating relief damper without fan
+Relief fan with two-position relief damper +
Nonactuated barometric relief is currently not supported.
Supply fan - Blow-through position +No fan
+Single fan - Variable speed
+Fan array - Variable speed +
At least one supply fan must be specified, either in blow-through +or draw-through position. Those two configurations are exclusive from +one another.
+ASHRAE Guideline 36 does not have any particular logic yet for handling fan arrays. +If a fan array is selected, all of the fans are currently controlled together at +the same speed, regardless of the number of VFDs. +
Heating coil - Preheat position +Hot water coil with two-way valve
+Modulating electric heating coil
+No coil +
Cooling coil +Chilled water coil with two-way valve
+No coil +
Heating coil - Reheat position +No coil + +ASHRAE Guideline 36 does not support heating coils in reheat position +yet. +
Supply fan - Draw-through position +Single fan - Variable speed
+Fan array - Variable speed
+No fan +
At least one supply fan must be specified, either in blow-through +or draw-through position. Those two configurations are exclusive from +one another.
+ASHRAE Guideline 36 does not have any particular logic yet for handling fan arrays. +If a fan array is selected, all of the fans are currently controlled together at +the same speed, regardless of the number of VFDs. +
Return fan +Single fan - Variable speed
+Fan array - Variable speed
+No fan +
The relief fan and the return fan are both optional and +they are exclusive from one another.
Relief fan +No fan
+Single fan - Variable speed
+Fan array - Variable speed +
The relief fan and the return fan are both optional and +they are exclusive from one another.
Controller +ASHRAE Guideline 36 controller + +An open loop controller is also available for validation purposes only. +
Exhaust fan +Not available: see note +All exhaust fans that normally operate with the air handler must +be configured separately, by means of a dedicated template. + +
Heat recovery +Not available: see note +Currently no heat recovery equipment is supported. + +
+

Simulation model assumptions and requirements

+
Pressure reference
+

+The duct static pressure sensors use the outdoor absolute pressure +as an approximation of the reference pressure in the mechanical room +where the air handler is located. +

+

+When a building static pressure measurement is required by the control +sequence +(ctl.typCtlFanRet=AirHandlersFans.Types.ControlFanReturn.BuildingPressure), +the corresponding sensor pBui_rel is instantiated +within the current class. +In this case, an additional variable pBui needs to be +connected to the control bus to pass in the value of the absolute pressure +in a representative space of the building. +This is a modeling requirement, the actual control point remains the +relative building static pressure. +

+

References

+ +", + revisions=" + +")); +end VAVMultiZone; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZBase.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZBase.mo new file mode 100644 index 00000000000..7003caa95ac --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZBase.mo @@ -0,0 +1,23 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZBase "Configuration of multiple-zone VAV" + extends VAVMultiZone( + redeclare replaceable + Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + nZon=2); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + + +
ComponentConfiguration
Outdoor air sectionNo economizer
Relief/return air sectionNo economizer
+")); +end VAVMZBase; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilElectricHeating.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilElectricHeating.mo new file mode 100644 index 00000000000..49ae549edde --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilElectricHeating.mo @@ -0,0 +1,22 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZCoilElectricHeating "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + redeclare replaceable Buildings.Templates.Components.Coils.ElectricHeating + coiHeaPre "Modulating electric heating coil", + nZon=2); + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Heating coilModulating electric heating coil - Preheat position
+")); +end VAVMZCoilElectricHeating; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorMultiStage.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorMultiStage.mo new file mode 100644 index 00000000000..c866a91f669 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorMultiStage.mo @@ -0,0 +1,23 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZCoilEvaporatorMultiStage "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + nZon=2, + redeclare replaceable + Buildings.Templates.Components.Coils.EvaporatorMultiStage coiCoo); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Cooling coilEvaporator coil with multi-stage compressor
+")); +end VAVMZCoilEvaporatorMultiStage; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorVariable.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorVariable.mo new file mode 100644 index 00000000000..a7a34751910 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilEvaporatorVariable.mo @@ -0,0 +1,23 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZCoilEvaporatorVariable "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + nZon=2, + redeclare replaceable + Buildings.Templates.Components.Coils.EvaporatorVariableSpeed coiCoo); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Cooling coilEvaporator coil with variable speed compressor
+")); +end VAVMZCoilEvaporatorVariable; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilWaterHeating3WVReheat.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilWaterHeating3WVReheat.mo new file mode 100644 index 00000000000..80bd0c205aa --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZCoilWaterHeating3WVReheat.mo @@ -0,0 +1,25 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZCoilWaterHeating3WVReheat "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + redeclare replaceable Buildings.Templates.Components.Coils.None coiHeaPre, + redeclare replaceable + Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaReh( + redeclare final package MediumHeaWat = MediumHeaWat, + redeclare Buildings.Templates.Components.Valves.ThreeWayModulating val), + nZon=2); + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Heating coilHot water coil - Three-way modulating valve - Reheat position
+")); +end VAVMZCoilWaterHeating3WVReheat; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Airflow.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Airflow.mo new file mode 100644 index 00000000000..638bfaab6ea --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Airflow.mo @@ -0,0 +1,38 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZControlG36Airflow "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + nZon=2, + redeclare replaceable + Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaPre( + redeclare final package MediumHeaWat = MediumHeaWat, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val), + redeclare replaceable + Buildings.Templates.Components.Coils.WaterBasedCooling coiCoo( + redeclare final package MediumChiWat = MediumChiWat, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val) + "Chilled water coil", + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone ctl( + typCtlFanRet=Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.AirflowMeasured, + idZon={"Box_1","Box_1"}, + namGro={"Floor_1"}, + namGroZon={"Floor_1","Floor_1"})); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + + + +
ComponentConfiguration
Heating coilHot water coil - Two-way modulating valve - Preheat position
Cooling coilChilled water coil - Two-way modulating valve
ControllerGuideline 36 controller - Return fan with airflow tracking control
+")); +end VAVMZControlG36Airflow; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Pressure.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Pressure.mo new file mode 100644 index 00000000000..8adaf035461 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZControlG36Pressure.mo @@ -0,0 +1,38 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZControlG36Pressure "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + nZon=2, + redeclare replaceable + Buildings.Templates.Components.Coils.WaterBasedHeating coiHeaPre( + redeclare final package MediumHeaWat = MediumHeaWat, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val), + redeclare replaceable + Buildings.Templates.Components.Coils.WaterBasedCooling coiCoo( + redeclare final package MediumChiWat = MediumChiWat, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val) + "Chilled water coil", + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.G36VAVMultiZone ctl( + typCtlFanRet=Buildings.Templates.AirHandlersFans.Types.ControlFanReturn.BuildingPressure, + idZon={"Box_1","Box_1"}, + namGro={"Floor_1"}, + namGroZon={"Floor_1","Floor_1"})); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + + + +
ComponentConfiguration
Heating coilHot water coil - Two-way modulating valve - Preheat position
Cooling coilChilled water coil - Two-way modulating valve
ControllerGuideline 36 controller - Return fan with building pressure control
+")); +end VAVMZControlG36Pressure; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZDedicatedDampersPressure.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZDedicatedDampersPressure.mo new file mode 100644 index 00000000000..6eafa65e4d8 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZDedicatedDampersPressure.mo @@ -0,0 +1,25 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZDedicatedDampersPressure "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + secOutRel(redeclare replaceable + Buildings.Templates.AirHandlersFans.Components.OutdoorSection.DedicatedDampersPressure + secOut + "Dedicated minimum OA damper (two-position) with differential pressure sensor"), + nZon=2); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Outdoor air sectionSeparate dedicated OA dampers with differential pressure sensor
+")); +end VAVMZDedicatedDampersPressure; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanRelief.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanRelief.mo new file mode 100644 index 00000000000..676135cf2de --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanRelief.mo @@ -0,0 +1,26 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZFanRelief "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + secOutRel(redeclare replaceable + Buildings.Templates.AirHandlersFans.Components.ReliefReturnSection.ReliefFan + secRel "Relief fan with two-position relief damper"), + nZon=2); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + + + +
ComponentConfiguration
Relief/return air sectionRelief fan with two-position relief damper
Return fanNo fan
Relief fanSingle fan - Variable speed
+")); +end VAVMZFanRelief; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanSupplyBlowThrough.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanSupplyBlowThrough.mo new file mode 100644 index 00000000000..7de970ff1e2 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/VAVMZFanSupplyBlowThrough.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans; +model VAVMZFanSupplyBlowThrough "Configuration of multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.VAVMultiZone( + redeclare replaceable Buildings.Templates.AirHandlersFans.Components.Controls.OpenLoop ctl + "Open loop controller", + redeclare replaceable Buildings.Templates.Components.Fans.None fanSupDra, + nZon=2, + redeclare replaceable Buildings.Templates.Components.Fans.SingleVariable + fanSupBlo); + + annotation ( + defaultComponentName="ahu", Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.AirHandlersFans.VAVMultiZone +except for the following options.
+

+ + + +
ComponentConfiguration
Supply fanSingle fan - Variable speed - Blow-through position
+")); +end VAVMZFanSupplyBlowThrough; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.mo new file mode 100644 index 00000000000..a40c4dc81f6 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject; +package AirHandlersFans "Air handlers and fans" + extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end AirHandlersFans; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.order b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.order new file mode 100644 index 00000000000..26399a7d0a3 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/AirHandlersFans/package.order @@ -0,0 +1,10 @@ +VAVMZBase +VAVMZCoilElectricHeating +VAVMZCoilEvaporatorMultiStage +VAVMZCoilEvaporatorVariable +VAVMZCoilWaterHeating3WVReheat +VAVMZControlG36Airflow +VAVMZControlG36Pressure +VAVMZDedicatedDampersPressure +VAVMZFanRelief +VAVMZFanSupplyBlowThrough diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/AllSystems.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/AllSystems.mo new file mode 100644 index 00000000000..7f5ee5c2e4f --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/AllSystems.mo @@ -0,0 +1,110 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.Data; +class AllSystems "Top-level (whole building) system parameters" + extends Buildings.Templates.Data.AllSystems; + + /* + The construct below where a replaceable model is used inside the `outer` + component declaration is for validation purposes only, where various configuration + classes are tested with the same instance name `VAV_1`. + It is needed here because + - the `inner` instance must be a subtype of the `outer` component, and + - the `outer` component references only the subcomponents from its own type + (as opposed to all the subcomponents from the `inner` type), and + - modification of an outer declaration is prohibited. + The standard export workflow should use an explicit reference to the configuration + class for each MZVAV model instance. + */ + replaceable model VAV = + Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler + "Model of MZVAV"; + + outer VAV VAV_1 + "Instance of MZVAV model"; + + parameter Buildings.Templates.AirHandlersFans.Data.VAVMultiZone dat_VAV_1( + final typ=VAV_1.typ, + final typFanSup=VAV_1.typFanSup, + final typFanRet=VAV_1.typFanRet, + final typFanRel=VAV_1.typFanRel, + final have_souChiWat=VAV_1.have_souChiWat, + final have_souHeaWat=VAV_1.have_souHeaWat, + final typCoiHeaPre=VAV_1.coiHeaPre.typ, + final typCoiCoo=VAV_1.coiCoo.typ, + final typCoiHeaReh=VAV_1.coiHeaReh.typ, + final typValCoiHeaPre=VAV_1.coiHeaPre.typVal, + final typValCoiCoo=VAV_1.coiCoo.typVal, + final typValCoiHeaReh=VAV_1.coiHeaReh.typVal, + final typDamOut=VAV_1.secOutRel.typDamOut, + final typDamOutMin=VAV_1.secOutRel.typDamOutMin, + final typDamRet=VAV_1.secOutRel.typDamRet, + final typDamRel=VAV_1.secOutRel.typDamRel, + final typCtl=VAV_1.ctl.typ, + final typSecOut=VAV_1.ctl.typSecOut, + final buiPreCon=VAV_1.ctl.buiPreCon, + final stdVen=VAV_1.ctl.stdVen, + id="VAV_1", + damOut(dp_nominal=15), + damOutMin(dp_nominal=15), + damRel(dp_nominal=15), + damRet(dp_nominal=15), + mOutMin_flow_nominal=0.2, + fanSup(m_flow_nominal=1, dp_nominal=500), + fanRel(m_flow_nominal=1, dp_nominal=200), + fanRet(m_flow_nominal=1, dp_nominal=200), + coiHeaPre( + cap_nominal=1e4, + dpAir_nominal=100, + dpWat_nominal=0.5e4, + dpValve_nominal=0.3e4, + mWat_flow_nominal=1e4/4186/10, + TAirEnt_nominal=273.15, + TWatEnt_nominal=50 + 273.15), + coiHeaReh( + cap_nominal=1e4, + dpAir_nominal=100, + dpWat_nominal=0.5e4, + dpValve_nominal=0.3e4, + mWat_flow_nominal=1e4/4186/10, + TAirEnt_nominal=273.15, + TWatEnt_nominal=50 + 273.15), + coiCoo( + cap_nominal=1e4, + dpAir_nominal=100, + dpWat_nominal=3e4, + dpValve_nominal=2e4, + mWat_flow_nominal=1e4/4186/5, + TAirEnt_nominal=30 + 273.15, + TWatEnt_nominal=7 + 273.15, + wAirEnt_nominal=0.012), + ctl( + VOutUnc_flow_nominal=0.4, + VOutTot_flow_nominal=0.5, + VOutAbsMin_flow_nominal=0.3, + VOutMin_flow_nominal=0.4, + dpDamOutMinAbs=10, + dpDamOutMin_nominal=15, + pAirSupSet_rel_max=500, + pAirRetSet_rel_min=10, + pAirRetSet_rel_max=40, + yFanSup_min=0.1, + yFanRel_min=0.1, + yFanRet_min=0.1, + dVFanRet_flow=0.1, + TAirSupSet_min=12+273.15, + TAirSupSet_max=18+273.15, + TOutRes_min=16+273.15, + TOutRes_max=21+273.15)) + "Parameters for system VAV_1" + annotation (Dialog(group="Air handlers and fans")); + +annotation ( + defaultComponentPrefixes = "inner parameter", + defaultComponentName = "datAll", + Documentation(info=" +

+This class provides the set of sizing and operating parameters for +the whole HVAC system. +It is aimed for validation purposes only. +

+")); +end AllSystems; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.mo new file mode 100644 index 00000000000..2ad36748e54 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject; +package Data "Package with classes for storing system parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters +that are used for validation purposes. +

+")); +end Data; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.order b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.order new file mode 100644 index 00000000000..3831742ec60 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/Data/package.order @@ -0,0 +1 @@ +AllSystems diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo new file mode 100644 index 00000000000..2bd0aa1a9cd --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/VAVBoxControlPoints.mo @@ -0,0 +1,116 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject.ZoneEquipment; +block VAVBoxControlPoints "Emulation of VAV box control points" + extends Modelica.Blocks.Icons.Block; + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation(Evaluate=true); + + Buildings.Templates.ZoneEquipment.Interfaces.Bus bus + "Terminal unit control bus" + annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={200,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant tNexOcc(final k=3600) + "Time next occupancy" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VAirDis_flow(final k=1) + annotation (Placement(transformation(extent={{-140,-50},{-120,-30}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant yReqZonTemRes(final k=1) + "Request" + annotation (Placement(transformation(extent={{-140,-110},{-120,-90}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant yReqZonPreRes(final k=1) + "Request" + annotation (Placement(transformation(extent={{-140,-150},{-120,-130}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirDis(final k=303.15) + "Discharge temperature" + annotation (Placement(transformation(extent={{-140,30},{-120,50}}))); + + Controls.OBC.CDL.Integers.Sources.Constant uOpeMod( + k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) + "Operating mode" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatus sta + "Evaluate zone temperature status" + annotation (Placement(transformation(extent={{100,-74},{120,-46}}))); + Controls.OBC.CDL.Continuous.Sources.Constant cooDowTim(final k=1800) + "Cooling down time" + annotation (Placement(transformation(extent={{40,-50},{60,-30}}))); + Controls.OBC.CDL.Continuous.Sources.Constant warUpTim(final k=1800) + "Warm-up time" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Controls.OBC.ASHRAE.G36.VentilationZones.Title24.Setpoints setMinOA_T24( + VOccMin_flow=2.5e-3, + VAreMin_flow=3e-3, + VMin_flow=5e-3) if stdVen== + Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24 + "Zone level calculation of the minimum outdoor airflow setpoint" + annotation (Placement(transformation(extent={{100,-20},{120,0}}))); + Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.ASHRAE62_1.Setpoints setMinOA_62_1( + VAreBreZon_flow=3e-3, + VPopBreZon_flow=2.5e-3, + VMin_flow=5.5e-3) if stdVen== + Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1 + "Zone level calculation of the minimum outdoor airflow setpoint" + annotation (Placement(transformation(extent={{100,20},{120,40}}))); +equation + connect(tNexOcc.y, bus.tNexOcc); + connect(TAirDis.y, bus.TAirDis); + connect(VAirDis_flow.y, bus.VAirDis_flow); + connect(yReqZonTemRes.y, bus.yReqZonTemRes); + connect(yReqZonPreRes.y, bus.yReqZonPreRes); + + connect(bus.y1Win, setMinOA_62_1.u1Win); + connect(bus.TZon, setMinOA_62_1.TZon); + connect(bus.TAirDis, setMinOA_62_1.TDis); + + connect(setMinOA_62_1.VAdjPopBreZon_flow, bus.VAdjPopBreZon_flow); + connect(setMinOA_62_1.VOccZonMin_flow, bus.VOccZonMin_flow); + connect(setMinOA_62_1.VAdjAreBreZon_flow, bus.VAdjAreBreZon_flow); + connect(setMinOA_62_1.VMinOA_flow, bus.VMinOA_flow); + + connect(setMinOA_T24.VZonAbsMin_flow, bus.VZonAbsMin_flow); + connect(setMinOA_T24.VZonDesMin_flow, bus.VZonDesMin_flow); + connect(setMinOA_T24.VOccZonMin_flow, bus.VOccZonMin_flow); + connect(setMinOA_T24.yCO2, bus.yCO2); + connect(setMinOA_T24.VMinOA_flow, bus.VMinOA_flow); + + connect(cooDowTim.y, sta.cooDowTim); + connect(warUpTim.y, sta.warUpTim); + connect(bus.u1Win, sta.u1Win); + connect(bus.TZon, sta.TZon); + connect(bus.TZonHeaOccSet, sta.TOccHeaSet); + connect(bus.TZonCooOccSet, sta.TOccCooSet); + connect(bus.TZonHeaUnoSet, sta.TUnoHeaSet); + connect(bus.TZonCooUnoSet, sta.TUnoCooSet); + + connect(sta.yCooTim, bus.yCooTim); + connect(sta.yWarTim, bus.yWarTim); + connect(sta.yOccHeaHig, bus.yOccHeaHig); + connect(sta.yHigOccCoo, bus.yHigOccCoo); + connect(sta.yUnoHeaHig, bus.yUnoHeaHig); + connect(sta.yEndSetBac, bus.yEndSetBac); + connect(sta.yHigUnoCoo, bus.yHigUnoCoo); + connect(sta.yEndSetUp, bus.yEndSetUp); + + connect(uOpeMod.y, setMinOA_62_1.uOpeMod) annotation (Line(points={{62,20},{80, + 20},{80,35},{98,35}}, color={255,127,0})); + annotation ( + defaultComponentName="conPoiDum", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}})), Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-200,-180},{200,180}})), + Documentation(info=" +

+This class generates signals typically provided by the terminal +unit controller. +It is aimed for validation purposes only. +

+")); +end VAVBoxControlPoints; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.mo new file mode 100644 index 00000000000..6a04fc9bac6 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.mo @@ -0,0 +1,8 @@ +within Buildings.Templates.AirHandlersFans.Validation.UserProject; +package ZoneEquipment "Zone equipment" +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end ZoneEquipment; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.order b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.order new file mode 100644 index 00000000000..2fe1821bfb4 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/ZoneEquipment/package.order @@ -0,0 +1 @@ +VAVBoxControlPoints diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.mo b/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.mo new file mode 100644 index 00000000000..b1f1b846f2d --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.AirHandlersFans.Validation; +package UserProject "Package with configured models" + extends Modelica.Icons.VariantsPackage; + + +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end UserProject; diff --git a/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.order b/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.order new file mode 100644 index 00000000000..fceaa312fe3 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/UserProject/package.order @@ -0,0 +1,3 @@ +AirHandlersFans +ZoneEquipment +Data diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZBase.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZBase.mo new file mode 100644 index 00000000000..b5bfcaa39fc --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZBase.mo @@ -0,0 +1,181 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZBase + "Validation model for multiple-zone VAV - Base model with open loop controls" + extends Modelica.Icons.Example; + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + replaceable package MediumChiWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Cooling medium (such as CHW)"; + replaceable package MediumHeaWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Heating medium (such as HHW)"; + + inner parameter UserProject.Data.AllSystems datAll( + sysUni=Buildings.Templates.Types.Units.SI, + redeclare replaceable model VAV = UserProject.AirHandlersFans.VAVMZBase, + stdEne=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1, + stdVen=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3B) + "Design and operating parameters" + annotation (Placement(transformation(extent={{90,92},{110,112}}))); + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, + Dialog(tab = "Dynamics", group="Conservation equations")); + + inner replaceable UserProject.AirHandlersFans.VAVMZBase VAV_1 constrainedby + Buildings.Templates.AirHandlersFans.VAVMultiZone( + final dat=datAll.dat_VAV_1, + redeclare final package MediumAir = MediumAir, + redeclare final package MediumChiWat = MediumChiWat, + final energyDynamics=energyDynamics) + "Air handling unit" + annotation (Placement(transformation(extent={{-20,-50},{20,-10}}))); + Buildings.Fluid.Sources.Boundary_pT bouOut( + redeclare final package Medium =MediumAir, + nPorts=2) + "Boundary conditions for outdoor environment" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + Buildings.Fluid.Sources.Boundary_pT bouBui( + redeclare final package Medium =MediumAir, + nPorts=3) + "Boundary conditions for indoor environment" + annotation (Placement(transformation(extent={{90,-40},{70,-20}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium=MediumAir, + m_flow_nominal=1, dp_nominal=100) + annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); + Fluid.FixedResistances.PressureDrop res1( + redeclare final package Medium = MediumAir, + m_flow_nominal=1, + dp_nominal=100) + annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); + Fluid.Sensors.Pressure pBui(redeclare final package Medium = MediumAir) + "Building absolute pressure in representative space" + annotation (Placement(transformation(extent={{80,0},{60,20}}))); + BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Fluid.FixedResistances.PressureDrop res2( + redeclare final package Medium = MediumAir, + m_flow_nominal=1, + dp_nominal=100) + annotation (Placement(transformation(extent={{-30,-30},{-50,-10}}))); + Fluid.FixedResistances.PressureDrop res3( + redeclare final package Medium = MediumAir, + m_flow_nominal=1, + dp_nominal=100) + annotation (Placement(transformation(extent={{50,-30},{30,-10}}))); + Fluid.Sources.Boundary_pT bouHeaWat( + redeclare final package Medium = MediumHeaWat, + nPorts=2) if VAV_1.have_souHeaWat + "Boundary conditions for HHW distribution system" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + Fluid.Sources.Boundary_pT bouChiWat( + redeclare final package Medium = MediumChiWat, + nPorts=2) if VAV_1.have_souChiWat + "Boundary conditions for CHW distribution system" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); + UserProject.ZoneEquipment.VAVBoxControlPoints sigVAVBox[VAV_1.nZon]( + each final stdVen=datAll.stdVen) + if VAV_1.ctl.typ==Buildings.Templates.AirHandlersFans.Types.Controller.G36VAVMultiZone + "Control signals from VAV box" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + ZoneEquipment.Validation.UserProject.BASControlPoints sigBAS( + final nZon=VAV_1.nZon) + "BAS control points" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + ZoneEquipment.Validation.UserProject.ZoneControlPoints sigZon[VAV_1.nZon] + "Zone control points" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); +protected + Interfaces.Bus busAHU + "Gateway bus" + annotation ( + Placement( + transformation(extent={{-40,-10},{0,30}}),iconTransformation( + extent={{-258,-26},{-238,-6}}))); + +equation + connect(bouHeaWat.ports[1], VAV_1.port_aHeaWat) + annotation (Line(points={{-80,-71},{-5,-71},{-5,-50}}, color={0,127,255})); + connect(bouChiWat.ports[2], VAV_1.port_bChiWat) + annotation (Line(points={{-80,-99},{5,-99},{5,-50}}, color={0,127,255})); + connect(VAV_1.port_bHeaWat, bouHeaWat.ports[2]) annotation (Line(points={{-13,-50}, + {-13,-68},{-80,-68},{-80,-69}}, color={0,127,255})); + connect(VAV_1.port_aChiWat, bouChiWat.ports[1]) annotation (Line(points={{13,-50}, + {13,-102},{-80,-102},{-80,-101}}, + color={0,127,255})); + connect(bouOut.ports[1], res.port_a) annotation (Line(points={{-80,-31},{-60, + -31},{-60,-40},{-50,-40}}, + color={0,127,255})); + connect(res.port_b, VAV_1.port_Out) + annotation (Line(points={{-30,-40},{-20,-40}}, color={0,127,255})); + connect(VAV_1.port_Sup, res1.port_a) + annotation (Line(points={{20,-40},{30,-40}}, color={0,127,255})); + connect(res1.port_b, bouBui.ports[1]) annotation (Line(points={{50,-40},{60, + -40},{60,-31.3333},{70,-31.3333}}, + color={0,127,255})); + connect(bouBui.ports[2], pBui.port) + annotation (Line(points={{70,-30},{70,0}}, color={0,127,255})); + connect(weaDat.weaBus, VAV_1.busWea) annotation (Line( + points={{-80,0},{0,0},{0,-10}}, + color={255,204,51}, + thickness=0.5)); + connect(busAHU, VAV_1.bus) annotation (Line( + points={{-20,10},{-20,-14},{-19.9,-14}}, + color={255,204,51}, + thickness=0.5)); + connect(VAV_1.port_Rel, res2.port_a) + annotation (Line(points={{-20,-20},{-30,-20}}, + color={0,127,255})); + connect(res2.port_b, bouOut.ports[2]) annotation (Line(points={{-50,-20},{-60, + -20},{-60,-29},{-80,-29}}, + color={0,127,255})); + connect(VAV_1.port_Ret, res3.port_b) + annotation (Line(points={{20,-20},{30,-20}}, + color={0,127,255})); + connect(res3.port_a, bouBui.ports[3]) annotation (Line(points={{50,-20},{60, + -20},{60,-28.6667},{70,-28.6667}}, + color={0,127,255})); + connect(pBui.p, busAHU.pBui) annotation (Line(points={{59,10},{-20,10}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(sigVAVBox.bus, VAV_1.busTer) annotation (Line( + points={{-80,30},{19.8,30},{19.8,-14}}, + color={255,204,51}, + thickness=0.5)); + + connect(sigBAS.busTer, VAV_1.busTer) annotation (Line( + points={{-80,90},{19.8,90},{19.8,-14}}, + color={255,204,51}, + thickness=0.5)); + connect(sigZon.bus, VAV_1.busTer) annotation (Line( + points={{-80,60},{19.8,60},{19.8,-14}}, + color={255,204,51}, + thickness=0.5)); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZBase.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZBase. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+"), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}}))); +end VAVMZBase; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mo new file mode 100644 index 00000000000..05489522f95 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZCoilElectricHeating "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll(redeclare model VAV = + UserProject.AirHandlersFans.VAVMZCoilElectricHeating), + redeclare + UserProject.AirHandlersFans.VAVMZCoilElectricHeating VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilElectricHeating.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZCoilElectricHeating. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZCoilElectricHeating; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mo new file mode 100644 index 00000000000..66260e59974 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mo @@ -0,0 +1,28 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZCoilEvaporatorMultiStage "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZCoilEvaporatorMultiStage, + dat_VAV_1(coiCoo(redeclare + Buildings.Fluid.DXSystems.Cooling.AirSource.Data.DoubleSpeed.Lennox_SCA240H4B + datCoi))), + redeclare + UserProject.AirHandlersFans.VAVMZCoilEvaporatorMultiStage VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorMultiStage.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZCoilEvaporatorMultiStage. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZCoilEvaporatorMultiStage; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mo new file mode 100644 index 00000000000..b3c9987849d --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZCoilEvaporatorVariable "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZCoilEvaporatorVariable), + redeclare UserProject.AirHandlersFans.VAVMZCoilEvaporatorVariable VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilEvaporatorVariable.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZCoilEvaporatorVariable. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZCoilEvaporatorVariable; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mo new file mode 100644 index 00000000000..f632c559322 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZCoilWaterHeating3WVReheat "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZCoilWaterHeating3WVReheat), + redeclare UserProject.AirHandlersFans.VAVMZCoilWaterHeating3WVReheat VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZCoilWaterHeating3WVReheat.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZCoilWaterHeating3WVReheat. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZCoilWaterHeating3WVReheat; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mo new file mode 100644 index 00000000000..39fe7bb9555 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mo @@ -0,0 +1,21 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZControlG36Airflow "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll(redeclare model VAV = + UserProject.AirHandlersFans.VAVMZControlG36Airflow), + redeclare UserProject.AirHandlersFans.VAVMZControlG36Airflow VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Airflow.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=10000), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZControlG36Airflow. +It is intended to check whether the template model is well-defined for +this particular system configuration. +

+")); +end VAVMZControlG36Airflow; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mo new file mode 100644 index 00000000000..0f14e2881b5 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mo @@ -0,0 +1,22 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZControlG36Pressure + "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll(redeclare model VAV = + UserProject.AirHandlersFans.VAVMZControlG36Pressure), + redeclare UserProject.AirHandlersFans.VAVMZControlG36Pressure VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZControlG36Pressure.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=10000), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZControlG36Pressure. +It is intended to check whether the template model is well-defined for +this particular system configuration. +

+")); +end VAVMZControlG36Pressure; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mo new file mode 100644 index 00000000000..4fe88738898 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZDedicatedDampersPressure "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZDedicatedDampersPressure), + redeclare UserProject.AirHandlersFans.VAVMZDedicatedDampersPressure VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZDedicatedDampersPressure.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZDedicatedDampersPressure. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZDedicatedDampersPressure; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mo new file mode 100644 index 00000000000..749111ec6b0 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mo @@ -0,0 +1,25 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZFanRelief "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZFanRelief), + redeclare + UserProject.AirHandlersFans.VAVMZFanRelief VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanRelief.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZFanRelief. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZFanRelief; diff --git a/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mo b/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mo new file mode 100644 index 00000000000..c8149489f49 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mo @@ -0,0 +1,24 @@ +within Buildings.Templates.AirHandlersFans.Validation; +model VAVMZFanSupplyBlowThrough "Validation model for multiple-zone VAV" + extends VAVMZBase( + datAll( + redeclare model VAV = + UserProject.AirHandlersFans.VAVMZFanSupplyBlowThrough), + redeclare UserProject.AirHandlersFans.VAVMZFanSupplyBlowThrough VAV_1); + + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/AirHandlersFans/Validation/VAVMZFanSupplyBlowThrough.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans.VAVMZFanSupplyBlowThrough. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+")); +end VAVMZFanSupplyBlowThrough; diff --git a/Buildings/Templates/AirHandlersFans/Validation/package.mo b/Buildings/Templates/AirHandlersFans/Validation/package.mo new file mode 100644 index 00000000000..351edd40126 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/package.mo @@ -0,0 +1,26 @@ +within Buildings.Templates.AirHandlersFans; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation ( + preferredView="info", + Documentation(info=" +

+This package contains models validating the templates within + +Buildings.Templates.AirHandlersFans +for various system configurations. +

+

+Each system configuration is specified by extending the original template class +to create a so-called configuration class (under + +Buildings.Templates.AirHandlersFans.Validation.UserProject.AirHandlersFans), +that is instantiated in the validation model. +

+

+The models also illustrate parameter propagation from a top-level +HVAC system record. +

+")); +end Validation; diff --git a/Buildings/Templates/AirHandlersFans/Validation/package.order b/Buildings/Templates/AirHandlersFans/Validation/package.order new file mode 100644 index 00000000000..ef10535e0c8 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Validation/package.order @@ -0,0 +1,11 @@ +VAVMZBase +VAVMZCoilElectricHeating +VAVMZCoilEvaporatorMultiStage +VAVMZCoilEvaporatorVariable +VAVMZCoilWaterHeating3WVReheat +VAVMZControlG36Airflow +VAVMZControlG36Pressure +VAVMZDedicatedDampersPressure +VAVMZFanRelief +VAVMZFanSupplyBlowThrough +UserProject diff --git a/Buildings/Templates/AirHandlersFans/package.mo b/Buildings/Templates/AirHandlersFans/package.mo new file mode 100644 index 00000000000..ecce01041c4 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates; +package AirHandlersFans "Air handlers and fans" + extends Modelica.Icons.Package; + + annotation (Documentation(info=" +

+This package contains templates for air handlers and fans. +

+")); +end AirHandlersFans; diff --git a/Buildings/Templates/AirHandlersFans/package.order b/Buildings/Templates/AirHandlersFans/package.order new file mode 100644 index 00000000000..0aab08bf782 --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/package.order @@ -0,0 +1,6 @@ +VAVMultiZone +Components +Data +Types +Validation +Interfaces diff --git a/Buildings/Templates/Components/Coils/ElectricHeating.mo b/Buildings/Templates/Components/Coils/ElectricHeating.mo new file mode 100644 index 00000000000..d164cc58b10 --- /dev/null +++ b/Buildings/Templates/Components/Coils/ElectricHeating.mo @@ -0,0 +1,38 @@ +within Buildings.Templates.Components.Coils; +model ElectricHeating "Modulating electric heating coil" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.ElectricHeating, + final typVal=Buildings.Templates.Components.Types.Valve.None); + + Buildings.Fluid.HeatExchangers.HeaterCooler_u hex( + redeclare final package Medium = MediumAir, + final Q_flow_nominal=dat.Q_flow_nominal, + final m_flow_nominal=dat.mAir_flow_nominal, + final dp_nominal=dat.dpAir_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversalAir, + final show_T=show_T) + "Heat exchanger" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(port_a, hex.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(hex.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(bus.y, hex.u) annotation (Line( + points={{0,100},{0,20},{-20,20},{-20,6},{-12,6}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a modulating electric heating coil. +

+")); +end ElectricHeating; diff --git a/Buildings/Templates/Components/Coils/EvaporatorMultiStage.mo b/Buildings/Templates/Components/Coils/EvaporatorMultiStage.mo new file mode 100644 index 00000000000..6b776830a48 --- /dev/null +++ b/Buildings/Templates/Components/Coils/EvaporatorMultiStage.mo @@ -0,0 +1,70 @@ +within Buildings.Templates.Components.Coils; +model EvaporatorMultiStage + "Evaporator coil with multi-stage compressor" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage, + final typVal=Buildings.Templates.Components.Types.Valve.None); + + parameter Boolean have_dryCon = true + "Set to true for air-cooled condenser, false for evaporative condenser"; + + Buildings.Fluid.DXSystems.Cooling.AirSource.MultiStage hex( + redeclare final package Medium = MediumAir, + final datCoi=dat.datCoi, + final dp_nominal=dpAir_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversalAir, + final show_T=show_T) + "Heat exchanger" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Modelica.Blocks.Routing.RealPassThrough TWetBul if not have_dryCon + annotation (Placement(transformation(extent={{-50,50},{-30,70}}))); + Modelica.Blocks.Routing.RealPassThrough TDry if have_dryCon + annotation (Placement(transformation(extent={{-50,10},{-30,30}}))); +equation + connect(port_a, hex.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(hex.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(busWea.TWetBul, TWetBul.u) annotation (Line( + points={{-60,100},{-60,60},{-52,60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(busWea.TDryBul, TDry.u) annotation (Line( + points={{-60,100},{-60,20},{-52,20}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(TWetBul.y, hex.TOut) annotation (Line(points={{-29,60},{-20,60},{-20,3}, + {-11,3}}, color={0,0,127})); + connect(TDry.y, hex.TOut) annotation (Line(points={{-29,20},{-20,20},{-20,3}, + {-11,3}}, color={0,0,127})); + connect(bus.y, hex.stage) annotation (Line( + points={{0,100},{0,20},{-14,20},{-14,8},{-11,8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation ( + Diagram( + coordinateSystem(preserveAspectRatio=false)), Documentation(info=" +

+This is a model for a direct expansion cooling coil with a +multi-stage compressor. +The compressor stage is selected with the control +signal y (integer between 0 and the number +of stages). +

+")); +end EvaporatorMultiStage; diff --git a/Buildings/Templates/Components/Coils/EvaporatorVariableSpeed.mo b/Buildings/Templates/Components/Coils/EvaporatorVariableSpeed.mo new file mode 100644 index 00000000000..7072e31e1ca --- /dev/null +++ b/Buildings/Templates/Components/Coils/EvaporatorVariableSpeed.mo @@ -0,0 +1,71 @@ +within Buildings.Templates.Components.Coils; +model EvaporatorVariableSpeed + "Evaporator coil with variable speed compressor" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed, + final typVal=Buildings.Templates.Components.Types.Valve.None); + + parameter Boolean have_dryCon = true + "Set to true for air-cooled condenser, false for evaporative condenser"; + + Buildings.Fluid.DXSystems.Cooling.AirSource.VariableSpeed hex( + redeclare final package Medium = MediumAir, + final datCoi=dat.datCoi, + final minSpeRat=dat.datCoi.minSpeRat, + final dp_nominal=dpAir_nominal, + final energyDynamics=energyDynamics, + final tau=tau, + final allowFlowReversal=allowFlowReversalAir, + final show_T=show_T) + "Heat exchanger" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Modelica.Blocks.Routing.RealPassThrough TWetBul if not have_dryCon + annotation (Placement(transformation(extent={{-50,50},{-30,70}}))); + Modelica.Blocks.Routing.RealPassThrough TDry if have_dryCon + annotation (Placement(transformation(extent={{-50,10},{-30,30}}))); +equation + connect(port_a, hex.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(hex.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(busWea.TWetBul, TWetBul.u) annotation (Line( + points={{-60,100},{-60,60},{-52,60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(busWea.TDryBul, TDry.u) annotation (Line( + points={{-60,100},{-60,20},{-52,20}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + connect(TWetBul.y, hex.TOut) annotation (Line(points={{-29,60},{-20,60},{-20, + 3},{-11,3}}, + color={0,0,127})); + connect(TDry.y, hex.TOut) annotation (Line(points={{-29,20},{-20,20},{-20,3}, + {-11,3}}, color={0,0,127})); + connect(bus.y, hex.speRat) annotation (Line( + points={{0,100},{0,20},{-16,20},{-16,8},{-11,8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation ( + Diagram( + coordinateSystem(preserveAspectRatio=false)), Documentation(info=" +

+This is a model for a direct expansion cooling coil with a +variable speed compressor. +The compressor speed is modulated with the fractional speed +signal y (real between 0 and 1). +

+")); +end EvaporatorVariableSpeed; diff --git a/Buildings/Templates/Components/Coils/None.mo b/Buildings/Templates/Components/Coils/None.mo new file mode 100644 index 00000000000..20cf3d45f7a --- /dev/null +++ b/Buildings/Templates/Components/Coils/None.mo @@ -0,0 +1,23 @@ +within Buildings.Templates.Components.Coils; +model None "No coil" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.None, + final typVal=Buildings.Templates.Components.Types.Valve.None); + +equation + connect(port_a, port_b) + annotation (Line(points={{-100,0},{100,0}}, color={0,127,255})); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Line( + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a direct fluid pass-through model to represent +a configuration with no coil. +

+")); +end None; diff --git a/Buildings/Templates/Components/Coils/WaterBasedCooling.mo b/Buildings/Templates/Components/Coils/WaterBasedCooling.mo new file mode 100644 index 00000000000..b590090b630 --- /dev/null +++ b/Buildings/Templates/Components/Coils/WaterBasedCooling.mo @@ -0,0 +1,132 @@ +within Buildings.Templates.Components.Coils; +model WaterBasedCooling "Chilled water coil" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.WaterBasedCooling, + final typVal=val.typ, + redeclare final package MediumSou = MediumChiWat); + + replaceable package MediumChiWat=Buildings.Media.Water + "Source side medium"; + + final parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal= + dat.mWat_flow_nominal + "Liquid mass flow rate"; + final parameter Modelica.Units.SI.PressureDifference dpWat_nominal= + dat.dpWat_nominal + "Liquid pressure drop across coil"; + final parameter Modelica.Units.SI.PressureDifference dpValve_nominal= + dat.dpValve_nominal + "Nominal pressure drop across fully open valve"; + + replaceable Buildings.Templates.Components.Valves.TwoWayModulating val constrainedby + Buildings.Templates.Components.Interfaces.PartialValve( + redeclare final package Medium = MediumChiWat, + final energyDynamics=energyDynamics, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversalLiq, + final show_T=show_T, + final dat=datVal) + "Valve" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Valves.ThreeWayModulating val + "Three-way modulating valve"), + choice(redeclare replaceable Buildings.Templates.Components.Valves.TwoWayModulating val + "Two-way modulating valve")), + Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-40,-60}))); + + replaceable Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU hex( + configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, + final use_Q_flow_nominal=true, + final Q_flow_nominal=Q_flow_nominal, + final T_a1_nominal=dat.TWatEnt_nominal, + final T_a2_nominal=dat.TAirEnt_nominal, + final w_a2_nominal=dat.wAirEnt_nominal, + final dp1_nominal=if val.typ==Buildings.Templates.Components.Types.Valve.None + then dpWat_nominal else 0, + final dp2_nominal=dpAir_nominal) + constrainedby Buildings.Fluid.Interfaces.PartialFourPortInterface( + redeclare final package Medium1 = MediumChiWat, + redeclare final package Medium2 = MediumAir, + final m1_flow_nominal=mWat_flow_nominal, + final m2_flow_nominal=mAir_flow_nominal, + final allowFlowReversal1=allowFlowReversalLiq, + final allowFlowReversal2=allowFlowReversalAir, + final show_T=show_T) + "Heat exchanger" + annotation ( + __ctrl_flow(enable=false), + Placement(transformation(extent={{10,4},{-10,-16}}))); + + Buildings.Fluid.FixedResistances.Junction jun( + redeclare final package Medium = MediumChiWat, + final m_flow_nominal=mWat_flow_nominal*{1,-1,-1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal=fill(0, 3), + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + if typVal==Buildings.Templates.Components.Types.Valve.ThreeWayModulating + "Junction" + annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={40,-60}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = MediumChiWat, + final allowFlowReversal=allowFlowReversalLiq) + if typVal <> Buildings.Templates.Components.Types.Valve.ThreeWayModulating + "Direct pass through" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={60,-60}))); +equation + connect(port_a,hex. port_a2) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(hex.port_b2, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(val.port_a, hex.port_b1) annotation (Line(points={{-40,-50},{-40,-12}, + {-10,-12}}, color={0,127,255})); + connect(val.port_b, port_bSou) + annotation (Line(points={{-40,-70},{-40,-100}}, color={0,127,255})); + connect(val.portByp_a, jun.port_3) + annotation (Line(points={{-30,-60},{30,-60}}, color={0,127,255})); + connect(jun.port_2, hex.port_a1) + annotation (Line(points={{40,-50},{40,-12},{10,-12}}, color={0,127,255})); + connect(port_aSou, jun.port_1) + annotation (Line(points={{40,-100},{40,-70}}, color={0,127,255})); + connect(port_aSou, pas.port_a) annotation (Line(points={{40,-100},{40,-80},{60, + -80},{60,-70}}, color={0,127,255})); + connect(pas.port_b, hex.port_a1) + annotation (Line(points={{60,-50},{60,-12},{10,-12}}, color={0,127,255})); + connect(val.bus, bus) annotation (Line( + points={{-50,-60},{-60,-60},{-60,20},{0,20},{0,100}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation ( + Icon( + coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a chilled water coil with an optional +modulating valve. +The valve position is modulated with the fractional opening +signal y (real between 0 and 1). +If no valve is used, no signal is required. +

+")); +end WaterBasedCooling; diff --git a/Buildings/Templates/Components/Coils/WaterBasedHeating.mo b/Buildings/Templates/Components/Coils/WaterBasedHeating.mo new file mode 100644 index 00000000000..51a482d21bd --- /dev/null +++ b/Buildings/Templates/Components/Coils/WaterBasedHeating.mo @@ -0,0 +1,131 @@ +within Buildings.Templates.Components.Coils; +model WaterBasedHeating "Hot water coil" + extends Buildings.Templates.Components.Interfaces.PartialCoil( + final typ=Buildings.Templates.Components.Types.Coil.WaterBasedHeating, + final typVal=val.typ, + redeclare final package MediumSou = MediumHeaWat); + + replaceable package MediumHeaWat=Buildings.Media.Water + "Source side medium"; + + final parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal= + dat.mWat_flow_nominal + "Liquid mass flow rate"; + final parameter Modelica.Units.SI.PressureDifference dpWat_nominal= + dat.dpWat_nominal + "Liquid pressure drop across coil"; + final parameter Modelica.Units.SI.PressureDifference dpValve_nominal= + dat.dpValve_nominal + "Nominal pressure drop across fully open valve"; + + replaceable Buildings.Templates.Components.Valves.TwoWayModulating val constrainedby + Buildings.Templates.Components.Interfaces.PartialValve( + redeclare final package Medium = MediumHeaWat, + final energyDynamics=energyDynamics, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversalLiq, + final show_T=show_T, + final dat=datVal) + "Valve" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Valves.ThreeWayModulating val + "Three-way modulating valve"), + choice(redeclare replaceable Buildings.Templates.Components.Valves.TwoWayModulating val + "Two-way modulating valve")), + Placement(transformation(extent={{-10,10},{10,-10}}, + rotation=-90, + origin={-40,-60}))); + + replaceable Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU hex( + configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, + final use_Q_flow_nominal=true, + final Q_flow_nominal=Q_flow_nominal, + final T_a1_nominal=dat.TWatEnt_nominal, + final T_a2_nominal=dat.TAirEnt_nominal, + final dp1_nominal=if val.typ==Buildings.Templates.Components.Types.Valve.None + then dpWat_nominal else 0, + final dp2_nominal=dpAir_nominal) + constrainedby Buildings.Fluid.Interfaces.PartialFourPortInterface( + redeclare final package Medium1 = MediumHeaWat, + redeclare final package Medium2 = MediumAir, + final m1_flow_nominal=mWat_flow_nominal, + final m2_flow_nominal=mAir_flow_nominal, + final allowFlowReversal1=allowFlowReversalLiq, + final allowFlowReversal2=allowFlowReversalAir, + final show_T=show_T) + "Heat exchanger" + annotation (__ctrl_flow(enable=false), + Placement(transformation(extent={{10,4},{-10,-16}}))); + + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = MediumHeaWat, + final allowFlowReversal=allowFlowReversalLiq) + if typVal <> Buildings.Templates.Components.Types.Valve.ThreeWayModulating + "Direct pass through" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={60,-60}))); + + Buildings.Fluid.FixedResistances.Junction jun( + redeclare final package Medium=MediumHeaWat, + final m_flow_nominal=mWat_flow_nominal * {1, -1, -1}, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal=fill(0, 3), + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving) + if typVal==Buildings.Templates.Components.Types.Valve.ThreeWayModulating + "Junction" + annotation ( + Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={40,-60}))); +equation + connect(port_a,hex. port_a2) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(hex.port_b2, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(val.port_a, hex.port_b1) annotation (Line(points={{-40,-50},{-40,-12}, + {-10,-12}}, color={0,127,255})); + connect(val.port_b, port_bSou) + annotation (Line(points={{-40,-70},{-40,-100}}, color={0,127,255})); + connect(port_aSou, pas.port_a) + annotation (Line(points={{40,-100},{40,-80},{60,-80},{60,-70}}, + color={0,127,255})); + connect(pas.port_b, hex.port_a1) + annotation (Line(points={{60,-50},{60,-12},{10,-12}}, color={0,127,255})); + connect(jun.port_2, hex.port_a1) + annotation (Line(points={{40,-50},{40,-12},{10,-12}}, color={0,127,255})); + connect(port_aSou, jun.port_1) + annotation (Line(points={{40,-100},{40,-70}}, color={0,127,255})); + connect(val.portByp_a, jun.port_3) + annotation (Line(points={{-30,-60},{30,-60}}, color={0,127,255})); + connect(bus, val.bus) annotation (Line( + points={{0,100},{0,20},{-60,20},{-60,-60},{-50,-60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +", info=" +

+This is a model for a hot water coil with an optional +modulating valve. +The valve position is modulated with the fractional opening +signal y (real between 0 and 1). +If no valve is used, no signal is required. +

+")); +end WaterBasedHeating; diff --git a/Buildings/Templates/Components/Coils/package.mo b/Buildings/Templates/Components/Coils/package.mo new file mode 100644 index 00000000000..3bb324e6a44 --- /dev/null +++ b/Buildings/Templates/Components/Coils/package.mo @@ -0,0 +1,13 @@ +within Buildings.Templates.Components; +package Coils "Coil models" + extends Modelica.Icons.VariantsPackage; + + + + +annotation (Documentation(info=" +

+This package contains models for heating and cooling coils. +

+")); +end Coils; diff --git a/Buildings/Templates/Components/Coils/package.order b/Buildings/Templates/Components/Coils/package.order new file mode 100644 index 00000000000..7701041b9a7 --- /dev/null +++ b/Buildings/Templates/Components/Coils/package.order @@ -0,0 +1,6 @@ +ElectricHeating +EvaporatorMultiStage +EvaporatorVariableSpeed +None +WaterBasedCooling +WaterBasedHeating diff --git a/Buildings/Templates/Components/Dampers/Modulating.mo b/Buildings/Templates/Components/Dampers/Modulating.mo new file mode 100644 index 00000000000..fcd9854cd17 --- /dev/null +++ b/Buildings/Templates/Components/Dampers/Modulating.mo @@ -0,0 +1,53 @@ +within Buildings.Templates.Components.Dampers; +model Modulating "Modulating damper" + extends Buildings.Templates.Components.Interfaces.PartialDamper( + final typ=Buildings.Templates.Components.Types.Damper.Modulating, + typBla=Buildings.Templates.Components.Types.DamperBlades.Parallel); + + Buildings.Fluid.Actuators.Dampers.Exponential dam( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final dpDamper_nominal=dp_nominal, + final dpFixed_nominal=dat.dpFixed_nominal, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T) + "Exponential damper" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(port_a, dam.port_a) annotation (Line(points={{-100,0},{-56,0},{-56,0}, + {-10,0}}, color={0,127,255})); + connect(dam.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(dam.y_actual, bus.y_actual) annotation (Line(points={{5,7},{40,7},{40, + 96},{0,96},{0,100}}, color={0,0,127})); + connect(bus.y, dam.y) annotation (Line( + points={{0,100},{0,12}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Documentation(info=" +

+This is a model for a modulating damper. +

+ +")); +end Modulating; diff --git a/Buildings/Templates/Components/Dampers/None.mo b/Buildings/Templates/Components/Dampers/None.mo new file mode 100644 index 00000000000..e7860636346 --- /dev/null +++ b/Buildings/Templates/Components/Dampers/None.mo @@ -0,0 +1,17 @@ +within Buildings.Templates.Components.Dampers; +model None "No damper" + extends Buildings.Templates.Components.Interfaces.PartialDamper( + final typ=Buildings.Templates.Components.Types.Damper.None); +equation + connect(port_a, port_b) + annotation (Line(points={{-100,0},{100,0}}, color={0,127,255})); + annotation (Icon(graphics={ Line( + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), Documentation(info=" +

+This is a direct fluid pass-through model to represent +a configuration with no damper. +

+")); +end None; diff --git a/Buildings/Templates/Components/Dampers/PressureIndependent.mo b/Buildings/Templates/Components/Dampers/PressureIndependent.mo new file mode 100644 index 00000000000..e41684b515a --- /dev/null +++ b/Buildings/Templates/Components/Dampers/PressureIndependent.mo @@ -0,0 +1,54 @@ +within Buildings.Templates.Components.Dampers; +model PressureIndependent "Pressure independent damper" + extends Buildings.Templates.Components.Interfaces.PartialDamper( + final typ=Buildings.Templates.Components.Types.Damper.PressureIndependent, + final typBla=Buildings.Templates.Components.Types.DamperBlades.VAV); + + Buildings.Fluid.Actuators.Dampers.PressureIndependent dam( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final dpDamper_nominal=dp_nominal, + final dpFixed_nominal=dat.dpFixed_nominal, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T) + "Pressure independent damper" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(dam.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(dam.y_actual, bus.y_actual) + annotation (Line(points={{5,7},{40,7},{40,96},{0,96},{0,100}}, + color={0,0,127})); + connect(port_a, dam.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(bus.y, dam.y) annotation (Line( + points={{0,100},{0,12}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Documentation(info=" +

+This is a model for a pressure independent damper. +

+ +")); +end PressureIndependent; diff --git a/Buildings/Templates/Components/Dampers/TwoPosition.mo b/Buildings/Templates/Components/Dampers/TwoPosition.mo new file mode 100644 index 00000000000..5fd4ac0a495 --- /dev/null +++ b/Buildings/Templates/Components/Dampers/TwoPosition.mo @@ -0,0 +1,92 @@ +within Buildings.Templates.Components.Dampers; +model TwoPosition "Two-position damper" + extends Buildings.Templates.Components.Interfaces.PartialDamper( + final typ=Buildings.Templates.Components.Types.Damper.TwoPosition, + typBla=Buildings.Templates.Components.Types.DamperBlades.Opposed); + + Buildings.Fluid.Actuators.Dampers.Exponential dam( + redeclare final package Medium = Medium, + final m_flow_nominal=m_flow_nominal, + final dpDamper_nominal=dp_nominal, + final dpFixed_nominal=dat.dpFixed_nominal, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T) + "Exponential damper" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + final realTrue=1, + final realFalse=0) + "Signal conversion" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,50}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) + "Return true if open (open end switch contact)" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,-50}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + "Return true if closed (closed end switch contact)" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,-50}))); +equation + connect(port_a, dam.port_a) annotation (Line(points={{-100,0},{-56,0},{-56,0}, + {-10,0}}, color={0,127,255})); + connect(dam.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(dam.y_actual,evaOpe. u) annotation (Line(points={{5,7},{20,7},{20,-38}}, + color={0,0,127})); + connect(booToRea.y, dam.y) + annotation (Line(points={{-2.22045e-15,38},{0,12}}, color={0,0,127})); + connect(evaOpe.y, bus.y1_actual) annotation (Line(points={{20,-62},{20,-80},{60, + -80},{60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(dam.y_actual, evaClo.u) annotation (Line(points={{5,7},{20,7},{20,-20}, + {-20,-20},{-20,-38}}, color={0,0,127})); + connect(evaClo.y, bus.y0_actual) annotation (Line(points={{-20,-62},{-20,-80},{ + -60,-80},{-60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(bus.y1, booToRea.u) annotation (Line( + points={{0,100},{0,62}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Documentation(info=" +

+This is a model for a two-position damper. +

+ +")); +end TwoPosition; diff --git a/Buildings/Templates/Components/Dampers/package.mo b/Buildings/Templates/Components/Dampers/package.mo new file mode 100644 index 00000000000..ff1542f360d --- /dev/null +++ b/Buildings/Templates/Components/Dampers/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Components; +package Dampers "Damper models" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

+This package contains models for dampers. +

+")); +end Dampers; diff --git a/Buildings/Templates/Components/Dampers/package.order b/Buildings/Templates/Components/Dampers/package.order new file mode 100644 index 00000000000..8548dedfa36 --- /dev/null +++ b/Buildings/Templates/Components/Dampers/package.order @@ -0,0 +1,4 @@ +Modulating +None +PressureIndependent +TwoPosition diff --git a/Buildings/Templates/Components/Data/Coil.mo b/Buildings/Templates/Components/Data/Coil.mo new file mode 100644 index 00000000000..805ef2eda79 --- /dev/null +++ b/Buildings/Templates/Components/Data/Coil.mo @@ -0,0 +1,134 @@ +within Buildings.Templates.Components.Data; +record Coil "Record for coil model" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Coil typ + "Equipment type" + annotation (Dialog(group="Configuration", enable=false), Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typVal + "Type of valve" + annotation (Dialog(group="Configuration", enable=false), Evaluate=true); + parameter Boolean have_sou + "Set to true for fluid ports on the source side" + annotation (Dialog(group="Configuration"), Evaluate=true); + + /* +For evaporator coils this is also provided by the performance data record. +The coil model shall generate a warning in case the design value exceeds +the maximum value from the performance data record. +*/ + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal( + final min=0, + start=if typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed then + datCoi.sta[datCoi.nSta].nomVal.m_flow_nominal + else 1) + "Air mass flow rate" + annotation ( + Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Coil.None and + typ<>Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage and + typ<>Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed)); + parameter Modelica.Units.SI.PressureDifference dpAir_nominal( + final min=0, + displayUnit="Pa", + start=if typ==Buildings.Templates.Components.Types.Coil.None then 0 else + 100) + "Air pressure drop" + annotation ( + Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Coil.None)); + parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal( + final min=0, + start=if typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating then + Q_flow_nominal / 4186 / 10 elseif + typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling then + -Q_flow_nominal / 4186 / 5 else + 0) + "Liquid mass flow rate" + annotation ( + Dialog(group="Nominal condition", enable=have_sou)); + parameter Modelica.Units.SI.PressureDifference dpWat_nominal( + final min=0, + displayUnit="Pa", + start=if typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating then + 0.5e4 elseif typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling then + 3e4 else + 0) + "Liquid pressure drop across coil" + annotation(Dialog(group="Nominal condition", + enable=have_sou)); + parameter Modelica.Units.SI.PressureDifference dpValve_nominal( + final min=0, + displayUnit="Pa", + start=if typVal==Buildings.Templates.Components.Types.Valve.None then 0 + else dpWat_nominal / 2) + "Liquid pressure drop across fully open valve" + annotation(Dialog(group="Nominal condition", + enable=have_sou and typVal<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.HeatFlowRate cap_nominal( + start=if typ==Buildings.Templates.Components.Types.Coil.None then 0 + elseif typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed then + datCoi.sta[datCoi.nSta].nomVal.Q_flow_nominal + elseif typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling then -1E4 + else 1E4) + "Coil capacity" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Coil.None and + typ<>Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage and + typ<>Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed)); + /* +For evaporator coils this is also provided by the performance data record. +The coil model shall generate a warning in case the design value exceeds +the maximum value from the performance data record. +*/ + final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal= + if typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating or + typ==Buildings.Templates.Components.Types.Coil.ElectricHeating then abs(cap_nominal) + else -1 * abs(cap_nominal) + "Nominal heat flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Temperature TWatEnt_nominal( + final min=273.15, + displayUnit="degC", + start=if typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating then 50+273.15 + elseif typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling then 7+273.15 + else 273.15) + "Nominal entering liquid temperature" + annotation (Dialog( + group="Nominal condition", + enable=have_sou)); + parameter Modelica.Units.SI.Temperature TAirEnt_nominal( + final min=243.15, + displayUnit="degC", + start=if typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling then 30+273.15 + else 273.15) + "Nominal entering air temperature" + annotation (Dialog( + group="Nominal condition", + enable=have_sou)); + parameter Modelica.Units.SI.MassFraction wAirEnt_nominal( + final min=0, + start=0.01) + "Nominal entering air humidity ratio" + annotation (Dialog( + group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling)); + replaceable parameter + Buildings.Fluid.DXSystems.Cooling.AirSource.Data.SingleSpeed.Carrier_Centurion_50PG06 datCoi + constrainedby + Buildings.Fluid.DXSystems.Cooling.AirSource.Data.Generic.DXCoil + "Performance data record of evaporator coil" + annotation(choicesAllMatching=true, Dialog( + enable=typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed)); + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.Components.Coils. +

+")); +end Coil; diff --git a/Buildings/Templates/Components/Data/Damper.mo b/Buildings/Templates/Components/Data/Damper.mo new file mode 100644 index 00000000000..6f89ad08e79 --- /dev/null +++ b/Buildings/Templates/Components/Data/Damper.mo @@ -0,0 +1,40 @@ +within Buildings.Templates.Components.Data; +record Damper "Record for damper model" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Damper typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal( + final min=0, + start=1) + "Air mass flow rate" + annotation ( + Dialog(group="Mechanical", + enable=typ<>Buildings.Templates.Components.Types.Damper.None)); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final min=0, + displayUnit="Pa", + start=if typ==Buildings.Templates.Components.Types.Damper.None then 0 + elseif typ==Buildings.Templates.Components.Types.Damper.PressureIndependent then 50 + else 15) + "Air pressure drop" + annotation ( + Dialog(group="Mechanical", + enable=typ<>Buildings.Templates.Components.Types.Damper.None)); + parameter Modelica.Units.SI.PressureDifference dpFixed_nominal( + final min=0, + displayUnit="Pa")=0 + "Air pressure drop of fixed elements in series with damper" + annotation ( + Dialog(group="Mechanical", enable=false)); + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.Components.Dampers. +

+")); +end Damper; diff --git a/Buildings/Templates/Components/Data/Fan.mo b/Buildings/Templates/Components/Data/Fan.mo new file mode 100644 index 00000000000..0222046de79 --- /dev/null +++ b/Buildings/Templates/Components/Data/Fan.mo @@ -0,0 +1,48 @@ +within Buildings.Templates.Components.Data; +record Fan "Record for fan model" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Fan typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Integer nFan( + final min=0, + start=if typ==Buildings.Templates.Components.Types.Fan.None then 0 else 1) + "Number of fans" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ==Buildings.Templates.Components.Types.Fan.ArrayVariable)); + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal( + final min=0, + start=1) + "Air mass flow rate" + annotation ( + Dialog(group="Nominal condition", + enable=typ <> Buildings.Templates.Components.Types.Fan.None)); + parameter Modelica.Units.SI.PressureDifference dp_nominal( + final min=0, + displayUnit="Pa", + start=if typ==Buildings.Templates.Components.Types.Fan.None then 1 + else 500) + "Total pressure rise" + annotation ( + Dialog(group="Nominal condition", + enable=typ <> Buildings.Templates.Components.Types.Fan.None)); + replaceable parameter Buildings.Fluid.Movers.Data.Generic per( + pressure( + V_flow={0, 1, 2} * m_flow_nominal / 1.2 / max(1, nFan), + dp={1.5, 1, 0} * dp_nominal)) + constrainedby Buildings.Fluid.Movers.Data.Generic + "Performance data" + annotation ( + choicesAllMatching=true, + Dialog(enable=typ <> Buildings.Templates.Components.Types.Fan.None), + Placement(transformation(extent={{-90,-88},{-70,-68}}))); + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.Components.Fans. +

+")); +end Fan; diff --git a/Buildings/Templates/Components/Data/Valve.mo b/Buildings/Templates/Components/Data/Valve.mo new file mode 100644 index 00000000000..24c7c4ae01a --- /dev/null +++ b/Buildings/Templates/Components/Data/Valve.mo @@ -0,0 +1,44 @@ +within Buildings.Templates.Components.Data; +record Valve "Record for valve model" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.Components.Types.Valve typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal( + final min=0, + start=1) + "Nominal mass flow rate of fully open valve" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.PressureDifference dpValve_nominal( + final min=0, + displayUnit="Pa", + start=0) + "Nominal pressure drop of fully open valve" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.PressureDifference dpFixed_nominal( + final min=0, + displayUnit="Pa")=0 + "Nominal pressure drop of pipes and other equipment in flow leg" + annotation(Dialog(group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.PressureDifference dpFixedByp_nominal( + final min=0, + displayUnit="Pa")=dpFixed_nominal + "Nominal pressure drop in the bypass line" + annotation(Dialog(group="Nominal condition", + enable=typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating)); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the classes within + +Buildings.Templates.Components.Valves. +

+")); +end Valve; diff --git a/Buildings/Templates/Components/Data/package.mo b/Buildings/Templates/Components/Data/package.mo new file mode 100644 index 00000000000..7d696a7f433 --- /dev/null +++ b/Buildings/Templates/Components/Data/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Components; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters. +

+")); +end Data; diff --git a/Buildings/Templates/Components/Data/package.order b/Buildings/Templates/Components/Data/package.order new file mode 100644 index 00000000000..96dad205471 --- /dev/null +++ b/Buildings/Templates/Components/Data/package.order @@ -0,0 +1,4 @@ +Coil +Damper +Fan +Valve diff --git a/Buildings/Templates/Components/Fans/ArrayVariable.mo b/Buildings/Templates/Components/Fans/ArrayVariable.mo new file mode 100644 index 00000000000..c83b441d196 --- /dev/null +++ b/Buildings/Templates/Components/Fans/ArrayVariable.mo @@ -0,0 +1,133 @@ +within Buildings.Templates.Components.Fans; +model ArrayVariable "Fan array - Variable speed" + extends Buildings.Templates.Components.Interfaces.PartialFan( + final typ=Buildings.Templates.Components.Types.Fan.ArrayVariable); + + Buildings.Fluid.Movers.SpeedControlled_y fan[nFan]( + redeclare each final package Medium=Medium, + each final inputType=Buildings.Fluid.Types.InputType.Continuous, + each final per=dat.per, + each final energyDynamics=energyDynamics, + each final tau=tau, + each use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + each final allowFlowReversal=allowFlowReversal) + "Fan array" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator repSig( + final nout=nFan) + "Replicate signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,30}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal sigSta + "Start/stop signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-46,80}))); + Buildings.Controls.OBC.CDL.Continuous.Multiply sigCon + "Resulting control signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-40,50}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta[nFan]( + each t=1E-2, + each h=0.5E-2) "Evaluate fan status" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-40}))); + Buildings.Fluid.Delays.DelayFirstOrder volInl( + redeclare final package Medium=Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + final m_flow_nominal=m_flow_nominal, + tau=1, + final nPorts=nFan+1) + "Fluid volume at inlet" + annotation (Placement(transformation(extent={{-90,0},{-70,20}}))); + Buildings.Fluid.Delays.DelayFirstOrder volOut( + redeclare final package Medium = Medium, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + final m_flow_nominal=m_flow_nominal, + tau=1, + final nPorts=nFan+1) + "Fluid volume at outet" + annotation (Placement(transformation(extent={{50,0},{70,20}}))); + Buildings.Controls.OBC.CDL.Logical.MultiAnd evaStaArr( + final nin=nFan) + "Evaluate fan array status" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-70}))); +equation + connect(repSig.y, fan.y) + annotation (Line(points={{-2.22045e-15,18},{-2.22045e-15,25},{0,25},{0,12}}, + color={0,0,127})); + connect(sigSta.y, sigCon.u2) + annotation (Line(points={{-46,68},{-46,62}}, color={0,0,127})); + connect(sigCon.y, repSig.u) annotation (Line(points={{-40,38},{-40,30},{-20, + 30},{-20,50},{0,50},{0,46},{2.22045e-15,46},{2.22045e-15,42}}, + color={0,0,127})); + connect(fan.y_actual, evaSta.u) annotation (Line(points={{11,7},{20,7},{20,-20}, + {2.22045e-15,-20},{2.22045e-15,-28}}, + color={0,0,127})); + connect(volInl.ports[1:nFan], fan.port_a) + annotation (Line(points={{-80,0},{-10,0}}, color={0,127,255})); + connect(fan.port_b, volOut.ports[1:nFan]) + annotation (Line(points={{10,0},{60,0}}, color={0,127,255})); + connect(volOut.ports[nFan+1], V_flow.port_a) + annotation (Line(points={{60,0},{70,0}}, color={0,127,255})); + connect(volInl.ports[nFan+1], port_a) + annotation (Line(points={{-80,0},{-100,0}}, color={0,127,255})); + connect(evaSta.y, evaStaArr.u) annotation (Line(points={{-2.22045e-15,-52},{-2.22045e-15, + -55},{2.22045e-15,-55},{2.22045e-15,-58}}, color={255,0,255})); + connect(evaStaArr.y, bus.y1_actual) annotation (Line(points={{0,-82},{0,-90},{40, + -90},{40,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(bus.y1, sigSta.u) annotation (Line( + points={{0,100},{0,96},{-46,96},{-46,92}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(bus.y, sigCon.u1) annotation (Line( + points={{0,100},{0,66},{-34,66},{-34,62}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Placement(transformation(extent={{-10,-10},{10,10}})), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a parallel arrangement of identical variable speed fans +(or fan array). +

+ +")); +end ArrayVariable; diff --git a/Buildings/Templates/Components/Fans/None.mo b/Buildings/Templates/Components/Fans/None.mo new file mode 100644 index 00000000000..0275bd0921e --- /dev/null +++ b/Buildings/Templates/Components/Fans/None.mo @@ -0,0 +1,23 @@ +within Buildings.Templates.Components.Fans; +model None "No fan" + extends Buildings.Templates.Components.Interfaces.PartialFan( + final nFan=0, + final typ=Buildings.Templates.Components.Types.Fan.None); + +equation + connect(port_a, V_flow.port_a) + annotation (Line(points={{-100,0},{70,0}}, color={0,127,255})); + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Line( + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a direct fluid pass-through model to represent +a configuration with no fan. +

+")); +end None; diff --git a/Buildings/Templates/Components/Fans/SingleConstant.mo b/Buildings/Templates/Components/Fans/SingleConstant.mo new file mode 100644 index 00000000000..0495c9c17c3 --- /dev/null +++ b/Buildings/Templates/Components/Fans/SingleConstant.mo @@ -0,0 +1,73 @@ +within Buildings.Templates.Components.Fans; +model SingleConstant "Single fan - Constant speed" + extends Buildings.Templates.Components.Interfaces.PartialFan( + final nFan=1, + final typ=Buildings.Templates.Components.Types.Fan.SingleConstant); + + Buildings.Fluid.Movers.SpeedControlled_y fan( + redeclare final package Medium =Medium, + final inputType=Buildings.Fluid.Types.InputType.Continuous, + final per=dat.per, + final energyDynamics=energyDynamics, + final tau=tau, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal) + "Fan" + annotation ( + Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal sigSta + "Start/stop signal" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,50}))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta( + t=1E-2, + h=0.5E-2) + "Evaluate fan status" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-50}))); +equation + connect(sigSta.y, fan.y) + annotation (Line(points={{-2.22045e-15,38},{0,12}}, color={0,0,127})); + connect(port_a, fan.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(fan.y_actual, evaSta.u) annotation (Line(points={{11,7},{20,7},{20,-20}, + {2.22045e-15,-20},{2.22045e-15,-38}}, + color={0,0,127})); + connect(bus.y1, sigSta.u) annotation (Line( + points={{0,100},{2.22045e-15,62}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(evaSta.y, bus.y1_actual) annotation (Line(points={{0,-62},{0,-80},{60, + -80},{60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(fan.port_b, V_flow.port_a) + annotation (Line(points={{10,0},{70,0}}, color={0,127,255})); + annotation (Placement(transformation(extent={{-10,-10},{10,10}})), + Icon( + coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a constant speed fan. +

+ +")); +end SingleConstant; diff --git a/Buildings/Templates/Components/Fans/SingleVariable.mo b/Buildings/Templates/Components/Fans/SingleVariable.mo new file mode 100644 index 00000000000..ad97e80487d --- /dev/null +++ b/Buildings/Templates/Components/Fans/SingleVariable.mo @@ -0,0 +1,98 @@ +within Buildings.Templates.Components.Fans; +model SingleVariable "Single fan - Variable speed" + extends Buildings.Templates.Components.Interfaces.PartialFan( + final nFan=1, + final typ=Buildings.Templates.Components.Types.Fan.SingleVariable); + + Buildings.Fluid.Movers.SpeedControlled_y fan( + redeclare final package Medium = Medium, + final inputType=Buildings.Fluid.Types.InputType.Continuous, + final per=dat.per, + final energyDynamics=energyDynamics, + final tau=tau, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversal) + "Fan" + annotation ( + Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal sigSta + "Start/stop signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,70}))); + + Buildings.Controls.OBC.CDL.Continuous.Multiply sigCon + "Resulting control signal" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,30}))); + + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaSta( + t=1E-2, + h=0.5E-2) + "Evaluate fan status" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,-50}))); +equation + connect(port_a, fan.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(fan.y_actual, evaSta.u) annotation (Line(points={{11,7},{20,7},{20, + -20},{2.22045e-15,-20},{2.22045e-15,-38}}, color={0,0,127})); + connect(bus.y1, sigSta.u) annotation (Line( + points={{0,100},{0,90},{-20,90},{-20,82}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(evaSta.y, bus.y1_actual) annotation (Line(points={{0,-62},{0,-80},{60, + -80},{60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(sigCon.y, fan.y) + annotation (Line(points={{-2.22045e-15,18},{0,12}}, color={0,0,127})); + connect(bus.y, sigCon.u1) annotation (Line( + points={{0,100},{0,90},{20,90},{20,50},{6,50},{6,42}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(sigSta.y, sigCon.u2) annotation (Line(points={{-20,58},{-20,50},{-6,50}, + {-6,42}}, color={0,0,127})); + connect(fan.port_b, V_flow.port_a) + annotation (Line(points={{10,0},{70,0}}, color={0,127,255})); + annotation (Placement(transformation(extent={{-10,-10},{10,10}})), + Icon( + coordinateSystem(preserveAspectRatio=false)), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a variable speed fan (with VFD). +

+ +")); +end SingleVariable; diff --git a/Buildings/Templates/Components/Fans/package.mo b/Buildings/Templates/Components/Fans/package.mo new file mode 100644 index 00000000000..b28a63032a9 --- /dev/null +++ b/Buildings/Templates/Components/Fans/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Components; +package Fans "Fan models" + extends Modelica.Icons.VariantsPackage; + + + +annotation (Documentation(info=" +

+This package contains models for fans. +

+")); +end Fans; diff --git a/Buildings/Templates/Components/Fans/package.order b/Buildings/Templates/Components/Fans/package.order new file mode 100644 index 00000000000..05ba6d437f8 --- /dev/null +++ b/Buildings/Templates/Components/Fans/package.order @@ -0,0 +1,4 @@ +ArrayVariable +None +SingleConstant +SingleVariable diff --git a/Buildings/Templates/Components/Interfaces/Bus.mo b/Buildings/Templates/Components/Interfaces/Bus.mo new file mode 100644 index 00000000000..760cddbef48 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/Bus.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Components.Interfaces; +expandable connector Bus "Control bus" + extends Modelica.Icons.SignalBus; + + annotation ( + defaultComponentName="bus", Documentation(info=" +

+This expandable connector provides a standard interface for +all control signals of the component models. +

+")); +end Bus; diff --git a/Buildings/Templates/Components/Interfaces/PartialCoil.mo b/Buildings/Templates/Components/Interfaces/PartialCoil.mo new file mode 100644 index 00000000000..04bc99e62ef --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialCoil.mo @@ -0,0 +1,222 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialCoil "Interface class for coil" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + redeclare final package Medium=MediumAir, + final m_flow_nominal=mAir_flow_nominal, + final allowFlowReversal=allowFlowReversalAir) + annotation(__ctrl_flow(enable=false)); + + replaceable package MediumAir=Buildings.Media.Air + "Air medium" + annotation(__ctrl_flow(enable=false)); + /* + The following definition is needed only for Dymola that does not allow + port_aSou and port_bSou to be instantiated without redeclaring their medium + to a non-partial class (which is done only in the derived class). + */ + replaceable package MediumSou=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Source-side medium" + annotation(Dialog(enable=false), __ctrl_flow(enable=false)); + + parameter Buildings.Templates.Components.Types.Coil typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Buildings.Templates.Components.Types.Valve typVal + "Type of valve" + annotation (Dialog(group="Configuration")); + final parameter Boolean have_sou= + typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating or + typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling + "Set to true for fluid ports on the source side" + annotation (Evaluate=true, Dialog(group="Configuration")); + final parameter Boolean have_weaBus= + typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed + "Set to true to use a weather bus" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Components.Data.Coil dat( + final have_sou=have_sou, + final typ=typ, + final typVal=typVal) + "Design and operating parameters" + annotation ( + Placement(transformation(extent={{70,70},{90,90}})), + __ctrl_flow(enable=false)); + + final parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal( + final min=0) = dat.mAir_flow_nominal + "Air mass flow rate"; + final parameter Modelica.Units.SI.PressureDifference dpAir_nominal( + final min=0, + displayUnit="Pa") = dat.dpAir_nominal + "Air pressure drop"; + final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal= + dat.Q_flow_nominal + "Nominal heat flow rate"; + + parameter Modelica.Units.SI.Time tau=20 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition", + enable=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState and ( + typ==Buildings.Templates.Components.Types.Coil.ElectricHeating or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed)), + __ctrl_flow(enable=false)); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations", + enable=typ==Buildings.Templates.Components.Types.Coil.ElectricHeating or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed), + __ctrl_flow(enable=false)); + + parameter Boolean allowFlowReversalAir=true + "= true to allow flow reversal, false restricts to design direction - Air side" + annotation (Dialog(tab="Assumptions"), Evaluate=true, + __ctrl_flow(enable=false)); + parameter Boolean allowFlowReversalLiq=true + "= true to allow flow reversal, false restricts to design direction - CHW and HW side" + annotation (Dialog(tab="Assumptions", + enable=typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling or + typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating), + Evaluate=true, + __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_aSou( + redeclare final package Medium = MediumSou, + m_flow(min=if allowFlowReversalLiq then -Modelica.Constants.inf else 0), + h_outflow(start=MediumSou.h_default, nominal=MediumSou.h_default)) + if have_sou + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{30,-110},{50,-90}}), + iconTransformation(extent={{40,-110},{60,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bSou( + redeclare final package Medium = MediumSou, + m_flow(max=if allowFlowReversalLiq then +Modelica.Constants.inf else 0), + h_outflow(start = MediumSou.h_default, nominal = MediumSou.h_default)) + if have_sou + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-30,-110},{-50,-90}}), + iconTransformation(extent={{-40,-110},{-60,-90}}))); + Buildings.BoundaryConditions.WeatherData.Bus busWea if have_weaBus + "Weather bus" + annotation (Placement( + transformation(extent={{-80,80},{-40,120}}), iconTransformation(extent={{-50,90}, + {-30,110}}))); + Buildings.Templates.Components.Interfaces.Bus bus + if typ <> Buildings.Templates.Components.Types.Coil.None + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + +protected + parameter Buildings.Templates.Components.Data.Valve datVal( + final typ=typVal, + final m_flow_nominal=dat.mWat_flow_nominal, + final dpValve_nominal=dat.dpValve_nominal, + final dpFixed_nominal=if typVal <> Buildings.Templates.Components.Types.Valve.None + then dat.dpWat_nominal else 0) + "Local record for control valve with lumped flow resistance"; +initial equation + if typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed then + assert(mAir_flow_nominal<=dat.datCoi.sta[dat.datCoi.nSta].nomVal.m_flow_nominal, + "In "+ getInstanceName() + ": "+ + "The coil design airflow ("+String(mAir_flow_nominal)+ + ") exceeds the maximum airflow provided in the performance data record ("+ + String(dat.datCoi.sta[dat.datCoi.nSta].nomVal.m_flow_nominal)+").", + level=AssertionLevel.warning); + assert(abs(Q_flow_nominal)<=abs(dat.datCoi.sta[dat.datCoi.nSta].nomVal.Q_flow_nominal), + "In "+ getInstanceName() + ": "+ + "The coil design capacity ("+String(Q_flow_nominal)+ + ") exceeds the maximum capacity provided in the performance data record ("+ + String(dat.datCoi.sta[dat.datCoi.nSta].nomVal.Q_flow_nominal)+").", + level=AssertionLevel.warning); + end if; + + annotation ( + Icon( + graphics={ + Bitmap( + visible=typ <> Buildings.Templates.Components.Types.Coil.None and + typVal == Buildings.Templates.Components.Types.Valve.TwoWayModulating, + extent={{-140,-300},{60,-100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorMultiStage or + typ==Buildings.Templates.Components.Types.Coil.EvaporatorVariableSpeed, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Coils/Cooling.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Coil.WaterBasedCooling, + extent={{-100,-500},{100,-300}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Coils/ChilledWaterSupplyReturn.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating or + typ==Buildings.Templates.Components.Types.Coil.ElectricHeating, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Coils/Heating.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating, + extent={{-100,-500},{100,-300}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Coils/HotWaterSupplyReturn.svg"), + Line( + visible=typ<>Buildings.Templates.Components.Types.Coil.None and + typVal<>Buildings.Templates.Components.Types.Valve.None, + points={{-100,-200},{-40,-200}}, color={0,0,0}), + Line( + visible=typ<>Buildings.Templates.Components.Types.Coil.None, + points={{-40,-240},{-40,-320}}, + color={0,0,0}, + thickness=5), + Line( visible=typ <> Buildings.Templates.Components.Types.Coil.None, + points={{-40,-160},{-40,-100}}, + color={0,0,0}, + thickness=5), + Line( visible=typ <> Buildings.Templates.Components.Types.Coil.None and + typVal == Buildings.Templates.Components.Types.Valve.None, + points={{-40,-160},{-40,-240}}, + color={0,0,0}, + thickness=5), + Line( + visible=typ<>Buildings.Templates.Components.Types.Coil.None, + points={{40,-100},{40,-320}}, + color={0,0,0}, + thickness=5), + Line( + visible=typ<>Buildings.Templates.Components.Types.Coil.None and + (typVal==Buildings.Templates.Components.Types.Valve.ThreeWayModulating or + typVal==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition), + points={{0,-200},{40,-200}}, + color={0,0,0}, + thickness=5), + Bitmap( + visible=typ<>Buildings.Templates.Components.Types.Coil.None and + (typVal==Buildings.Templates.Components.Types.Valve.TwoWayModulating or + typVal==Buildings.Templates.Components.Types.Valve.ThreeWayModulating), + extent={{-180,-238},{-100,-158}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typ <> Buildings.Templates.Components.Types.Coil.None and + typVal == Buildings.Templates.Components.Types.Valve.ThreeWayModulating, + extent={{-140,-300},{60,-100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/ThreeWay.svg")}, + coordinateSystem(preserveAspectRatio=false)), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This partial class provides a standard interface for coil models. +

+")); +end PartialCoil; diff --git a/Buildings/Templates/Components/Interfaces/PartialDamper.mo b/Buildings/Templates/Components/Interfaces/PartialDamper.mo new file mode 100644 index 00000000000..0400ba1cd73 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialDamper.mo @@ -0,0 +1,102 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialDamper "Interface class for damper" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal=dat.m_flow_nominal) + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.Components.Types.Damper typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Components.Data.Damper dat(final typ=typ) + "Design and operating parameters" + annotation (Placement(transformation(extent={{70,70},{90,90}}))); + + final parameter Modelica.Units.SI.PressureDifference dp_nominal= + dat.dp_nominal + "Damper pressure drop"; + + parameter Boolean use_inputFilter=true + "= true, if opening is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enabel=typ<>Buildings.Templates.Components.Types.Damper.None)); + parameter Modelica.Units.SI.Time riseTime=120 + "Rise time of the filter (time to reach 99.6 % of an opening step)" + annotation (Dialog( + tab="Dynamics", + group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Damper.None)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Damper.None)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Damper.None)); + + parameter Buildings.Templates.Components.Types.DamperBlades typBla= + Buildings.Templates.Components.Types.DamperBlades.Parallel + "Type of blades" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Integer text_rotation = 0 + "Text rotation angle in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Boolean text_flip = false + "True to flip text horizontally in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + + Buildings.Templates.Components.Interfaces.Bus bus + if typ <> Buildings.Templates.Components.Types.Damper.None + and typ <> Buildings.Templates.Components.Types.Damper.Barometric and typ + <> Buildings.Templates.Components.Types.Damper.NoPath + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), + iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + + annotation ( + Icon( + graphics={ + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Damper.TwoPosition, + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Damper.Modulating or + typ==Buildings.Templates.Components.Types.Damper.PressureIndependent, + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + extent={{-130,-160},{130,100}}, + visible=typ<>Buildings.Templates.Components.Types.Damper.None and + typBla==Buildings.Templates.Components.Types.DamperBlades.Opposed, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesOpposed.svg"), + Bitmap( + extent={{-130,-160},{130,100}}, + visible=typ<>Buildings.Templates.Components.Types.Damper.None and + typBla==Buildings.Templates.Components.Types.DamperBlades.Parallel, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesParallel.svg"), + Bitmap( + extent={{-130,-160},{130,100}}, + visible=typ<>Buildings.Templates.Components.Types.Damper.None and + typBla==Buildings.Templates.Components.Types.DamperBlades.VAV, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Dampers/BladesVAV.svg")}, + coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}})), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}})), + Documentation(info=" +

+This partial class provides a standard interface for damper models. +

+")); + +end PartialDamper; diff --git a/Buildings/Templates/Components/Interfaces/PartialFan.mo b/Buildings/Templates/Components/Interfaces/PartialFan.mo new file mode 100644 index 00000000000..b5c8580aef5 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialFan.mo @@ -0,0 +1,133 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialFan "Interface class for fan" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal=dat.m_flow_nominal) + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.Components.Types.Fan typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_senFlo = false + "Set to true for air flow measurement" + annotation (Evaluate=true, Dialog(group="Configuration", + enable=typ<>Buildings.Templates.Components.Types.Fan.None)); + + parameter Modelica.Units.SI.Time tau=1 + "Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic" + annotation (Dialog( + tab="Dynamics", + group="Nominal condition", + enable=typ<>Buildings.Templates.Components.Types.Fan.None and + energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState), + __ctrl_flow(enable=false)); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, + Dialog(tab = "Dynamics", group="Conservation equations", + enable=typ<>Buildings.Templates.Components.Types.Fan.None), + __ctrl_flow(enable=false)); + + parameter Buildings.Templates.Components.Types.FanSingle typSin= + Buildings.Templates.Components.Types.FanSingle.Housed + "Type of single fan" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Integer text_rotation = 0 + "Text rotation angle in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Boolean text_flip = false + "True to flip text horizontally in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + + parameter Buildings.Templates.Components.Data.Fan dat( + final typ=typ, + final nFan=nFan) + "Design and operating parameters" + annotation(Placement(transformation(extent={{70,70},{90,90}})), + __ctrl_flow(enable=false)); + + parameter Integer nFan( + final min=0, + start=0) + "Number of fans" + annotation (Dialog(group="Configuration", + enable=typ==Buildings.Templates.Components.Types.Fan.ArrayVariable)); + final parameter Modelica.Units.SI.PressureDifference dp_nominal=dat.dp_nominal + "Total pressure rise"; + + Buildings.Templates.Components.Interfaces.Bus bus + if typ <> Buildings.Templates.Components.Types.Fan.None + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate V_flow( + redeclare final package Medium = Medium, + final have_sen=have_senFlo, + final m_flow_nominal=m_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS) + "Air volume flow rate sensor" + annotation ( + Placement(transformation(extent={{70,-10},{90,10}}))); +equation + /* Control point connection - start */ + connect(V_flow.y, bus.V_flow); + /* Control point connection - stop */ + connect(port_b, V_flow.port_b) + annotation (Line(points={{100,0},{90,0}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Line( visible=typ == Buildings.Templates.Components.Types.Fan.SingleVariable + or typ == Buildings.Templates.Components.Types.Fan.ArrayVariable, + points={{0,-30},{0,-160}}, + color={0,0,0}), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Fan.ArrayVariable, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Array.svg"), + Bitmap( + visible=(typ==Buildings.Templates.Components.Types.Fan.SingleVariable or + typ==Buildings.Templates.Components.Types.Fan.SingleConstant) and + typSin==Buildings.Templates.Components.Types.FanSingle.Housed, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Housed.svg"), + Bitmap( + visible=(typ==Buildings.Templates.Components.Types.Fan.SingleVariable or + typ==Buildings.Templates.Components.Types.Fan.SingleConstant) and + typSin==Buildings.Templates.Components.Types.FanSingle.Plug, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Plug.svg"), + Bitmap( + visible=(typ==Buildings.Templates.Components.Types.Fan.SingleVariable or + typ==Buildings.Templates.Components.Types.Fan.SingleConstant) and + typSin==Buildings.Templates.Components.Types.FanSingle.Propeller, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Fans/Propeller.svg"), + Bitmap( + visible=have_senFlo and typ<>Buildings.Templates.Components.Types.Fan.None, + extent=if text_flip then {{-140,-240},{-220,-160}} else {{-220,-240},{-140,-160}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Fan.SingleVariable or + typ==Buildings.Templates.Components.Types.Fan.ArrayVariable, + extent=if text_flip then {{100,-360},{-100,-160}} else {{-100,-360},{100,-160}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/VFD.svg"), + Polygon( + points={{-185,-160},{-185,5},{-100,5},{-100,-5},{-175,-5},{-175,-160}, + {-185,-160}}, + lineColor={0,0,0}, + visible=have_senFlo and typ <> Buildings.Templates.Components.Types.Fan.None)}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This partial class provides a standard interface for fan models. +

+")); +end PartialFan; diff --git a/Buildings/Templates/Components/Interfaces/PartialSensor.mo b/Buildings/Templates/Components/Interfaces/PartialSensor.mo new file mode 100644 index 00000000000..24dd22ed63b --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialSensor.mo @@ -0,0 +1,57 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialSensor "Interface class for sensor" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface + annotation(__ctrl_flow(enable=false)); + + parameter Boolean have_sen=true + "Set to true for sensor, false for direct pass through" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean isDifPreSen=false + "Set to true for differential pressure sensor, false for any other sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Integer text_rotation = 0 + "Text rotation angle in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Boolean text_flip = false + "True to flip text horizontally in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + + Buildings.Controls.OBC.CDL.Interfaces.RealOutput y if have_sen + "Connector for measured value" + annotation (Placement(iconVisible=false, + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,120}))); + +equation + if isDifPreSen and (not have_sen) then + // Zero flow equations for connectors + port_a.m_flow = 0; + port_b.m_flow = 0; + + // No contribution of specific quantities + port_a.h_outflow = 0; + port_b.h_outflow = 0; + port_a.Xi_outflow = zeros(Medium.nXi); + port_b.Xi_outflow = zeros(Medium.nXi); + port_a.C_outflow = zeros(Medium.nC); + port_b.C_outflow = zeros(Medium.nC); + end if; + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={ + Line( + visible=(not have_sen) and (not isDifPreSen), + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This partial class provides a standard interface for sensor models. +

+")); +end PartialSensor; diff --git a/Buildings/Templates/Components/Interfaces/PartialValve.mo b/Buildings/Templates/Components/Interfaces/PartialValve.mo new file mode 100644 index 00000000000..7c25a2cbba5 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/PartialValve.mo @@ -0,0 +1,134 @@ +within Buildings.Templates.Components.Interfaces; +partial model PartialValve "Interface class for valve" + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + final m_flow_nominal=dat.m_flow_nominal) + annotation(__ctrl_flow(enable=false)); + + parameter Buildings.Templates.Components.Types.Valve typ + "Equipment type" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Buildings.Templates.Components.Data.Valve dat(final typ=typ) + "Design and operating parameters" + annotation (Placement(transformation(extent={{70,70},{90,90}})), + __ctrl_flow(enable=false)); + + final parameter Modelica.Units.SI.PressureDifference dpValve_nominal= + dat.dpValve_nominal + "Nominal pressure drop of fully open valve"; + final parameter Modelica.Units.SI.PressureDifference dpFixed_nominal= + dat.dpFixed_nominal + "Nominal pressure drop of pipes and other equipment in flow leg"; + final parameter Modelica.Units.SI.PressureDifference dpFixedByp_nominal= + dat.dpFixedByp_nominal + "Nominal pressure drop in the bypass line"; + + parameter Boolean use_inputFilter=true + "= true, if opening is filtered with a 2nd order CriticalDamping filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enable=typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Units.SI.Time riseTime=120 + "Rise time of the filter (time to reach 99.6 % of an opening step)" + annotation (Dialog( + tab="Dynamics", + group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput + "Type of initialization (no init/steady state/initial state/initial output)" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Valve.None)); + parameter Real y_start=1 "Initial position of actuator" + annotation(Dialog(tab="Dynamics", group="Filtered opening", + enable=use_inputFilter and typ<>Buildings.Templates.Components.Types.Valve.None)); + + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition", + enable=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState and ( + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition)), + __ctrl_flow(enable=false)); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations", + enable=typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition), + __ctrl_flow(enable=false)); + + parameter Integer text_rotation = 0 + "Text rotation angle in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Boolean text_flip = false + "True to flip text horizontally in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a portByp_a( + redeclare final package Medium = Medium, + p(start=Medium.p_default), + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + if typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating + "Fluid connector with bypass line" + annotation (Placement(transformation(extent={{-10,-110},{10,-90}}))); + Buildings.Templates.Components.Interfaces.Bus bus + if typ<>Buildings.Templates.Components.Types.Valve.None + "Control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={0,100}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={0,100}))); + annotation ( + Icon(graphics={ + Line( + points={{-100,0},{-40,0}}, + color={0,0,0}, + thickness=5), + Line( + points={{40,0},{100,0}}, + color={0,0,0}, + thickness=5), + Line( + visible=typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating, + points={{0,-100},{0,-40}}, + color={0,0,0}, + thickness=5), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Valve.TwoWayModulating or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating, + extent=if text_flip then {{40,60},{-40,140}} else {{-40,60},{40,140}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/Modulating.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition, + extent=if text_flip then {{40,60},{-40,140}} else {{-40,60},{40,140}}, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Actuators/TwoPosition.svg"), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.TwoWayModulating, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/TwoWay.svg", + rotation=-90), + Bitmap( + visible=typ==Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition or + typ==Buildings.Templates.Components.Types.Valve.ThreeWayModulating, + extent={{-100,-100},{100,100}}, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Valves/ThreeWay.svg", + rotation=-90), + Line( + visible=typ<>Buildings.Templates.Components.Types.Valve.None, + points={{0,60},{0,0}}, color={0,0,0})}), + Documentation(info=" +

+This partial class provides a standard interface for valve models. +

+")); +end PartialValve; diff --git a/Buildings/Templates/Components/Interfaces/package.mo b/Buildings/Templates/Components/Interfaces/package.mo new file mode 100644 index 00000000000..537e7dc3ba8 --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Components; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + + annotation (Documentation(info=" +

+This package contains interface classes. +

+")); +end Interfaces; diff --git a/Buildings/Templates/Components/Interfaces/package.order b/Buildings/Templates/Components/Interfaces/package.order new file mode 100644 index 00000000000..9c481d0f47a --- /dev/null +++ b/Buildings/Templates/Components/Interfaces/package.order @@ -0,0 +1,6 @@ +Bus +PartialCoil +PartialDamper +PartialFan +PartialSensor +PartialValve diff --git a/Buildings/Templates/Components/Routing/MultipleToMultiple.mo b/Buildings/Templates/Components/Routing/MultipleToMultiple.mo new file mode 100644 index 00000000000..e23e8ac3d7c --- /dev/null +++ b/Buildings/Templates/Components/Routing/MultipleToMultiple.mo @@ -0,0 +1,229 @@ +within Buildings.Templates.Components.Routing; +model MultipleToMultiple + "Multiple inlet ports, multiple outlet ports" + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium in the component" + annotation (choices( + choice(redeclare package Medium = Buildings.Media.Air "Moist air"), + choice(redeclare package Medium = Buildings.Media.Water "Water"), + choice(redeclare package Medium = + Buildings.Media.Antifreeze.PropyleneGlycolWater ( + property_T=293.15, + X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); + parameter Integer nPorts_a + "Number of inlet ports" + annotation(Evaluate=true, Dialog(group="Configuration")); + parameter Integer nPorts_b = nPorts_a + "Number of outlet ports" + annotation(Evaluate=true, Dialog(group="Configuration", enable=not have_comLeg)); + parameter Boolean have_comLeg = false + "Set to true for common leg between inlet and outlet ports (headered connection)" + annotation(Evaluate=true, Dialog(group="Configuration")); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal(min=0) + "Nominal mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Boolean allowFlowReversal=true + "= true to allow flow reversal, false restricts to design direction (ports_a -> ports_b)" + annotation (Dialog(tab="Assumptions"), Evaluate=true); + // Diagnostics + parameter Boolean show_T = false + "Set to true if actual temperature at port is computed" + annotation ( + Dialog(tab="Advanced", group="Diagnostics"), HideResult=true); + + parameter Integer icon_extend = 0 + "Extend lines by this amount in x-direction in icon layer: >0 at outlet, <0 at inlet" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Integer icon_dy = 100 + "Distance in y-direction between each branch in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Buildings.Templates.Components.Types.IconPipe icon_pipe = + Buildings.Templates.Components.Types.IconPipe.Supply + "Pipe symbol" + annotation(Dialog(tab="Graphics", enable=false)); + + Modelica.Fluid.Interfaces.FluidPorts_a ports_a[nPorts_a]( + redeclare each final package Medium = Medium, + each m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector a (positive design flow direction is from ports_a to ports_b)" + annotation (Placement(transformation(extent={{-110,-40},{-90,40}}), + iconTransformation(extent={{-110,-40},{-90,40}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports_b[nPorts_b]( + redeclare each final package Medium = Medium, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connectors b (positive design flow direction is from ports_a to ports_b)" + annotation (Placement(transformation(extent={{90,-40},{110,40}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_aComLeg( + redeclare final package Medium=Medium, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + if have_comLeg "Common leg port - Case with common leg" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}), + iconTransformation(extent={{-10,-10},{10,10}}))); + + PassThroughFluid pasDed[nPorts_a]( + redeclare each final package Medium=Medium) if not have_comLeg + "Dedicated fluid pass-through if dedicated arrangement" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + + Medium.ThermodynamicState sta_a[nPorts_a]= + Medium.setState_phX(ports_a.p, + noEvent(actualStream(ports_a.h_outflow)), + noEvent(actualStream(ports_a.Xi_outflow))) + if show_T "Medium properties in ports_a"; + + Medium.ThermodynamicState sta_b[nPorts_b]= + Medium.setState_phX(ports_b.p, + noEvent(actualStream(ports_b.h_outflow)), + noEvent(actualStream(ports_b.Xi_outflow))) + if show_T "Medium properties in ports_b"; + + Fluid.Delays.DelayFirstOrder del( + redeclare final package Medium=Medium, + final tau=tau, + final m_flow_nominal=m_flow_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final prescribedHeatFlowRate=false, + final nPorts=nPorts_a+nPorts_b+1) + if have_controlVolume and have_comLeg + "Fluid volume to break algebraic loop - Case with common leg" + annotation (Placement(transformation(extent={{-10,-20},{10,0}}))); + + PassThroughFluid pasSteInl(redeclare final package Medium = Medium) + if have_comLeg and not have_controlVolume + "Fluid pass-through in lieu of control volume - Case with common leg" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + PassThroughFluid pasSteOut(redeclare final package Medium = Medium) + if have_comLeg and not have_controlVolume + "Fluid pass-through in lieu of control volume - Case with common leg" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + +protected + parameter Boolean have_controlVolume= + energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "Boolean flag used to remove conditional components" + annotation(Evaluate=true); + +initial equation + if not have_comLeg then + assert(nPorts_a==nPorts_b, + "In "+ getInstanceName() + ": "+ + "In the absence of a common leg (dedicated connection), the number of inlet ports (" + + String(nPorts_a) + ") must be equal to the number of outlet ports (" + + String(nPorts_b) +")"); + end if; +equation + for i in 1:nPorts_a loop + connect(ports_a[i], pasSteInl.port_a) annotation (Line(points={{-100,0},{-80,0}, + {-80,-60},{-60,-60}}, color={0,127,255})); + end for; + for i in 1:nPorts_b loop + connect(pasSteOut.port_b, ports_b[i]) annotation (Line(points={{60,-60},{80,-60}, + {80,0},{100,0}}, color={0,127,255})); + end for; + connect(ports_a, pasDed.port_a) annotation (Line(points={{-100,0},{-20,0},{-20, + 20},{-10,20}}, color={0,127,255})); + connect(pasDed.port_b, ports_b) annotation (Line(points={{10,20},{20,20},{20,0}, + {100,0}}, color={0,127,255})); + connect(del.ports[nPorts_a+nPorts_b+1], port_aComLeg) annotation (Line(points={{0,-20}, + {0,-20},{0,-60}}, + color={0,127,255})); + connect(ports_a, del.ports[1:nPorts_a]) + annotation (Line(points={{-100,0},{-20,0},{-20, + -20},{0,-20}}, color={0,127,255})); + connect(del.ports[(nPorts_a+1):(nPorts_a+nPorts_b)], ports_b) + annotation (Line(points={{0,-20},{20,-20},{20,0},{100,0}}, + color={0,127,255})); + connect(pasSteInl.port_b, port_aComLeg) + annotation (Line(points={{-40,-60},{0,-60}}, color={0,127,255})); + connect(port_aComLeg, pasSteOut.port_a) + annotation (Line(points={{0,-60},{40,-60}}, color={0,127,255})); + + + annotation ( + defaultComponentName="rou", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text( extent={{-149,-114},{151,-154}}, + textColor={0,0,255}, + textString="%name"), + Line( points={{-100 + min(0,icon_extend), 0}, {100 + max(0, icon_extend),0}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_a>=2, + points=if have_comLeg then + {{-100 + min(0,icon_extend), icon_dy}, {-40,icon_dy}, {-40, 0}} + else {{-100 + min(0,icon_extend),icon_dy}, {100 + max(0, icon_extend),icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_a>=3, + points=if have_comLeg then + {{-100 + min(0,icon_extend), 2*icon_dy}, {-40, 2*icon_dy}, {-40, icon_dy}} + else {{-100 + min(0,icon_extend),2*icon_dy}, {100 + max(0, icon_extend),2*icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_a>=4, + points=if have_comLeg then + {{-100 + min(0,icon_extend), 3*icon_dy}, {-40, 3*icon_dy}, {-40, 2*icon_dy}} + else {{-100 + min(0,icon_extend),3*icon_dy}, {100 + max(0, icon_extend),3*icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_b>=2 and have_comLeg, + points={{40, 0}, {40, icon_dy}, {100 + max(0, icon_extend), icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_b>=3 and have_comLeg, + points={{40, icon_dy}, {40, 2*icon_dy}, {100 + max(0, icon_extend), 2*icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts_b>=4 and have_comLeg, + points={{40, 2*icon_dy}, {40, 3*icon_dy}, {100 + max(0, icon_extend), 3*icon_dy}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash)}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

+This is a model of a many-to-many fluid connector with an +optional control volume, and an optional mixing port (common leg). +It is typically used to connect parallel pumps with parallel +chillers or boilers. +Selecting a mixing port allows modeling a headered pumping arrangement. +Without any mixing port, a dedicated pumping arrangement is modeled. +

+")); +end MultipleToMultiple; diff --git a/Buildings/Templates/Components/Routing/MultipleToSingle.mo b/Buildings/Templates/Components/Routing/MultipleToSingle.mo new file mode 100644 index 00000000000..df088e2bfe3 --- /dev/null +++ b/Buildings/Templates/Components/Routing/MultipleToSingle.mo @@ -0,0 +1,167 @@ +within Buildings.Templates.Components.Routing; +model MultipleToSingle "Multiple inlet port, single outlet ports" + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium in the component" + annotation (choices( + choice(redeclare package Medium = Buildings.Media.Air "Moist air"), + choice(redeclare package Medium = Buildings.Media.Water "Water"), + choice(redeclare package Medium = + Buildings.Media.Antifreeze.PropyleneGlycolWater ( + property_T=293.15, + X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); + parameter Integer nPorts + "Number of ports" + annotation(Evaluate=true, Dialog(group="Configuration")); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal(min=0) + "Nominal mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Boolean allowFlowReversal=true + "Set to true to allow flow reversal, false restricts to design direction (ports_a -> port_b)" + annotation (Evaluate=true, Dialog(tab="Assumptions")); + // Diagnostics + parameter Boolean show_T = false + "Set to true if actual temperature at port is computed" + annotation ( + Dialog(tab="Advanced", group="Diagnostics"), + HideResult=true); + + parameter Integer icon_offset = 0 + "Offset in y-direction between inlet and outlet in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Integer icon_dy = 100 + "Distance in y-direction between each branch in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Buildings.Templates.Components.Types.IconPipe icon_pipe = + Buildings.Templates.Components.Types.IconPipe.Supply + "Pipe symbol" + annotation(Dialog(tab="Graphics", enable=false)); + + Modelica.Fluid.Interfaces.FluidPorts_a ports_a[nPorts]( + redeclare each final package Medium = Medium, + each m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector a (positive design flow direction is from ports_a to port_b)" + annotation (Placement(transformation(extent={{-110,-40},{-90,40}}), + iconTransformation(extent={{-110,-40},{-90,40}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connectors b (positive design flow direction is from ports_a to port_b)" + annotation (Placement(transformation(extent={{90,-10},{110,10}}))); + + Fluid.Delays.DelayFirstOrder del( + redeclare final package Medium = Medium, + final tau=tau, + final m_flow_nominal=m_flow_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final prescribedHeatFlowRate=false, + final nPorts=nPorts+1) + if have_controlVolume + "Fluid volume to break algebraic loop" + annotation (Placement(transformation(extent={{-10,-20},{10,0}}))); + PassThroughFluid pasSte( + redeclare final package Medium=Medium) + if not have_controlVolume + "Fluid pass-through in lieu of control volume" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + + Medium.ThermodynamicState sta_a[nPorts]= + Medium.setState_phX(ports_a.p, + noEvent(actualStream(ports_a.h_outflow)), + noEvent(actualStream(ports_a.Xi_outflow))) + if show_T "Medium properties in ports_a"; + Medium.ThermodynamicState sta_b= + Medium.setState_phX(port_b.p, + noEvent(actualStream(port_b.h_outflow)), + noEvent(actualStream(port_b.Xi_outflow))) + if show_T "Medium properties in port_b"; + +protected + parameter Boolean have_controlVolume= + energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "Boolean flag used to remove conditional components" + annotation(Evaluate=true); + +equation + for i in 1:nPorts loop + connect(ports_a[i], pasSte.port_a) annotation (Line(points={{-100,0},{-20,0},{ + -20,20},{-10,20}}, color={0,127,255})); + end for; + connect(ports_a, del.ports[1:nPorts]) annotation (Line(points={{-100,0},{-20,0}, + {-20,-20},{0,-20}}, + color={0,127,255})); + connect(del.ports[nPorts+1], port_b) annotation (Line(points={{0,-20},{20,-20}, + {20,0},{100,0}}, color={0,127,255})); + connect(pasSte.port_b, port_b) annotation (Line(points={{10,20},{20,20},{20,0}, + {100,0}}, color={0,127,255})); + annotation ( + defaultComponentName="rou", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text( extent={{-149,-114},{151,-154}}, + textColor={0,0,255}, + textString="%name"), + Line( points={{-100, icon_offset}, {0, icon_offset}, {0,0}, {100,0}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts>=2, + points=if icon_offset*icon_dy>=0 then + {{0,icon_offset},{0,icon_offset+icon_dy},{-100,icon_offset+icon_dy}} + elseif icon_offset>0 and icon_offset+icon_dy<0 or icon_offset<0 and icon_offset+icon_dy>0 then + {{0,0},{0,icon_offset+icon_dy},{-100,icon_offset+icon_dy}} + else {{0,icon_offset+icon_dy},{-100,icon_offset+icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5), + Line( visible=nPorts>=3, + points=if icon_offset*icon_dy>=0 then + {{0, icon_offset+icon_dy},{0, icon_offset+2*icon_dy},{-100, icon_offset+2*icon_dy}} + elseif icon_offset>0 and icon_offset+2*icon_dy<0 or icon_offset<0 and icon_offset+2*icon_dy>0 then + {{0, 0},{0, icon_offset+2*icon_dy},{-100, icon_offset+2*icon_dy}} + else {{0, icon_offset+2*icon_dy},{-100, icon_offset+2*icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5), + Line( visible=nPorts>=4, + points=if icon_offset*icon_dy>=0 then + {{0, icon_offset+2*icon_dy},{0, icon_offset+3*icon_dy},{-100, icon_offset+3*icon_dy}} + elseif icon_offset>0 and icon_offset+3*icon_dy<0 or icon_offset<0 and icon_offset+3*icon_dy>0 then + {{0, 0},{0, icon_offset+3*icon_dy},{-100, icon_offset+3*icon_dy}} + else {{0, icon_offset+3*icon_dy},{-100, icon_offset+3*icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5)}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

+This is a model of a many-to-one fluid connector with an +optional control volume. +It is typically used to represent an outlet manifold or +multiple junctions converging into a single pipe. +

+")); +end MultipleToSingle; diff --git a/Buildings/Templates/Components/Routing/PassThroughFluid.mo b/Buildings/Templates/Components/Routing/PassThroughFluid.mo new file mode 100644 index 00000000000..410acee7d08 --- /dev/null +++ b/Buildings/Templates/Components/Routing/PassThroughFluid.mo @@ -0,0 +1,28 @@ +within Buildings.Templates.Components.Routing; +model PassThroughFluid "Direct fluid pass-through" + extends Buildings.Fluid.Interfaces.PartialTwoPort; + +equation + connect(port_a, port_b) annotation (Line(points={{-100,0},{0,0},{0,0},{100,0}}, + color={0,127,255})); + annotation ( + defaultComponentName="pas", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Line( + points={{-100,0},{100,0}}, + color={28,108,200}, + thickness=1)}), Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model of a direct fluid pass-through used for +templating purposes. +

+", revisions=" + +")); +end PassThroughFluid; diff --git a/Buildings/Templates/Components/Routing/SingleToMultiple.mo b/Buildings/Templates/Components/Routing/SingleToMultiple.mo new file mode 100644 index 00000000000..0c8996d1449 --- /dev/null +++ b/Buildings/Templates/Components/Routing/SingleToMultiple.mo @@ -0,0 +1,169 @@ +within Buildings.Templates.Components.Routing; +model SingleToMultiple "Single inlet port, multiple outlet ports" + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium in the component" + annotation (choices( + choice(redeclare package Medium = Buildings.Media.Air "Moist air"), + choice(redeclare package Medium = Buildings.Media.Water "Water"), + choice(redeclare package Medium = + Buildings.Media.Antifreeze.PropyleneGlycolWater ( + property_T=293.15, + X_a=0.40) + "Propylene glycol water, 40% mass fraction"))); + parameter Integer nPorts + "Number of ports" + annotation(Evaluate=true, Dialog(group="Configuration")); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal(min=0) + "Nominal mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Time tau=10 + "Time constant at nominal flow" + annotation (Dialog(tab="Dynamics", group="Nominal condition")); + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + parameter Boolean allowFlowReversal=true + "Set to true to allow flow reversal, false restricts to design direction (port_a -> ports_b)" + annotation (Evaluate=true, Dialog(tab="Assumptions")); + // Diagnostics + parameter Boolean show_T = false + "Set to true if actual temperature at port is computed" + annotation ( + Dialog(tab="Advanced", group="Diagnostics"), + HideResult=true); + + parameter Integer icon_offset = 0 + "Offset in y-direction between inlet and outlet in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Integer icon_dy = 100 + "Distance in y-direction between each branch in icon layer" + annotation(Dialog(tab="Graphics", enable=false)); + parameter Buildings.Templates.Components.Types.IconPipe icon_pipe = + Buildings.Templates.Components.Types.IconPipe.Supply + "Pipe symbol" + annotation(Dialog(tab="Graphics", enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connector a (positive design flow direction is from port_a to ports_b)" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}), + iconTransformation(extent={{-110,-10},{-90,10}}))); + Modelica.Fluid.Interfaces.FluidPorts_b ports_b[nPorts]( + redeclare each final package Medium = Medium, + each m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + each h_outflow(start=Medium.h_default, nominal=Medium.h_default)) + "Fluid connectors b (positive design flow direction is from port_a to ports_b)" + annotation (Placement(transformation(extent={{90,-40},{110,40}}))); + + Fluid.Delays.DelayFirstOrder del( + redeclare final package Medium = Medium, + final tau=tau, + final m_flow_nominal=m_flow_nominal, + final energyDynamics=energyDynamics, + final allowFlowReversal=allowFlowReversal, + final prescribedHeatFlowRate=false, + final nPorts=nPorts+1) + if have_controlVolume + "Fluid volume to break algebraic loop" + annotation (Placement(transformation(extent={{-10,-20},{10,0}}))); + PassThroughFluid pasSte( + redeclare final package Medium=Medium) + if not have_controlVolume + "Fluid pass-through in lieu of control volume" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + + Medium.ThermodynamicState sta_a= + Medium.setState_phX(port_a.p, + noEvent(actualStream(port_a.h_outflow)), + noEvent(actualStream(port_a.Xi_outflow))) + if show_T "Medium properties in port_a"; + Medium.ThermodynamicState sta_b[nPorts]= + Medium.setState_phX(ports_b.p, + noEvent(actualStream(ports_b.h_outflow)), + noEvent(actualStream(ports_b.Xi_outflow))) + if show_T "Medium properties in ports_b"; + +protected + parameter Boolean have_controlVolume= + energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState + "Boolean flag used to remove conditional components" + annotation(Evaluate=true); + +equation + for i in 1:nPorts loop + connect(pasSte.port_b, ports_b[i]) annotation (Line(points={{10,20},{20, + 20},{20,0},{100,0}}, + color={0,127,255})); + end for; + connect(port_a, pasSte.port_a) annotation (Line(points={{-100,0},{-20,0},{ + -20,20},{-10,20}}, + color={0,127,255})); + connect(del.ports[2:nPorts+1], ports_b) annotation (Line(points={{0,-20},{20, + -20},{20,0},{100,0}}, + color={0,127,255})); + connect(del.ports[1], port_a) annotation (Line(points={{0,-20},{-20,-20},{-20, + 0},{-100,0}}, color={0,127,255})); + annotation ( + defaultComponentName="rou", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Text( extent={{-149,-114},{151,-154}}, + textColor={0,0,255}, + textString="%name"), + Line( points={{-100,0},{0,0},{0,icon_offset},{100,icon_offset}}, + color={0,0,0}, + thickness=5, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash), + Line( visible=nPorts>=2, + points=if icon_offset*icon_dy>=0 then + {{0, icon_offset}, {0,icon_offset+icon_dy}, {100,icon_offset+icon_dy}} + elseif icon_offset>0 and icon_offset+icon_dy<0 or icon_offset<0 and icon_offset+icon_dy>0 then + {{0, 0}, {0, icon_offset+icon_dy}, {100, icon_offset+icon_dy}} + else {{0, icon_offset+icon_dy}, {100, icon_offset+icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5), + Line( visible=nPorts>=3, + points=if icon_offset*icon_dy>=0 then + {{0, icon_offset+icon_dy},{0, icon_offset+2*icon_dy},{100, icon_offset+2*icon_dy}} + elseif icon_offset>0 and icon_offset+2*icon_dy<0 or icon_offset<0 and icon_offset+2*icon_dy>0 then + {{0, 0},{0, icon_offset+2*icon_dy},{100, icon_offset+2*icon_dy}} + else {{0, icon_offset+2*icon_dy},{100, icon_offset+2*icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5), + Line( visible=nPorts>=4, + points=if icon_offset*icon_dy>=0 then + {{0, icon_offset+2*icon_dy},{0, icon_offset+3*icon_dy},{100, icon_offset+3*icon_dy}} + elseif icon_offset>0 and icon_offset+3*icon_dy<0 or icon_offset<0 and icon_offset+3*icon_dy>0 then + {{0, 0},{0, icon_offset+3*icon_dy},{100, icon_offset+3*icon_dy}} + else {{0, icon_offset+3*icon_dy},{100, icon_offset+3*icon_dy}}, + color={0,0,0}, + pattern=if icon_pipe==Buildings.Templates.Components.Types.IconPipe.Supply + then LinePattern.Solid else LinePattern.Dash, + thickness=5)}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" + +", info=" +

+This is a model of a one-to-many fluid connector with an +optional control volume. +It is typically used to represent an inlet manifold or +a single pipe diverging into multiple junctions. +

+")); +end SingleToMultiple; diff --git a/Buildings/Templates/Components/Routing/package.mo b/Buildings/Templates/Components/Routing/package.mo new file mode 100644 index 00000000000..1559f82ce92 --- /dev/null +++ b/Buildings/Templates/Components/Routing/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.Components; +package Routing "Connection models for fluid routing" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

+This package contains models that allow connecting component +fluid ports together with various routing arrangements. +

+")); +end Routing; diff --git a/Buildings/Templates/Components/Routing/package.order b/Buildings/Templates/Components/Routing/package.order new file mode 100644 index 00000000000..cb417ce6c69 --- /dev/null +++ b/Buildings/Templates/Components/Routing/package.order @@ -0,0 +1,4 @@ +MultipleToMultiple +MultipleToSingle +PassThroughFluid +SingleToMultiple diff --git a/Buildings/Templates/Components/Sensors/DifferentialPressure.mo b/Buildings/Templates/Components/Sensors/DifferentialPressure.mo new file mode 100644 index 00000000000..55206014d71 --- /dev/null +++ b/Buildings/Templates/Components/Sensors/DifferentialPressure.mo @@ -0,0 +1,55 @@ +within Buildings.Templates.Components.Sensors; +model DifferentialPressure "Differential pressure sensor" + extends Buildings.Templates.Components.Interfaces.PartialSensor( + y(final unit="Pa", displayUnit="Pa"), + final m_flow_nominal=0, + final isDifPreSen=true); + + Buildings.Fluid.Sensors.RelativePressure senRelPre( + redeclare final package Medium=Medium) if have_sen + "Relative pressure sensor" + annotation (Placement(transformation(extent={{-10,10},{10,-10}}))); +equation + connect(port_a, senRelPre.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(senRelPre.p_rel, y) + annotation (Line(points={{0,9},{0,120}}, color={0,0,127})); + connect(senRelPre.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Bitmap( + extent=if text_flip then {{40,-40},{-40,40}} else {{-40,-40},{40,40}}, + visible=have_sen, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg"), + Bitmap( + extent=if text_flip then {{-30,-70},{-110,10}} else {{-110,-70},{-30,10}}, + visible=have_sen, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureHigh.svg"), + Bitmap( + extent=if text_flip then {{110,-70},{30,10}} else {{30,-70},{110,10}}, + visible=have_sen, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressureLow.svg")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a differential pressure sensor that can be +enabled or disabled with the Boolean parameter have_sen. +If disabled, the control input variable y is removed +and the model simply consists of two fluid ports that are not connected +to each other and for which the following equations are used. +So the model must still be provided with pressure conditions +at each port. +

+ +// Zero flow equations
+port_(a|b).m_flow = 0;
+// No contribution of specific quantities
+port_(a|b).h_outflow = 0;
+port_(a|b).Xi_outflow = zeros(Medium.nXi);
+port_(a|b).C_outflow = zeros(Medium.nC); +
+")); +end DifferentialPressure; diff --git a/Buildings/Templates/Components/Sensors/HumidityRatio.mo b/Buildings/Templates/Components/Sensors/HumidityRatio.mo new file mode 100644 index 00000000000..1178cabf263 --- /dev/null +++ b/Buildings/Templates/Components/Sensors/HumidityRatio.mo @@ -0,0 +1,58 @@ +within Buildings.Templates.Components.Sensors; +model HumidityRatio "Humidity ratio sensor" + extends Buildings.Templates.Components.Interfaces.PartialSensor( + y(final unit="kg/kg"), + final isDifPreSen=false); + + Buildings.Fluid.Sensors.MassFractionTwoPort senMasFra( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final allowFlowReversal=allowFlowReversal) if have_sen + "Mass fraction sensor" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Utilities.Psychrometrics.ToDryAir toDryAir if have_sen + "Conversion into kg/kg dry air" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,30}))); + + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal) if not have_sen "Pass through" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + connect(port_a, senMasFra.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(senMasFra.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(senMasFra.X, toDryAir.XiTotalAir) + annotation (Line(points={{0,11},{0,19}}, color={0,0,127})); + + connect(port_a, pas.port_a) annotation (Line(points={{-100,0},{-80,0},{-80,-40}, + {-10,-40}}, color={0,127,255})); + connect(pas.port_b, port_b) annotation (Line(points={{10,-40},{80,-40},{80,0}, + {100,0}}, color={0,127,255})); + connect(toDryAir.XiDry, y) + annotation (Line(points={{0,41},{0,120}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Bitmap( + extent={{-100,-160},{100,40}}, + visible=have_sen, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap( + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + visible=have_sen, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/HumidityRatio.svg")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a humidity ratio (in kg/kg dry air) sensor that can be +enabled or disabled with the Boolean parameter have_sen. +If disabled, the control input variable y is removed +and the model is a direct fluid pass-through. +

+")); +end HumidityRatio; diff --git a/Buildings/Templates/Components/Sensors/SpecificEnthalpy.mo b/Buildings/Templates/Components/Sensors/SpecificEnthalpy.mo new file mode 100644 index 00000000000..bc2d9fad89e --- /dev/null +++ b/Buildings/Templates/Components/Sensors/SpecificEnthalpy.mo @@ -0,0 +1,49 @@ +within Buildings.Templates.Components.Sensors; +model SpecificEnthalpy "Specific enthalpy sensor" + extends Buildings.Templates.Components.Interfaces.PartialSensor( + y(final unit="J/kg"), + final isDifPreSen=false); + + Buildings.Fluid.Sensors.SpecificEnthalpyTwoPort senSpeEnt( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final allowFlowReversal=allowFlowReversal) if have_sen + "Specific enthalpy sensor" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal) if not have_sen "Pass through" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + connect(port_a,senSpeEnt. port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(senSpeEnt.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + + connect(port_a, pas.port_a) annotation (Line(points={{-100,0},{-80,0},{-80,-40}, + {-10,-40}}, color={0,127,255})); + connect(pas.port_b, port_b) annotation (Line(points={{10,-40},{80,-40},{80,0}, + {100,0}}, color={0,127,255})); + connect(senSpeEnt.h_out, y) + annotation (Line(points={{0,11},{0,11},{0,120}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Bitmap( + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + visible=have_sen, + rotation=text_rotation, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/SpecificEnthalpy.svg"), + Bitmap( + extent={{-20,-160},{20,40}}, + visible=have_sen, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a specific enthalpy sensor that can be +enabled or disabled with the Boolean parameter have_sen. +If disabled, the control input variable y is removed +and the model is a direct fluid pass-through. +

+")); +end SpecificEnthalpy; diff --git a/Buildings/Templates/Components/Sensors/Temperature.mo b/Buildings/Templates/Components/Sensors/Temperature.mo new file mode 100644 index 00000000000..812a4f07e1e --- /dev/null +++ b/Buildings/Templates/Components/Sensors/Temperature.mo @@ -0,0 +1,63 @@ +within Buildings.Templates.Components.Sensors; +model Temperature "Temperature sensor" + extends Buildings.Templates.Components.Interfaces.PartialSensor( + y(final unit="K", displayUnit="degC"), + final isDifPreSen=false); + + parameter Buildings.Templates.Components.Types.SensorTemperature typ= + Buildings.Templates.Components.Types.SensorTemperature.Standard + "Type of temperature sensor" + annotation(Dialog(enable=false)); + + Buildings.Fluid.Sensors.TemperatureTwoPort senTem( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final allowFlowReversal=allowFlowReversal) if have_sen + "Temperature sensor" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal) if not have_sen "Pass through" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + + connect(port_a, senTem.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(senTem.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(port_a, pas.port_a) annotation (Line(points={{-100,0},{-80,0},{-80,-40}, + {-10,-40}}, color={0,127,255})); + connect(pas.port_b, port_b) annotation (Line(points={{10,-40},{80,-40},{80,0}, + {100,0}}, color={0,127,255})); + connect(senTem.T, y) + annotation (Line(points={{0,11},{0,11},{0,120}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Bitmap( + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + rotation=text_rotation, + visible=have_sen and typ<>Buildings.Templates.Components.Types.SensorTemperature.InWell, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap( + extent=if text_flip then {{40,160},{-40,240}} else {{-40,160},{40,240}}, + rotation=text_rotation, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorTemperature.InWell, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/Temperature.svg"), + Bitmap(extent={{-100,-160},{100,40}}, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorTemperature.Averaging, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeAveraging.svg"), + Bitmap(extent={{-100,-160},{100,40}}, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorTemperature.Standard, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeStandard.svg"), + Bitmap(extent={{-100,-40},{100,160}}, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorTemperature.InWell, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/ProbeInWell.svg")}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a dry bulb temperature sensor that can be +enabled or disabled with the Boolean parameter have_sen. +If disabled, the control input variable y is removed +and the model is a direct fluid pass-through. +

+")); +end Temperature; diff --git a/Buildings/Templates/Components/Sensors/VolumeFlowRate.mo b/Buildings/Templates/Components/Sensors/VolumeFlowRate.mo new file mode 100644 index 00000000000..4f4ed3158d0 --- /dev/null +++ b/Buildings/Templates/Components/Sensors/VolumeFlowRate.mo @@ -0,0 +1,74 @@ +within Buildings.Templates.Components.Sensors; +model VolumeFlowRate "Volume flow rate sensor" + extends Buildings.Templates.Components.Interfaces.PartialSensor( + y(final unit="m3/s"), + final isDifPreSen=false); + + parameter Buildings.Templates.Components.Types.SensorVolumeFlowRate typ + "Type of volume flow rate sensor" + annotation(Dialog(enable=false)); + + Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final allowFlowReversal=allowFlowReversal) if have_sen + "Volume flow rate sensor" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas( + redeclare final package Medium = Medium, + final allowFlowReversal=allowFlowReversal) if not have_sen "Pass through" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); +equation + + connect(port_a, senVolFlo.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(senVolFlo.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(port_a, pas.port_a) annotation (Line(points={{-100,0},{-80,0},{-80,-40}, + {-10,-40}}, color={0,127,255})); + connect(pas.port_b, port_b) annotation (Line(points={{10,-40},{80,-40},{80,0}, + {100,0}}, color={0,127,255})); + connect(senVolFlo.V_flow, y) + annotation (Line(points={{0,11},{0,120}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Bitmap( + extent=if text_flip then {{100,-100},{-100,100}} else {{-100,-100},{100,100}}, + rotation=text_rotation, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowMeter, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowMeter.svg"), + Bitmap( + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + rotation=text_rotation, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRate.svg"), + Line( + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS, + points={{0,-100},{0,-160}}, + color={0,0,0}), + Bitmap( + extent={{-100,-100},{100,100}}, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateAFMS.svg"), + Bitmap( + extent={{-100,-100},{100,100}}, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowCross, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/VolumeFlowRateFlowCross.svg"), + Bitmap( + extent=if text_flip then {{40,-240},{-40,-160}} else {{-40,-240},{40,-160}}, + rotation=text_rotation, + visible=have_sen and typ==Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowCross, + fileName="modelica://Buildings/Resources/Images/Templates/Components/Sensors/DifferentialPressure.svg"), + Rectangle( + visible=have_sen and typ == Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowCross, + extent={{-5,-100},{5,-160}}, + lineColor={0,0,0})}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a model for a volume flow rate sensor that can be +enabled or disabled with the Boolean parameter have_sen. +If disabled, the control input variable y is removed +and the model is a direct fluid pass-through. +

+")); +end VolumeFlowRate; diff --git a/Buildings/Templates/Components/Sensors/package.mo b/Buildings/Templates/Components/Sensors/package.mo new file mode 100644 index 00000000000..afb806adbee --- /dev/null +++ b/Buildings/Templates/Components/Sensors/package.mo @@ -0,0 +1,13 @@ +within Buildings.Templates.Components; +package Sensors "Sensor models" + extends Modelica.Icons.VariantsPackage; + + + + +annotation (Documentation(info=" +

+This package contains models for sensors. +

+")); +end Sensors; diff --git a/Buildings/Templates/Components/Sensors/package.order b/Buildings/Templates/Components/Sensors/package.order new file mode 100644 index 00000000000..2417b06398e --- /dev/null +++ b/Buildings/Templates/Components/Sensors/package.order @@ -0,0 +1,5 @@ +DifferentialPressure +HumidityRatio +SpecificEnthalpy +Temperature +VolumeFlowRate diff --git a/Buildings/Templates/Components/Types.mo b/Buildings/Templates/Components/Types.mo new file mode 100644 index 00000000000..a864929df7a --- /dev/null +++ b/Buildings/Templates/Components/Types.mo @@ -0,0 +1,136 @@ +within Buildings.Templates.Components; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; + type Chiller = enumeration( + AirCooled + "Air-cooled compression chiller", + WaterCooled + "Water-cooled compression chiller") + "Enumeration to specify the type of chiller"; + type Coil = enumeration( + ElectricHeating + "Modulating electric heating coil", + EvaporatorMultiStage + "Evaporator coil with multi-stage compressor", + EvaporatorVariableSpeed + "Evaporator coil with variable speed compressor", + None + "No coil", + WaterBasedCooling + "Chilled water coil", + WaterBasedHeating + "Hot water coil") + "Enumeration to configure the coil"; + type Cooler = enumeration( + None + "No external cooler (typically for air-cooled chillers)", + CoolingTowerClosed + "Closed-circuit cooling tower", + CoolingTowerOpen + "Open-circuit cooling tower", + DryCooler + "Dry cooler") + "Enumeration to configure the condenser water cooling equipment"; + type Damper = enumeration( + NoPath + "No fluid path", + Barometric + "Barometric damper", + Modulating + "Modulating damper", + None + "No damper", + PressureIndependent + "Pressure independent damper", + TwoPosition + "Two-position damper") + "Enumeration to configure the damper"; + type DamperBlades = enumeration( + Opposed + "Opposed blades", + Parallel + "Parallel blades", + VAV + "VAV damper") + "Enumeration to specify the type of damper blades"; + type Fan = enumeration( + None + "No fan", + SingleConstant + "Single fan - Constant speed", + SingleVariable + "Single fan - Variable speed", + ArrayVariable + "Fan array - Variable speed") + "Enumeration to configure the fan"; + type FanSingle = enumeration( + Housed + "Housed centrifugal fan", + Plug + "Plug fan", + Propeller + "Propeller fan") + "Enumeration to specify the type of single fan"; + type IconPipe = enumeration( + None + "No line", + Return + "Return pipe - Dashed line", + Supply + "Supply pipe - Solid line") + "Enumeration to specify the pipe symbol"; + type Sensor = enumeration( + DifferentialPressure + "Differential pressure", + HumidityRatio + "Humidity ratio", + PPM + "PPM", + RelativeHumidity + "Relative humidity", + SpecificEnthalpy + "Specific enthalpy", + Temperature + "Temperature", + VolumeFlowRate + "Volume flow rate") + "Enumeration to configure the sensor"; + type SensorTemperature = enumeration( + Standard + "Standard sensor", + Averaging + "Averaging sensor", + InWell + "Sensor in well") + "Enumeration to specify the type of temperature sensor"; + type SensorVolumeFlowRate = enumeration( + AFMS + "Airflow measuring station", + FlowCross + "Flow cross", + FlowMeter + "Flow meter") + "Enumeration to specify the type of volume flow rate sensor"; + // RFE: Add support for PICV. + type Valve = enumeration( + None + "No valve", + PumpedCoilThreeWay + "Pumped coil with three-way valve", + PumpedCoilTwoWay + "Pumped coil with two-way valve", + ThreeWayModulating + "Three-way modulating valve", + ThreeWayTwoPosition + "Three-way two-position valve", + TwoWayModulating + "Two-way modulating valve", + TwoWayTwoPosition + "Two-way two-position valve") + "Enumeration to configure the valve"; + annotation (Documentation(info=" +

+This package contains type definitions. +

+")); +end Types; diff --git a/Buildings/Templates/Components/Validation/Coils.mo b/Buildings/Templates/Components/Validation/Coils.mo new file mode 100644 index 00000000000..5c4c4af962c --- /dev/null +++ b/Buildings/Templates/Components/Validation/Coils.mo @@ -0,0 +1,289 @@ +within Buildings.Templates.Components.Validation; +model Coils "Validation model for coil components" + extends Modelica.Icons.Example; + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + replaceable package MediumLiq=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HW or CHW medium"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Fluid.Sources.Boundary_pT bouAirEntCoo( + redeclare final package Medium = MediumAir, + X={coiCoo.dat.wAirEnt_nominal/(1 + coiCoo.dat.wAirEnt_nominal),1 - coiCoo.dat.wAirEnt_nominal + /(1 + coiCoo.dat.wAirEnt_nominal)}, + p=bouAirLvg.p + coiCoo.dat.dpAir_nominal, + T=coiCoo.dat.TAirEnt_nominal, + nPorts=2) "Boundary conditions for entering air" + annotation (Placement(transformation(extent={{-90,110},{-70,130}}))); + Fluid.Sources.Boundary_pT bouChiWatEnt( + redeclare final package Medium = MediumLiq, + p=bouLiqLvg.p + coiCoo.dat.dpWat_nominal + coiCoo.dat.dpValve_nominal, + T=coiCoo.dat.TWatEnt_nominal, + nPorts=1) "Boundary conditions for entering CHW" + annotation (Placement(transformation(extent={{110,70},{90,90}}))); + Fluid.Sources.Boundary_pT bouLiqLvg( + redeclare final package Medium =MediumLiq, nPorts=2) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + Fluid.Sources.Boundary_pT bouAirLvg( + redeclare final package Medium =MediumAir, nPorts=6) "Boundary conditions for leaving air" + annotation (Placement(transformation(extent={{110,110},{90,130}}))); + + Buildings.Templates.Components.Coils.WaterBasedCooling coiCoo( + redeclare final package MediumAir=MediumAir, + redeclare final package MediumChiWat=MediumLiq, + dat( + mAir_flow_nominal=1, + dpAir_nominal=200, + mWat_flow_nominal=1, + dpWat_nominal=2E4, + dpValve_nominal=coiCoo.dat.dpWat_nominal, + cap_nominal=-5E4, + TWatEnt_nominal=280.15, + TAirEnt_nominal=308.15, + wAirEnt_nominal=0.017), + final energyDynamics=energyDynamics, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val(y_start=0) + "Two-way modulating valve") "Water-based cooling coil" + annotation (Placement(transformation(extent={{10,110},{30,130}}))); + Interfaces.Bus bus "Control bus" + annotation (Placement(transformation(extent={{-20,120},{20, + 160}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + duration=10) "Coil/valve control signal" + annotation (Placement(transformation(extent={{-90,150},{-70,170}}))); + + Buildings.Templates.Components.Coils.WaterBasedHeating coiHea( + redeclare final package MediumAir = MediumAir, + redeclare final package MediumHeaWat=MediumLiq, + dat( + mAir_flow_nominal=1, + dpAir_nominal=200, + mWat_flow_nominal=1, + dpWat_nominal=2E4, + dpValve_nominal=coiCoo.dat.dpWat_nominal, + cap_nominal=5E4, + TWatEnt_nominal=323.15, + TAirEnt_nominal=263.15), + final energyDynamics=energyDynamics, + redeclare replaceable + Buildings.Templates.Components.Valves.TwoWayModulating val(y_start=0) + "Two-way modulating valve") "Water-based heating" + annotation (Placement(transformation(extent={{10,30},{30,50}}))); + Interfaces.Bus bus1 "Control bus" + annotation (Placement(transformation(extent={{-20,40},{20,80}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Fluid.Sources.Boundary_pT bouAirEntHea( + redeclare final package Medium = MediumAir, + p=bouAirLvg.p + coiHea.dat.dpAir_nominal, + T=coiHea.dat.TAirEnt_nominal, + nPorts=2) "Boundary conditions for entering air" + annotation (Placement(transformation(extent={{-90,30},{-70,50}}))); + Fluid.Sources.Boundary_pT bouHeaWatEnt( + redeclare final package Medium = MediumLiq, + p=bouLiqLvg.p + coiHea.dat.dpWat_nominal + coiHea.dat.dpValve_nominal, + T=coiHea.dat.TWatEnt_nominal, + nPorts=1) "Boundary conditions for entering HW" + annotation (Placement(transformation(extent={{110,10},{90,30}}))); + + Buildings.Templates.Components.Coils.ElectricHeating coiEle( + redeclare final package MediumAir = MediumAir, + dat( + mAir_flow_nominal=1, + dpAir_nominal=200, + cap_nominal=5E4), + final energyDynamics=energyDynamics) "Electric heating" + annotation (Placement(transformation(extent={{10,-50},{30,-30}}))); + Interfaces.Bus bus2 "Control bus" + annotation (Placement(transformation(extent={{-20,-40},{20,0}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Buildings.Templates.Components.Coils.EvaporatorVariableSpeed coiEva( + redeclare final package MediumAir = MediumAir, + dat(dpAir_nominal=200), + final energyDynamics=energyDynamics) "Variable speed evaporator coil" + annotation (Placement(transformation(extent={{10,-110},{30,-90}}))); + BoundaryConditions.WeatherData.Bus + weaBus "Weather data bus" annotation (Placement(transformation(extent={{-50, + -110},{-10,-70}}), iconTransformation(extent={{190,-10},{210,10}}))); + Interfaces.Bus bus3 "Control bus" + annotation (Placement(transformation(extent={{-20,-100},{20,-60}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TOut(k=coiEva.dat.datCoi.sta[1].nomVal.TConIn_nominal) + "Outdoor temperature" + annotation (Placement(transformation(extent={{-130,-110},{-110,-90}}))); + Controls.OBC.CDL.Continuous.Sources.Constant XOut(k=0.015) + "Water mass fraction in outdoor air" + annotation (Placement(transformation(extent={{-130,-150},{-110,-130}}))); + Utilities.Psychrometrics.TWetBul_TDryBulXi wetBul( + redeclare final package Medium = MediumAir) + "Compute wet bulb temperature" + annotation (Placement(transformation(extent={{-60,-130},{-40,-110}}))); + Controls.OBC.CDL.Continuous.Sources.Constant pOut(k=101325) + "Outdoor pressure" + annotation (Placement(transformation(extent={{-130,-190},{-110,-170}}))); + Fluid.Sources.Boundary_pT bouAirEntCoo1( + redeclare final package Medium = MediumAir, + use_Xi_in=true, + p=bouAirLvg.p + coiEva.dat.dpAir_nominal, + T=coiEva.dat.datCoi.sta[1].nomVal.TEvaIn_nominal, + nPorts=2) "Boundary conditions for entering air" + annotation (Placement(transformation(extent={{-90,-70},{-70,-50}}))); + Utilities.Psychrometrics.X_pTphi x_pTphi(use_p_in=false) + "Compute wet bulb temperature" + annotation (Placement(transformation(extent={{-88,-10},{-68,10}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.TEvaIn_nominal) + "Entering air temperature" + annotation (Placement(transformation(extent={{-130,10},{-110,30}}))); + Controls.OBC.CDL.Continuous.Sources.Constant phiAirEnt(k=coiEva.dat.datCoi.sta[1].nomVal.phiIn_nominal) + "Enetring air relative humidity" + annotation (Placement(transformation(extent={{-130,-30},{-110,-10}}))); + Buildings.Templates.Components.Coils.EvaporatorMultiStage coiMul( + redeclare final package MediumAir = MediumAir, + dat( + redeclare + Buildings.Fluid.DXSystems.Cooling.AirSource.Data.DoubleSpeed.Lennox_SCA240H4B + datCoi, + dpAir_nominal=200), + final energyDynamics=energyDynamics) "Multiple stage evaporator coil" + annotation (Placement(transformation(extent={{10,-170},{30,-150}}))); + Controls.OBC.CDL.Integers.Sources.TimeTable y1( + table=[0,0; 1,1; 2,2], + timeScale=50, + period=200) "Coil/valve control signal" + annotation (Placement(transformation(extent={{-80,-190},{-60,-170}}))); + Interfaces.Bus bus4 "Control bus" + annotation (Placement(transformation(extent={{-20,-160},{20,-120}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumAir, + final m_flow_nominal=coiCoo.dat.mAir_flow_nominal, + final dp_nominal=coiCoo.dat.dpAir_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{-30,170},{-10,190}}))); + Buildings.Templates.Components.Coils.None non( + redeclare final package MediumAir =MediumAir) "No coilamper" + annotation (Placement(transformation(extent={{10,170},{30,190}}))); +equation + connect(bouAirEntCoo.ports[1], coiCoo.port_a) annotation (Line(points={{-70,119}, + {-30,119},{-30,120},{10,120}}, color={0,127,255})); + connect(coiCoo.port_b, bouAirLvg.ports[1]) annotation (Line(points={{30,120}, + {60,120},{60,118.333},{90,118.333}}, + color={0,127,255})); + connect(bouChiWatEnt.ports[1], coiCoo.port_aSou) + annotation (Line(points={{90,80},{25,80},{25,110}}, + color={0,127,255})); + connect(bouLiqLvg.ports[1], coiCoo.port_bSou) + annotation (Line(points={{-70,79},{15,79},{15,110}}, + color={0,127,255})); + connect(y.y, bus.y) annotation (Line(points={{-68,160},{0,160},{0,140}}, + color={0,0,127})); + connect(bus, coiCoo.bus) annotation (Line( + points={{0,140},{20,140},{20,130}}, + color={255,204,51}, + thickness=0.5)); + connect(coiHea.bus, bus1) annotation (Line( + points={{20,50},{20,60},{0,60}}, + color={255,204,51}, + thickness=0.5)); + connect(y.y, bus1.y) + annotation (Line(points={{-68,160},{0,160},{0,60}}, color={0,0,127})); + connect(bouAirEntHea.ports[1], coiHea.port_a) annotation (Line(points={{-70,39}, + {-16,39},{-16,40},{10,40}}, color={0,127,255})); + connect(coiHea.port_b, bouAirLvg.ports[2]) annotation (Line(points={{30,40},{60, + 40},{60,119},{90,119}}, color={0,127,255})); + connect(bouHeaWatEnt.ports[1], coiHea.port_aSou) + annotation (Line(points={{90,20},{25,20},{25,30}}, color={0,127,255})); + connect(coiHea.port_bSou, bouLiqLvg.ports[2]) annotation (Line(points={{15,30}, + {15,20},{-20,20},{-20,81},{-70,81}}, color={0,127,255})); + connect(bouAirEntHea.ports[2], coiEle.port_a) annotation (Line(points={{-70,41}, + {-40,41},{-40,-40},{10,-40}}, color={0,127,255})); + connect(coiEle.bus, bus2) annotation (Line( + points={{20,-30},{20,-20},{0,-20}}, + color={255,204,51}, + thickness=0.5)); + connect(coiEle.port_b, bouAirLvg.ports[3]) annotation (Line(points={{30,-40}, + {64,-40},{64,119.667},{90,119.667}}, color={0,127,255})); + connect(y.y, bus2.y) + annotation (Line(points={{-68,160},{0,160},{0,-20}}, color={0,0,127})); + connect(coiEva.port_b, bouAirLvg.ports[4]) annotation (Line(points={{30,-100}, + {68,-100},{68,118},{90,118},{90,120.333}}, + color={0,127,255})); + connect(bus3, coiEva.bus) annotation (Line( + points={{0,-80},{20,-80},{20,-90}}, + color={255,204,51}, + thickness=0.5)); + connect(weaBus, coiEva.busWea) annotation (Line( + points={{-30,-90},{16,-90}}, + color={255,204,51}, + thickness=0.5)); + connect(y.y, bus3.y) annotation (Line(points={{-68,160},{0,160},{0,-80}}, + color={0,0,127})); + connect(TOut.y, weaBus.TDryBul) annotation (Line(points={{-108,-100},{-70,-100}, + {-70,-90},{-30,-90}}, color={0,0,127})); + connect(TOut.y, wetBul.TDryBul) annotation (Line(points={{-108,-100},{-70,-100}, + {-70,-112},{-61,-112}}, color={0,0,127})); + connect(pOut.y, wetBul.p) annotation (Line(points={{-108,-180},{-100,-180},{-100, + -128},{-61,-128}}, color={0,0,127})); + connect(wetBul.TWetBul, weaBus.TWetBul) annotation (Line(points={{-39,-120},{-32, + -120},{-32,-90},{-30,-90}}, + color={0,0,127})); + connect(XOut.y, wetBul.Xi[1]) annotation (Line(points={{-108,-140},{-84,-140}, + {-84,-120},{-61,-120}}, color={0,0,127})); + connect(bouAirEntCoo1.ports[1], coiEva.port_a) annotation (Line(points={{-70,-61}, + {-14,-61},{-14,-100},{10,-100}}, + color={0,127,255})); + connect(phiAirEnt.y, x_pTphi.phi) annotation (Line(points={{-108,-20},{-100,-20}, + {-100,-6},{-90,-6}}, color={0,0,127})); + connect(TAirEnt.y, x_pTphi.T) annotation (Line(points={{-108,20},{-100,20},{-100, + 0},{-90,0}}, color={0,0,127})); + connect(x_pTphi.X[1], bouAirEntCoo1.Xi_in[1]) annotation (Line(points={{-67,0}, + {-60,0},{-60,-20},{-96,-20},{-96,-64},{-92,-64}}, color={0,0,127})); + connect(coiMul.port_b, bouAirLvg.ports[5]) annotation (Line(points={{30,-160}, + {72,-160},{72,121},{90,121}}, color={0,127,255})); + connect(bouAirEntCoo1.ports[2], coiMul.port_a) annotation (Line(points={{-70,-59}, + {-70,-60},{-14,-60},{-14,-160},{10,-160}}, color={0,127,255})); + connect(weaBus, coiMul.busWea) annotation (Line( + points={{-30,-90},{-30,-150},{16,-150}}, + color={255,204,51}, + thickness=0.5)); + connect(y1.y[1], bus4.y) annotation (Line(points={{-58,-180},{0,-180},{0,-140}}, + color={255,127,0})); + connect(coiMul.bus, bus4) annotation (Line(points={{20,-150},{20,-140},{ + 0,-140}}, + color={255,127,0})); + connect(res.port_b, non.port_a) annotation (Line(points={{-10,180},{-2,180},{-2, + 180},{10,180}}, color={0,127,255})); + connect(non.port_b, bouAirLvg.ports[6]) annotation (Line(points={{30,180},{90, + 180},{90,121.667}}, color={0,127,255})); + connect(bouAirEntCoo.ports[2], res.port_a) annotation (Line(points={{-70,121}, + {-40,121},{-40,180},{-30,180}}, color={0,127,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Coils.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=200), + Diagram(coordinateSystem(extent={{-140,-200},{140,200}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Coils +by exposing them to a fixed pressure difference on +the air side. +Models representing a water-based coil with valve +are also exposed to a fixed pressure difference on the +water side, and a varying valve opening from fully closed +to fully open position. +Other coil models are controlled with a signal varying +from 0 to 1. +

+")); +end Coils; diff --git a/Buildings/Templates/Components/Validation/Dampers.mo b/Buildings/Templates/Components/Validation/Dampers.mo new file mode 100644 index 00000000000..f27632b1d1f --- /dev/null +++ b/Buildings/Templates/Components/Validation/Dampers.mo @@ -0,0 +1,119 @@ +within Buildings.Templates.Components.Validation; +model Dampers "Validation model for damper components" + extends Modelica.Icons.Example; + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + + Fluid.Sources.Boundary_pT bouAirEnt( + redeclare final package Medium = MediumAir, + p=bouAirLvg.p + mod.dat.dp_nominal, + nPorts=4) "Boundary conditions for entering air" + annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); + Fluid.Sources.Boundary_pT bouAirLvg( + redeclare final package Medium =MediumAir, nPorts=4) "Boundary conditions for leaving air" + annotation (Placement(transformation(extent={{110,50},{90,70}}))); + + Buildings.Templates.Components.Dampers.Modulating mod( + y_start=0, + redeclare final package Medium = MediumAir, + dat(m_flow_nominal=1, + dp_nominal=50)) "Modulating damper" + annotation (Placement(transformation(extent={{10,50},{30,70}}))); + Interfaces.Bus bus + "Control bus" + annotation (Placement(transformation(extent={{-20,60},{20,100}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + duration=10) "Damper control signal" + annotation (Placement(transformation(extent={{-90,90},{-70,110}}))); + + Buildings.Templates.Components.Dampers.PressureIndependent pre( + y_start=0, + redeclare final package Medium = MediumAir, + dat(m_flow_nominal=1, dp_nominal=50)) + "Pressure independent damper" + annotation (Placement(transformation(extent={{10,-10},{30,10}}))); + Interfaces.Bus bus1 + "Control bus" + annotation (Placement(transformation(extent={{-20,0},{20,40}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Buildings.Templates.Components.Dampers.TwoPosition two( + y_start=0, + redeclare final package Medium = MediumAir, + dat(m_flow_nominal=1, dp_nominal=50)) "Two-position damper" + annotation (Placement(transformation(extent={{10,-70},{30,-50}}))); + Interfaces.Bus bus2 + "Control bus" + annotation (Placement(transformation(extent={{-20,-60},{20,-20}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,0; 1,1], + timeScale=10, + period=200) "Damper control signal" + annotation (Placement(transformation(extent={{-90,-30},{-70,-10}}))); + Buildings.Templates.Components.Dampers.None non( + redeclare final package Medium = MediumAir) "No damper" + annotation (Placement(transformation(extent={{10,-110},{30,-90}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumAir, + final m_flow_nominal=mod.dat.m_flow_nominal, + final dp_nominal=mod.dat.dp_nominal) "Flow resistance" + annotation (Placement(transformation(extent={{-30,-110},{-10,-90}}))); +equation + connect(bouAirEnt.ports[1], mod.port_a) + annotation (Line(points={{-70,58.5},{-70,60},{10,60}}, + color={0,127,255})); + connect(mod.port_b, bouAirLvg.ports[1]) + annotation (Line(points={{30,60},{60,60},{60,58.5},{90,58.5}}, + color={0,127,255})); + connect(y.y, bus.y) annotation (Line(points={{-68,100},{0,100},{0,80}}, + color={0,0,127})); + connect(bus, mod.bus) annotation (Line( + points={{0,80},{20,80},{20,70}}, + color={255,204,51}, + thickness=0.5)); + connect(bouAirEnt.ports[2], pre.port_a) annotation (Line(points={{-70,59.5},{-38, + 59.5},{-38,0},{10,0}}, color={0,127,255})); + connect(pre.port_b, bouAirLvg.ports[2]) annotation (Line(points={{30,0},{60,0}, + {60,59.5},{90,59.5}}, color={0,127,255})); + connect(bus1, pre.bus) annotation (Line( + points={{0,20},{20,20},{20,10}}, + color={255,204,51}, + thickness=0.5)); + connect(y.y, bus1.y) + annotation (Line(points={{-68,100},{0,100},{0,20}}, + color={0,0,127})); + connect(bouAirEnt.ports[3], two.port_a) annotation (Line(points={{-70,60.5},{-38, + 60.5},{-38,-60},{10,-60}}, color={0,127,255})); + connect(two.port_b, bouAirLvg.ports[3]) annotation (Line(points={{30,-60},{60, + -60},{60,60.5},{90,60.5}}, color={0,127,255})); + connect(bus2, two.bus) annotation (Line( + points={{0,-40},{20,-40},{20,-50}}, + color={255,204,51}, + thickness=0.5)); + connect(y1.y[1], bus2.y1) + annotation (Line(points={{-68,-20},{0,-20},{0,-40}}, color={255,0,255})); + connect(non.port_b, bouAirLvg.ports[4]) annotation (Line(points={{30,-100},{60, + -100},{60,61.5},{90,61.5}}, color={0,127,255})); + connect(bouAirEnt.ports[4], res.port_a) annotation (Line(points={{-70,61.5},{-40, + 61.5},{-40,-100},{-30,-100}}, color={0,127,255})); + connect(res.port_b, non.port_a) + annotation (Line(points={{-10,-100},{10,-100}}, color={0,127,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Dampers.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=200), + Diagram(coordinateSystem(extent={{-140,-140},{140,140}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Dampers +by exposing them to a fixed pressure difference +and a control signal varying from 0 to 1. +

+")); +end Dampers; diff --git a/Buildings/Templates/Components/Validation/Fans.mo b/Buildings/Templates/Components/Validation/Fans.mo new file mode 100644 index 00000000000..a6d3934fa04 --- /dev/null +++ b/Buildings/Templates/Components/Validation/Fans.mo @@ -0,0 +1,147 @@ +within Buildings.Templates.Components.Validation; +model Fans "Validation model for fans components" + extends Modelica.Icons.Example; + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Fluid.Sources.Boundary_pT bou( + redeclare final package Medium = MediumAir, + nPorts=8) "Boundary conditions" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Buildings.Templates.Components.Fans.ArrayVariable arr( + redeclare final package Medium=MediumAir, + have_senFlo=true, + final energyDynamics=energyDynamics, + dat(m_flow_nominal=1, dp_nominal=1000), + nFan=4) + "Fan array" + annotation (Placement(transformation(extent={{-10,70},{10,90}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium=MediumAir, + final m_flow_nominal=arr.dat.m_flow_nominal, + final dp_nominal=arr.dat.dp_nominal) + "Ducts and coils equivalent flow resistance" + annotation (Placement(transformation(extent={{40,70},{60,90}}))); + Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, duration=10) + "Fan control signal" + annotation (Placement(transformation(extent={{-80,110},{-60,130}}))); + Interfaces.Bus bus "Control bus" + annotation (Placement(transformation(extent={{-40,100},{0,140}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,0; 1,1], + timeScale=10, + period=100) "Fan start/stop signal" + annotation (Placement(transformation(extent={{-80,150},{-60,170}}))); + Buildings.Templates.Components.Fans.SingleVariable var( + redeclare final package Medium=MediumAir, + have_senFlo=true, + final energyDynamics=energyDynamics, + dat(m_flow_nominal=1, dp_nominal=1000)) "Variable speed fan" + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Interfaces.Bus bus1 "Control bus" + annotation (Placement(transformation(extent={{-40,0},{0,40}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Buildings.Templates.Components.Fans.SingleConstant cst( + redeclare final package Medium=MediumAir, + have_senFlo=true, + final energyDynamics=energyDynamics, + dat(m_flow_nominal=1, dp_nominal=1000)) "Constant speed fan" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + Fluid.FixedResistances.PressureDrop res1( + redeclare final package Medium = MediumAir, + final m_flow_nominal=cst.dat.m_flow_nominal, + final dp_nominal=cst.dat.dp_nominal) + "Ducts and coils equivalent flow resistance" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + Fluid.FixedResistances.PressureDrop res2( + redeclare final package Medium = MediumAir, + final m_flow_nominal=var.dat.m_flow_nominal, + final dp_nominal=var.dat.dp_nominal) + "Ducts and coils equivalent flow resistance" + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); + Interfaces.Bus bus2 + "Control bus" annotation (Placement(transformation(extent={{-40,-80},{0,-40}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Buildings.Templates.Components.Fans.None non( + redeclare final package Medium = MediumAir) + "No fan" + annotation (Placement(transformation(extent={{-10,-150},{10,-130}}))); + Fluid.FixedResistances.PressureDrop res3( + redeclare final package Medium = MediumAir, + final m_flow_nominal=1, + final dp_nominal=1000) + "Ducts and coils equivalent flow resistance" + annotation (Placement(transformation(extent={{40,-150},{60,-130}}))); +equation + connect(bou.ports[1], arr.port_a) annotation (Line(points={{-60,-1.75},{-60,80}, + {-10,80}}, color={0,127,255})); + connect(res.port_b, bou.ports[2]) annotation (Line(points={{60,80},{80,80},{80, + -1.25},{-60,-1.25}}, color={0,127,255})); + connect(arr.port_b, res.port_a) + annotation (Line(points={{10,80},{40,80}}, color={0,127,255})); + connect(y.y, bus.y) annotation (Line(points={{-58,120},{-20,120}}, + color={0,0,127})); + connect(bus, arr.bus) annotation (Line( + points={{-20,120},{0,120},{0,90}}, + color={255,204,51}, + thickness=0.5)); + connect(y1.y[1], bus.y1) annotation (Line(points={{-58,160},{-20,160},{-20,120}}, + color={255,0,255})); + connect(y1.y[1], bus1.y1) annotation (Line(points={{-58,160},{-20,160},{-20,20}}, + color={255,0,255})); + connect(cst.port_b, res1.port_a) annotation (Line(points={{10,-20},{40,-20}}, + color={0,127,255})); + connect(bou.ports[3], cst.port_a) annotation (Line(points={{-60,-0.75},{-60,-20}, + {-10,-20}}, color={0,127,255})); + connect(res1.port_b, bou.ports[4]) annotation (Line(points={{60,-20},{80,-20}, + {80,-0.25},{-60,-0.25}}, color={0,127,255})); + connect(res2.port_b, bou.ports[5]) annotation (Line(points={{60,-80},{80,-80}, + {80,0.25},{-60,0.25}}, + color={0,127,255})); + connect(bou.ports[6], var.port_a) annotation (Line(points={{-60,0.75},{-60,-80}, + {-10,-80}}, color={0,127,255})); + connect(var.port_b, res2.port_a) + annotation (Line(points={{10,-80},{40,-80}}, color={0,127,255})); + connect(bus2, var.bus) annotation (Line( + points={{-20,-60},{0,-60},{0,-70}}, + color={255,204,51}, + thickness=0.5)); + connect(bus1, cst.bus) annotation (Line( + points={{-20,20},{0,20},{0,-10}}, + color={255,204,51}, + thickness=0.5)); + connect(y.y, bus2.y) annotation (Line(points={{-58,120},{-40,120},{-40,-60},{-20, + -60}}, color={0,0,127})); + connect(bou.ports[7], non.port_a) annotation (Line(points={{-60,1.25},{-60,-140}, + {-10,-140}}, color={0,127,255})); + connect(non.port_b, res3.port_a) annotation (Line(points={{10,-140},{25,-140}, + {25,-140},{40,-140}}, color={0,127,255})); + connect(res3.port_b, bou.ports[8]) annotation (Line(points={{60,-140},{80,-140}, + {80,1.75},{-60,1.75}}, color={0,127,255})); + connect(y1.y[1], bus2.y1) annotation (Line(points={{-58,160},{-20,160},{-20,-60}}, + color={255,0,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Fans.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=200), + Diagram(coordinateSystem(extent={{-140,-180},{140,180}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Fans +by exposing them to a control signal varying from 0 to 1 +and connecting them to an air loop with a fixed flow resistance, which +is sized based on the nominal operating point of the fan model. +

+")); +end Fans; diff --git a/Buildings/Templates/Components/Validation/Routing.mo b/Buildings/Templates/Components/Validation/Routing.mo new file mode 100644 index 00000000000..782e491b3ef --- /dev/null +++ b/Buildings/Templates/Components/Validation/Routing.mo @@ -0,0 +1,165 @@ +within Buildings.Templates.Components.Validation; +model Routing "Validation model for routing components" + extends Modelica.Icons.Example; + + replaceable package Medium=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Medium"; + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Fluid.Sources.Boundary_pT bouLiqEnt( + redeclare final package Medium = Medium, + p=bouLiqLvg.p + min(res.dp_nominal), + nPorts=3) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Fluid.Sources.Boundary_pT bouLiqLvg(redeclare final package Medium = Medium, + nPorts=3) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{80,70},{60,90}}))); + Fluid.FixedResistances.PressureDrop res[3]( + redeclare final package Medium = Medium, + each m_flow_nominal=1, + each dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple mulMul( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + nPorts_a=3, + m_flow_nominal=3) "Multiple to multiple without common leg" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + Fluid.Sources.Boundary_pT bouLiqEnt1( + redeclare final package Medium = Medium, + p=bouLiqLvg.p + min(res1.dp_nominal) + min(res2.dp_nominal), + nPorts=3) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Fluid.Sources.Boundary_pT bouLiqLvg1(redeclare final package Medium = Medium, + nPorts=3) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{80,30},{60,50}}))); + Fluid.FixedResistances.PressureDrop res1 + [3]( + redeclare final package Medium = Medium, + each m_flow_nominal=1, + each dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Buildings.Templates.Components.Routing.MultipleToMultiple mulMulCom( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + nPorts_a=3, + have_comLeg=true, + m_flow_nominal=3) "Multiple to multiple with common leg" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Fluid.FixedResistances.PressureDrop res2[3]( + redeclare final package Medium = Medium, + each m_flow_nominal=1, + each dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{30,30},{50,50}}))); + Fluid.Sources.Boundary_pT bouLiqEnt2( + redeclare final package Medium = Medium, + p=bouLiqLvg.p + min(res3.dp_nominal), + nPorts=3) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Fluid.Sources.Boundary_pT bouLiqLvg2(redeclare final package Medium = Medium, + nPorts=1) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{80,-10},{60,10}}))); + Fluid.FixedResistances.PressureDrop res3 + [3]( + redeclare final package Medium = Medium, + each m_flow_nominal=1, + each dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Buildings.Templates.Components.Routing.MultipleToSingle mulSin( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + nPorts=3, + m_flow_nominal=3) "Multiple to single" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Fluid.Sources.Boundary_pT bouLiqEnt3( + redeclare final package Medium = Medium, + p=bouLiqLvg.p + min(res5.dp_nominal), + nPorts=1) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Fluid.Sources.Boundary_pT bouLiqLvg3(redeclare final package Medium = Medium, + nPorts=3) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{80,-50},{60,-30}}))); + Buildings.Templates.Components.Routing.SingleToMultiple sinMul( + redeclare final package Medium = Medium, + final energyDynamics=energyDynamics, + nPorts=3, + m_flow_nominal=3) "Single to multiple" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Fluid.FixedResistances.PressureDrop res5[3]( + redeclare final package Medium = Medium, + each m_flow_nominal=1, + each dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); + Fluid.Sources.Boundary_pT bouLiqEnt4( + redeclare final package Medium = Medium, + p=bouLiqLvg.p + res4.dp_nominal, + nPorts=1) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + Fluid.Sources.Boundary_pT bouLiqLvg4(redeclare final package Medium = Medium, + nPorts=1) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{80,-90},{60,-70}}))); + Buildings.Templates.Components.Routing.PassThroughFluid pas(redeclare final + package Medium = Medium) "Pass through" + annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); + Fluid.FixedResistances.PressureDrop res4( + redeclare final package Medium = Medium, + m_flow_nominal=1, + dp_nominal=1000) "Flow resistance" + annotation (Placement(transformation(extent={{-40,-90},{-20,-70}}))); +equation + connect(res.port_b, mulMul.ports_a) + annotation (Line(points={{-20,80},{0,80}}, color={0,127,255})); + connect(mulMul.ports_b, bouLiqLvg.ports) + annotation (Line(points={{20,80},{60,80}}, color={0,127,255})); + connect(bouLiqEnt.ports, res.port_a) + annotation (Line(points={{-60,80},{-40,80}}, color={0,127,255})); + connect(res1.port_b, mulMulCom.ports_a) + annotation (Line(points={{-20,40},{0,40}}, color={0,127,255})); + connect(bouLiqEnt1.ports, res1.port_a) + annotation (Line(points={{-60,40},{-40,40}}, color={0,127,255})); + connect(mulMulCom.ports_b, res2.port_a) + annotation (Line(points={{20,40},{30,40}}, color={0,127,255})); + connect(res2.port_b, bouLiqLvg1.ports) annotation (Line(points={{50,40},{56,40}, + {56,40},{60,40}}, color={0,127,255})); + connect(res3.port_b, mulSin.ports_a) + annotation (Line(points={{-20,0},{0,0}}, color={0,127,255})); + connect(bouLiqEnt2.ports,res3. port_a) + annotation (Line(points={{-60,0},{-40,0}}, color={0,127,255})); + connect(mulSin.port_b, bouLiqLvg2.ports[1]) + annotation (Line(points={{20,0},{60,0}}, color={0,127,255})); + connect(bouLiqEnt3.ports[1], sinMul.port_a) annotation (Line(points={{-60,-40}, + {-30,-40},{-30,-40},{0,-40}}, color={0,127,255})); + connect(sinMul.ports_b, res5.port_a) + annotation (Line(points={{20,-40},{30,-40}}, color={0,127,255})); + connect(res5.port_b, bouLiqLvg3.ports) + annotation (Line(points={{50,-40},{60,-40}}, color={0,127,255})); + connect(pas.port_b, bouLiqLvg4.ports[1]) annotation (Line(points={{20,-80},{40, + -80},{40,-80},{60,-80}}, color={0,127,255})); + connect(bouLiqEnt4.ports[1], res4.port_a) + annotation (Line(points={{-60,-80},{-40,-80}}, color={0,127,255})); + connect(res4.port_b, pas.port_a) + annotation (Line(points={{-20,-80},{0,-80}}, color={0,127,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Routing.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Routing +by exposing them to a fixed pressure difference. +

+")); +end Routing; diff --git a/Buildings/Templates/Components/Validation/Sensors.mo b/Buildings/Templates/Components/Validation/Sensors.mo new file mode 100644 index 00000000000..0aee73ad70d --- /dev/null +++ b/Buildings/Templates/Components/Validation/Sensors.mo @@ -0,0 +1,111 @@ +within Buildings.Templates.Components.Validation; +model Sensors "Validation model for sensor components" + extends Modelica.Icons.Example; + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + + Fluid.Sources.Boundary_pT bouAirEnt( + redeclare final package Medium = MediumAir, + p=bouAirLvg.p + res.dp_nominal, + nPorts=6) "Boundary conditions for entering air" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + Fluid.Sources.Boundary_pT bouAirLvg(redeclare final package Medium = + MediumAir, nPorts=6) "Boundary conditions for leaving air" + annotation (Placement(transformation(extent={{80,30},{60,50}}))); + Buildings.Templates.Components.Sensors.HumidityRatio hum(redeclare final + package Medium = MediumAir, m_flow_nominal=1) "Humidity ratio" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumAir, + final m_flow_nominal=1, + final dp_nominal=100) "Flow resistance" + annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); + Fluid.FixedResistances.PressureDrop res1( + redeclare final package Medium = MediumAir, + final m_flow_nominal=1, + final dp_nominal=100) "Flow resistance" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); + Buildings.Templates.Components.Sensors.SpecificEnthalpy ent(redeclare final + package Medium = MediumAir, m_flow_nominal=1) "Specific enthalpy" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure dp(redeclare + final package Medium = MediumAir) "Differential pressure" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + Fluid.FixedResistances.PressureDrop res2( + redeclare final package Medium = MediumAir, + final m_flow_nominal=1, + final dp_nominal=100) "Flow resistance" + annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}))); + Buildings.Templates.Components.Sensors.Temperature tem(redeclare final + package Medium = MediumAir, m_flow_nominal=1) "Temperature" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate vol(redeclare final + package Medium = MediumAir, m_flow_nominal=1, + typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.AFMS) "Volume flow rate" + annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); + Fluid.FixedResistances.PressureDrop res3( + redeclare final package Medium = MediumAir, + final m_flow_nominal=1, + final dp_nominal=100) "Flow resistance" + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + Buildings.Templates.Components.Sensors.DifferentialPressure noDp(redeclare + final package Medium = MediumAir, have_sen=false) + "No differential pressure sensor" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); +equation + connect(bouAirEnt.ports[1], res.port_a) + annotation (Line(points={{-60,38.3333},{-50,38.3333},{-50,40},{-30,40}}, + color={0,127,255})); + connect(res.port_b, hum.port_a) + annotation (Line(points={{-10,40},{0,40}}, color={0,127,255})); + connect(hum.port_b, bouAirLvg.ports[1]) annotation (Line(points={{20,40},{50, + 40},{50,38.3333},{60,38.3333}}, + color={0,127,255})); + connect(res1.port_b, ent.port_a) + annotation (Line(points={{-10,0},{0,0}}, color={0,127,255})); + connect(ent.port_b, bouAirLvg.ports[2]) annotation (Line(points={{20,0},{40,0}, + {40,39},{60,39}}, color={0,127,255})); + connect(bouAirEnt.ports[2], res1.port_a) annotation (Line(points={{-60,39},{-40, + 39},{-40,0},{-30,0}}, color={0,127,255})); + connect(bouAirEnt.ports[3], dp.port_a) annotation (Line(points={{-60,39.6667}, + {-40,39.6667},{-40,70},{0,70}}, + color={0,127,255})); + connect(dp.port_b, bouAirLvg.ports[3]) annotation (Line(points={{20,70},{40, + 70},{40,39.6667},{60,39.6667}}, + color={0,127,255})); + connect(res2.port_b, tem.port_a) + annotation (Line(points={{-10,-40},{0,-40}}, color={0,127,255})); + connect(res3.port_b, vol.port_a) + annotation (Line(points={{-10,-80},{0,-80}}, color={0,127,255})); + connect(tem.port_b, bouAirLvg.ports[4]) annotation (Line(points={{20,-40},{40, + -40},{40,40.3333},{60,40.3333}}, color={0,127,255})); + connect(vol.port_b, bouAirLvg.ports[5]) annotation (Line(points={{20,-80},{40, + -80},{40,41},{60,41}}, color={0,127,255})); + connect(bouAirEnt.ports[4], res2.port_a) annotation (Line(points={{-60, + 40.3333},{-60,38},{-40,38},{-40,-40},{-30,-40}}, + color={0,127,255})); + connect(bouAirEnt.ports[5], res3.port_a) annotation (Line(points={{-60,41},{-40, + 41},{-40,-80},{-30,-80}}, color={0,127,255})); + + connect(bouAirEnt.ports[6], noDp.port_a) annotation (Line(points={{-60, + 41.6667},{-40,41.6667},{-40,100},{0,100}}, + color={0,127,255})); + connect(noDp.port_b, bouAirLvg.ports[6]) annotation (Line(points={{20,100},{ + 40,100},{40,41.6667},{60,41.6667}}, + color={0,127,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Sensors.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Sensors. +

+")); +end Sensors; diff --git a/Buildings/Templates/Components/Validation/Valves.mo b/Buildings/Templates/Components/Validation/Valves.mo new file mode 100644 index 00000000000..d0704c1e8b0 --- /dev/null +++ b/Buildings/Templates/Components/Validation/Valves.mo @@ -0,0 +1,150 @@ +within Buildings.Templates.Components.Validation; +model Valves "Validation model for valve components" + extends Modelica.Icons.Example; + + replaceable package MediumLiq=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Liquid medium"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.FixedInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations")); + + Fluid.Sources.Boundary_pT bouLiqEnt( + redeclare final package Medium = MediumLiq, + p=bouLiqLvg.p + modThr.dat.dpValve_nominal + modThr.dat.dpFixed_nominal, + nPorts=6) "Boundary conditions for entering liquid" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + Fluid.Sources.Boundary_pT bouLiqLvg( + redeclare final package Medium =MediumLiq, nPorts=4) + "Boundary conditions for leaving liquid" + annotation (Placement(transformation(extent={{110,70},{90,90}}))); + + Buildings.Templates.Components.Valves.ThreeWayModulating modThr( + redeclare final package Medium = MediumLiq, + final energyDynamics=energyDynamics, + dat( + m_flow_nominal=1, + dpValve_nominal=5000, + dpFixed_nominal=5000)) + "Three-way modulating valve" + annotation (Placement(transformation(extent={{10,70},{30,90}}))); + Interfaces.Bus bus + "Control bus" + annotation (Placement(transformation(extent={{-20,80},{20,120}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Continuous.Sources.Ramp y(height=1, + duration=10) "Damper control signal" + annotation (Placement(transformation(extent={{-90,110},{-70,130}}))); + + Buildings.Templates.Components.Valves.ThreeWayTwoPosition twoThr( + redeclare final package Medium = MediumLiq, + final energyDynamics=energyDynamics, + dat( + m_flow_nominal=1, + dpValve_nominal=5000, + dpFixed_nominal=5000)) "Three-way two position valve" + annotation (Placement(transformation(extent={{10,-50},{30,-30}}))); + Interfaces.Bus bus1 + "Control bus" + annotation (Placement(transformation(extent={{-20,-40},{20,0}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + + Buildings.Templates.Components.Valves.TwoWayModulating modTwo( + redeclare final package Medium = MediumLiq, + final energyDynamics=energyDynamics, + dat( + m_flow_nominal=1, + dpValve_nominal=5000, + dpFixed_nominal=5000)) "Two-way modulating valve" + annotation (Placement(transformation(extent={{10,10},{30,30}}))); + Interfaces.Bus bus2 + "Control bus" + annotation (Placement(transformation(extent={{-20,20},{20,60}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); + Controls.OBC.CDL.Logical.Sources.TimeTable y1( + table=[0,0; 1,1], + timeScale=10, + period=200) "Damper control signal" + annotation (Placement(transformation(extent={{-90,-10},{-70,10}}))); + Buildings.Templates.Components.Valves.TwoWayTwoPosition twoTwo( + redeclare final package Medium = MediumLiq, + final energyDynamics=energyDynamics, + dat( + m_flow_nominal=1, + dpValve_nominal=5000, + dpFixed_nominal=5000)) "Two-way two-position valve" + annotation (Placement(transformation(extent={{10,-110},{30,-90}}))); + Interfaces.Bus bus3 + "Control bus" + annotation (Placement(transformation(extent={{-20,-100},{20,-60}}), + iconTransformation(extent={{-250,-32},{-210,8}}))); +equation + connect(bouLiqEnt.ports[1], modThr.port_a) + annotation (Line(points={{-70,78.3333},{-30,78.3333},{-30,80},{10,80}}, + color={0,127,255})); + connect(modThr.port_b,bouLiqLvg. ports[1]) + annotation (Line(points={{30,80},{60,80},{60,78.5},{90,78.5}}, + color={0,127,255})); + connect(y.y, bus.y) annotation (Line(points={{-68,120},{0,120},{0,100}}, + color={0,0,127})); + connect(bus, modThr.bus) annotation (Line( + points={{0,100},{20,100},{20,90}}, + color={255,204,51}, + thickness=0.5)); + connect(bouLiqEnt.ports[3], twoThr.port_a) annotation (Line(points={{-70, + 79.6667},{-32,79.6667},{-32,-40},{10,-40}}, + color={0,127,255})); + connect(twoThr.port_b, bouLiqLvg.ports[2]) annotation (Line(points={{30,-40}, + {60,-40},{60,79.5},{90,79.5}}, + color={0,127,255})); + connect(bus1, twoThr.bus) annotation (Line( + points={{0,-20},{20,-20},{20,-30}}, + color={255,204,51}, + thickness=0.5)); + connect(bouLiqEnt.ports[2], modTwo.port_a) annotation (Line(points={{-70,79}, + {-30,79},{-30,20},{10,20}}, color={0,127,255})); + connect(modTwo.port_b, bouLiqLvg.ports[3]) annotation (Line(points={{30,20},{ + 60,20},{60,80.5},{90,80.5}}, + color={0,127,255})); + connect(bus2, modTwo.bus) annotation (Line( + points={{0,40},{20,40},{20,30}}, + color={255,204,51}, + thickness=0.5)); + connect(y.y, bus2.y) + annotation (Line(points={{-68,120},{0,120},{0,40}}, + color={0,0,127})); + connect(y1.y[1], bus1.y1) + annotation (Line(points={{-68,0},{0,0},{0,-20}}, color={255,0,255})); + connect(bus3, twoTwo.bus) annotation (Line( + points={{0,-80},{20,-80},{20,-90}}, + color={255,204,51}, + thickness=0.5)); + connect(y1.y[1],bus3. y1) + annotation (Line(points={{-68,0},{0,0},{0,-80}}, color={255,0,255})); + connect(bouLiqEnt.ports[4], twoTwo.port_a) annotation (Line(points={{-70, + 80.3333},{-40,80.3333},{-40,-100},{10,-100},{10,-100}}, + color={0,127,255})); + connect(twoTwo.port_b, bouLiqLvg.ports[4]) annotation (Line(points={{30,-100}, + {80,-100},{80,81.5},{90,81.5}}, color={0,127,255})); + connect(bouLiqEnt.ports[5], modThr.portByp_a) annotation (Line(points={{-70, + 81},{-36,81},{-36,60},{20,60},{20,70}}, color={0,127,255})); + connect(bouLiqEnt.ports[6], twoThr.portByp_a) annotation (Line(points={{-70, + 81.6667},{-38,81.6667},{-38,-60},{20,-60},{20,-50}}, color={0,127,255})); +annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/Components/Validation/Valves.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=200), + Diagram(coordinateSystem(extent={{-140,-140},{140,140}})), + Documentation(info=" +

+This model validates the models within + +Buildings.Templates.Components.Valves +by exposing them to a fixed pressure difference +and a control signal varying from 0 to 1. +

+")); +end Valves; diff --git a/Buildings/Templates/Components/Validation/package.mo b/Buildings/Templates/Components/Validation/package.mo new file mode 100644 index 00000000000..4ffc83e61b6 --- /dev/null +++ b/Buildings/Templates/Components/Validation/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.Components; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

+This package contains validation models for the classes within + +Buildings.Templates.Components. +

+")); +end Validation; diff --git a/Buildings/Templates/Components/Validation/package.order b/Buildings/Templates/Components/Validation/package.order new file mode 100644 index 00000000000..07f6cebf6fd --- /dev/null +++ b/Buildings/Templates/Components/Validation/package.order @@ -0,0 +1,6 @@ +Coils +Dampers +Fans +Routing +Sensors +Valves diff --git a/Buildings/Templates/Components/Valves/None.mo b/Buildings/Templates/Components/Valves/None.mo new file mode 100644 index 00000000000..1c0915145ec --- /dev/null +++ b/Buildings/Templates/Components/Valves/None.mo @@ -0,0 +1,17 @@ +within Buildings.Templates.Components.Valves; +model None "No valve" + extends Buildings.Templates.Components.Interfaces.PartialValve( + final typ=Buildings.Templates.Components.Types.Valve.None); + +equation + connect(port_a, port_b) + annotation (Line(points={{-100,0},{100,0},{100,0}}, color={0,127,255})); + annotation ( + defaultComponentName="val", + Documentation(info=" +

+This is a direct fluid pass-through model to represent +a configuration with no valve. +

+")); +end None; diff --git a/Buildings/Templates/Components/Valves/ThreeWayModulating.mo b/Buildings/Templates/Components/Valves/ThreeWayModulating.mo new file mode 100644 index 00000000000..c5e591ed284 --- /dev/null +++ b/Buildings/Templates/Components/Valves/ThreeWayModulating.mo @@ -0,0 +1,76 @@ +within Buildings.Templates.Components.Valves; +model ThreeWayModulating "Three-way modulating valve" + extends Buildings.Templates.Components.Interfaces.PartialValve( + final typ=Buildings.Templates.Components.Types.Valve.ThreeWayModulating); + + replaceable Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear val + constrainedby Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=dpValve_nominal, + final dpFixed_nominal={dpFixed_nominal, dpFixedByp_nominal}, + final energyDynamics=energyDynamics, + final tau=tau, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) + "Valve" + annotation ( + __ctrl_flow(enable=false), + choicesAllMatching=true, + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0))); +equation + connect(port_a, val.port_1) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(val.port_2, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(val.port_3, portByp_a) + annotation (Line(points={{0,-10},{0,-100}}, color={0,127,255})); + connect(bus.y, val.y) annotation (Line( + points={{0,100},{0,12}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(val.y_actual, bus.y_actual) annotation (Line(points={{5,7},{40,7},{40, + 96},{0,96},{0,100}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation ( + defaultComponentName="val", + Documentation(info=" +

+This is a model for a three-way modulating valve. +

+ +")); +end ThreeWayModulating; diff --git a/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo b/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo new file mode 100644 index 00000000000..11e70e3d208 --- /dev/null +++ b/Buildings/Templates/Components/Valves/ThreeWayTwoPosition.mo @@ -0,0 +1,109 @@ +within Buildings.Templates.Components.Valves; +model ThreeWayTwoPosition "Three-way two-position valve" + extends Buildings.Templates.Components.Interfaces.PartialValve( + final typ=Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition); + + replaceable Buildings.Fluid.Actuators.Valves.ThreeWayLinear val + constrainedby Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=dpValve_nominal, + final dpFixed_nominal={dpFixed_nominal, dpFixedByp_nominal}, + final energyDynamics=energyDynamics, + final tau=tau, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final portFlowDirection_1=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering, + final portFlowDirection_2=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Leaving, + final portFlowDirection_3=if allowFlowReversal then + Modelica.Fluid.Types.PortFlowDirection.Bidirectional + else Modelica.Fluid.Types.PortFlowDirection.Entering) + "Valve" + annotation ( + __ctrl_flow(enable=false), + choicesAllMatching=true, + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe(t=0.99, h=0.5E-2) + "Return true if open (open end switch contact)" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,-50}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + "Return true if closed (closed end switch contact)" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,-50}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + final realTrue=1, + final realFalse=0) + "Signal conversion" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,50}))); +equation + connect(port_a, val.port_1) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(val.port_2, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(val.y_actual, evaOpe.u) + annotation (Line(points={{5,7},{20,7},{20,-38}}, color={0,0,127})); + connect(val.y_actual, evaClo.u) annotation (Line(points={{5,7},{20,7},{20,-20}, + {-20,-20},{-20,-38}}, color={0,0,127})); + connect(evaOpe.y, bus.y1_actual) annotation (Line(points={{20,-62},{20,-80},{60, + -80},{60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(evaClo.y, bus.y0_actual) annotation (Line(points={{-20,-62},{-20,-80}, + {-60,-80},{-60,96},{0,96},{0,100}},color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(booToRea.u, bus.y1) annotation (Line(points={{2.22045e-15,62},{2.22045e-15, + 81},{0,81},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(booToRea.y, val.y) annotation (Line(points={{-2.22045e-15,38},{-2.22045e-15, + 25},{0,25},{0,12}}, color={0,0,127})); + connect(val.port_3, portByp_a) + annotation (Line(points={{0,-10},{0,-100}}, color={0,127,255})); + annotation ( + defaultComponentName="val", + Documentation(info=" +

+This is a model for a three-way two-position (directional) valve. +

+ +")); +end ThreeWayTwoPosition; diff --git a/Buildings/Templates/Components/Valves/TwoWayModulating.mo b/Buildings/Templates/Components/Valves/TwoWayModulating.mo new file mode 100644 index 00000000000..62fa1924cd9 --- /dev/null +++ b/Buildings/Templates/Components/Valves/TwoWayModulating.mo @@ -0,0 +1,65 @@ +within Buildings.Templates.Components.Valves; +model TwoWayModulating "Two-way modulating valve" + extends Buildings.Templates.Components.Interfaces.PartialValve( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating); + + replaceable Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val + constrainedby Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve( + redeclare final package Medium=Medium, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=dpValve_nominal, + final dpFixed_nominal=dpFixed_nominal, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T) + "Valve" + annotation ( + __ctrl_flow(enable=false), + choicesAllMatching=true, + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0))); +equation + connect(port_a, val.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(val.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(bus.y, val.y) annotation (Line( + points={{0,100},{0,12}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(val.y_actual, bus.y_actual) annotation (Line(points={{5,7},{40,7},{40, + 96},{0,96},{0,100}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation ( + defaultComponentName="val", + Documentation(info=" +

+This is a model for a two-way modulating valve. +

+ +")); +end TwoWayModulating; diff --git a/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo b/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo new file mode 100644 index 00000000000..14aeb976710 --- /dev/null +++ b/Buildings/Templates/Components/Valves/TwoWayTwoPosition.mo @@ -0,0 +1,102 @@ +within Buildings.Templates.Components.Valves; +model TwoWayTwoPosition "Two-way two-position valve" + extends Buildings.Templates.Components.Interfaces.PartialValve( + final typ=Buildings.Templates.Components.Types.Valve.TwoWayTwoPosition); + + replaceable Buildings.Fluid.Actuators.Valves.TwoWayPolynomial val( + c={0,1.101898284705380E-01, 2.217227395456580, -7.483401207660790, 1.277617623360130E+01, -6.618045307070130}) + constrainedby Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve( + redeclare final package Medium=Medium, + final CvData = Buildings.Fluid.Types.CvTypes.OpPoint, + final m_flow_nominal=m_flow_nominal, + final dpValve_nominal=dpValve_nominal, + final dpFixed_nominal=dpFixed_nominal, + final use_inputFilter=use_inputFilter, + final riseTime=riseTime, + final init=init, + final y_start=y_start, + final allowFlowReversal=allowFlowReversal, + final show_T=show_T) + "Valve (butterfly valve characteristic)" + annotation ( + __ctrl_flow(enable=false), + choicesAllMatching=true, + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0))); + Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold evaOpe( + t=0.99, + h=0.5E-2) + "Return true if open (open end switch contact)" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,-50}))); + Buildings.Controls.OBC.CDL.Continuous.LessThreshold evaClo(t=0.01, h=0.5E-2) + "Return true if closed (closed end switch contact)" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-20,-50}))); + Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + final realTrue=1, + final realFalse=0) + "Signal conversion" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={0,50}))); +equation + connect(port_a, val.port_a) + annotation (Line(points={{-100,0},{-10,0}}, color={0,127,255})); + connect(val.port_b, port_b) + annotation (Line(points={{10,0},{100,0}}, color={0,127,255})); + connect(val.y_actual, evaOpe.u) + annotation (Line(points={{5,7},{20,7},{20,-38}}, color={0,0,127})); + connect(val.y_actual, evaClo.u) annotation (Line(points={{5,7},{20,7},{20,-20}, + {-20,-20},{-20,-38}}, color={0,0,127})); + connect(evaOpe.y, bus.y1_actual) annotation (Line(points={{20,-62},{20,-80},{60, + -80},{60,96},{0,96},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(evaClo.y, bus.y0_actual) annotation (Line(points={{-20,-62},{-20,-80}, + {-60,-80},{-60,96},{0,96},{0,100}},color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,-6},{-3,-6}}, + horizontalAlignment=TextAlignment.Right)); + connect(booToRea.u, bus.y1) annotation (Line(points={{2.22045e-15,62},{2.22045e-15, + 81},{0,81},{0,100}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{-3,6},{-3,6}}, + horizontalAlignment=TextAlignment.Right)); + connect(booToRea.y, val.y) annotation (Line(points={{-2.22045e-15,38},{-2.22045e-15, + 25},{0,25},{0,12}}, color={0,0,127})); + annotation ( + defaultComponentName="val", + Documentation(info=" +

+This is a model for a two-way two-position (isolation) valve. +

+ +")); +end TwoWayTwoPosition; diff --git a/Buildings/Templates/Components/Valves/package.mo b/Buildings/Templates/Components/Valves/package.mo new file mode 100644 index 00000000000..b5157694a71 --- /dev/null +++ b/Buildings/Templates/Components/Valves/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.Components; +package Valves "Valve models" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

+This package contains models for valves. +

+")); +end Valves; diff --git a/Buildings/Templates/Components/Valves/package.order b/Buildings/Templates/Components/Valves/package.order new file mode 100644 index 00000000000..286524eef49 --- /dev/null +++ b/Buildings/Templates/Components/Valves/package.order @@ -0,0 +1,5 @@ +None +ThreeWayModulating +ThreeWayTwoPosition +TwoWayModulating +TwoWayTwoPosition diff --git a/Buildings/Templates/Components/package.mo b/Buildings/Templates/Components/package.mo new file mode 100644 index 00000000000..578bf36a983 --- /dev/null +++ b/Buildings/Templates/Components/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates; +package Components "Package with component models" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

+This package contains component models that are used in + +Buildings.Templates. +

+")); +end Components; diff --git a/Buildings/Templates/Components/package.order b/Buildings/Templates/Components/package.order new file mode 100644 index 00000000000..fc2da254c48 --- /dev/null +++ b/Buildings/Templates/Components/package.order @@ -0,0 +1,10 @@ +Coils +Dampers +Fans +Routing +Sensors +Valves +Data +Types +Validation +Interfaces diff --git a/Buildings/Templates/Data/AllSystems.mo b/Buildings/Templates/Data/AllSystems.mo new file mode 100644 index 00000000000..4d42327a38b --- /dev/null +++ b/Buildings/Templates/Data/AllSystems.mo @@ -0,0 +1,71 @@ +within Buildings.Templates.Data; +class AllSystems "Top-level (whole building) system parameters" + +// parameter Buildings.Templates.Types.Buildings typBui +// "Building type"; +// +// parameter String namPro +// "Project name"; +// +// parameter Modelica.Units.SI.Area areFlo +// "Project floor area"; + + parameter Buildings.Templates.Types.Units sysUni + "Unit system"; + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard stdEne + "Energy standard" + annotation(Evaluate=true); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation(Evaluate=true); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone ashCliZon( + start=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_1A) + "ASHRAE climate zone" + annotation (Dialog( + enable=stdEne==Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1)); + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone tit24CliZon( + start=Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_1) + "California Title 24 climate zone" + annotation (Dialog( + enable=stdEne==Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24)); + +// parameter String note +// "Notes"; + +annotation ( + defaultComponentPrefixes = "inner parameter", + defaultComponentName = "datAll", + Documentation(info=" +

+This class provides the set of sizing and operating parameters for the whole HVAC system. +

+"), + Icon(graphics={ + Text( + textColor={0,0,255}, + extent={{-150,60},{150,100}}, + textString="%name"), + Rectangle( + origin={0,-25}, + lineColor={64,64,64}, + fillColor={85,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100.0,-75.0},{100.0,75.0}}, + radius=25.0), + Line( + points={{-100,0},{100,0}}, + color={64,64,64}), + Line( + origin={0,-50}, + points={{-100.0,0.0},{100.0,0.0}}, + color={64,64,64}), + Line( + origin={0,-25}, + points={{0.0,75.0},{0.0,-75.0}}, + color={64,64,64})})); + +end AllSystems; diff --git a/Buildings/Templates/Data/package.mo b/Buildings/Templates/Data/package.mo new file mode 100644 index 00000000000..c54d152b531 --- /dev/null +++ b/Buildings/Templates/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates; +package Data "Package with classes for storing system parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + + annotation (Documentation(info=" +

+This package provides classes for storing system parameters +at the top-level of a simulation model. +

+")); +end Data; diff --git a/Buildings/Templates/Data/package.order b/Buildings/Templates/Data/package.order new file mode 100644 index 00000000000..3831742ec60 --- /dev/null +++ b/Buildings/Templates/Data/package.order @@ -0,0 +1 @@ +AllSystems diff --git a/Buildings/Templates/Types.mo b/Buildings/Templates/Types.mo new file mode 100644 index 00000000000..995622aed3a --- /dev/null +++ b/Buildings/Templates/Types.mo @@ -0,0 +1,33 @@ +within Buildings.Templates; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; + + type Buildings = enumeration( + Education "Buildings used for academic or technical classroom instruction", + FoodSales "Buildings used for retail or wholesale of food", + FoodServices "Buildings used for preparation and sale of food and beverages for consumption", + HealthCare "Buildings used as diagnostic and treatment facilities for inpatient care", + Lodging "Buildings used to offer multiple accommodations for short-term or long-term residents", + MercantileRetail "Buildings used for the sale and display of goods other than food", + MercantileMall "Shopping malls comprised of multiple connected establishments", + Office "Buildings used for general office space, professional office, or administrative offices", + PublicAssembly "Buildings in which people gather for social or recreational activities", + PublicOrderSafety "Buildings used for the preservation of law and order or public safety", + ReligiousWorkshop "Buildings in which people gather for religious activities", + Service "Buildings in which some types of services is provided", + WarehouseStorage "Buildings used to store goods, manufactured products, merchandise, raw materials, or personal belongings", + Other "All other miscellaneous buildings that do not fit into any other category", + Vacant "Buildings in which more floor space was vacant than was used for any single commercial activity") + "Enumeration to specify the building type"; + type Units = enumeration( + SI + "SI - International units", + IP + "IP - Imperial units") + "Enumeration to specify the system of units"; + annotation (Documentation(info=" +

+This package contains type definitions. +

+")); +end Types; diff --git a/Buildings/Templates/UsersGuide.mo b/Buildings/Templates/UsersGuide.mo new file mode 100644 index 00000000000..e556264e84b --- /dev/null +++ b/Buildings/Templates/UsersGuide.mo @@ -0,0 +1,202 @@ +within Buildings.Templates; +package UsersGuide "Templates user guide" + extends Modelica.Icons.Information; + class Conventions + "Conventions" + extends Modelica.Icons.Information; + annotation ( + preferredView="info", + Documentation( + info=" +

Control point connections

+

+Inside a template class, the connect clauses involving control points +typically do not have +any graphical annotation and are therefore not rendered as +connection lines in the diagram view. +Those connect clauses are grouped together in a dedicated section of +the equation section of each class, namely +/* Control point connection - (start | stop) */. +

+ +

Definitions

+
System
+

+We adopt the definition hereafter from ASHRAE (2021). +

+

+A set of components is a system if they share a load in +common (i.e., collectively act as a source to downstream +equipment, such as a set of chillers in a lead/lag relation- +ship serving air handlers). +

+ + +

Abbreviations

+

+The following abbreviations are used in that package.
+

+ + + + + + + + + + + + + + + + + +
AbbreviationDescription
AIAnalog input (integer or real)
AFMSAirflow measuring station
AHUAir handling unit
AOAnalog output (integer or real)
CHWChilled water
CWCondenser water
DHWDomestic hot water
DIDigital input (Boolean)
DODigital output (Boolean)
DOASDedicated outdoor air system
DPDifferential pressure
HHWHeating hot water
OAOutdoor air
VAVVariable air volume
VFDVariable frequency drive
+ +

References

+ +")); + end Conventions; + annotation ( + preferredView="info", + Documentation( + revisions=" + +", info=" +

+This user guide describes how to use the templates. +

+

Physical boundaries

+

+The templates are defined at the system level, such as an air handler +or a terminal unit (refer to + +Buildings.Templates.UsersGuide.Conventions +for the definition of a system). +A template is a self-contained model that can be reconfigured +by redeclaring some of its components or modifying some +structural parameters. +Such configuration does not require any further modification +of the template. +In particular, all connect clauses between replaceable components +are resolved internally without user intervention. +The same applies to sensors that are required for a specific control +option and instantiated only when that option is selected. +

+

Creation of a simulation model

+

+Currently, there is no template that represents a complete HVAC system +from the plant to the zone equipment. +In order to create a simulation model for a complete HVAC system, +one must +

+
    +
  1. +instantiate the templates (or any derived class representing a particular +configuration) of the different subsystems (e.g., the CHW and HHW plants, +the air handlers and the terminal equipment), +
  2. +
  3. +if necessary, configure these instances to represent project-specific +system configurations if these configurations differ from the default +configuration proposed for each template, +
  4. +
  5. +connect the fluid ports of the different instances together, +
  6. +
  7. +connect the signal busses of the different instances to each other, +
  8. +
  9. +fill in the parameter records of the different instances with +proper design and operating parameter values. +
  10. +
+

+When assembling a model for a complete HVAC system, +the user must ensure that the control +sequence selected for one subsystem is compatible +with that selected for another subsystem. +For example, the AHU controller may require reset requests +that originate from the zone equipment controller. +If the controller selected for the zone equipment does not +generate such requests, the simulation model will be singular. +Selecting controllers from the same reference—e.g., +ASHRAE (2021)—is the safest way +to ensure consistency throughout the HVAC system model. +

+

Model parameters

+

+Each template contains an instance dat of a record class that +contains all design and operating parameters for parameterizing +the subcomponents of the template. +For example, the multiple-zone VAV template + +Buildings.Templates.AirHandlersFans.VAVMultiZone +contains an instance of the record class + +Buildings.Templates.AirHandlersFans.Data.VAVMultiZone +which contains the parameters for configuring the heating coil component, +as an instance of the record class + +Buildings.Templates.Components.Data.Coil. +All design and operating parameters should be assigned through this record instance +and are propagated down to each subcomponent. +

+

+In addition to these parameters, the record class also contains the configuration +parameters that define the system layout and control options. +These configuration parameters are bound to the values that are assigned via +the template's parameter dialog. +In this way, only the set of parameters needed for the particular system layout +for which the template is configured is displayed in the parameter dialog. +Note that these configuration parameters are disabled in the record class +to avoid any modification by the user and preserve the bindings with the +template parameters. +

+

+When creating a model for a complete HVAC system with multiple instances of +different templates, the class + +Buildings.Templates.Data.AllSystems +can be used at the top level of the model to assign all design and operating parameters. +This class allows the use of Modelica outer components to retrieve the configuration +parameter values for each template instance based on the instance name. +Thus, it is the avatar in the modeling environment of an HVAC project datasheet. +The validation models within + +Buildings.Templates.AirHandlersFans.Validation +illustrate the use of this class. +

+

References

+ +")); + +end UsersGuide; diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxCoolingOnly.mo b/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxCoolingOnly.mo new file mode 100644 index 00000000000..fa5cdaa8689 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxCoolingOnly.mo @@ -0,0 +1,45 @@ +within Buildings.Templates.ZoneEquipment.Components.Controls; +block G36VAVBoxCoolingOnly + "Guideline 36 controller for VAV terminal unit cooling only" + extends + Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox( + final typ=Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly); + + annotation ( + defaultComponentName="ctl", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

Description

+

+This is an implementation of the control sequence specified in +ASHRAE (2021) +for cooling-only VAV terminal units. +It contains the following components. +

+ +

References

+ +")); +end G36VAVBoxCoolingOnly; diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxReheat.mo b/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxReheat.mo new file mode 100644 index 00000000000..bafec568812 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/G36VAVBoxReheat.mo @@ -0,0 +1,44 @@ +within Buildings.Templates.ZoneEquipment.Components.Controls; +block G36VAVBoxReheat + "Guideline 36 controller" + extends Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox( + final typ=Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat); + + annotation ( + defaultComponentName="ctl", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

Description

+

+This is an implementation of the control sequence specified in +ASHRAE (2021) +for VAV terminal units with reheat. +It contains the following components. +

+ +

References

+ +")); +end G36VAVBoxReheat; diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo b/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo new file mode 100644 index 00000000000..dc929fe4fea --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/OpenLoop.mo @@ -0,0 +1,33 @@ +within Buildings.Templates.ZoneEquipment.Components.Controls; +block OpenLoop "Open loop controller" + extends + Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox( + final typ=Buildings.Templates.ZoneEquipment.Types.Controller.OpenLoop); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDamVAV(k=1) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={-100,110}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yCoiHea(k=1) + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=-90, + origin={20,110}))); +equation + /* Control point connection - start */ + connect(yDamVAV.y, bus.damVAV.y); + connect(yCoiHea.y, bus.coiHea.y); + /* Control point connection - end */ + annotation ( + defaultComponentName="ctl", Documentation(info=" +

+This is an open loop controller providing control inputs +for the templates within + +Buildings.Templates.ZoneEquipment. +It is mainly used for testing purposes. +

+")); +end OpenLoop; diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/package.mo b/Buildings/Templates/ZoneEquipment/Components/Controls/package.mo new file mode 100644 index 00000000000..9c700c3b5bd --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/package.mo @@ -0,0 +1,14 @@ +within Buildings.Templates.ZoneEquipment.Components; +package Controls + extends Modelica.Icons.VariantsPackage; + + + +annotation (Documentation(info=" +

+All control blocks that form the control sequence of a system +are instantiated into one single class, a so-called control section. +This package contains such control sections. +

+")); +end Controls; diff --git a/Buildings/Templates/ZoneEquipment/Components/Controls/package.order b/Buildings/Templates/ZoneEquipment/Components/Controls/package.order new file mode 100644 index 00000000000..dffcc2fc361 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Controls/package.order @@ -0,0 +1,3 @@ +G36VAVBoxCoolingOnly +G36VAVBoxReheat +OpenLoop diff --git a/Buildings/Templates/ZoneEquipment/Components/Data/PartialController.mo b/Buildings/Templates/ZoneEquipment/Components/Data/PartialController.mo new file mode 100644 index 00000000000..a57988fd610 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Data/PartialController.mo @@ -0,0 +1,16 @@ +within Buildings.Templates.ZoneEquipment.Components.Data; +record PartialController "Record for controller interface class" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.ZoneEquipment.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for the class + +Buildings.Templates.ZoneEquipment.Components.Controls.Interfaces.PartialController. +

+")); +end PartialController; diff --git a/Buildings/Templates/ZoneEquipment/Components/Data/VAVBoxController.mo b/Buildings/Templates/ZoneEquipment/Components/Data/VAVBoxController.mo new file mode 100644 index 00000000000..64095d869e1 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Data/VAVBoxController.mo @@ -0,0 +1,101 @@ +within Buildings.Templates.ZoneEquipment.Components.Data; +record VAVBoxController "Record for VAV terminal unit controller" + extends Buildings.Templates.ZoneEquipment.Components.Data.PartialController; + + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation (Dialog(group="Energy and ventilation standards", enable=false)); + + parameter Modelica.Units.SI.VolumeFlowRate VOutMinOcc_flow( + final min=0, + start=1) + "Zone minimum outdoor airflow for occupants" + annotation (Dialog(group="Ventilation", enable= + (typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + parameter Modelica.Units.SI.VolumeFlowRate VOutMinAre_flow( + final min=0, + start=1) + "Zone minimum outdoor airflow for building area" + annotation (Dialog(group="Ventilation", enable= + (typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + parameter Real VOutAre_flow( + final unit = "m3/s", + final min=0) + "Area component of the breathing zone outdoor airflow" + annotation(Dialog(group="Ventilation", + enable=(typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Real VOutOcc_flow( + final unit = "m3/s", + final min=0) + "Population component of the breathing zone outdoor airflow" + annotation(Dialog(group="Ventilation", + enable=(typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Real effAirDisHea( + final unit="1", + final min=0, + final max=1)=0.8 + "Zone air distribution effectiveness during heating" + annotation(Dialog(group="Ventilation", + enable=(typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Real effAirDisCoo( + final unit="1", + final min=0, + final max=1)=1.0 + "Zone air distribution effectiveness during cooling" + annotation(Dialog(group="Ventilation", + enable=(typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly) and + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + parameter Modelica.Units.SI.TemperatureDifference dTAirDisHea_max( + final min=0, + displayUnit="K")=11 + "Zone maximum discharge air temperature above heating setpoint" + annotation (Dialog(group="Temperature", + enable=typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat)); + parameter Modelica.Units.SI.VolumeFlowRate VAirCooSet_flow_max( + final min=0, + start=1) + "Zone maximum cooling airflow setpoint" + annotation (Dialog(group="Airflow")); + + /* RFE #1913: This should be an optional entry. If no value is scheduled, + Vmin should be calculated automatically and dynamically to meet ventilation requirements. + */ + parameter Modelica.Units.SI.VolumeFlowRate VAirSet_flow_min( + final min=0, + start=0.1 * VAirCooSet_flow_max) + "Zone minimum airflow setpoint" + annotation (Dialog(group="Airflow")); + + parameter Modelica.Units.SI.VolumeFlowRate VAirHeaSet_flow_max( + final min=0, + start=0.3 * VAirCooSet_flow_max) + "Zone maximum heating airflow setpoint" + annotation (Dialog(group="Airflow", + enable=(typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly or + typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat))); + + parameter Modelica.Units.SI.VolumeFlowRate VAirHeaSet_flow_min( + final min=0)=0 + "Zone minimum heating airflow setpoint" + annotation (Dialog(group="Airflow", + enable=typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat)); + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for +VAV box controllers within + +Buildings.Templates.ZoneEquipment.Components.Controls. +

+")); +end VAVBoxController; diff --git a/Buildings/Templates/ZoneEquipment/Components/Data/package.mo b/Buildings/Templates/ZoneEquipment/Components/Data/package.mo new file mode 100644 index 00000000000..b7fe5946e0e --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.ZoneEquipment.Components; +package Data + extends Modelica.Icons.MaterialPropertiesPackage; + + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters. +

+")); +end Data; diff --git a/Buildings/Templates/ZoneEquipment/Components/Data/package.order b/Buildings/Templates/ZoneEquipment/Components/Data/package.order new file mode 100644 index 00000000000..867bb54d1f9 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Data/package.order @@ -0,0 +1,2 @@ +PartialController +VAVBoxController diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo b/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo new file mode 100644 index 00000000000..cea01689116 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/ControllerG36VAVBox.mo @@ -0,0 +1,290 @@ +within Buildings.Templates.ZoneEquipment.Components.Interfaces; +block ControllerG36VAVBox "Guideline 36 controller for VAV terminal unit" + extends + Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox; + + parameter Boolean have_occSen=false + "Set to true if the zone has occupancy sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + parameter Boolean have_winSen=false + "Set to true if the zone has window status sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Boolean have_hotWatCoi= + coiHea.typ==Buildings.Templates.Components.Types.Coil.WaterBasedHeating + "Set to true if the system has hot water coil" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Modelica.Units.SI.VolumeFlowRate VAirCooSet_flow_max= + dat.VAirCooSet_flow_max + "Zone maximum cooling airflow setpoint"; + + final parameter Modelica.Units.SI.VolumeFlowRate VAirSet_flow_min= + dat.VAirSet_flow_min + "Zone minimum airflow setpoint"; + + final parameter Modelica.Units.SI.VolumeFlowRate VAirHeaSet_flow_max= + dat.VAirHeaSet_flow_max + "Zone maximum heating airflow setpoint"; + + final parameter Modelica.Units.SI.VolumeFlowRate VAirHeaSet_flow_min= + dat.VAirHeaSet_flow_min + "Zone minimum heating airflow setpoint"; + + final parameter Modelica.Units.SI.TemperatureDifference dTAirDisHea_max( + displayUnit="K")= + dat.dTAirDisHea_max + "Zone maximum discharge air temperature above heating setpoint"; + + final parameter Modelica.Units.SI.VolumeFlowRate VOutMinOcc_flow( + final min=0, + start=1)=dat.VOutMinOcc_flow + "Zone minimum outdoor airflow for occupants" + annotation (Dialog(enable= + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + final parameter Modelica.Units.SI.VolumeFlowRate VOutMinAre_flow( + final min=0, + start=1)=dat.VOutMinAre_flow + "Zone minimum outdoor airflow for building area" + annotation (Dialog(enable= + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24)); + + final parameter Real VOutAre_flow( + final unit = "m3/s")= + dat.VOutAre_flow + "Outdoor air flow rate per unit area" + annotation (Dialog(enable= + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + + final parameter Real VOutOcc_flow( + final unit = "m3/s")= + dat.VOutOcc_flow + "Outdoor air flow rate per occupant" + annotation (Dialog(enable= + stdVen==Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1)); + + final parameter Real effAirDisHea= + dat.effAirDisHea + "Zone air distribution effectiveness during heating"; + + final parameter Real effAirDisCoo= + dat.effAirDisCoo + "Zone air distribution effectiveness during cooling"; + + Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.Reheat.Controller ctlReh( + final venStd=stdVen, + final have_winSen=have_winSen, + final have_occSen=have_occSen, + final have_CO2Sen=have_CO2Sen, + final have_hotWatCoi=have_hotWatCoi, + final VOccMin_flow=VOutMinOcc_flow, + final VAreMin_flow=VOutMinAre_flow, + final VAreBreZon_flow=VOutAre_flow, + final VPopBreZon_flow=VOutOcc_flow, + final VMin_flow=VAirSet_flow_min, + final VCooMax_flow=VAirCooSet_flow_max, + final VHeaMin_flow=VAirHeaSet_flow_min, + final VHeaMax_flow=VAirHeaSet_flow_max, + final dTDisZonSetMax=dTAirDisHea_max, + final zonDisEff_cool=effAirDisCoo, + final zonDisEff_heat=effAirDisHea) if typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat + "Terminal unit with reheat controller" + annotation (Placement(transformation(extent={{0,-20},{20,20}}))); + + Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.CoolingOnly.Controller ctlCoo( + final venStd=stdVen, + final have_winSen=have_winSen, + final have_occSen=have_occSen, + final have_CO2Sen=have_CO2Sen, + final VOccMin_flow=VOutMinOcc_flow, + final VAreMin_flow=VOutMinAre_flow, + final VAreBreZon_flow=VOutAre_flow, + final VPopBreZon_flow=VOutOcc_flow, + final VMin_flow=VAirSet_flow_min, + final VCooMax_flow=VAirCooSet_flow_max, + final zonDisEff_cool=effAirDisCoo, + final zonDisEff_heat=effAirDisHea) if typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly + "Terminal unit cooling only controller" + annotation (Placement(transformation(extent={{0,40},{20,80}}))); + + Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.Setpoints TZonSet( + final have_occSen=have_occSen, + final have_winSen=have_winSen) + "Compute zone temperature setpoints" + annotation (Placement(transformation(extent={{-60,-20},{-40,20}}))); + + Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatus zonSta( + final have_winSen=have_winSen) + "Evaluate zone temperature status" + annotation (Placement(transformation(extent={{0,-120},{20,-92}}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooDowWarUpTim(k=3600) + "RFE: Optimal start (using global OA temperature not associated with any AHU) not implemented" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setAdj(k=0) + "RFE: Setpoint adjustment by the occupant is not implemented in the template" + annotation (Placement(transformation(extent={{-160,170},{-140,190}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooSetAdj(k=0) + "RFE: Setpoint adjustment by the occupant is not implemented in the template" + annotation (Placement(transformation(extent={{-160,130},{-140,150}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaSetAdj(k=0) + "RFE: Setpoint adjustment by the occupant is not implemented in the template" + annotation (Placement(transformation(extent={{-160,90},{-140,110}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant uCooDemLimLev(k=0) + "RFE: Setpoint adjustment by demand limit is not implemented in the template" + annotation (Placement(transformation(extent={{-120,170},{-100,190}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant uHeaDemLimLev(k=0) + "RFE: Setpoint adjustment by demand limit is not implemented in the template" + annotation (Placement(transformation(extent={{-120,130},{-100,150}}))); + +equation + /* Control point connection - start */ + + // Inputs from bus + connect(bus.TZon, ctlReh.TZon); + connect(bus.y1Win, ctlReh.u1Win); + connect(bus.y1Occ, ctlReh.u1Occ); + connect(bus.ppmCO2, ctlReh.ppmCO2); + connect(bus.ppmCO2Set, ctlReh.ppmCO2Set); + connect(bus.yOpeMod, ctlReh.uOpeMod); + connect(bus.TAirDis, ctlReh.TDis); + connect(bus.VAirDis_flow, ctlReh.VDis_flow); + connect(bus.TAirSup, ctlReh.TSup); + connect(bus.TAirSupSet, ctlReh.TSupSet); + connect(bus.y1FanSup_actual, ctlReh.u1Fan); + connect(bus.y1PlaHeaWat, ctlReh.u1HotPla); + connect(bus.yOveFloSet, ctlReh.oveFloSet); + connect(bus.yOveDamPos, ctlReh.oveDamPos); + connect(bus.y1OveHeaOff, ctlReh.uHeaOff); + + connect(bus.TZon, ctlCoo.TZon); + connect(bus.y1Win, ctlCoo.u1Win); + connect(bus.y1Occ, ctlCoo.u1Occ); + connect(bus.ppmCO2, ctlCoo.ppmCO2); + connect(bus.ppmCO2Set, ctlCoo.ppmCO2Set); + connect(bus.yOpeMod, ctlCoo.uOpeMod); + connect(bus.TAirDis, ctlCoo.TDis); + connect(bus.VAirDis_flow, ctlCoo.VDis_flow); + connect(bus.TAirSup, ctlCoo.TSup); + connect(bus.y1FanSup_actual, ctlCoo.u1Fan); + connect(bus.yOveFloSet, ctlCoo.oveFloSet); + connect(bus.yOveDamPos, ctlCoo.oveDamPos); + + connect(bus.y1Occ, TZonSet.u1Occ); + connect(bus.y1Win, TZonSet.u1Win); + + connect(bus.y1Win, zonSta.u1Win); + connect(bus.TZon, zonSta.TZon); + connect(bus.TZonCooOccSet, zonSta.TOccCooSet); + connect(bus.TZonCooUnoSet, zonSta.TUnoCooSet); + connect(bus.TZonHeaOccSet, zonSta.TOccHeaSet); + connect(bus.TZonHeaUnoSet, zonSta.TUnoHeaSet); + + connect(bus.yOpeMod, TZonSet.uOpeMod); + connect(bus.dTSetAdj, TZonSet.setAdj); + connect(bus.dTHeaSetAdj, TZonSet.heaSetAdj); + connect(bus.uCooDemLimLev, TZonSet.uCooDemLimLev); + connect(bus.uHeaDemLimLev, TZonSet.uHeaDemLimLev); + connect(bus.TZonCooOccSet, TZonSet.TOccCooSet); + connect(bus.TZonCooUnoSet, TZonSet.TUnoCooSet); + connect(bus.TZonHeaOccSet, TZonSet.TOccHeaSet); + connect(bus.TZonHeaUnoSet, TZonSet.TUnoHeaSet); + + // Outputs to bus + connect(ctlReh.yDam, bus.damVAV.y); + connect(ctlReh.yVal, bus.coiHea.y); + connect(ctlReh.VAdjPopBreZon_flow, bus.VAdjPopBreZon_flow); + connect(ctlReh.VAdjAreBreZon_flow, bus.VAdjAreBreZon_flow); + connect(ctlReh.VMinOA_flow, bus.VMinOA_flow); + connect(ctlReh.VZonAbsMin_flow, bus.VZonAbsMin_flow); + connect(ctlReh.VZonDesMin_flow, bus.VZonDesMin_flow); + connect(ctlReh.yCO2, bus.yCO2); + + connect(ctlReh.yZonTemResReq, bus.yReqZonTemRes); + connect(ctlReh.yZonPreResReq, bus.yReqZonPreRes); + + connect(ctlCoo.yDam, bus.damVAV.y); + connect(ctlCoo.VAdjPopBreZon_flow, bus.VAdjPopBreZon_flow); + connect(ctlCoo.VAdjAreBreZon_flow, bus.VAdjAreBreZon_flow); + connect(ctlCoo.VMinOA_flow, bus.VMinOA_flow); + connect(ctlCoo.VZonAbsMin_flow, bus.VZonAbsMin_flow); + connect(ctlCoo.VZonDesMin_flow, bus.VZonDesMin_flow); + connect(ctlCoo.yCO2, bus.yCO2); + + connect(ctlCoo.yZonTemResReq, bus.yZonTemResReq); + connect(ctlCoo.yZonPreResReq, bus.yZonPreResReq); + + connect(zonSta.yCooTim, bus.yCooTim); + connect(zonSta.yWarTim, bus.yWarTim); + connect(zonSta.yOccHeaHig, bus.yOccHeaHig); + connect(zonSta.yHigOccCoo, bus.yHigOccCoo); + connect(zonSta.yUnoHeaHig, bus.yUnoHeaHig); + connect(zonSta.yEndSetBac, bus.yEndSetBac); + connect(zonSta.yHigUnoCoo, bus.yHigUnoCoo); + connect(zonSta.yEndSetUp, bus.yEndSetUp); + + /* Control point connection - end */ + + connect(TZonSet.TCooSet, ctlReh.TCooSet) annotation (Line(points={{-38,8},{-22, + 8},{-22,17},{-2,17}}, color={0,0,127})); + connect(TZonSet.THeaSet, ctlReh.THeaSet) annotation (Line(points={{-38,0},{-20, + 0},{-20,15},{-2,15}}, color={0,0,127})); + connect(uCooDemLimLev.y, TZonSet.uCooDemLimLev) annotation (Line(points={{-98, + 180},{-70,180},{-70,-8},{-62,-8}}, color={255,127,0})); + connect(uHeaDemLimLev.y, TZonSet.uHeaDemLimLev) annotation (Line(points={{-98, + 140},{-74,140},{-74,-11},{-62,-11}}, color={255,127,0})); + connect(cooSetAdj.y, TZonSet.cooSetAdj) annotation (Line(points={{-138,140},{-134, + 140},{-134,-2},{-62,-2}}, color={0,0,127})); + connect(heaSetAdj.y, TZonSet.heaSetAdj) annotation (Line(points={{-138,100},{-136, + 100},{-136,-4},{-62,-4}}, color={0,0,127})); + connect(setAdj.y, TZonSet.setAdj) annotation (Line(points={{-138,180},{-132,180}, + {-132,0},{-62,0}}, color={0,0,127})); + connect(TZonSet.TCooSet, ctlCoo.TCooSet) annotation (Line(points={{-38,8},{-22, + 8},{-22,76},{-2,76}}, color={0,0,127})); + connect(TZonSet.THeaSet, ctlCoo.THeaSet) annotation (Line(points={{-38,0},{-20, + 0},{-20,74},{-2,74}}, color={0,0,127})); + connect(cooDowWarUpTim.y, zonSta.cooDowTim) annotation (Line(points={{-38,-100}, + {-20,-100},{-20,-95},{-2,-95}}, color={0,0,127})); + connect(cooDowWarUpTim.y, zonSta.warUpTim) annotation (Line(points={{-38,-100}, + {-20,-100},{-20,-98},{-2,-98}}, color={0,0,127})); + annotation ( + defaultComponentName="ctl", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

Description

+

+This is an implementation of the control sequence specified in +ASHRAE (2021) +for VAV terminal units with reheat. +It contains the following components. +

+ +

References

+ +")); +end ControllerG36VAVBox; diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialController.mo b/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialController.mo new file mode 100644 index 00000000000..1aed59a0d41 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialController.mo @@ -0,0 +1,44 @@ +within Buildings.Templates.ZoneEquipment.Components.Interfaces; +partial block PartialController "Interface class for terminal unit controller" + + parameter Buildings.Templates.ZoneEquipment.Types.Controller typ + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration")); + + replaceable parameter + Buildings.Templates.ZoneEquipment.Components.Data.PartialController dat( + final typ=typ) + "Design and operating parameters" + annotation (Placement(transformation(extent={{190,170},{210,190}}))); + + outer parameter Buildings.Templates.Data.AllSystems datAll + "Top-level (whole building) system parameters"; + + Buildings.Templates.ZoneEquipment.Interfaces.Bus bus + "Terminal unit control bus" + annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-200,0}), iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-100,0}))); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-151,-114},{149,-154}}, + textColor={0,0,255}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-200,-200},{220, + 200}})), + Documentation(info=" +

+This partial class provides a standard interface for terminal unit controllers. +

+")); +end PartialController; diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialControllerVAVBox.mo b/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialControllerVAVBox.mo new file mode 100644 index 00000000000..6e6a7319868 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/PartialControllerVAVBox.mo @@ -0,0 +1,29 @@ +within Buildings.Templates.ZoneEquipment.Components.Interfaces; +partial block PartialControllerVAVBox + "Interface class for VAV terminal unit controller" + extends + Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialController( + redeclare + Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController dat( + stdVen=stdVen)); + + parameter Boolean have_CO2Sen=false + "Set to true if the zone has CO2 sensor" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen= + datAll.stdVen + "Ventilation standard"; + + outer replaceable Buildings.Templates.Components.Dampers.Modulating damVAV + "VAV damper"; + + outer replaceable Buildings.Templates.Components.Coils.None coiHea + "Heating coil"; + + annotation (Documentation(info=" +

+This partial class provides a standard interface for VAV terminal unit controllers. +

+")); +end PartialControllerVAVBox; diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.mo b/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.mo new file mode 100644 index 00000000000..8ba343cf95a --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.ZoneEquipment.Components; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

+This package contains interface classes. +

+")); +end Interfaces; diff --git a/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.order b/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.order new file mode 100644 index 00000000000..21147f5a483 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/Interfaces/package.order @@ -0,0 +1,3 @@ +ControllerG36VAVBox +PartialController +PartialControllerVAVBox diff --git a/Buildings/Templates/ZoneEquipment/Components/package.mo b/Buildings/Templates/ZoneEquipment/Components/package.mo new file mode 100644 index 00000000000..e2d4d885c44 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/package.mo @@ -0,0 +1,12 @@ +within Buildings.Templates.ZoneEquipment; +package Components "Package with component models" + extends Modelica.Icons.VariantsPackage; + + annotation (Documentation(info=" +

+This package contains component models that are used in + +Buildings.Templates.ZoneEquipment. +

+")); +end Components; diff --git a/Buildings/Templates/ZoneEquipment/Components/package.order b/Buildings/Templates/ZoneEquipment/Components/package.order new file mode 100644 index 00000000000..0f343567d12 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Components/package.order @@ -0,0 +1,3 @@ +Controls +Data +Interfaces diff --git a/Buildings/Templates/ZoneEquipment/Data/PartialAirTerminal.mo b/Buildings/Templates/ZoneEquipment/Data/PartialAirTerminal.mo new file mode 100644 index 00000000000..1af4f02e133 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Data/PartialAirTerminal.mo @@ -0,0 +1,53 @@ +within Buildings.Templates.ZoneEquipment.Data; +record PartialAirTerminal "Record for air terminal unit interface class" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.ZoneEquipment.Types.Configuration typ + "Type of system" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_souChiWat + "Set to true if system uses CHW" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Boolean have_souHeaWat + "Set to true if system uses HHW" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.ZoneEquipment.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + + parameter String id="" + "System tag" + annotation (Dialog(group="Advanced")); + parameter String id_souAir="" + "Air supply system tag" + annotation (Dialog(group="Advanced")); + parameter String id_souChiWat="" + "CHW supply system tag" + annotation (Dialog(group="Advanced", enable=have_souChiWat)); + parameter String id_souHeaWat="" + "HHW supply system tag" + annotation (Dialog(group="Advanced", enable=have_souHeaWat)); + + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal( + final min=0, + start=1) + "Discharge air mass flow rate" + annotation (Dialog(group="Nominal condition")); + + replaceable parameter Buildings.Templates.ZoneEquipment.Components.Data.PartialController + ctl(final typ=typCtl) + "Controller" + annotation (Dialog(group="Controls")); + + annotation (Documentation(info=" +

+This record provides the set of sizing and operating parameters for the class + +Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal. +

+

+The tab Advanced contains some optional parameters that can be used +for workflow automation, but are not used for simulation. +

+")); +end PartialAirTerminal; diff --git a/Buildings/Templates/ZoneEquipment/Data/VAVBox.mo b/Buildings/Templates/ZoneEquipment/Data/VAVBox.mo new file mode 100644 index 00000000000..b053cd8e7b0 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Data/VAVBox.mo @@ -0,0 +1,48 @@ +within Buildings.Templates.ZoneEquipment.Data; +record VAVBox "Record for VAV terminal unit" + extends Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal( + redeclare Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController ctl( + stdVen=stdVen), + final mAir_flow_nominal=max(ctl.VAirHeaSet_flow_max, ctl.VAirCooSet_flow_max) * 1.2); + + parameter Buildings.Templates.Components.Types.Damper typDamVAV + "Type of VAV damper" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Coil typCoiHea + "Type of heating coil" + annotation (Evaluate=true, Dialog(group="Configuration", enable=false)); + parameter Buildings.Templates.Components.Types.Valve typValCoiHea + "Type of valve for heating coil" + annotation (Dialog(group="Configuration", enable=false)); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation (Dialog(group="Configuration", enable=false)); + + parameter Buildings.Templates.Components.Data.Damper damVAV( + final typ=typDamVAV, + m_flow_nominal=mAir_flow_nominal) + "VAV damper" + annotation (Dialog(group="Equipment")); + + parameter Buildings.Templates.Components.Data.Coil coiHea( + final typ=typCoiHea, + final typVal=typValCoiHea, + final have_sou=have_souHeaWat, + mAir_flow_nominal=ctl.VAirHeaSet_flow_max*1.2) + "Reheat coil" + annotation (Dialog(group="Equipment")); + +annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "dat", + Documentation(info=" +

+This record provides the set of sizing and operating parameters for the classes + +Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly +and + +Buildings.Templates.ZoneEquipment.VAVBoxReheat. +

+")); +end VAVBox; diff --git a/Buildings/Templates/ZoneEquipment/Data/package.mo b/Buildings/Templates/ZoneEquipment/Data/package.mo new file mode 100644 index 00000000000..eefbc1f3581 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.ZoneEquipment; +package Data "Records for design and operating parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters. +

+")); +end Data; diff --git a/Buildings/Templates/ZoneEquipment/Data/package.order b/Buildings/Templates/ZoneEquipment/Data/package.order new file mode 100644 index 00000000000..32666beced3 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Data/package.order @@ -0,0 +1,2 @@ +PartialAirTerminal +VAVBox diff --git a/Buildings/Templates/ZoneEquipment/Interfaces/Bus.mo b/Buildings/Templates/ZoneEquipment/Interfaces/Bus.mo new file mode 100644 index 00000000000..c79569ce68a --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Interfaces/Bus.mo @@ -0,0 +1,20 @@ +within Buildings.Templates.ZoneEquipment.Interfaces; +expandable connector Bus "Control bus for zone equipment" + extends Modelica.Icons.SignalBus; + + Buildings.Templates.Components.Interfaces.Bus damVAV + "VAV damper points" + annotation (HideResult=false); + + Buildings.Templates.Components.Interfaces.Bus coiHea + "Heating coil points" + annotation (HideResult=false); + + annotation ( + defaultComponentName="bus", Documentation(info=" +

+This expandable connector provides a standard interface for +all control signals required by a terminal unit controller. +

+")); +end Bus; diff --git a/Buildings/Templates/ZoneEquipment/Interfaces/PartialAirTerminal.mo b/Buildings/Templates/ZoneEquipment/Interfaces/PartialAirTerminal.mo new file mode 100644 index 00000000000..5b5bcc8aba6 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Interfaces/PartialAirTerminal.mo @@ -0,0 +1,168 @@ +within Buildings.Templates.ZoneEquipment.Interfaces; +partial model PartialAirTerminal + "Interface class for air terminal unit" + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium" + annotation(__ctrl_flow(enable=false)); + replaceable package MediumHeaWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "HHW medium" + annotation(Dialog(enable=have_souHeaWat), __ctrl_flow(enable=false)); + + parameter Buildings.Templates.ZoneEquipment.Types.Configuration typ + "Type of system" + annotation (Evaluate=true, Dialog(group="Configuration")); + + final parameter String id=dat.id + "System tag" + annotation (Dialog(group="Configuration")); + + parameter Boolean have_souChiWat + "Set to true if system uses CHW" + annotation (Evaluate=true, Dialog(group="Configuration")); + parameter Boolean have_souHeaWat + "Set to true if system uses HHW" + annotation (Evaluate=true, Dialog(group="Configuration")); + + replaceable parameter Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal dat( + final typ=typ, + final have_souChiWat=have_souChiWat, + final have_souHeaWat=have_souHeaWat) + "Design and operating parameters" + annotation (Placement(transformation(extent={{270,250},{290,270}}))); + + // Design parameters + final parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal= + dat.mAir_flow_nominal + "Discharge air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mAirPri_flow_nominal + "Primary air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal + "Total CHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal + "Total HHW mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal + "Total CHW heat flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal + "Total HHW heat flow rate" + annotation (Dialog(group="Nominal condition")); + + parameter Modelica.Fluid.Types.Dynamics energyDynamics= + Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Type of energy balance: dynamic (3 initialization options) or steady state" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Conservation equations"), + __ctrl_flow(enable=false)); + final parameter Boolean allowFlowReversalAir=true + "= true to allow flow reversal, false restricts to design direction - Air side" + annotation (Dialog(tab="Assumptions"), Evaluate=true, + __ctrl_flow(enable=false)); + parameter Boolean allowFlowReversalLiq=true + "= true to allow flow reversal, false restricts to design direction - CHW and HW side" + annotation (Dialog(tab="Assumptions", enable=have_souChiWat or have_souHeaWat), + Evaluate=true, + __ctrl_flow(enable=false)); + parameter Boolean show_T = false + "= true, if actual temperature at ports of subcomponents is computed" + annotation(Dialog(tab="Advanced",group="Diagnostics"), + __ctrl_flow(enable=false)); + + Modelica.Fluid.Interfaces.FluidPort_a port_Sup( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ <> Buildings.Templates.ZoneEquipment.Types.Configuration.DualDuct + "Supply air from AHU" + annotation ( + Placement(transformation(extent={{-310,-210},{-290,-190}}), + iconTransformation(extent={{-210,-10},{-190,10}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_SupCol( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ == Buildings.Templates.ZoneEquipment.Types.Configuration.DualDuct + "Dual duct cold deck air supply from AHU" + annotation (Placement(transformation( + extent={{-310,-250},{-290,-230}}), iconTransformation(extent={{-210,-110}, + {-190,-90}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_SupHot( + redeclare final package Medium = MediumAir, + m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ == Buildings.Templates.ZoneEquipment.Types.Configuration.DualDuct + "Dual duct hot deck air supply from AHU" + annotation (Placement( + transformation(extent={{-310,-170},{-290,-150}}), iconTransformation( + extent={{-210,90},{-190,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_Dis( + redeclare final package Medium =MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + "Discharge air" + annotation (Placement(transformation(extent={{290,-210},{310,-190}}), + iconTransformation(extent={{190,-10},{210,10}}))); + Modelica.Fluid.Interfaces.FluidPort_a port_Ret( + redeclare final package Medium =MediumAir, + m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), + h_outflow(start=MediumAir.h_default, nominal=MediumAir.h_default)) + if typ == Buildings.Templates.ZoneEquipment.Types.Configuration.FanPowered + or typ == Buildings.Templates.ZoneEquipment.Types.Configuration.Induction + "Return air" + annotation (Placement( + transformation(extent={{290,-90},{310,-70}}), iconTransformation( + extent={{190,90},{210,110}}))); + + Modelica.Fluid.Interfaces.FluidPort_a port_aHeaWat( + redeclare final package Medium = MediumHeaWat, + m_flow(min=if allowFlowReversalLiq then -Modelica.Constants.inf else 0), + h_outflow(start=MediumHeaWat.h_default, nominal=MediumHeaWat.h_default)) + if have_souHeaWat + "HHW supply port" annotation ( + Placement(transformation(extent={{10,-290},{30,-270}}), + iconTransformation(extent={{40,-210},{60,-190}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_bHeaWat( + redeclare final package Medium = MediumHeaWat, + m_flow(max=if allowFlowReversalLiq then +Modelica.Constants.inf else 0), + h_outflow(start=MediumHeaWat.h_default, nominal=MediumHeaWat.h_default)) + if have_souHeaWat + "HHW return port" annotation ( + Placement(transformation(extent={{-30,-290},{-10,-270}}), + iconTransformation(extent={{-60,-210},{-40,-190}}))); + + Buildings.Templates.ZoneEquipment.Interfaces.Bus bus + "Terminal unit control bus" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-300,0}), iconTransformation( + extent={{-20,-19},{20,19}}, + rotation=90, + origin={-199,160}))); + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-200,-200},{200,200}}), graphics={ + Text( + extent={{-155,-218},{145,-258}}, + textColor={0,0,255}, + textString="%name"), Rectangle( + extent={{-200,200},{200,-200}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)}), + Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-300,-280},{300, + 280}})), + Documentation(info=" +

+This partial class provides a standard interface for air terminal unit templates. +

+")); +end PartialAirTerminal; diff --git a/Buildings/Templates/ZoneEquipment/Interfaces/VAVBox.mo b/Buildings/Templates/ZoneEquipment/Interfaces/VAVBox.mo new file mode 100644 index 00000000000..4ede1463082 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Interfaces/VAVBox.mo @@ -0,0 +1,178 @@ +within Buildings.Templates.ZoneEquipment.Interfaces; +model VAVBox "Interface class for VAV terminal unit" + extends Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal( + redeclare Buildings.Templates.ZoneEquipment.Data.VAVBox dat( + typCoiHea=coiHea.typ, + typValCoiHea=coiHea.typVal, + typDamVAV=damVAV.typ, + typCtl=ctl.typ, + stdVen=ctl.stdVen), + final have_souChiWat=false, + final have_souHeaWat=coiHea.have_sou, + final mAirPri_flow_nominal=mAir_flow_nominal, + final mChiWat_flow_nominal=0, + final mHeaWat_flow_nominal=if coiHea.have_sou then dat.coiHea.mWat_flow_nominal else 0, + final QChiWat_flow_nominal=0, + final QHeaWat_flow_nominal=if coiHea.have_sou then dat.coiHea.Q_flow_nominal else 0); + + inner replaceable Buildings.Templates.Components.Coils.WaterBasedHeating coiHea( + redeclare final package MediumHeaWat = MediumHeaWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + constrainedby Buildings.Templates.Components.Interfaces.PartialCoil( + redeclare final package MediumAir = MediumAir, + final dat=datCoiHea, + final energyDynamics=energyDynamics, + final allowFlowReversalAir=allowFlowReversalAir, + final allowFlowReversalLiq=allowFlowReversalLiq, + final show_T=show_T) + "Heating coil" + annotation ( + choices( + choice(redeclare replaceable Buildings.Templates.Components.Coils.WaterBasedHeating coiHea( + redeclare final package MediumHeaWat = MediumHeaWat, + redeclare final Buildings.Templates.Components.Valves.TwoWayModulating val) + "Hot water coil with two-way valve"), + choice(redeclare replaceable Buildings.Templates.Components.Coils.ElectricHeating coiHea + "Modulating electric heating coil")), + Dialog(group="Heating coil"), + Placement(transformation(extent={{-10,-210},{10,-190}}))); + + inner replaceable Buildings.Templates.Components.Dampers.Modulating damVAV + constrainedby Buildings.Templates.Components.Interfaces.PartialDamper( + redeclare final package Medium = MediumAir, + use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, + final allowFlowReversal=allowFlowReversalAir, + final show_T=show_T, + final dat=datDamVAV) + "VAV damper" + annotation (Dialog(group="VAV damper"), + Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-120,-200}))); + + inner replaceable Buildings.Templates.ZoneEquipment.Components.Controls.OpenLoop ctl + constrainedby + Buildings.Templates.ZoneEquipment.Components.Interfaces.PartialControllerVAVBox( + final dat=dat.ctl) + "Control selections" + annotation ( + Dialog(group="Controller"), + Placement(transformation(extent={{-10,-10},{10,10}}))); + + Buildings.Templates.Components.Sensors.Temperature TAirDis( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversalAir, + final have_sen=ctl.typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + ctl.typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly, + final m_flow_nominal=mAir_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorTemperature.Standard) + "Discharge air temperature sensor" + annotation (Placement(transformation(extent={{90,-210},{110,-190}}))); + Buildings.Templates.Components.Sensors.VolumeFlowRate VAirDis_flow( + redeclare final package Medium = MediumAir, + final allowFlowReversal=allowFlowReversalAir, + final have_sen=ctl.typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat or + ctl.typ==Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly, + final m_flow_nominal=mAir_flow_nominal, + final typ=Buildings.Templates.Components.Types.SensorVolumeFlowRate.FlowCross) + "Airflow sensor" + annotation (Placement(transformation(extent={{-200,-210},{-180,-190}}))); +protected + parameter Buildings.Templates.Components.Data.Damper datDamVAV( + final typ=damVAV.typ, + final m_flow_nominal=dat.damVAV.m_flow_nominal, + final dp_nominal=dat.damVAV.dp_nominal, + final dpFixed_nominal=if damVAV.typ == Buildings.Templates.Components.Types.Damper.None + then 0 else dat.coiHea.dpAir_nominal) + "Local record for VAV damper with lumped flow resistance"; + parameter Buildings.Templates.Components.Data.Coil datCoiHea( + final typ=coiHea.typ, + final typVal=coiHea.typVal, + final have_sou=coiHea.have_sou, + final mAir_flow_nominal=dat.coiHea.mAir_flow_nominal, + final mWat_flow_nominal=dat.coiHea.mWat_flow_nominal, + final dpWat_nominal=dat.coiHea.dpWat_nominal, + final dpValve_nominal=dat.coiHea.dpValve_nominal, + final cap_nominal=dat.coiHea.cap_nominal, + final TWatEnt_nominal=dat.coiHea.TWatEnt_nominal, + final TAirEnt_nominal=dat.coiHea.TAirEnt_nominal, + final dpAir_nominal=if damVAV.typ == Buildings.Templates.Components.Types.Damper.None + then dat.coiHea.dpAir_nominal else 0) + "Local record for coil with lumped flow resistance"; +equation + /* Control point connection - start */ + connect(damVAV.bus, bus.damVAV); + connect(coiHea.bus, bus.coiHea); + connect(TAirDis.y, bus.TAirDis); + connect(VAirDis_flow.y, bus.VAirDis_flow); + /* Control point connection - end */ + connect(port_aHeaWat, coiHea.port_aSou) annotation (Line(points={{20,-280},{ + 20,-260},{5,-260},{5,-210}}, color={0,127,255})); + connect(coiHea.port_bSou, port_bHeaWat) annotation (Line(points={{-5,-210},{-5, + -260},{-20,-260},{-20,-280}}, color={0,127,255})); + connect(damVAV.port_b,coiHea. port_a) + annotation (Line(points={{-110,-200},{-10,-200}}, color={0,127,255})); + connect(bus,ctl. bus) annotation (Line( + points={{-300,0},{-10,0}}, + color={255,204,51}, + thickness=0.5)); + connect(coiHea.port_b, TAirDis.port_a) + annotation (Line(points={{10,-200},{90,-200}}, color={0,127,255})); + connect(TAirDis.port_b, port_Dis) + annotation (Line(points={{110,-200},{300,-200}}, color={0,127,255})); + + connect(port_Sup, VAirDis_flow.port_a) + annotation (Line(points={{-300,-200},{-200,-200}}, color={0,127,255})); + connect(VAirDis_flow.port_b, damVAV.port_a) + annotation (Line(points={{-180,-200},{-130,-200}}, color={0,127,255})); + annotation (Diagram(graphics={ + Line(points={{300,-190},{-300,-190}}, color={0,0,0}), + Line(points={{300,-210},{-300,-210}}, color={0,0,0})}), + defaultComponentName="VAVBox", + Documentation(info=" +

+This partial class provides a standard interface for VAV terminal unit templates. +

+"), + Icon(graphics={ + Rectangle( + extent={{-200,20},{200,-20}}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + fillColor={0,127,127}, + lineColor={0,127,127}), + Ellipse( + extent={{-134,4},{-126,-4}}, + lineColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={0,0,0}), + Line( + points={{-120,20},{-140,-20}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{50,-200},{50,-194},{14,-194},{14,-20}}, + color={238,46,47}, + thickness=5, + visible=have_souHeaWat), + Line( + points={{-50,-200},{-50,-194},{-12,-194},{-12,-20}}, + color={238,46,47}, + thickness=5, + visible=have_souHeaWat, + pattern=LinePattern.Dash), + Rectangle( + extent={{-14,20},{16,-20}}, + lineColor={0,0,0}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid, + lineThickness=0.5, + visible=coiHea.typ <> Buildings.Templates.Components.Types.Coil.None), + Line( + points={{16,20},{-14,-20}}, + color={0,0,0}, + thickness=0.5, + visible=coiHea.typ <> Buildings.Templates.Components.Types.Coil.None)})); +end VAVBox; diff --git a/Buildings/Templates/ZoneEquipment/Interfaces/package.mo b/Buildings/Templates/ZoneEquipment/Interfaces/package.mo new file mode 100644 index 00000000000..83df1077371 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Interfaces/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.ZoneEquipment; +package Interfaces "Interface classes" + extends Modelica.Icons.InterfacesPackage; + +annotation (Documentation(info=" +

+This package contains interface classes. +

+")); +end Interfaces; diff --git a/Buildings/Templates/ZoneEquipment/Interfaces/package.order b/Buildings/Templates/ZoneEquipment/Interfaces/package.order new file mode 100644 index 00000000000..66d204a68a4 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Interfaces/package.order @@ -0,0 +1,3 @@ +Bus +PartialAirTerminal +VAVBox diff --git a/Buildings/Templates/ZoneEquipment/Types.mo b/Buildings/Templates/ZoneEquipment/Types.mo new file mode 100644 index 00000000000..846b24d41ac --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Types.mo @@ -0,0 +1,29 @@ +within Buildings.Templates.ZoneEquipment; +package Types "Package with type definitions" + extends Modelica.Icons.TypesPackage; + type Configuration = enumeration( + DualDuct + "Dual duct system", + FanPowered + "Fan-powered system", + Induction + "Induction system", + VAVBoxCoolingOnly + "VAV terminal unit cooling only", + VAVBoxReheat + "VAV terminal unit with reheat") + "Enumeration to configure the terminal unit"; + type Controller = enumeration( + G36VAVBoxCoolingOnly + "Guideline 36 controller for VAV terminal unit cooling only", + G36VAVBoxReheat + "Guideline 36 controller for VAV terminal unit with reheat", + OpenLoop + "Open loop controller") + "Enumeration to configure the terminal unit controller"; + annotation (Documentation(info=" +

+This package contains type definitions. +

+")); +end Types; diff --git a/Buildings/Templates/ZoneEquipment/VAVBoxCoolingOnly.mo b/Buildings/Templates/ZoneEquipment/VAVBoxCoolingOnly.mo new file mode 100644 index 00000000000..25d5cf7fba5 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/VAVBoxCoolingOnly.mo @@ -0,0 +1,46 @@ +within Buildings.Templates.ZoneEquipment; +model VAVBoxCoolingOnly "VAV terminal unit cooling only" + extends Buildings.Templates.ZoneEquipment.Interfaces.VAVBox( + final typ=Buildings.Templates.ZoneEquipment.Types.Configuration.VAVBoxCoolingOnly, + redeclare final Buildings.Templates.Components.Coils.None coiHea, + redeclare replaceable Buildings.Templates.ZoneEquipment.Components.Controls.G36VAVBoxCoolingOnly + ctl "Guideline 36 controller for VAV terminal unit cooling only"); + + annotation ( + defaultComponentName="VAVBox", + Documentation(info=" +

Description

+

+This template represents a cooling-only VAV terminal unit +(or shut off box). +

+

+The possible configuration options are enumerated in the table below. +The user may refer to ASHRAE (2021) for further details. +The first option displayed in bold characters corresponds to the default configuration.
+

+ + + + + + + + + +
Configuration parameterOptionsNotes
VAV damper +Modulating damper
+
Controller +ASHRAE Guideline 36 controller + +An open loop controller is also available for validation purposes only. +
+

References

+ +")); +end VAVBoxCoolingOnly; diff --git a/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo b/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo new file mode 100644 index 00000000000..7b9dbf72152 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo @@ -0,0 +1,51 @@ +within Buildings.Templates.ZoneEquipment; +model VAVBoxReheat "VAV terminal unit with reheat" + extends Buildings.Templates.ZoneEquipment.Interfaces.VAVBox( + final typ=Buildings.Templates.ZoneEquipment.Types.Configuration.VAVBoxReheat, + redeclare replaceable Buildings.Templates.ZoneEquipment.Components.Controls.G36VAVBoxReheat ctl + "Guideline 36 controller for VAV terminal unit with reheat"); + + annotation ( + defaultComponentName="VAVBox", + Documentation(info=" +

Description

+

+This template represents a VAV terminal unit with reheat. +

+

+The possible configuration options are enumerated in the table below. +The user may refer to ASHRAE (2021) for further details. +The first option displayed in bold characters corresponds to the default configuration.
+

+ + + + + + + + + + + + + +
Configuration parameterOptionsNotes
VAV damper +Modulating damper +
Reheat coil +Hot water coil with two-way valve
+Modulating electric heating coil +
Controller +ASHRAE Guideline 36 controller + +An open loop controller is also available for validation purposes only. +
+

References

+ +")); +end VAVBoxReheat; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo new file mode 100644 index 00000000000..3bf7f94977e --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/VAVMZControlPoints.mo @@ -0,0 +1,55 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject.AirHandlersFans; +block VAVMZControlPoints "Emulation of multiple-zone VAV control points" + extends Modelica.Blocks.Icons.Block; + + parameter Integer nZon = 2 + "Number of served zones"; + + Buildings.Templates.ZoneEquipment.Interfaces.Bus busTer[nZon] + "Terminal unit control bus" annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={200,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); + + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TAirSupSet[nZon]( + each k=15 + 273.15) "AHU supply air temperature setpoint" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + Buildings.Controls.OBC.CDL.Integers.Sources.Constant yOpeMod[nZon](each k=1) + "Group operating mode" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + Buildings.Controls.OBC.CDL.Continuous.Sources.Constant VDesUncOutAir_flow[nZon](each k=1) + "VDesUncOutAir_flow from AHU controller" + annotation (Placement(transformation(extent={{0,130},{20,150}}))); + Buildings.Controls.OBC.CDL.Logical.Sources.Constant yReqOutAir[nZon](each k=true) + "yReqOutAir from AHU controller" + annotation (Placement(transformation(extent={{0,90},{20,110}}))); + Controls.OBC.CDL.Logical.Sources.Constant y1FanSup_actual[nZon](each k=true) + "y1FanSup_actual from AHU controller" + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TAirSup[nZon](each k=15 + 273.15) + "AHU supply air temperature" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); +equation + + connect(TAirSupSet.y, busTer.TAirSupSet); + connect(TAirSup.y, busTer.TAirSup); + connect(yOpeMod.y, busTer.yOpeMod); + + connect(yReqOutAir.y, busTer.yReqOutAir); + connect(VDesUncOutAir_flow.y, busTer.VDesUncOutAir_flow); + connect(y1FanSup_actual.y, busTer.y1FanSup_actual); + + annotation ( + defaultComponentName="sigAirHan", + Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-200,-180},{200,180}})), + Documentation(info=" +

+This class generates signals typically provided by the AHU controller. +It is aimed for validation purposes only. +

+")); +end VAVMZControlPoints; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.mo new file mode 100644 index 00000000000..7a4c2181fc9 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.mo @@ -0,0 +1,9 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +package AirHandlersFans "Air handlers and fans" + +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end AirHandlersFans; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.order b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.order new file mode 100644 index 00000000000..37a691c0513 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/AirHandlersFans/package.order @@ -0,0 +1 @@ +VAVMZControlPoints diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo new file mode 100644 index 00000000000..0f22f35818e --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/BASControlPoints.mo @@ -0,0 +1,71 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +block BASControlPoints "Emulation of control points from the BAS" + extends Modelica.Blocks.Icons.Block; + + parameter Integer nZon = 2 + "Number of served zones"; + + Interfaces.Bus busTer[nZon] + "Terminal unit control bus" annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={200,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); + Controls.OBC.CDL.Logical.Sources.Constant y1OccSch[nZon]( + each k=true) + "Scheduled occupancy" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + Controls.OBC.CDL.Integers.Sources.Constant yOveFloSet[nZon](each k=0) + "Override flow setpoint, 1: set to zero; 2: set to cooling maximum; 3: set to minimum; 4: set to heating maximum" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + Controls.OBC.CDL.Logical.Sources.Constant y1OveHeaOff[nZon]( + each k=false) + "Override heating coil valve position, true: close valve" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + Controls.OBC.CDL.Integers.Sources.Constant yOveDamPos[nZon](each k=0) + "Override damper position, 1: set to close; 2: set to open" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaOccSet[nZon]( + each k=293.15) + "Occupied heating setpoint" + annotation (Placement(transformation(extent={{-100,50},{-80,70}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TZonCooOccSet[nZon]( + each k=297.15) + "Occupied cooling setpoint" + annotation (Placement(transformation(extent={{-100,10},{-80,30}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TZonHeaUnoSet[nZon]( + each k=285.15) + "Unoccupied heating setpoint" + annotation (Placement(transformation(extent={{-100,-30},{-80,-10}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TZonCooUnoSet[nZon]( + each k=303.15) + "Unoccupied cooling setpoint" + annotation (Placement(transformation(extent={{-100,-70},{-80,-50}}))); + Controls.OBC.CDL.Continuous.Sources.Constant ppmCO2Set[nZon]( + each k=1000) + "Zone CO2 concentration setpoint" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); +equation + connect(y1OccSch.y, busTer.y1OccSch); + connect(yOveFloSet.y, busTer.yOveFloSet); + connect(yOveDamPos.y, busTer.yOveDamPos); + connect(y1OveHeaOff.y, busTer.y1OveHeaOff); + + connect(TZonHeaOccSet.y, busTer.TZonHeaOccSet); + connect(TZonCooOccSet.y, busTer.TZonCooOccSet); + connect(TZonHeaUnoSet.y, busTer.TZonHeaUnoSet); + connect(TZonCooUnoSet.y, busTer.TZonCooUnoSet); + connect(ppmCO2Set.y, busTer.ppmCO2Set); + annotation ( + defaultComponentName="sigBAS", + Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-200,-180},{200,180}})), + Documentation(info=" +

+This class generates signals typically provided by the BAS. +It is aimed for validation purposes only. +

+")); +end BASControlPoints; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo new file mode 100644 index 00000000000..de87888e4a9 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo @@ -0,0 +1,68 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject.Data; +class AllSystems "Top-level (whole building) system parameters" + extends Buildings.Templates.Data.AllSystems(stdVen=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, + stdEne=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1); + + /* + The construct below where a replaceable model is used inside the `outer` + component declaration is for validation purposes only, where various configuration + classes are tested with the same instance name `VAV_1`. + It is needed here because + - the `inner` instance must be a subtype of the `outer` component, and + - the `outer` component references only the subcomponents from its own type + (as opposed to all the subcomponents from the `inner` type), and + - modification of an outer declaration is prohibited. + The standard export workflow should use an explicit reference to the configuration + class for each MZVAV model instance. + */ + replaceable model VAVBox = + Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal + "Model of VAV box"; + + outer VAVBox VAVBox_1 + "Instance of VAV box model"; + + parameter Buildings.Templates.ZoneEquipment.Data.VAVBox dat_VAVBox_1( + final typ=VAVBox_1.typ, + final have_souChiWat=VAVBox_1.have_souChiWat, + final have_souHeaWat=VAVBox_1.have_souHeaWat, + final typCtl=VAVBox_1.ctl.typ, + final typDamVAV=VAVBox_1.damVAV.typ, + final typCoiHea=VAVBox_1.coiHea.typ, + final typValCoiHea=VAVBox_1.coiHea.typVal, + final stdVen=VAVBox_1.ctl.stdVen, + id="VAVBox_1", + id_souAir="VAV_1", + damVAV(dp_nominal=50), + coiHea( + cap_nominal=1e3, + dpAir_nominal=70, + dpWat_nominal=0.1e4, + dpValve_nominal=0.05e4, + mWat_flow_nominal=1e3/4186/10, + TAirEnt_nominal=285.15, + TWatEnt_nominal=323.15), + ctl( + final stdVen=VAVBox_1.ctl.stdVen, + VAirCooSet_flow_max=0.1, + VAirHeaSet_flow_max=0.03, + VOutMinOcc_flow=2.5e-3, + VOutMinAre_flow=3e-3, + VOutOcc_flow=2.5e-3, + VOutAre_flow=3e-3, + VAirSet_flow_min=0.01)) + "Parameters for system VAVBox_1" + annotation ( + Dialog(group="Zone equipment")); + + annotation ( + defaultComponentPrefixes = "inner parameter", + defaultComponentName = "datAll", + Documentation(info=" +

+This record provides the set of sizing and operating parameters for +the whole HVAC system. +It is aimed for validation purposes only. +

+")); +end AllSystems; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.mo new file mode 100644 index 00000000000..7bd66c6b4e4 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.mo @@ -0,0 +1,11 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +package Data "Package with classes for storing system parameters" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" +

+This package provides records for design and operating parameters +that are used for validation purposes. +

+")); +end Data; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.order b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.order new file mode 100644 index 00000000000..3831742ec60 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/package.order @@ -0,0 +1 @@ +AllSystems diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/PlantControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/PlantControlPoints.mo new file mode 100644 index 00000000000..43eed095514 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/PlantControlPoints.mo @@ -0,0 +1,39 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +block PlantControlPoints + "Emulation of control points from plant" + extends Modelica.Blocks.Icons.Block; + + parameter Integer nZon = 2 + "Number of served zones"; + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant y1PlaHeaWat[nZon]( + each k=true) "Heating hot water plant status" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Interfaces.Bus busTer[nZon] + "Terminal unit control bus" annotation (Placement(transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={200,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); +equation + + connect(y1PlaHeaWat.y, busTer.y1PlaHeaWat) annotation (Line(points={{22,0},{ + 200,0}}, color={255,0,255}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}}, + horizontalAlignment=TextAlignment.Left)); + annotation ( + defaultComponentName="sigPla", + Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-200,-180},{200,180}})), + Documentation(info=" +

+This class generates signals typically provided by the HHW and CHW plant +controller. +It is aimed for validation purposes only. +

+")); +end PlantControlPoints; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo new file mode 100644 index 00000000000..b5b68009b9e --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneControlPoints.mo @@ -0,0 +1,50 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +block ZoneControlPoints "Emulation of control points from zone sensors and thermostats" + extends Modelica.Blocks.Icons.Block; + + Interfaces.Bus bus + "Terminal unit control bus" + annotation (Placement( + transformation( + extent={{-20,20},{20,-20}}, + rotation=90, + origin={200,0}), iconTransformation( + extent={{-10,10},{10,-10}}, + rotation=90, + origin={100,0}))); + + Buildings.Controls.OBC.CDL.Logical.Sources.Constant y1Occ(k=true) + "Occupancy sensor status" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + Controls.OBC.CDL.Logical.Sources.Constant y1Win(k=true) + "Window switch status" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + Controls.OBC.CDL.Continuous.Sources.Constant TZon(k=303.15) + "Zone temperature" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + Controls.OBC.CDL.Logical.Sources.Constant y1OveOccZon( + k=false) + "Zone occupancy override" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + Controls.OBC.CDL.Continuous.Sources.Constant ppmCO2(k=1000) + "Zone CO2 concentration" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + +equation + connect(y1Occ.y, bus.y1Occ); + connect(y1Win.y, bus.y1Win); + connect(TZon.y, bus.TZon); + connect(ppmCO2.y, bus.ppmCO2); + connect(y1OveOccZon.y, bus.y1OveOccZon); + + annotation ( + defaultComponentName="sigZon", + Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-200,-180},{200,180}})), + Documentation(info=" +

+This class generates signals typically provided by the zone equipment. +It is aimed for validation purposes only. +

+")); +end ZoneControlPoints; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnly.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnly.mo new file mode 100644 index 00000000000..a32296acd66 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnly.mo @@ -0,0 +1,17 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment; +model VAVBoxCoolingOnly "Configuration of VAV terminal unit cooling only" + extends Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly( + redeclare replaceable Buildings.Templates.ZoneEquipment.Components.Controls.OpenLoop ctl + "Open loop control"); + annotation ( + defaultComponentName="ter", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly. +

+")); +end VAVBoxCoolingOnly; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnlyControlG36.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnlyControlG36.mo new file mode 100644 index 00000000000..0ae28c5d8a8 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxCoolingOnlyControlG36.mo @@ -0,0 +1,22 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment; +model VAVBoxCoolingOnlyControlG36 + "Configuration of VAV terminal unit cooling only" + extends Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly; + + annotation ( + defaultComponentName="ter", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.ZoneEquipment.VAVBoxReheat +except for the following options.
+

+ + + +
ComponentConfiguration
ControllerGuideline 36 controller
+")); +end VAVBoxCoolingOnlyControlG36; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxReheatControlG36.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxReheatControlG36.mo new file mode 100644 index 00000000000..f2357549888 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/VAVBoxReheatControlG36.mo @@ -0,0 +1,21 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment; +model VAVBoxReheatControlG36 "Configuration of VAV terminal unit with reheat" + extends Buildings.Templates.ZoneEquipment.VAVBoxReheat; + + annotation ( + defaultComponentName="ter", + Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+This is a configuration model with the same default options as + +Buildings.Templates.ZoneEquipment.VAVBoxReheat +except for the following options.
+

+ + + +
ComponentConfiguration
ControllerGuideline 36 controller
+")); +end VAVBoxReheatControlG36; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.mo new file mode 100644 index 00000000000..00e31b768ea --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.ZoneEquipment.Validation.UserProject; +package ZoneEquipment "Zone equipment" + extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end ZoneEquipment; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.order b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.order new file mode 100644 index 00000000000..ec909c75cf9 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/ZoneEquipment/package.order @@ -0,0 +1,3 @@ +VAVBoxCoolingOnly +VAVBoxCoolingOnlyControlG36 +VAVBoxReheatControlG36 diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.mo new file mode 100644 index 00000000000..06b5503be30 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates.ZoneEquipment.Validation; +package UserProject "Package with configured models" + extends Modelica.Icons.VariantsPackage; + +annotation (Documentation(info=" +

+This package contains models used for validation purposes. +

+")); +end UserProject; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.order b/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.order new file mode 100644 index 00000000000..93ffb0bb8e3 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/package.order @@ -0,0 +1,6 @@ +BASControlPoints +PlantControlPoints +ZoneControlPoints +AirHandlersFans +ZoneEquipment +Data diff --git a/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mo b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mo new file mode 100644 index 00000000000..bb0f08cf278 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mo @@ -0,0 +1,117 @@ +within Buildings.Templates.ZoneEquipment.Validation; +model VAVBoxCoolingOnly "Validation model for VAV terminal unit cooling only" + extends Modelica.Icons.Example; + + replaceable package MediumAir=Buildings.Media.Air + constrainedby Modelica.Media.Interfaces.PartialMedium + "Air medium"; + replaceable package MediumHeaWat=Buildings.Media.Water + constrainedby Modelica.Media.Interfaces.PartialMedium + "Heating medium (such as HHW)"; + + inner parameter UserProject.Data.AllSystems datAll( + sysUni=Buildings.Templates.Types.Units.SI, + ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_3B, + redeclare replaceable model VAVBox = + UserProject.ZoneEquipment.VAVBoxCoolingOnly) + "System parameters" + annotation (Placement(transformation(extent={{90,92},{110,112}}))); + + Fluid.Sources.Boundary_pT bouPri( + redeclare final package Medium = MediumAir, + p=MediumAir.p_default + 200, + nPorts=1) "Boundary conditions for primary air distribution system" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumAir, + m_flow_nominal=1, + dp_nominal=100) + annotation (Placement(transformation(extent={{-50,-50},{-30,-30}}))); + Fluid.FixedResistances.PressureDrop res1( + redeclare final package Medium = MediumAir, + m_flow_nominal=1, + dp_nominal=100) + annotation (Placement(transformation(extent={{30,-50},{50,-30}}))); + Fluid.Sources.Boundary_pT bouBui( + redeclare final package Medium = MediumAir, + nPorts=1) "Boundary conditions for indoor environment" + annotation (Placement(transformation(extent={{80,-50},{60,-30}}))); + + inner replaceable UserProject.ZoneEquipment.VAVBoxCoolingOnly VAVBox_1( + final dat=datAll.dat_VAVBox_1, + redeclare final package MediumAir = MediumAir, + redeclare final package MediumHeaWat = MediumHeaWat) + "Terminal unit" + annotation (Placement(transformation(extent={{-20,-60},{20,-20}}))); + + Fluid.Sources.Boundary_pT bouHeaWat( + redeclare final package Medium = MediumHeaWat, + nPorts=2) if VAVBox_1.have_souHeaWat + "Boundary conditions for HHW distribution system" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + UserProject.AirHandlersFans.VAVMZControlPoints sigAirHan if VAVBox_1.ctl.typ == + Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly or + VAVBox_1.ctl.typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat + "Control signals from AHU" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + UserProject.ZoneControlPoints sigZon + if VAVBox_1.ctl.typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly + or VAVBox_1.ctl.typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat + "Control signals from zone-level equipment" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + UserProject.PlantControlPoints sigPla if VAVBox_1.ctl.typ == + Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxCoolingOnly or + VAVBox_1.ctl.typ == Buildings.Templates.ZoneEquipment.Types.Controller.G36VAVBoxReheat + "Control signals from AHU" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + UserProject.BASControlPoints sigBAS + "BAS control points" + annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); +equation + connect(bouPri.ports[1], res.port_a) + annotation (Line(points={{-60,-40},{-50,-40}}, + color={0,127,255})); + connect(bouBui.ports[1], res1.port_b) + annotation (Line(points={{60,-40},{50,-40}}, + color={0,127,255})); + connect(res.port_b, VAVBox_1.port_Sup) + annotation (Line(points={{-30,-40},{-20,-40}}, color={0,127,255})); + connect(VAVBox_1.port_Dis, res1.port_a) + annotation (Line(points={{20,-40},{30,-40}}, color={0,127,255})); + connect(VAVBox_1.port_aHeaWat, bouHeaWat.ports[1]) annotation (Line(points={{5,-60}, + {5,-82},{-60,-82},{-60,-81}}, color={0,127,255})); + connect(VAVBox_1.port_bHeaWat, bouHeaWat.ports[2]) + annotation (Line(points={{-5,-60},{-5,-79},{-60,-79}}, color={0,127,255})); + connect(sigZon.bus, VAVBox_1.bus) annotation (Line( + points={{-60,0},{-20,0},{-20,-24},{-19.9,-24}}, + color={255,204,51}, + thickness=0.5)); + connect(sigAirHan.busTer[1], VAVBox_1.bus) annotation (Line( + points={{-60,30},{-20,30},{-20,-24},{-19.9,-24}}, + color={255,204,51}, + thickness=0.5)); + connect(sigPla.busTer[1], VAVBox_1.bus) annotation (Line( + points={{-60,60},{-19.9,60},{-19.9,-24}}, + color={255,204,51}, + thickness=0.5)); + connect(sigBAS.busTer[1], VAVBox_1.bus) annotation (Line( + points={{-60,90},{-19.9,90},{-19.9,-24}}, + color={255,204,51}, + thickness=0.5)); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnly.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=1), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment.VAVBoxCoolingOnly. +It is intended to check whether the template model is well-defined for +this particular system configuration. +However, due to the open-loop controls a correct physical behavior +is not expected and the plotted variables are for non-regression testing only. +

+"), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}}))); +end VAVBoxCoolingOnly; diff --git a/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mo b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mo new file mode 100644 index 00000000000..29247a55157 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mo @@ -0,0 +1,22 @@ +within Buildings.Templates.ZoneEquipment.Validation; +model VAVBoxCoolingOnlyControlG36 + "Validation model for VAV terminal unit cooling only" + extends VAVBoxCoolingOnly( + datAll( + redeclare model VAVBox = + UserProject.ZoneEquipment.VAVBoxCoolingOnlyControlG36), + redeclare UserProject.ZoneEquipment.VAVBoxCoolingOnlyControlG36 VAVBox_1); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxCoolingOnlyControlG36.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=3600), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment.VAVBoxCoolingOnlyControlG36. +It is intended to check whether the template model is well-defined for +this particular system configuration. +

+")); +end VAVBoxCoolingOnlyControlG36; diff --git a/Buildings/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mo b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mo new file mode 100644 index 00000000000..9cb8c23cbf8 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mo @@ -0,0 +1,21 @@ +within Buildings.Templates.ZoneEquipment.Validation; +model VAVBoxReheatControlG36 "Validation model for VAV terminal unit with reheat" + extends VAVBoxCoolingOnly( + datAll( + redeclare model VAVBox = + UserProject.ZoneEquipment.VAVBoxReheatControlG36), + redeclare UserProject.ZoneEquipment.VAVBoxReheatControlG36 VAVBox_1); + annotation ( + __Dymola_Commands( + file="modelica://Buildings/Resources/Scripts/Dymola/Templates/ZoneEquipment/Validation/VAVBoxReheatControlG36.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=3600), Documentation(info=" +

+This is a validation model for the configuration represented by + +Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment.VAVBoxReheatControlG36. +It is intended to check whether the template model is well-defined for +this particular system configuration. +

+")); +end VAVBoxReheatControlG36; diff --git a/Buildings/Templates/ZoneEquipment/Validation/package.mo b/Buildings/Templates/ZoneEquipment/Validation/package.mo new file mode 100644 index 00000000000..4bdfd1da9ad --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/package.mo @@ -0,0 +1,22 @@ +within Buildings.Templates.ZoneEquipment; +package Validation "Package with validation models" + extends Modelica.Icons.ExamplesPackage; + + annotation ( + preferredView="info", + Documentation(info=" +

+This package contains models validating the templates within + +Buildings.Templates.ZoneEquipment +for various system configurations. +

+

+Each system configuration is specified by extending the original template class +to create a so-called configuration class (under + +Buildings.Templates.ZoneEquipment.Validation.UserProject.ZoneEquipment), +that is instantiated in the validation model. +

+")); +end Validation; diff --git a/Buildings/Templates/ZoneEquipment/Validation/package.order b/Buildings/Templates/ZoneEquipment/Validation/package.order new file mode 100644 index 00000000000..1afdeec2e50 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/Validation/package.order @@ -0,0 +1,4 @@ +VAVBoxCoolingOnly +VAVBoxCoolingOnlyControlG36 +VAVBoxReheatControlG36 +UserProject diff --git a/Buildings/Templates/ZoneEquipment/package.mo b/Buildings/Templates/ZoneEquipment/package.mo new file mode 100644 index 00000000000..ad011651305 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/package.mo @@ -0,0 +1,10 @@ +within Buildings.Templates; +package ZoneEquipment "Zone equipment" + extends Modelica.Icons.Package; + +annotation (Documentation(info=" +

+This package contains templates for zone equipment (HVAC terminal units). +

+")); +end ZoneEquipment; diff --git a/Buildings/Templates/ZoneEquipment/package.order b/Buildings/Templates/ZoneEquipment/package.order new file mode 100644 index 00000000000..90615915645 --- /dev/null +++ b/Buildings/Templates/ZoneEquipment/package.order @@ -0,0 +1,7 @@ +VAVBoxCoolingOnly +VAVBoxReheat +Components +Data +Types +Validation +Interfaces diff --git a/Buildings/Templates/package.mo b/Buildings/Templates/package.mo new file mode 100644 index 00000000000..c4f771eb327 --- /dev/null +++ b/Buildings/Templates/package.mo @@ -0,0 +1,20 @@ +within Buildings; +package Templates "Package with templates for various HVAC systems" + extends Modelica.Icons.Package; + + annotation (Documentation(info=" +

+This package contains templates for common HVAC systems. +A template is defined as a user-configurable model that can represent various +configurations of the same system. The templates include closed-loop controls as +implemented within + +Buildings.Controls.OBC. +

+"), Icon(graphics={Text( + extent={{-100,100},{100,-100}}, + textColor={0,0,0}, + fontName="monospace", + textStyle={TextStyle.Bold}, + textString="T")})); +end Templates; diff --git a/Buildings/Templates/package.order b/Buildings/Templates/package.order new file mode 100644 index 00000000000..9c28253a22a --- /dev/null +++ b/Buildings/Templates/package.order @@ -0,0 +1,6 @@ +UsersGuide +AirHandlersFans +Components +ZoneEquipment +Data +Types diff --git a/Buildings/package.mo b/Buildings/package.mo index 85bd2f49ceb..9549c03423c 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -217,6 +217,15 @@ Version 10.0.0 is ... xxx The following new libraries have been added:

+ + + - - -
Buildings.Templates + Package that contains templates for HVAC systems with control sequences + based on ASHRAE Guideline 36. + Currently limited to VAV systems, the package is under active development + and will be further expanded with templates for primary systems and various + types of zone equipment. +
Buildings.ThermalZones.ISO13790 Package that contains models for reduced building physics of thermal zones @@ -820,16 +829,6 @@ have been improved in a #3277.
Buildings.Controls.OBC.CDL.Continuous.Sources.Sin - Renamed block from Sine to Sin - to use consistent naming with - Buildings.Controls.OBC.CDL.Continuous.Sin.
- This is for - #3339.
- This change is supported in the conversion script. -
Buildings.Controls.OBC.CDL.Routing.RealExtractor Removed parameter allowOutOfRange and outOfRangeValue and output the element with the nearest valid index diff --git a/Buildings/package.order b/Buildings/package.order index 2f79ab027f2..dbc4ec10240 100644 --- a/Buildings/package.order +++ b/Buildings/package.order @@ -9,6 +9,7 @@ Fluid HeatTransfer Media Occupants +Templates ThermalZones Utilities Types