From 3cdd0c6710d093b147d3637699879d8bd3fcad77 Mon Sep 17 00:00:00 2001 From: Antoine Gautier Date: Tue, 12 Sep 2023 10:10:11 +0200 Subject: [PATCH 1/5] Refactor templates with a record class for configuration parameters (#3508) * Add cfg record for VAVMZ * Add cfg record for VAV box * Updated version to 11.0.0 --------- Co-authored-by: Michael Wetter --- .../ConvertBuildings_from_10_to_11.0.0.mos | 6 ++ .../Configuration/PartialAirHandler.mo | 34 +++++++ .../Configuration/VAVMultiZone.mo | 55 +++++++++++ .../AirHandlersFans/Configuration/package.mo | 10 ++ .../Configuration/package.order | 2 + .../AirHandlersFans/Data/PartialAirHandler.mo | 41 +++------ .../AirHandlersFans/Data/VAVMultiZone.mo | 91 ++++++++----------- .../Interfaces/PartialAirHandler.mo | 23 +++-- .../Templates/AirHandlersFans/VAVMultiZone.mo | 36 +++++--- .../Validation/UserProject/Data/AllSystems.mo | 23 +---- .../Templates/AirHandlersFans/package.order | 1 + .../Configuration/PartialAirTerminal.mo | 25 +++++ .../ZoneEquipment/Configuration/VAVBox.mo | 31 +++++++ .../ZoneEquipment/Configuration/package.mo | 10 ++ .../ZoneEquipment/Configuration/package.order | 2 + .../ZoneEquipment/Data/PartialAirTerminal.mo | 29 +++--- .../Templates/ZoneEquipment/Data/VAVBox.mo | 33 +++---- .../Interfaces/PartialAirTerminal.mo | 12 ++- .../ZoneEquipment/Interfaces/VAVBox.mo | 19 +++- .../ZoneEquipment/VAVBoxCoolingOnly.mo | 16 +++- .../Templates/ZoneEquipment/VAVBoxReheat.mo | 16 +++- .../Validation/UserProject/Data/AllSystems.mo | 14 +-- .../Templates/ZoneEquipment/package.order | 1 + Buildings/package.mo | 33 +++++-- 24 files changed, 362 insertions(+), 201 deletions(-) create mode 100644 Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos create mode 100644 Buildings/Templates/AirHandlersFans/Configuration/PartialAirHandler.mo create mode 100644 Buildings/Templates/AirHandlersFans/Configuration/VAVMultiZone.mo create mode 100644 Buildings/Templates/AirHandlersFans/Configuration/package.mo create mode 100644 Buildings/Templates/AirHandlersFans/Configuration/package.order create mode 100644 Buildings/Templates/ZoneEquipment/Configuration/PartialAirTerminal.mo create mode 100644 Buildings/Templates/ZoneEquipment/Configuration/VAVBox.mo create mode 100644 Buildings/Templates/ZoneEquipment/Configuration/package.mo create mode 100644 Buildings/Templates/ZoneEquipment/Configuration/package.order diff --git a/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos new file mode 100644 index 00000000000..057345a0373 --- /dev/null +++ b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos @@ -0,0 +1,6 @@ +// Conversion script for Buildings library +// from: Version 10 +// to: Version 11.0.0 +clear + +convertClear(); diff --git a/Buildings/Templates/AirHandlersFans/Configuration/PartialAirHandler.mo b/Buildings/Templates/AirHandlersFans/Configuration/PartialAirHandler.mo new file mode 100644 index 00000000000..46bac6444ac --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Configuration/PartialAirHandler.mo @@ -0,0 +1,34 @@ +within Buildings.Templates.AirHandlersFans.Configuration; +record PartialAirHandler "Configuration parameters for air handler interface class" + extends Modelica.Icons.Record; + + parameter Buildings.Templates.AirHandlersFans.Types.Configuration typ + "Type of system" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Fan typFanSup + "Type of supply fan" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Fan typFanRet + "Type of return fan" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Fan typFanRel + "Type of relief fan" + annotation (Evaluate=true); + parameter Boolean have_souChiWat + "Set to true if cooling coil requires fluid ports on the source side" + annotation (Evaluate=true); + parameter Boolean have_souHeaWat + "Set to true if heating coil requires fluid ports on the source side" + annotation (Evaluate=true); + parameter Buildings.Templates.AirHandlersFans.Types.Controller typCtl + "Type of controller" + annotation (Evaluate=true); + + annotation (Documentation(info=" +

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

+")); +end PartialAirHandler; diff --git a/Buildings/Templates/AirHandlersFans/Configuration/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Configuration/VAVMultiZone.mo new file mode 100644 index 00000000000..a0b43c29fda --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Configuration/VAVMultiZone.mo @@ -0,0 +1,55 @@ +within Buildings.Templates.AirHandlersFans.Configuration; +record VAVMultiZone "Configuration parameters for multiple-zone VAV" + extends Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler; + + parameter Buildings.Templates.Components.Types.Coil typCoiHeaPre + "Type of heating coil in preheat position" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Coil typCoiCoo + "Type of cooling coil" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Coil typCoiHeaReh + "Type of heating coil in reheat position" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValCoiHeaPre + "Type of valve for heating coil in preheat position" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValCoiCoo + "Type of valve for cooling coil" + annotation (Evaluate=true); + parameter Buildings.Templates.Components.Types.Valve typValCoiHeaReh + "Type of valve for heating coil in reheat position" + annotation (Evaluate=true); + 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.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection typSecOut + "Type of outdoor air section" + annotation (Evaluate=true); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes buiPreCon + "Type of building pressure control system" + annotation (Evaluate=true); + parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard stdVen + "Ventilation standard" + annotation(Evaluate=true); + +annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName = "cfg", + Documentation(info=" +

+This record provides the set of configuration parameters for the class + +Buildings.Templates.AirHandlersFans.VAVMultiZone. +

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

+This package provides records for configuration parameters. +

+")); +end Configuration; diff --git a/Buildings/Templates/AirHandlersFans/Configuration/package.order b/Buildings/Templates/AirHandlersFans/Configuration/package.order new file mode 100644 index 00000000000..d53cb21682b --- /dev/null +++ b/Buildings/Templates/AirHandlersFans/Configuration/package.order @@ -0,0 +1,2 @@ +PartialAirHandler +VAVMultiZone diff --git a/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo b/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo index ae07f81f1e1..2f5587d23bb 100644 --- a/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo +++ b/Buildings/Templates/AirHandlersFans/Data/PartialAirHandler.mo @@ -2,53 +2,36 @@ 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)); + replaceable parameter + Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler cfg + "Configuration parameters" + annotation (Dialog(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)); + annotation (Dialog(tab="Advanced", enable=cfg.have_souChiWat)); parameter String id_souHeaWat="" "HHW supply system tag" - annotation (Dialog(tab="Advanced", enable=have_souHeaWat)); + annotation (Dialog(tab="Advanced", enable=cfg.have_souHeaWat)); replaceable parameter Buildings.Templates.AirHandlersFans.Components.Data.PartialController ctl( - final typFanSup=typFanSup, - final typFanRel=typFanRel, - final typFanRet=typFanRet, - final typ=typCtl) + final typFanSup=cfg.typFanSup, + final typFanRel=cfg.typFanRel, + final typFanRet=cfg.typFanRet, + final typ=cfg.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)); + annotation (Dialog(enable=cfg.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 (Dialog(enable=cfg.typ<>Buildings.Templates.AirHandlersFans.Types.Configuration.SupplyOnly)); annotation (Documentation(info="

diff --git a/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo index 72d94578f86..ea25a331278 100644 --- a/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo +++ b/Buildings/Templates/AirHandlersFans/Data/VAVMultiZone.mo @@ -1,56 +1,35 @@ within Buildings.Templates.AirHandlersFans.Data; record VAVMultiZone "Record for multiple-zone VAV" extends Buildings.Templates.AirHandlersFans.Data.PartialAirHandler( + redeclare Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone cfg, 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)); + final typSecOut=cfg.typSecOut, + final buiPreCon=cfg.buiPreCon, + final stdVen=cfg.stdVen), + final mAirSup_flow_nominal=if cfg.typFanSup<>Buildings.Templates.Components.Types.Fan.None + then fanSup.m_flow_nominal else 0, + final mAirRet_flow_nominal=if cfg.typFanRet<>Buildings.Templates.Components.Types.Fan.None + then fanRet.m_flow_nominal + elseif cfg.typFanRel<>Buildings.Templates.Components.Types.Fan.None + then fanRel.m_flow_nominal + elseif cfg.typFanSup<>Buildings.Templates.Components.Types.Fan.None + then fanSup.m_flow_nominal else 0); parameter Buildings.Templates.Components.Data.Fan fanSup( - final typ=typFanSup) + final typ=cfg.typFanSup) "Supply fan" annotation (Dialog( - group="Fans", enable=typFanSup <> Buildings.Templates.Components.Types.Fan.None)); + group="Fans", enable=cfg.typFanSup <> Buildings.Templates.Components.Types.Fan.None)); extends Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection( + final typDamOut=cfg.typDamOut, + final typDamOutMin=cfg.typDamOutMin, + final typDamRel=cfg.typDamRel, + final typDamRet=cfg.typDamRet, + final typFanRel=cfg.typFanRel, + final typFanRet=cfg.typFanRet, fanRel, fanRet, damOut( @@ -63,40 +42,44 @@ record VAVMultiZone "Record for multiple-zone VAV" m_flow_nominal=mAirRet_flow_nominal)); parameter Buildings.Templates.Components.Data.Coil coiHeaPre( - final typ=typCoiHeaPre, - final typVal=typValCoiHeaPre, - final have_sou=have_souHeaWat, + final typ=cfg.typCoiHeaPre, + final typVal=cfg.typValCoiHeaPre, + final have_sou=cfg.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)); + enable=cfg.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, + final typ=cfg.typCoiCoo, + final typVal=cfg.typValCoiCoo, + final have_sou=cfg.have_souChiWat, mAir_flow_nominal=mAirSup_flow_nominal) "Cooling coil" annotation (Dialog( - group="Coils", enable=typCoiCoo <> Buildings.Templates.Components.Types.Coil.None)); + group="Coils", enable=cfg.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, + final typ=cfg.typCoiHeaReh, + final typVal=cfg.typValCoiHeaReh, + final have_sou=cfg.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)); + enable=cfg.typCoiHeaReh <> Buildings.Templates.Components.Types.Coil.None)); annotation ( defaultComponentPrefixes = "parameter", defaultComponentName = "dat", - Documentation(info=" + Documentation(info="

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

+

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

")); end VAVMultiZone; diff --git a/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo b/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo index 35c39095fa5..1139f6752e0 100644 --- a/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo +++ b/Buildings/Templates/AirHandlersFans/Interfaces/PartialAirHandler.mo @@ -19,20 +19,23 @@ partial model PartialAirHandler "Interface class for air handler" "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( + Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler cfg( final typ=typ, final typFanSup=typFanSup, final typFanRel=typFanRel, final typFanRet=typFanRet, final have_souChiWat=have_souChiWat, final have_souHeaWat=have_souHeaWat) + "Configuration parameters"; + + inner parameter Integer nZon(min=1) + "Number of served zones" + annotation (Evaluate=true, Dialog(group="Configuration")); + + replaceable parameter + Buildings.Templates.AirHandlersFans.Data.PartialAirHandler dat( + cfg=cfg) "Design and operating parameters" annotation (Placement(transformation(extent={{270,250},{290,270}}))); @@ -43,11 +46,7 @@ partial model PartialAirHandler "Interface class for air handler" 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)); + 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")); diff --git a/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo b/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo index 71637cb745b..d1621d44977 100644 --- a/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo +++ b/Buildings/Templates/AirHandlersFans/VAVMultiZone.mo @@ -9,21 +9,22 @@ model VAVMultiZone "Multiple-zone VAV" */ 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), + redeclare final Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone cfg( + final typCoiHeaPre=coiHeaPre.typ, + final typCoiCoo=coiCoo.typ, + final typCoiHeaReh=coiHeaReh.typ, + final typValCoiHeaPre=coiHeaPre.typVal, + final typValCoiCoo=coiCoo.typVal, + final typValCoiHeaReh=coiHeaReh.typVal, + final typDamOut=secOutRel.typDamOut, + final typDamOutMin=secOutRel.typDamOutMin, + final typDamRet=secOutRel.typDamRet, + final typDamRel=secOutRel.typDamRel, + final typSecOut=secOutRel.typSecOut, + final typCtl=ctl.typ, + final buiPreCon=ctl.buiPreCon, + final stdVen=ctl.stdVen), + redeclare Buildings.Templates.AirHandlersFans.Data.VAVMultiZone dat, final typ=Buildings.Templates.AirHandlersFans.Types.Configuration.SingleDuct, final have_porRel=secOutRel.typ <> Types.OutdoorReliefReturnSection.MixedAirNoRelief, final have_souChiWat=coiCoo.have_sou, @@ -763,6 +764,11 @@ for HVAC Systems. Atlanta, GA. revisions=" +", revisions=" + ")); end VAVBoxCoolingOnly; diff --git a/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo b/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo index 7b9dbf72152..f1e8612babd 100644 --- a/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo +++ b/Buildings/Templates/ZoneEquipment/VAVBoxReheat.mo @@ -2,12 +2,13 @@ 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 + redeclare replaceable + Buildings.Templates.ZoneEquipment.Components.Controls.G36VAVBoxReheat ctl "Guideline 36 controller for VAV terminal unit with reheat"); - annotation ( - defaultComponentName="VAVBox", - Documentation(info=" +annotation ( + defaultComponentName="VAVBox", + Documentation(info="

Description

This template represents a VAV terminal unit with reheat. @@ -47,5 +48,12 @@ ASHRAE, 2021. Guideline 36-2021, High-Performance Sequences of Operation for HVAC Systems. Atlanta, GA. +", revisions=" +

")); end VAVBoxReheat; diff --git a/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo index de87888e4a9..084bd47a498 100644 --- a/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo +++ b/Buildings/Templates/ZoneEquipment/Validation/UserProject/Data/AllSystems.mo @@ -23,14 +23,7 @@ class AllSystems "Top-level (whole building) system parameters" "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, + final cfg=VAVBox_1.cfg, id="VAVBox_1", id_souAir="VAV_1", damVAV(dp_nominal=50), @@ -52,13 +45,12 @@ class AllSystems "Top-level (whole building) system parameters" VOutAre_flow=3e-3, VAirSet_flow_min=0.01)) "Parameters for system VAVBox_1" - annotation ( - Dialog(group="Zone equipment")); + annotation (Dialog(group="Zone equipment")); annotation ( defaultComponentPrefixes = "inner parameter", defaultComponentName = "datAll", - Documentation(info=" + Documentation(info="

This record provides the set of sizing and operating parameters for the whole HVAC system. diff --git a/Buildings/Templates/ZoneEquipment/package.order b/Buildings/Templates/ZoneEquipment/package.order index 90615915645..9d1b6505793 100644 --- a/Buildings/Templates/ZoneEquipment/package.order +++ b/Buildings/Templates/ZoneEquipment/package.order @@ -1,6 +1,7 @@ VAVBoxCoolingOnly VAVBoxReheat Components +Configuration Data Types Validation diff --git a/Buildings/package.mo b/Buildings/package.mo index f1f2ce78f79..f4802cae09d 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -204,12 +204,12 @@ Each class (i.e., model, block and function) must be used in an example or valid package ReleaseNotes "Release notes" extends Modelica.Icons.ReleaseNotes; -class Version_10_1_0 "Version 10.1.0" +class Version_11_0_0 "Version 11.0.0" extends Modelica.Icons.ReleaseNotes; annotation (Documentation(info="

-Version 10.1.0 is backward compatible with version 10.0.0. +Version 11.0.0 is ...

@@ -269,7 +269,25 @@ have been improved in a non-backward compatible way:

- + + + + + - - - - - -
xxx +
Buildings.Templates +
Buildings.Templates.AirHandlersFans.Data.PartialAirHandler
+ Buildings.Templates.AirHandlersFans.Data.VAVMultiZone
+ Buildings.Templates.AirHandlersFans.Interfaces.PartialAirHandler
+ Buildings.Templates.AirHandlersFans.VAVMultiZone
+ Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal
+ Buildings.Templates.ZoneEquipment.Data.VAVBox
+ Buildings.Templates.ZoneEquipment.Interfaces.PartialAirTerminal
+ Buildings.Templates.ZoneEquipment.Interfaces.VAVBox
+ Buildings.Templates.ZoneEquipment.VAVBoxCoolingOnly
+ Buildings.Templates.ZoneEquipment.VAVBoxReheat +
Refactored with a record class for configuration parameters.
+ This is for #3500. +
xxx
xxx @@ -318,7 +336,7 @@ xxx ")); -end Version_10_1_0; +end Version_11_0_0; class Version_10_0_0 "Version 10.0.0" @@ -12575,7 +12593,7 @@ on the Buildings library.

  • -Version 10.1.0 (xxx, 2023) +Version 11.0.0 (xxx, 2023)
  • Version 10.0.0 (September 5, 2023) @@ -13155,11 +13173,14 @@ end UsersGuide; annotation ( preferredView="info", -version="10.1.0", +version="11.0.0", versionDate="2023-09-05", dateModified="2023-09-05", uses(Modelica(version="4.0.0")), conversion( + from( + version={"10.0.0"}, + script="modelica://Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos"), from( version={"9.0.0", "9.1.0", "9.1.1"}, script="modelica://Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_9_to_10.0.0.mos"), From d17404dd9d55f376c7930f06b671238d2309d92f Mon Sep 17 00:00:00 2001 From: Jianjun Hu Date: Fri, 15 Sep 2023 11:51:32 -0700 Subject: [PATCH 2/5] Renamed CDL.Discrete.Examples package (#3519) * renamed packages * updated conversion script --- .../{Examples => Validation}/FirstOrderHold.mo | 8 ++++---- .../Discrete/{Examples => Validation}/Sampler.mo | 4 ++-- .../{Examples => Validation}/TriggeredMax.mo | 4 ++-- .../TriggeredMovingMean.mo | 4 ++-- .../{Examples => Validation}/TriggeredSampler.mo | 4 ++-- .../{Examples => Validation}/UnitDelay.mo | 4 ++-- .../{Examples => Validation}/ZeroOrderHold.mo | 4 ++-- .../Discrete/{Examples => Validation}/package.mo | 15 ++++++++++++--- .../{Examples => Validation}/package.order | 0 Buildings/Controls/OBC/CDL/Discrete/package.order | 2 +- ...BC_CDL_Discrete_Validation_FirstOrderHold.txt} | 0 ...trols_OBC_CDL_Discrete_Validation_Sampler.txt} | 0 ..._OBC_CDL_Discrete_Validation_TriggeredMax.txt} | 0 ...L_Discrete_Validation_TriggeredMovingMean.txt} | 0 ..._CDL_Discrete_Validation_TriggeredSampler.txt} | 0 ...ols_OBC_CDL_Discrete_Validation_UnitDelay.txt} | 0 ...OBC_CDL_Discrete_Validation_ZeroOrderHold.txt} | 0 .../ConvertBuildings_from_10_to_11.0.0.mos | 4 ++++ .../OBC/CDL/Discrete/Examples/FirstOrderHold.mos | 2 -- .../CDL/Discrete/Validation/FirstOrderHold.mos | 2 ++ .../Discrete/{Examples => Validation}/Sampler.mos | 2 +- .../{Examples => Validation}/TriggeredMax.mos | 2 +- .../TriggeredMovingMean.mos | 2 +- .../{Examples => Validation}/TriggeredSampler.mos | 2 +- .../{Examples => Validation}/UnitDelay.mos | 2 +- .../{Examples => Validation}/ZeroOrderHold.mos | 2 +- ...BC.CDL.Discrete.Validation.FirstOrderHold.mos} | 0 ...trols.OBC.CDL.Discrete.Validation.Sampler.mos} | 0 ....OBC.CDL.Discrete.Validation.TriggeredMax.mos} | 0 ...L.Discrete.Validation.TriggeredMovingMean.mos} | 0 ....CDL.Discrete.Validation.TriggeredSampler.mos} | 0 ...ols.OBC.CDL.Discrete.Validation.UnitDelay.mos} | 0 ...OBC.CDL.Discrete.Validation.ZeroOrderHold.mos} | 0 Buildings/package.mo | 10 ++++++++++ 34 files changed, 51 insertions(+), 28 deletions(-) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/FirstOrderHold.mo (87%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/Sampler.mo (93%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredMax.mo (94%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredMovingMean.mo (95%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredSampler.mo (95%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/UnitDelay.mo (93%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/ZeroOrderHold.mo (93%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/package.mo (67%) rename Buildings/Controls/OBC/CDL/Discrete/{Examples => Validation}/package.order (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_FirstOrderHold.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_Sampler.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_Sampler.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMax.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMovingMean.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredSampler.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_UnitDelay.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt} (100%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Controls_OBC_CDL_Discrete_Examples_ZeroOrderHold.txt => Buildings_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt} (100%) delete mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/Sampler.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredMax.mos (66%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredMovingMean.mos (76%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/TriggeredSampler.mos (57%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/UnitDelay.mos (51%) rename Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/{Examples => Validation}/ZeroOrderHold.mos (50%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.FirstOrderHold.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.FirstOrderHold.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.Sampler.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.Sampler.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMax.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMax.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMovingMean.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMovingMean.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredSampler.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredSampler.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.UnitDelay.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.UnitDelay.mos} (100%) rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Controls.OBC.CDL.Discrete.Examples.ZeroOrderHold.mos => Buildings.Controls.OBC.CDL.Discrete.Validation.ZeroOrderHold.mos} (100%) diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo similarity index 87% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo index 73b47e0d3df..1ed04722a69 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model FirstOrderHold "Example model for the FirstOrderHold block" Buildings.Controls.OBC.CDL.Discrete.FirstOrderHold firOrdHol( @@ -17,15 +17,15 @@ model FirstOrderHold equation connect(ramp1.y,cos1.u) - annotation (Line(points={{-39,0},{-12,0},{-12,0}},color={0,0,127})); + annotation (Line(points={{-38,0},{-12,0},{-12,0}},color={0,0,127})); connect(cos1.y,firOrdHol.u) - annotation (Line(points={{11,0},{20,0},{28,0}},color={0,0,127})); + annotation (Line(points={{12,0},{12,0},{28,0}},color={0,0,127})); annotation ( experiment( StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/Sampler.mo similarity index 93% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/Sampler.mo index 853c987c01e..10705e89c90 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/Sampler.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/Sampler.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model Sampler "Example model for the Sampler block" Buildings.Controls.OBC.CDL.Discrete.Sampler sampler1( @@ -25,7 +25,7 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/Sampler.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo similarity index 94% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo index 237eed24174..60165387818 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model TriggeredMax "Example model for the TriggeredMax block" Buildings.Controls.OBC.CDL.Discrete.TriggeredMax triggeredMax @@ -31,7 +31,7 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo similarity index 95% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo index 02c6b52f522..a42de922906 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model TriggeredMovingMean "Validation model for the TriggeredMovingMean block" Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin( @@ -50,7 +50,7 @@ equation StopTime=15.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo similarity index 95% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo index 26f4db7c507..c748c85bc7a 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model TriggeredSampler "Example model for the TriggeredSampler block" Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( @@ -39,7 +39,7 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo similarity index 93% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo index 9e8fb3b0492..090b547d791 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model UnitDelay "Example model for the UnitDelay block" Buildings.Controls.OBC.CDL.Discrete.UnitDelay unitDelay1( @@ -25,7 +25,7 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo similarity index 93% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo index 784553d085e..82f48f31c35 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo @@ -1,4 +1,4 @@ -within Buildings.Controls.OBC.CDL.Discrete.Examples; +within Buildings.Controls.OBC.CDL.Discrete.Validation; model ZeroOrderHold "Example model for the ZeroOrderHold block" Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( @@ -25,7 +25,7 @@ equation StopTime=1.0, Tolerance=1e-06), __Dymola_Commands( - file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mos" "Simulate and plot"), + file="modelica://Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos" "Simulate and plot"), Documentation( info="

    diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/package.mo b/Buildings/Controls/OBC/CDL/Discrete/Validation/package.mo similarity index 67% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/package.mo rename to Buildings/Controls/OBC/CDL/Discrete/Validation/package.mo index 9471ed53f51..2216ab660e8 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/Examples/package.mo +++ b/Buildings/Controls/OBC/CDL/Discrete/Validation/package.mo @@ -1,14 +1,23 @@ within Buildings.Controls.OBC.CDL.Discrete; -package Examples "Collection of models that illustrate model use and test models" +package Validation "Collection of models that validate the discrete blocks of the CDL" annotation ( preferredView="info", Documentation( info="

    -This package contains examples for the use of models that can be found in +This package contains models that validate the blocks in Buildings.Controls.OBC.CDL.Discrete.

    +", +revisions=" +
      +
    • +September 13, 2023, by Jianjun Hu:
      +Changed the package name from Examples to Validation. +This is for issue 3517. +
    • +
    "), Icon( graphics={ @@ -29,4 +38,4 @@ Buildings.Controls.OBC.CDL.Discrete. pattern=LinePattern.None, fillPattern=FillPattern.Solid, points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); -end Examples; +end Validation; diff --git a/Buildings/Controls/OBC/CDL/Discrete/Examples/package.order b/Buildings/Controls/OBC/CDL/Discrete/Validation/package.order similarity index 100% rename from Buildings/Controls/OBC/CDL/Discrete/Examples/package.order rename to Buildings/Controls/OBC/CDL/Discrete/Validation/package.order diff --git a/Buildings/Controls/OBC/CDL/Discrete/package.order b/Buildings/Controls/OBC/CDL/Discrete/package.order index ccdda1a5936..9303418f385 100644 --- a/Buildings/Controls/OBC/CDL/Discrete/package.order +++ b/Buildings/Controls/OBC/CDL/Discrete/package.order @@ -5,4 +5,4 @@ TriggeredMovingMean TriggeredSampler UnitDelay ZeroOrderHold -Examples +Validation diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_FirstOrderHold.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_FirstOrderHold.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_Sampler.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_Sampler.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_Sampler.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_Sampler.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMax.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMax.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMovingMean.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredMovingMean.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredSampler.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_TriggeredSampler.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_UnitDelay.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_UnitDelay.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_ZeroOrderHold.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt similarity index 100% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Examples_ZeroOrderHold.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt diff --git a/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos index 057345a0373..ea938858c1a 100644 --- a/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos +++ b/Buildings/Resources/Scripts/Conversion/ConvertBuildings_from_10_to_11.0.0.mos @@ -4,3 +4,7 @@ clear convertClear(); + +// Conversion for https://github.com/lbl-srg/modelica-buildings/issues/3517 +convertClass("Buildings.Controls.OBC.CDL.Discrete.Examples", + "Buildings.Controls.OBC.CDL.Discrete.Validation"); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mos deleted file mode 100644 index 84d542535c7..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/FirstOrderHold.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.FirstOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="FirstOrderHold1"); -createPlot(id=1, position={15, 10, 590, 420}, y={"firOrdHol.u", "firOrdHol.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos new file mode 100644 index 00000000000..d9f8c9464d6 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.FirstOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="FirstOrderHold1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"firOrdHol.u", "firOrdHol.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/Sampler.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/Sampler.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos index 198941c6103..4d8998df570 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/Sampler.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.Sampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Sampler1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.Sampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Sampler1"); createPlot(id=1, position={15, 10, 590, 420}, y={"sampler1.u", "sampler1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos similarity index 66% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos index 2c137e3e81e..1296928f99d 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMax.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos @@ -1,3 +1,3 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMax1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMax1"); createPlot(id=1, position={15, 10, 750, 230}, y={"triggeredMax.u", "triggeredMax.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); createPlot(id=2, position={15, 270, 750, 180}, y={"triggeredMax.trigger"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos similarity index 76% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos index 1923881362e..11500a2eff6 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredMovingMean.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos @@ -1,4 +1,4 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMovingMean", startTime = -0.5, stopTime=15.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMovingMean1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMovingMean", startTime = -0.5, stopTime=15.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMovingMean1"); createPlot(id=1, position={15, 10, 590, 420}, subPlot=1, y={"triMovMea.u", "triMovMea.y", "triMovMea1.y"}, range={-1, 15.0, -2.0, 2.0}, grid=true, colors={{0,0,255}, {255,0,0}, {0,255,0}}); createPlot(id=1, position={15, 10, 590, 420}, subPlot=2, y={"booPul.y"}, range={-1, 15.0, -1, 1}, grid=true, colors={{0,0,255}}); createPlot(id=1, position={15, 10, 590, 420}, subPlot=3, y={"triMovMea.u", "triMovMea2.y"}, range={-1, 15.0, -2.0, 2.0}, grid=true, colors={{0,0,255}, {255,0,0}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos similarity index 57% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos index 8a4fc5dca3e..8be9709ee21 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/TriggeredSampler.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredSampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredSampler1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredSampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredSampler1"); createPlot(id=1, position={55, 50, 615, 494}, y={"booPul.y", "sin1.y", "triSam.y", "triSam1.y"}, range={0.0, 1.0, -1.2, 1.2000000000000004}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos similarity index 51% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos index 91d6c7cb4fe..44dcffe740c 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/UnitDelay.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.UnitDelay", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="unitDelay1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.UnitDelay", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="unitDelay1"); createPlot(id=1, position={15, 10, 590, 420}, y={"unitDelay1.u", "unitDelay1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mos b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos similarity index 50% rename from Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mos rename to Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos index 07e24e2acb7..f7b1e98864d 100644 --- a/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Examples/ZeroOrderHold.mos +++ b/Buildings/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos @@ -1,2 +1,2 @@ -simulateModel("Buildings.Controls.OBC.CDL.Discrete.Examples.ZeroOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="ZeroOrderHold1"); +simulateModel("Buildings.Controls.OBC.CDL.Discrete.Validation.ZeroOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="ZeroOrderHold1"); createPlot(id=1, position={15, 10, 590, 420}, y={"zerOrdHol.u", "zerOrdHol.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.FirstOrderHold.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.FirstOrderHold.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.FirstOrderHold.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.FirstOrderHold.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.Sampler.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.Sampler.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.Sampler.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.Sampler.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMax.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMax.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMax.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMax.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMovingMean.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMovingMean.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredMovingMean.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredMovingMean.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredSampler.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredSampler.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.TriggeredSampler.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.TriggeredSampler.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.UnitDelay.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.UnitDelay.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.UnitDelay.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.UnitDelay.mos diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.ZeroOrderHold.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.ZeroOrderHold.mos similarity index 100% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Examples.ZeroOrderHold.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Controls.OBC.CDL.Discrete.Validation.ZeroOrderHold.mos diff --git a/Buildings/package.mo b/Buildings/package.mo index f4802cae09d..3bacdaf1524 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -245,6 +245,16 @@ have been improved in a backward compatible way:

    + + + + + + From 46928193805bdefed8055862ec873cdb0ccb52e0 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 15 Sep 2023 11:52:32 -0700 Subject: [PATCH 3/5] Ibpsa sync issue1785 modelica conf tutorial (#3513) * Corrected typo * Merged IBPSASync_issue1785_modelicaConfTutorial --- Buildings/.copiedFiles.txt | 31 ++++ .../Tutorial/SimpleHouse/SimpleHouse1.mo | 77 ++++++++++ .../Tutorial/SimpleHouse/SimpleHouse2.mo | 80 ++++++++++ .../Tutorial/SimpleHouse/SimpleHouse3.mo | 88 +++++++++++ .../Tutorial/SimpleHouse/SimpleHouse4.mo | 133 ++++++++++++++++ .../Tutorial/SimpleHouse/SimpleHouse5.mo | 87 +++++++++++ .../Tutorial/SimpleHouse/SimpleHouse6.mo | 144 ++++++++++++++++++ .../SimpleHouse/SimpleHouseTemplate.mo | 103 +++++++++++++ .../Examples/Tutorial/SimpleHouse/package.mo | 87 +++++++++++ .../Tutorial/SimpleHouse/package.order | 7 + Buildings/Examples/Tutorial/package.order | 1 + Buildings/Fluid/Examples/SimpleHouse.mo | 2 +- .../Tutorial/SimpleHouse/airModel.png | Bin 0 -> 24047 bytes .../SimpleHouse/heatingControllerModel.png | Bin 0 -> 36300 bytes .../Examples/Tutorial/SimpleHouse/result1.png | Bin 0 -> 18872 bytes .../Examples/Tutorial/SimpleHouse/result2.png | Bin 0 -> 21544 bytes .../Examples/Tutorial/SimpleHouse/result3.png | Bin 0 -> 31361 bytes .../Examples/Tutorial/SimpleHouse/result4.png | Bin 0 -> 21474 bytes .../Examples/Tutorial/SimpleHouse/result5.png | Bin 0 -> 26269 bytes .../Examples/Tutorial/SimpleHouse/result6.png | Bin 0 -> 23546 bytes .../Examples/Tutorial/SimpleHouse/result7.png | Bin 0 -> 17497 bytes .../Tutorial/SimpleHouse/simpleHouse.png | Bin 0 -> 33291 bytes .../Tutorial/SimpleHouse/simulate.png | Bin 0 -> 958 bytes ...ples_Tutorial_SimpleHouse_SimpleHouse1.txt | 10 ++ ...ples_Tutorial_SimpleHouse_SimpleHouse2.txt | 10 ++ ...ples_Tutorial_SimpleHouse_SimpleHouse3.txt | 10 ++ ...ples_Tutorial_SimpleHouse_SimpleHouse4.txt | 16 ++ ...ples_Tutorial_SimpleHouse_SimpleHouse5.txt | 16 ++ ...ples_Tutorial_SimpleHouse_SimpleHouse6.txt | 19 +++ ...torial_SimpleHouse_SimpleHouseTemplate.txt | 9 ++ .../Tutorial/SimpleHouse/SimpleHouse1.mos | 2 + .../Tutorial/SimpleHouse/SimpleHouse2.mos | 2 + .../Tutorial/SimpleHouse/SimpleHouse3.mos | 2 + .../Tutorial/SimpleHouse/SimpleHouse4.mos | 3 + .../Tutorial/SimpleHouse/SimpleHouse5.mos | 3 + .../Tutorial/SimpleHouse/SimpleHouse6.mos | 5 + .../SimpleHouse/SimpleHouseTemplate.mos | 2 + ...ples.Tutorial.SimpleHouse.SimpleHouse1.mos | 4 + ...ples.Tutorial.SimpleHouse.SimpleHouse2.mos | 4 + ...ples.Tutorial.SimpleHouse.SimpleHouse3.mos | 4 + ...ples.Tutorial.SimpleHouse.SimpleHouse4.mos | 5 + ...ples.Tutorial.SimpleHouse.SimpleHouse5.mos | 5 + ...ples.Tutorial.SimpleHouse.SimpleHouse6.mos | 8 + ...torial.SimpleHouse.SimpleHouseTemplate.mos | 4 + 44 files changed, 982 insertions(+), 1 deletion(-) create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/package.mo create mode 100644 Buildings/Examples/Tutorial/SimpleHouse/package.order create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/airModel.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/heatingControllerModel.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result1.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result2.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result3.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result4.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result5.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result6.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result7.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simpleHouse.png create mode 100644 Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simulate.png create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse1.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse2.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse3.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse4.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse5.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse6.txt create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouseTemplate.txt create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse1.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse2.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6.mos create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.mos diff --git a/Buildings/.copiedFiles.txt b/Buildings/.copiedFiles.txt index 4c03fca2067..585229cecd9 100644 --- a/Buildings/.copiedFiles.txt +++ b/Buildings/.copiedFiles.txt @@ -747,6 +747,19 @@ Buildings/Electrical/Utilities/package.mo Buildings/Electrical/Utilities/package.order Buildings/Electrical/package.mo Buildings/Electrical/package.order +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo +Buildings/Examples/Tutorial/SimpleHouse/package.mo +Buildings/Examples/Tutorial/SimpleHouse/package.order +Buildings/Examples/Tutorial/package.mo +Buildings/Examples/Tutorial/package.order +Buildings/Examples/package.mo +Buildings/Examples/package.order Buildings/Fluid/Actuators/BaseClasses/ActuatorSignal.mo Buildings/Fluid/Actuators/BaseClasses/Examples/EqualPercentageDerivativeCheck.mo Buildings/Fluid/Actuators/BaseClasses/Examples/package.mo @@ -2009,6 +2022,17 @@ Buildings/Resources/Images/Electrical/Transmission/Grids/testGrid2Nodes.svg Buildings/Resources/Images/Electrical/UsersGuide/2014-BauSim-BonviniWetterNouidui.pdf Buildings/Resources/Images/Electrical/UsersGuide/nonlinearEq.png Buildings/Resources/Images/Electrical/Utilities/Examples/VoltCTRL.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/airModel.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/heatingControllerModel.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result1.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result2.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result3.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result4.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result5.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result6.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result7.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simpleHouse.png +Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simulate.png Buildings/Resources/Images/Fluid/Actuators/Valves/Examples/TwoWayButterfly.png Buildings/Resources/Images/Fluid/Actuators/Valves/Examples/TwoWayValveTable_kv.png Buildings/Resources/Images/Fluid/Actuators/threeWayValvePressureDropSeries.png @@ -2330,6 +2354,13 @@ Buildings/Resources/Scripts/Dymola/Electrical/DC/Sources/Examples/VoltageSource. Buildings/Resources/Scripts/Dymola/Electrical/Transmission/Functions/Validation/SelectCable_low.mos Buildings/Resources/Scripts/Dymola/Electrical/Transmission/Functions/Validation/SelectCable_med.mos Buildings/Resources/Scripts/Dymola/Electrical/Utilities/Examples/TestVoltageCTRL.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/BaseClasses/Examples/EqualPercentageDerivativeCheck.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/Dampers/Examples/Damper.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/Dampers/Examples/MixingBox.mos diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo new file mode 100644 index 00000000000..82d2d84bf0f --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo @@ -0,0 +1,77 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse1 "Building wall model" + extends SimpleHouseTemplate; + + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor walCap( + C=A_wall*d_wall*cp_wall*rho_wall, T(fixed=true)) + "Thermal mass of walls" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={150,0}))); +equation + connect(wallRes.port_b, walCap.port) annotation (Line(points={{100,0},{130,0}, + {130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +A very simple building envelope model will be constructed manually using thermal resistors and heat capacitors. +The house consists of a wall represented by a single heat capacitor and a thermal resistor. +The thermal resistor and boundary temperature are already included in the template. +The wall has a surface area of Awall=100 m2, +a thickness of dwall=25 cm, +a thermal conductivity of kwall=0.04 W/(m K), +a density of ρwall=2000 kg/m3, +and a specific heat capacity of cp,wall= 1000 J/(kg K) +

    +

    +These parameters are already declared in the equation section of + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.SimpleHouseTemplate. +You can use this way of declaring parameters in the remainder of this exercise, but this is not required. +

    +

    +The conductive thermal resistance value of a wall may be computed as R=d/(A*k). +The heat capacity value of a wall may be computed as C=A*d*c_p*ρ +

    +

    Required models

    + +

    Connection instructions

    +

    +Connect the heat capacitor to the thermal resistor. +

    +

    Reference result

    +

    +If you correctly added the model of the heat capacitor, +connected it to the resistor and added the parameter values for C, +then you should be able to simulate the model. +To do this, press the Simulation Setup and set the model Stop time to 1e6 seconds. +You can now simulate the model by pressing the Simulate button. +

    +

    +You can plot individual variables values by clicking on their name in the variable browser on the left. +Now plot the wall capacitor temperature value T. +It should look like the figure below (1 Ms is around 12 days). +

    +

    +\"Wall +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos" + "Simulate and plot")); +end SimpleHouse1; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo new file mode 100644 index 00000000000..46a0b6c9452 --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo @@ -0,0 +1,80 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse2 "Building window model" + extends SimpleHouse1; + + parameter Modelica.Units.SI.Area A_win=2 "Window area"; + + Modelica.Blocks.Math.Gain gaiWin(k=A_win) + "Gain for solar irradiance through the window" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow window + "Very simple window model" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); +equation + connect(gaiWin.y,window. Q_flow) annotation (Line(points={{-39,-30},{-20,-30}}, + color={0,0,127})); + connect(window.port, walCap.port) annotation (Line(points={{0,-30},{132,-30},{ + 132,1.77636e-15},{140,1.77636e-15}}, + color={191,0,0})); + connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-62,-30},{-150,-30}, + {-150,-10}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +The window has a surface area of 2 m2. +In this simple model we will therefore assume that +two times the outdoor solar irradiance is injected as heat onto the inside of the wall. +

    +

    Required models

    + +

    Connection instructions

    +

    +To be able to use the value of the outdoor solar irradiance +you will need to access the weather data reader. +To do this, make a connection to the weaBus. +In the dialog box select <New Variable> and here type HDirNor, +which is the direct solar irradiance on a surface of 1 m2, +perpendicular to the sun rays. +Set the gain factor k to 2, +in order to get the solar irradiance through the window of 2 m2. +

    +

    +Make a connection with the PrescribedHeatFlow as well. +This block makes the connection between the heat flow from the gain, represented as a real value, +and a heat port that is compatible with the connectors of the thermal capacitance and resistance. +

    +

    Reference result

    +

    +The result with and without the window model is plotted in the figure below. +

    +

    +\"Wall +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos" + "Simulate and plot")); +end SimpleHouse2; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo new file mode 100644 index 00000000000..8bbc47e850a --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo @@ -0,0 +1,88 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse3 "Air model" + extends SimpleHouse2; + + parameter Modelica.Units.SI.Volume V_zone=8*8*3 "Zone volume"; + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=1 + "Nominal mass flow rate for air loop"; + parameter Modelica.Units.SI.CoefficientOfHeatTransfer h_wall=2 + "Convective heat transfer coefficient at the wall"; + + Modelica.Thermal.HeatTransfer.Components.ThermalResistor convRes(R=1/2/A_wall) + "Thermal resistance for convective heat transfer" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={130,20}))); + Buildings.Fluid.MixingVolumes.MixingVolume zone( + redeclare package Medium = MediumAir, + V=V_zone, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mAir_flow_nominal) + "Very simple zone air model" + annotation (Placement(transformation(extent={{110,130},{90,150}}))); +equation + connect(convRes.port_b, walCap.port) + annotation (Line(points={{130,10},{130,1.77636e-15},{140,1.77636e-15}}, + color={191,0,0})); + connect(zone.heatPort, convRes.port_a) + annotation (Line(points={{110,140},{130,140},{130,30}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +To increase the model detail we now add an air model assuming the zone is 8m x 8m x 3m in size. +The air will exchange heat with the wall. +This may be modelled using a thermal resistance representing +the convective heat resistance which is equal to Rconv=1/(h*A), +where A is the heat exchange surface area and h=2 W/(m2*K) is the convective heat transfer coefficient. +

    +

    Required models

    + +

    Connection instructions

    +

    +The MixingVolume Medium parameter contains information about +the type of fluid and its properties that should be modelled by the MixingVolume. +Set its value to MediumAir, which is declared in the template, +by typing redeclare package Medium = MediumAir. +For the nominal mass flow rate you may assume a value of 1 kg/m3 for now. +You will have to change this value once you add a ventilation system to the model (see + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6). +Finally, set the energyDynamics of the MixingVolume, +which can be found in the Dynamics tab of the model parameter window, to FixedInitial. +

    +

    +Make a connection with the PrescribedHeatFlow as well. +This block makes the connection between the heat flow from the gain, represented as a real value, +and a heat port that is compatible with the connectors of the thermal capacitance and resistance. +

    +

    Reference result

    +

    +The result with and without the air model is plotted in the figure below. +

    +

    +\"Wall +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos" + "Simulate and plot")); +end SimpleHouse3; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo new file mode 100644 index 00000000000..90d8bbbbc9c --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo @@ -0,0 +1,133 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse4 "Heating model" + extends SimpleHouse3; + + parameter Modelica.Units.SI.HeatFlowRate QHea_nominal=3000 + "Nominal capacity of heating system"; + parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=0.1 + "Nominal mass flow rate for water loop"; + parameter Boolean constantSourceHeater=true + "To enable/disable the connection between the constant source and heater"; + + Buildings.Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad( + redeclare package Medium = MediumWater, + T_a_nominal=333.15, + T_b_nominal=313.15, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + allowFlowReversal=false, + Q_flow_nominal=3000) "Radiator" + annotation (Placement(transformation(extent={{110,-110},{130,-90}}))); + Buildings.Fluid.HeatExchangers.HeaterCooler_u heaWat( + redeclare package Medium = MediumWater, + m_flow_nominal=mWat_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + dp_nominal=5000, + Q_flow_nominal=QHea_nominal) "Heater for water circuit" + annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); + Buildings.Fluid.Movers.FlowControlled_m_flow pump( + redeclare package Medium = MediumWater, + use_inputFilter=false, + m_flow_nominal=mWat_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + nominalValuesDefineDefaultPressureCurve=true, + inputType=Buildings.Fluid.Types.InputType.Constant) + "Pump" + annotation (Placement(transformation(extent={{110,-180},{90,-160}}))); + Buildings.Fluid.Sources.Boundary_pT bouWat(redeclare package Medium = MediumWater, nPorts=1) + "Pressure bound for water circuit" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + origin={10,-170}))); + Modelica.Blocks.Sources.Constant const(k=1) + annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); +equation + connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-100},{110,-100}}, + color={0,127,255})); + connect(rad.port_b,pump. port_a) annotation (Line(points={{130,-100},{148,-100}, + {148,-170},{110,-170}},color={0,127,255})); + connect(heaWat.port_a,pump. port_b) annotation (Line(points={{60,-100},{49.75, + -100},{49.75,-170},{90,-170}}, color={0,127,255})); + connect(rad.heatPortCon, zone.heatPort) annotation (Line(points={{118,-92.8}, + {118,140},{110,140}},color={191,0,0})); + connect(rad.heatPortRad, walCap.port) annotation (Line(points={{122,-92.8},{122, + -30},{132,-30},{132,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + if constantSourceHeater then + connect(const.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50,-94}, + {58,-94}}, color={0,0,127})); + end if; + connect(bouWat.ports[1], pump.port_b) + annotation (Line(points={{20,-170},{90,-170}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +The wall temperature (and therefore the room temperature) is quite low. +In this step a heating system is added to resolve this. It consists of a radiator, a pump and a heater. +The radiator has a nominal power of 3~$kW$ for an inlet and outlet temperature of the radiator of 60°C +and 40°C, and a room air and radiative temperature of 20°C. +The pump has a (nominal) mass flow rate of 0.1 kg/s. +Since the heating system uses water as a heat carrier fluid, +the media for the models in the heating circuit should be set to MediumWater. +

    +

    Required models

    + +

    Connection instructions

    +

    +The radiator contains one port for convective heat transfer and one for radiative heat transfer. +Connect both in a reasonable way. Since the heating system uses water as a heat carrier fluid, +the media for the models should be set to MediumWater. +

    +

    +The Boundary_pT model needs to be used to set an absolute pressure somewhere in the system. +Otherwise the absolute pressure in the system is undefined. +Pressure difference modelling may be disregarded in the heating circuit +since the chosen pump sets a fixed mass flow rate regardless of the pressure drop. +

    +

    +Set the heater input to 1, meaning that it will produce 1 times its nominal power. +

    +

    Reference result

    +

    +The result of the air temperature is plotted in the figure below. +The temperature rises very steeply since the wall is relatively well insulated (k=0.04 W/(m*K)) +and the heater is not disabled when it becomes too warm. +

    +

    +\"Air +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos" + "Simulate and plot")); +end SimpleHouse4; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo new file mode 100644 index 00000000000..b30870a98b2 --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo @@ -0,0 +1,87 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse5 "Heating controller model" + extends SimpleHouse4(pump(inputType=Buildings.Fluid.Types.InputType.Stages, + massFlowRates=mWat_flow_nominal*{1}), + constantSourceHeater=false); + + Modelica.Blocks.Math.BooleanToInteger booleanToInt "Boolean to integer" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + Modelica.Blocks.Math.BooleanToReal booleanToReal "Boolean to real" + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 21, uHigh=273.15 + 23) + "Hysteresis controller for radiator" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Modelica.Blocks.Logical.Not not1 + "Negation for enabling heating when temperature is low" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemZonAir + "Zone air temperature sensor" + annotation (Placement(transformation(extent={{90,150},{70,170}}))); +equation + connect(booleanToInt.y, pump.stage) annotation (Line(points={{21,-140},{100,-140}, + {100,-158}}, color={255,127,0})); + connect(booleanToInt.u,not1. y) annotation (Line(points={{-2,-140},{-11.5,-140}, + {-11.5,-100},{-19,-100}}, + color={255,0,255})); + connect(booleanToReal.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100}, + {40.5,-94},{58,-94}}, color={0,0,127})); + connect(not1.u,hysRad. y) annotation (Line(points={{-42,-100},{-59,-100}}, + color={255,0,255})); + connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,160},{-230,160}, + {-230,-100},{-82,-100}}, color={0,0,127})); + connect(senTemZonAir.port, zone.heatPort) annotation (Line(points={{90,160},{ + 110,160},{110,140}}, color={191,0,0})); + connect(not1.y, booleanToReal.u) + annotation (Line(points={{-19,-100},{-2,-100}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +Since the zone becomes too warm, a controller is required that disables the heater when a setpoint is reached. +We will implement a hysteresis controller with a setpoint of 295.15 +/- 1K (21-23°C). +A temperature sensor will measure the zone air temperature. +

    +

    Required models

    + +

    Connection instructions

    +

    +The heater modulation level should be set to one when the heater is on and to zero otherwise. +

    +

    Reference result

    +

    +The figure below shows the air temperature when the controller is added. +

    +

    +\"Air +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos" + "Simulate and plot")); +end SimpleHouse5; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo new file mode 100644 index 00000000000..e2177eb18b7 --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo @@ -0,0 +1,144 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouse6 "Free cooling model" + extends SimpleHouse5(zone(nPorts=2), + mAir_flow_nominal=0.1, + A_win=6); + + parameter Modelica.Units.SI.PressureDifference dpAir_nominal=200 + "Pressure drop at nominal mass flow rate for air loop"; + + Buildings.Fluid.Actuators.Dampers.Exponential + vavDam( + redeclare package Medium = MediumAir, + from_dp=true, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=dpAir_nominal) + "Damper" annotation (Placement(transformation(extent={{-10,10},{10, + -10}}, origin={50,110}))); + Buildings.Fluid.Movers.FlowControlled_dp + fan( + redeclare package Medium = MediumAir, + show_T=true, + dp_nominal=dpAir_nominal, + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + nominalValuesDefineDefaultPressureCurve=true, + m_flow_nominal=mAir_flow_nominal) + "Constant head fan" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + origin={-50,110}))); + Modelica.Blocks.Sources.Constant const_dp(k=dpAir_nominal) "Pressure head" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + Buildings.Fluid.HeatExchangers.ConstantEffectiveness + hexRec( + redeclare package Medium1 = MediumAir, + redeclare package Medium2 = MediumAir, + dp1_nominal=10, + dp2_nominal=10, + m1_flow_nominal=mAir_flow_nominal, + m2_flow_nominal=mAir_flow_nominal, + eps=0.85) "Heat exchanger for heat recuperation" + annotation (Placement(transformation(extent={{-80,104},{-110,136}}))); + Buildings.Fluid.Sources.Boundary_pT + bouAir( + redeclare package Medium = MediumAir, + use_T_in=true, + nPorts=2) "Air boundary with constant temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + origin={-130,130}))); + Modelica.Blocks.Logical.Hysteresis hysAir(uLow=273.15 + 23, uHigh=273.15 + 25) + "Hysteresis controller for damper" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + Modelica.Blocks.Math.BooleanToReal booleanToReal1 + "Boolean to real" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); +equation + connect(const_dp.y,fan. dp_in) annotation (Line(points={{-69,80},{-50,80},{ + -50,98}}, color={0,0,127})); + connect(hexRec.port_a1, zone.ports[1]) annotation (Line(points={{-80,129.6},{97, + 129.6},{97,130},{100,130}}, color={0,127,255})); + connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-142,134},{ + -150,134},{-150,-10}},color={0,0,127})); + connect(hexRec.port_b2, fan.port_a) annotation (Line(points={{-80,110.4},{-69, + 110.4},{-69,110},{-60,110}}, color={0,127,255})); + connect(vavDam.port_b, zone.ports[2]) annotation (Line(points={{60,110},{100,110}, + {100,130}}, color={0,127,255})); + connect(booleanToReal1.y, vavDam.y) + annotation (Line(points={{41,80},{50,80},{50,98}}, color={0,0,127})); + connect(hysAir.y, booleanToReal1.u) + annotation (Line(points={{1,80},{18,80}}, color={255,0,255})); + connect(vavDam.port_a, fan.port_b) + annotation (Line(points={{40,110},{-40,110}}, color={0,127,255})); + connect(hysAir.u, hysRad.u) annotation (Line(points={{-22,80},{-30,80},{-30, + 160},{-230,160},{-230,-100},{-82,-100}}, color={0,0,127})); + connect(bouAir.ports[1], hexRec.port_b1) annotation (Line(points={{-120,129}, + {-119,129},{-119,129.6},{-110,129.6}}, color={0,127,255})); + connect(bouAir.ports[2], hexRec.port_a2) annotation (Line(points={{-120,131}, + {-120,110.4},{-110,110.4}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +First implementation. +
    • +
    +", info=" +

    +For this last exercise, we first increase the window size +from 2 m2 to 6 m2. +

    +

    +We will add a ventilation model that allows to perform free cooling +using outside air when solar irradiation heats up the room too much. +The system consists of a fan, a damper, a controller with an air temperature setpoint +between 23°C and 25°C, +and a heat recovery unit with a constant effectiveness of 85%. +The damper and fan have a nominal pressure drop/raise of 200 Pa. +The heat recovery unit has a nominal pressure drop of 10 Pa at both sides. +The nominal mass flow rate of the ventilation system is 0.1 kg/s. +

    +

    Required models

    + +

    Connection instructions

    +

    +Connect the components such that they exchange mass (and therefore also energy) +with the MixingVolume representing the zone air. +Add a boundary_pT to draw air from the environment. +Enable its temperature input and connect it to the TDryBul variable in the weather data reader. +Also reconsider the nominal mass flow rate parameter value in the MixingVolume +given the flow rate information of the ventilation system. +

    +

    Reference result

    +

    +The figures below show the results. +

    +

    +\"Air +

    +

    +\"Ventilation +

    +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos" + "Simulate and plot")); +end SimpleHouse6; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo new file mode 100644 index 00000000000..bc2d0cd22f3 --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo @@ -0,0 +1,103 @@ +within Buildings.Examples.Tutorial.SimpleHouse; +model SimpleHouseTemplate + "Template file for simple house example" + extends Modelica.Icons.Example; + package MediumAir = Buildings.Media.Air "Medium model for air"; + package MediumWater = Buildings.Media.Water "Medium model for water"; + parameter Modelica.Units.SI.Area A_wall = 100 "Wall area"; + parameter Modelica.Units.SI.Length d_wall = 0.25 "Wall thickness"; + parameter Modelica.Units.SI.ThermalConductivity k_wall = 0.04 "Wall thermal conductivity"; + parameter Modelica.Units.SI.Density rho_wall = 2000 "Wall density"; + parameter Modelica.Units.SI.SpecificHeatCapacity cp_wall = 1000 "Wall specific heat capacity"; + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + ModelicaServices.ExternalReferences.loadResource( + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data reader" + annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); + Buildings.HeatTransfer.Sources.PrescribedTemperature Tout + "Exterior temperature boundary condition" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor wallRes( + R=d_wall/A_wall/k_wall) + "Thermal resistor for wall: 25 cm of rockwool" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); +equation + connect(weaDat.weaBus, weaBus) annotation (Line( + points={{-180,-10},{-150,-10}}, + color={255,204,51}, + thickness=0.5)); + connect(Tout.T, weaBus.TDryBul) + annotation (Line(points={{-22,0},{-150,0},{-150,-10}},color={0,0,127})); + connect(Tout.port,wallRes. port_a) + annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}}), graphics={ + Rectangle( + extent={{-220,40},{20,-40}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-220,-60},{180,-200}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-220,180},{180,60}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{40,40},{180,-40}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{98,20},{32,38}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Wall"), + Text( + extent={{-148,-86},{-214,-68}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Heating"), + Text( + extent={{-118,18},{-214,40}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Weather inputs"), + Text( + extent={{-76,158},{-214,180}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Cooling and ventilation")}), + experiment(Tolerance=1E-6, StopTime=1e+06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos" + "Simulate and plot"), + Documentation(revisions=" +
      +
    • +September 4, 2023, by Jelger Jansen:
      +Replace IDEAS by Buildings models. +
    • +
    • +October 11, 2016, by Filip Jorissen:
      +First implementation. +
    • +
    +", info=" +

    +This model is used as the starting point for the SimpleHouse tutorial. +It was copied from the Modelica crash course organised by KU Leuven +(https://github.com/open-ideas/__CrashCourse__). +

    +")); +end SimpleHouseTemplate; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/package.mo b/Buildings/Examples/Tutorial/SimpleHouse/package.mo new file mode 100644 index 00000000000..47123a07a94 --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/package.mo @@ -0,0 +1,87 @@ +within Buildings.Examples.Tutorial; +package SimpleHouse "Package with example for how to build a simple building envelope with a radiator heating system and ventilation system" +extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

    +This package contains examples with step-by-step instructions for how to build a system model +for a simple house with a heating system, ventilation, and weather boundary conditions. +It serves as a demonstration case of how the Buildings library can be used. +

    +

    +The goal of this exercise is to become familiar with Modelica and the Buildings library. +Since the Buildings library components are typically used by combining several components graphically, +the use of equations falls outside of the scope of this exercise. +

    +

    +For this exercise you will create a model of a simple house, +consisting of a heating system, one building zone, and a ventilation model. +The exercise starts from a template file that should not produce any errors. +This file will be extended in several steps, adding complexity. +In between each step the user should be able to simulate the model, +i.e., no errors should be produced and simulation results may be compared. +<\\p> +

    +The model has been created in the following stages: +

    +
      +
    1. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate +contains a weather data reader which connects the thermal resistance of the building wall +to the dry bulb temperature and serves as a template to implement the entire SimpleHouse model. +
    2. +
    3. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse1 +implements the building wall by adding a thermal capacity. +
    4. +
    5. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse2 +adds a window to the building wall. +It is assumed that the total injected heat through the window equals the window surface area +multiplied by the direct horizontal solar irradiance. +
    6. +
    7. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3 +adds an air model which represents the room in the building. +
    8. +
    9. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4 +adds heating circuit consisting of a boiler, a radiator, +and an on/off circulation pump with a constant mass flow rate. +No controller is implemented yet, i.e. the pump and heater are always on. +
    10. +
    11. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5 +adds a hysteresis controller for the heating circuit that uses the room temperature as an input. +
    12. +
    13. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6 +adds a ventilation system consisting of a fan, a damper, a heat recovery unit, +and a hysteresis controller, that allows to perform free cooling using outside air. +
    14. +
    +

    +For each stage, firstly the model part is qualitatively explained. +Next, the names of the required Modelica models (from the Modelica Standard Library and/or Buildings library) are listed. +Finally, we provide high-level instructions of how to set up the model. +If these instructions are not clear immediately, have a look at the model documentation and at the type of connectors the model has, +try out some things, make an educated guess, etc. +Finally, we provide reference results that allow you to check if your implementation is correct. +Depending on the parameter values that you choose, results may differ. +<\\p> +

    +The graphical representation of the final model is given below. +<\\p> +

    +\"Graphical +

    +")); +end SimpleHouse; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/package.order b/Buildings/Examples/Tutorial/SimpleHouse/package.order new file mode 100644 index 00000000000..799bd75e29b --- /dev/null +++ b/Buildings/Examples/Tutorial/SimpleHouse/package.order @@ -0,0 +1,7 @@ +SimpleHouse1 +SimpleHouse2 +SimpleHouse3 +SimpleHouse4 +SimpleHouse5 +SimpleHouse6 +SimpleHouseTemplate diff --git a/Buildings/Examples/Tutorial/package.order b/Buildings/Examples/Tutorial/package.order index 02641d47301..efd86bd7c7a 100644 --- a/Buildings/Examples/Tutorial/package.order +++ b/Buildings/Examples/Tutorial/package.order @@ -1,3 +1,4 @@ Boiler CDL +SimpleHouse SpaceCooling diff --git a/Buildings/Fluid/Examples/SimpleHouse.mo b/Buildings/Fluid/Examples/SimpleHouse.mo index c2b8c8a668d..8c187d6fc92 100644 --- a/Buildings/Fluid/Examples/SimpleHouse.mo +++ b/Buildings/Fluid/Examples/SimpleHouse.mo @@ -340,7 +340,7 @@ First implementation.

    This model contains a simple model of a house with a heating system, ventilation and weather boundary conditions. -It servers as a demonstration case of how the Buildings library can be used. +It serves as a demonstration case of how the Buildings library can be used.

    "), __Dymola_Commands(file= diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/airModel.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/airModel.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb74b9abe618c7ce8450a18b5784121b198ae56 GIT binary patch literal 24047 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%0D>! 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 QfF3-C`liS8^)80~9~!gvNB{r; literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result1.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result1.png new file mode 100644 index 0000000000000000000000000000000000000000..58146cf03312dd0ff5b4ed27f398a14531d88b61 GIT binary patch literal 18872 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 a@g1t@)W@{QQ9EAvuB4!LJ>%-V=l=`XOYN!v literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result2.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result2.png new file mode 100644 index 0000000000000000000000000000000000000000..c20f86192297a3e78eb0aba82206e11f00808781 GIT binary patch literal 21544 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result4.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result4.png new file mode 100644 index 0000000000000000000000000000000000000000..1db7d60619df4748b65793ba70ff4ccabcb98182 GIT binary patch literal 21474 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 OjZc{Uk$db?#D4%4<6E}? literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result6.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result6.png new file mode 100644 index 0000000000000000000000000000000000000000..5478794b62912f6bf4f6bb585d5ae9d0635a97cb GIT binary patch literal 23546 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 F{{W=?=nnt@ literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result7.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/result7.png new file mode 100644 index 0000000000000000000000000000000000000000..48eb6a2cbcd69758944496720752aff0028cc6f6 GIT binary patch literal 17497 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simpleHouse.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simpleHouse.png new file mode 100644 index 0000000000000000000000000000000000000000..42f5c8821e80395234d389cc923dba6695febbf1 GIT binary patch literal 33291 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simulate.png b/Buildings/Resources/Images/Examples/Tutorial/SimpleHouse/simulate.png new file mode 100644 index 0000000000000000000000000000000000000000..bca44d4226fdb1836ba47149bb8edae93f7d9cb1 GIT binary patch literal 958 zcmV;v13~Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D15-&vK~zXfy_H)? z6j2z*|Fi4e^?pq)wOlQsutXvYR5Yw!!jPh#DubeoG<_%$>cNLDAeEwB9-@eX=q40) zBP@{86tpswvJ0tLrf#Wwo1LA`IeT_j*Hw27{4F0d-#6dPf6h7oGb?B`8W{_Of*%)z zd5e7+=;UXvzd-!de8r8%le}{}^WN0Q>oy`hG=@#DEZZM3HlacC z;tcG_JH{(^{_6`;a&8@BB9{_l3M{vZPH6ukEh!fT*(EHuGEJsJ+EOXdMyaS(gfdJPS)YRLSnV3s9T zqc2O}n7+GNHj_I@ZZ@-=A_xius6wVpr4>n%ke9w2Iq5rDZW9y9LYJP;L|{NDyWoiJ zVO&KZKW74z$#o^XaJaA@(cy`9H+~!Fg3348W@j4I-UiVUR_8Ix)4EYhdZ_&^=PX1^ z(EUe)o{Qu-IyT5OY+~vq=@1m2#7(2N2UAOnCc~5$pgF7Y9$TN2UK+mMK}e3zU>Z}_ zOmCb(?VUpyCf~dm>u4F2`6e`q~wb|V2)cSPz3bOEXaiyUg zoxLw$lyoe&t`$A1yu(p*w3WHoic>LHICXs&KJ~waB#XRaC%`9)2(|Fcj@zFrO2x%| z^z^-%CPW7o>L2S=h~k!**({;*(q;?{casfG_S|HMQe;p9s*g1D!gSmctG=}tKZZV% z$)9Qnnni`EakjY0QkVgk#om2x!uMZYWP3O`k4VLat-$Gn&v`yGE{m;PmIb}u;yNp` zEFdu|4OROad1ZE77NdKma?fpe3I6a@`odeOLViXOP88ke9dk1;>$j7Ch1A3i Date: Sun, 17 Sep 2023 05:19:21 -0700 Subject: [PATCH 4/5] Ibpsa sync issue1785 modelica conf tutorial (#3522) * Merged IBPSASync_issue1785_modelicaConfTutorial --- Buildings/.copiedFiles.txt | 7 +- .../HydronicHeating/TwoRoomsWithStorage.mo | 82 +++++++++++-------- ...SimpleHouseTemplate.mo => SimpleHouse0.mo} | 44 +++++----- .../Tutorial/SimpleHouse/SimpleHouse1.mo | 32 +++++--- .../Tutorial/SimpleHouse/SimpleHouse2.mo | 22 ++--- .../Tutorial/SimpleHouse/SimpleHouse3.mo | 25 +++--- .../Tutorial/SimpleHouse/SimpleHouse4.mo | 39 +++++---- .../Tutorial/SimpleHouse/SimpleHouse5.mo | 28 +++---- .../Tutorial/SimpleHouse/SimpleHouse6.mo | 35 ++++---- .../Examples/Tutorial/SimpleHouse/package.mo | 15 ++-- .../Tutorial/SimpleHouse/package.order | 2 +- Buildings/Fluid/Interfaces/PartialFourPort.mo | 31 ++++++- Buildings/Fluid/Interfaces/PartialTwoPort.mo | 19 ++++- .../Fluid/Interfaces/PartialTwoPortVector.mo | 21 ++++- .../Storage/BaseClasses/PartialStratified.mo | 51 ++---------- .../Fluid/Storage/Examples/Stratified.mo | 48 ++++++----- .../Examples/StratifiedEnhancedInternalHex.mo | 32 ++++---- .../StratifiedUnloadAtMinimumTemperature.mo | 41 ++++++---- Buildings/Fluid/Storage/Stratified.mo | 65 ++------------- .../Validation/HeatExchangerDynamics.mo | 27 +++--- ...es_HydronicHeating_TwoRoomsWithStorage.txt | 32 ++++---- ...les_Tutorial_SimpleHouse_SimpleHouse0.txt} | 4 +- ...ples_Tutorial_SimpleHouse_SimpleHouse3.txt | 4 +- ...ples_Tutorial_SimpleHouse_SimpleHouse4.txt | 4 +- ...ples_Tutorial_SimpleHouse_SimpleHouse5.txt | 4 +- ...ples_Tutorial_SimpleHouse_SimpleHouse6.txt | 4 +- ...impleRoomTwoElementsNonConstantTGround.txt | 14 ++++ .../Tutorial/SimpleHouse/SimpleHouse0.mos | 2 + .../Tutorial/SimpleHouse/SimpleHouse3.mos | 2 +- .../Tutorial/SimpleHouse/SimpleHouse4.mos | 2 +- .../Tutorial/SimpleHouse/SimpleHouse5.mos | 2 +- .../Tutorial/SimpleHouse/SimpleHouse6.mos | 2 +- .../SimpleHouse/SimpleHouseTemplate.mos | 2 - ...impleRoomTwoElementsNonConstantTGround.mos | 12 +++ ...les.Tutorial.SimpleHouse.SimpleHouse0.mos} | 2 +- ...ples.Tutorial.SimpleHouse.SimpleHouse3.mos | 2 +- ...ples.Tutorial.SimpleHouse.SimpleHouse4.mos | 2 +- ...ples.Tutorial.SimpleHouse.SimpleHouse5.mos | 2 +- ...ples.Tutorial.SimpleHouse.SimpleHouse6.mos | 2 +- ...impleRoomTwoElementsNonConstantTGround.mos | 4 + .../BaseClasses/PartialVDI6007.mo | 29 ++++++- .../BaseClasses/SourceSelector.mo | 51 ++++++++++++ .../BaseClasses/package.order | 1 + .../EquivalentAirTemperature/VDI6007.mo | 8 +- .../VDI6007WithWindow.mo | 8 +- ...SimpleRoomTwoElementsNonConstantTGround.mo | 61 ++++++++++++++ .../ReducedOrder/Examples/package.order | 1 + Buildings/package.mo | 32 +++++--- 48 files changed, 577 insertions(+), 384 deletions(-) rename Buildings/Examples/Tutorial/SimpleHouse/{SimpleHouseTemplate.mo => SimpleHouse0.mo} (69%) rename Buildings/Resources/ReferenceResults/Dymola/{Buildings_Examples_Tutorial_SimpleHouse_SimpleHouseTemplate.txt => Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse0.txt} (96%) create mode 100644 Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_ReducedOrder_Examples_SimpleRoomTwoElementsNonConstantTGround.txt create mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos delete mode 100644 Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos create mode 100644 Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos rename Buildings/Resources/Scripts/OpenModelica/compareVars/{Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.mos => Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0.mos} (64%) create mode 100644 Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElementsNonConstantTGround.mos create mode 100644 Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/SourceSelector.mo create mode 100644 Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mo diff --git a/Buildings/.copiedFiles.txt b/Buildings/.copiedFiles.txt index 585229cecd9..c0f63cc00cd 100644 --- a/Buildings/.copiedFiles.txt +++ b/Buildings/.copiedFiles.txt @@ -747,13 +747,13 @@ Buildings/Electrical/Utilities/package.mo Buildings/Electrical/Utilities/package.order Buildings/Electrical/package.mo Buildings/Electrical/package.order +Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo -Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo Buildings/Examples/Tutorial/SimpleHouse/package.mo Buildings/Examples/Tutorial/SimpleHouse/package.order Buildings/Examples/Tutorial/package.mo @@ -2354,13 +2354,13 @@ Buildings/Resources/Scripts/Dymola/Electrical/DC/Sources/Examples/VoltageSource. Buildings/Resources/Scripts/Dymola/Electrical/Transmission/Functions/Validation/SelectCable_low.mos Buildings/Resources/Scripts/Dymola/Electrical/Transmission/Functions/Validation/SelectCable_med.mos Buildings/Resources/Scripts/Dymola/Electrical/Utilities/Examples/TestVoltageCTRL.mos +Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos -Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/BaseClasses/Examples/EqualPercentageDerivativeCheck.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/Dampers/Examples/Damper.mos Buildings/Resources/Scripts/Dymola/Fluid/Actuators/Dampers/Examples/MixingBox.mos @@ -2736,6 +2736,7 @@ Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoom Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomOneElement.mos Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomThreeElements.mos Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElements.mos +Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Validation/RoomSteadyState.mos Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Validation/RoomWithLatentGain.mos Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Validation/RoomWithoutLatentGain.mos @@ -2897,6 +2898,7 @@ Buildings/ThermalZones/ISO13790/Zone5R1C/package.order Buildings/ThermalZones/ISO13790/package.mo Buildings/ThermalZones/ISO13790/package.order Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/PartialVDI6007.mo +Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/SourceSelector.mo Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.mo Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.order Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007.mo @@ -2908,6 +2910,7 @@ Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomFourElementsTraceSubstanc Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomOneElement.mo Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomThreeElements.mo Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElements.mo +Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mo Buildings/ThermalZones/ReducedOrder/Examples/package.mo Buildings/ThermalZones/ReducedOrder/Examples/package.order Buildings/ThermalZones/ReducedOrder/RC/BaseClasses/ExteriorWall.mo diff --git a/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo b/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo index df6138b2b8f..7821ad48612 100644 --- a/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo +++ b/Buildings/Examples/HydronicHeating/TwoRoomsWithStorage.mo @@ -45,7 +45,7 @@ model TwoRoomsWithStorage use_inputFilter=false, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Pump for boiler circuit" annotation (Placement(transformation(extent={{-10, - -10},{10,10}}, origin={70,-170}))); + -10},{10,10}}, origin={70,-160}))); Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y pumRad( redeclare package Medium = MediumW, @@ -155,10 +155,10 @@ model TwoRoomsWithStorage dp_nominal=3000 + 2000, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=293.15) "Boiler" - annotation (Placement(transformation(extent={{2,-180},{22,-160}}))); + annotation (Placement(transformation(extent={{2,-170},{22,-150}}))); Buildings.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15) "Ambient temperature in boiler room" - annotation (Placement(transformation(extent={{-40,-150},{-20,-130}}))); + annotation (Placement(transformation(extent={{-40,-142},{-20,-122}}))); Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo2 annotation (Placement(transformation(extent={{480,216},{500,236}}))); Controls.OBC.CDL.Reals.PIDWithReset conPum( @@ -242,7 +242,7 @@ model TwoRoomsWithStorage k=0.1, Ti=120) "Controller for pump" annotation (Placement(transformation(extent={{140,-50},{160,-30}}))); - Buildings.Fluid.Storage.Stratified tan( + Buildings.Fluid.Storage.StratifiedEnhanced tan( m_flow_nominal=mRad_flow_nominal, dIns=0.3, redeclare package Medium = MediumW, @@ -251,7 +251,7 @@ model TwoRoomsWithStorage show_T=true, VTan=0.2, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Storage tank" - annotation (Placement(transformation(extent={{208,-190},{248,-150}}))); + annotation (Placement(transformation(extent={{150,-220},{190,-180}}))); Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor tanTemBot "Tank temperature" @@ -408,7 +408,7 @@ model TwoRoomsWithStorage annotation (Placement(transformation(extent={{540,340},{560,360}}))); Buildings.Fluid.Sources.Boundary_pT bou(nPorts=1, redeclare package Medium = MediumW) "Fixed boundary condition, needed to provide a pressure in the system" - annotation (Placement(transformation(extent={{-82,-180},{-62,-160}}))); + annotation (Placement(transformation(extent={{-82,-170},{-62,-150}}))); Controls.OBC.CDL.Reals.MultiplyByParameter gain(k=1/dp_nominal) "Gain used to normalize pressure measurement signal" annotation (Placement(transformation(extent={{160,0},{140,20}}))); @@ -602,9 +602,27 @@ Changed controller to output setpoint for supply air temperature for cooling coi Controls.OBC.CDL.Reals.MovingAverage aveTOut(delta=24*3600) "Time averaged outdoor air temperature" annotation (Placement(transformation(extent={{540,300},{560,320}}))); + Fluid.FixedResistances.Junction splVal3( + dp_nominal={0,0,0}, + m_flow_nominal=mBoi_flow_nominal*{-1,1,1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={170,-240}))); + Fluid.FixedResistances.Junction splVal4( + dp_nominal={0,0,0}, + m_flow_nominal=mBoi_flow_nominal*{1,-1,-1}, + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Flow splitter" annotation (Placement(transformation( + extent={{10,10},{-10,-10}}, + rotation=180, + origin={170,-160}))); equation connect(TAmb.port,boi. heatPort) annotation (Line( - points={{-20,-140},{12,-140},{12,-162.8}}, + points={{-20,-132},{12,-132},{12,-152.8}}, color={191,0,0}, smooth=Smooth.None)); connect(pumRad.port_b, dpSen.port_a) @@ -640,15 +658,15 @@ equation color={0,127,255}, smooth=Smooth.None)); connect(boi.port_b,pumBoi. port_a) annotation (Line( - points={{22,-170},{60,-170}}, + points={{22,-160},{60,-160}}, color={0,127,255}, smooth=Smooth.None)); connect(tan.heaPorVol[1], tanTemTop.port) annotation (Line( - points={{228,-170.48},{272,-170.48},{272,-170},{284,-170}}, + points={{170,-200.48},{170,-194},{272,-194},{272,-170},{284,-170}}, color={191,0,0}, smooth=Smooth.None)); connect(tanTemBot.port, tan.heaPorVol[tan.nSeg]) annotation (Line( - points={{280,-230},{272,-230},{272,-170},{228,-170}}, + points={{280,-230},{272,-230},{272,-194},{170,-194},{170,-200}}, color={191,0,0}, smooth=Smooth.None)); connect(temSup.T, conVal.u_m) annotation (Line( @@ -659,10 +677,6 @@ equation points={{101,-40},{138,-40}}, color={0,0,127}, smooth=Smooth.None)); - connect(tan.port_b, boi.port_a) annotation (Line( - points={{248,-170},{260,-170},{260,-202},{-28,-202},{-28,-170},{2,-170}}, - color={0,127,255}, - smooth=Smooth.None)); connect(occSch1.occupied, switch1.u2) annotation (Line( points={{321,560},{338,560}}, color={255,0,255}, @@ -707,7 +721,7 @@ equation smooth=Smooth.None)); connect(booToReaPum.y, pumBoi.y) annotation (Line( - points={{398,-120},{70,-120},{70,-158}}, + points={{398,-120},{70,-120},{70,-148}}, color={0,0,127}, smooth=Smooth.None)); connect(rad1.heatPortCon, roo1.heaPorAir) annotation (Line( @@ -849,19 +863,19 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(booToReaBoi.y, boi.y) annotation (Line( - points={{398,-90},{-50,-90},{-50,-162},{-6.66134e-16,-162}}, + points={{398,-90},{-50,-90},{-50,-152},{-6.66134e-16,-152}}, color={0,0,127}, smooth=Smooth.None)); connect(tan.heaPorTop, TAmb.port) annotation (Line( - points={{232,-155.2},{232,-140},{-20,-140}}, + points={{174,-185.2},{174,-186},{140,-186},{140,-132},{-20,-132}}, color={191,0,0}, smooth=Smooth.None)); connect(TAmb.port, tan.heaPorSid) annotation (Line( - points={{-20,-140},{239.2,-140},{239.2,-170}}, + points={{-20,-132},{140,-132},{140,-206},{182,-206},{182,-200},{181.2,-200}}, color={191,0,0}, smooth=Smooth.None)); connect(TAmb.port, tan.heaPorBot) annotation (Line( - points={{-20,-140},{190,-140},{190,-184.8},{232,-184.8}}, + points={{-20,-132},{140,-132},{140,-214},{158,-214},{158,-214.8},{174,-214.8}}, color={191,0,0}, smooth=Smooth.None)); connect(sub1.y, lesThr.u2) annotation (Line( @@ -926,7 +940,7 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(bou.ports[1], boi.port_a) annotation (Line( - points={{-62,-170},{2,-170}}, + points={{-62,-160},{2,-160}}, color={0,127,255}, smooth=Smooth.None)); connect(gain.u, dpSen.p_rel) annotation (Line( @@ -937,14 +951,6 @@ equation points={{138,10},{130,10},{130,58}}, color={0,0,127}, smooth=Smooth.None)); - connect(pumBoi.port_b, tan.port_a) annotation (Line( - points={{80,-170},{208,-170}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(pumBoi.port_b, thrWayVal.port_1) annotation (Line( - points={{80,-170},{200,-170},{200,-110},{220,-110},{220,-50}}, - color={0,127,255}, - smooth=Smooth.None)); connect(temRet.port_b, splVal.port_1) annotation (Line( points={{260,30},{260,-30}}, color={0,127,255}, @@ -953,10 +959,6 @@ equation points={{230,-40},{250,-40}}, color={0,127,255}, smooth=Smooth.None)); - connect(splVal.port_2, tan.port_b) annotation (Line( - points={{260,-50},{260,-170},{248,-170}}, - color={0,127,255}, - smooth=Smooth.None)); connect(splVal1.port_3, val2.port_a) annotation (Line( points={{230,130},{360,130}}, color={0,127,255}, @@ -1121,6 +1123,18 @@ equation points={{-40,340},{-40,-70},{380,-70},{380,-50},{398,-50}}, color={255,204,51}, thickness=0.5)); + connect(tan.port_b, splVal3.port_3) + annotation (Line(points={{170,-220},{170,-230}}, color={0,127,255})); + connect(splVal4.port_3, tan.port_a) + annotation (Line(points={{170,-170},{170,-180}}, color={0,127,255})); + connect(splVal4.port_1, pumBoi.port_b) + annotation (Line(points={{160,-160},{80,-160}}, color={0,127,255})); + connect(splVal4.port_2, thrWayVal.port_1) annotation (Line(points={{180,-160}, + {220,-160},{220,-50}}, color={0,127,255})); + connect(splVal.port_2, splVal3.port_2) annotation (Line(points={{260,-50},{260, + -240},{180,-240}}, color={0,127,255})); + connect(splVal3.port_1, boi.port_a) annotation (Line(points={{160,-240},{-20,-240}, + {-20,-160},{2,-160}}, color={0,127,255})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-120, -260},{700,600}})), Documentation(info=" @@ -1195,6 +1209,10 @@ Buildings.Examples.HydronicHeating.TwoRoomsWithStorage.CoolingControl. ", revisions="
    • +September 15, 2023, by Michael Wetter:
      +Changed tank to tank with enhanced stratification, and added junctions at the tank inlet and outlet. +
    • +
    • February 24, 2023, by Michael Wetter:
      Changed test to enable heating system which is now based on the outside air temperature, rather than the room air temperature, as the latter can fall below the threshold diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo similarity index 69% rename from Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo rename to Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo index bc2d0cd22f3..e9aa7e4ffdb 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo @@ -1,14 +1,14 @@ within Buildings.Examples.Tutorial.SimpleHouse; -model SimpleHouseTemplate - "Template file for simple house example" +model SimpleHouse0 + "Start file for simple house example" extends Modelica.Icons.Example; package MediumAir = Buildings.Media.Air "Medium model for air"; package MediumWater = Buildings.Media.Water "Medium model for water"; - parameter Modelica.Units.SI.Area A_wall = 100 "Wall area"; - parameter Modelica.Units.SI.Length d_wall = 0.25 "Wall thickness"; - parameter Modelica.Units.SI.ThermalConductivity k_wall = 0.04 "Wall thermal conductivity"; - parameter Modelica.Units.SI.Density rho_wall = 2000 "Wall density"; - parameter Modelica.Units.SI.SpecificHeatCapacity cp_wall = 1000 "Wall specific heat capacity"; + parameter Modelica.Units.SI.Area AWall = 100 "Wall area"; + parameter Modelica.Units.SI.Length dWall = 0.25 "Wall thickness"; + parameter Modelica.Units.SI.ThermalConductivity kWall = 0.04 "Wall thermal conductivity"; + parameter Modelica.Units.SI.Density rhoWall = 2000 "Wall density"; + parameter Modelica.Units.SI.SpecificHeatCapacity cpWall = 1000 "Wall specific heat capacity"; Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= ModelicaServices.ExternalReferences.loadResource( "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) @@ -16,26 +16,20 @@ model SimpleHouseTemplate annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); - Buildings.HeatTransfer.Sources.PrescribedTemperature Tout + Buildings.HeatTransfer.Sources.PrescribedTemperature TOut "Exterior temperature boundary condition" - annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); - Modelica.Thermal.HeatTransfer.Components.ThermalResistor wallRes( - R=d_wall/A_wall/k_wall) - "Thermal resistor for wall: 25 cm of rockwool" - annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); equation connect(weaDat.weaBus, weaBus) annotation (Line( points={{-180,-10},{-150,-10}}, color={255,204,51}, thickness=0.5)); - connect(Tout.T, weaBus.TDryBul) - annotation (Line(points={{-22,0},{-150,0},{-150,-10}},color={0,0,127})); - connect(Tout.port,wallRes. port_a) - annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); + connect(TOut.T, weaBus.TDryBul) + annotation (Line(points={{-82,0},{-150,0},{-150,-10}},color={0,0,127})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, -220},{200,200}}), graphics={ Rectangle( - extent={{-220,40},{20,-40}}, + extent={{-220,40},{-38,-40}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), @@ -50,18 +44,18 @@ equation fillPattern=FillPattern.Solid, pattern=LinePattern.None), Rectangle( - extent={{40,40},{180,-40}}, + extent={{-20,40},{180,-40}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), Text( - extent={{98,20},{32,38}}, + extent={{22,22},{-23,39}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, textString="Wall"), Text( - extent={{-148,-86},{-214,-68}}, + extent={{-157,-79},{-223,-61}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, @@ -80,7 +74,7 @@ equation textString="Cooling and ventilation")}), experiment(Tolerance=1E-6, StopTime=1e+06), __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos" + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos" "Simulate and plot"), Documentation(revisions="
        @@ -96,8 +90,10 @@ First implementation. ", info="

        This model is used as the starting point for the SimpleHouse tutorial. -It was copied from the Modelica crash course organised by KU Leuven +It contains a weather data reader and a PrescribedTemperature component +that allows the user to connect thermal components to the dry bulb temperature. +It was based on from the Modelica crash course organised by KU Leuven (https://github.com/open-ideas/__CrashCourse__).

        ")); -end SimpleHouseTemplate; +end SimpleHouse0; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo index 82d2d84bf0f..35b07a8c7ab 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo @@ -1,16 +1,21 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse1 "Building wall model" - extends SimpleHouseTemplate; + extends SimpleHouse0; Modelica.Thermal.HeatTransfer.Components.HeatCapacitor walCap( - C=A_wall*d_wall*cp_wall*rho_wall, T(fixed=true)) - "Thermal mass of walls" + C=AWall*dWall*cpWall*rhoWall, T(fixed=true)) + "Thermal mass of wall" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=270, origin={150,0}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor walRes(R=dWall/AWall + /kWall) "Thermal resistor for wall: 25 cm of rockwool" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); equation - connect(wallRes.port_b, walCap.port) annotation (Line(points={{100,0},{130,0}, - {130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(walRes.port_b, walCap.port) annotation (Line(points={{100,0},{112,0}, + {112,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(TOut.port, walRes.port_a) + annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, -220},{200,200}})), experiment(Tolerance=1e-6, StopTime=1e+06), @@ -25,7 +30,9 @@ First implementation.

        A very simple building envelope model will be constructed manually using thermal resistors and heat capacitors. The house consists of a wall represented by a single heat capacitor and a thermal resistor. -The thermal resistor and boundary temperature are already included in the template. +The boundary temperature are already included in + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0. The wall has a surface area of Awall=100 m2, a thickness of dwall=25 cm, a thermal conductivity of kwall=0.04 W/(m K), @@ -34,24 +41,29 @@ and a specific heat capacity of cp,wall= 1000 J/(kg K)

        These parameters are already declared in the equation section of - -Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.SimpleHouseTemplate. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0. You can use this way of declaring parameters in the remainder of this exercise, but this is not required.

        The conductive thermal resistance value of a wall may be computed as R=d/(A*k). -The heat capacity value of a wall may be computed as C=A*d*c_p*ρ +The heat capacity value of a wall may be computed as C=A*d*cp

        Required models

        Connection instructions

        -Connect the heat capacitor to the thermal resistor. +Connect one side of the thermal resistor to the output of PrescribedTemperature +and the other side of the thermal resistor to the heat capacitor.

        Reference result

        diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo index 46a0b6c9452..f1ed7671ce8 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo @@ -2,21 +2,21 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse2 "Building window model" extends SimpleHouse1; - parameter Modelica.Units.SI.Area A_win=2 "Window area"; + parameter Modelica.Units.SI.Area AWin=2 "Window area"; - Modelica.Blocks.Math.Gain gaiWin(k=A_win) + Modelica.Blocks.Math.Gain gaiWin(k=AWin) "Gain for solar irradiance through the window" - annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); - Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow window + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow win "Very simple window model" - annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); equation - connect(gaiWin.y,window. Q_flow) annotation (Line(points={{-39,-30},{-20,-30}}, - color={0,0,127})); - connect(window.port, walCap.port) annotation (Line(points={{0,-30},{132,-30},{ - 132,1.77636e-15},{140,1.77636e-15}}, - color={191,0,0})); - connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-62,-30},{-150,-30}, + connect(gaiWin.y, win.Q_flow) + annotation (Line(points={{21,-20},{40,-20}}, color={0,0,127})); + connect(win.port, walCap.port) annotation (Line(points={{60,-20},{130,-20},{ + 130,1.77636e-15},{140,1.77636e-15}}, + color={191,0,0})); + connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-2,-20},{-150,-20}, {-150,-10}}, color={0,0,127}), Text( string="%second", index=1, diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo index 8bbc47e850a..59f9b7e35e3 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo @@ -2,29 +2,28 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse3 "Air model" extends SimpleHouse2; - parameter Modelica.Units.SI.Volume V_zone=8*8*3 "Zone volume"; + parameter Modelica.Units.SI.Volume VZone=8*8*3 "Zone volume"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=1 "Nominal mass flow rate for air loop"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer h_wall=2 + parameter Modelica.Units.SI.CoefficientOfHeatTransfer hWall=2 "Convective heat transfer coefficient at the wall"; - Modelica.Thermal.HeatTransfer.Components.ThermalResistor convRes(R=1/2/A_wall) - "Thermal resistance for convective heat transfer" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + Modelica.Thermal.HeatTransfer.Components.ThermalResistor conRes(R=1/hWall/ + AWall) "Thermal resistance for convective heat transfer" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, rotation=270, origin={130,20}))); - Buildings.Fluid.MixingVolumes.MixingVolume zone( + Buildings.Fluid.MixingVolumes.MixingVolume zon( redeclare package Medium = MediumAir, - V=V_zone, + V=VZone, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mAir_flow_nominal) - "Very simple zone air model" + m_flow_nominal=mAir_flow_nominal) "Very simple zone air model" annotation (Placement(transformation(extent={{110,130},{90,150}}))); equation - connect(convRes.port_b, walCap.port) - annotation (Line(points={{130,10},{130,1.77636e-15},{140,1.77636e-15}}, - color={191,0,0})); - connect(zone.heatPort, convRes.port_a) + connect(conRes.port_b, walCap.port) annotation (Line(points={{130,10},{130, + 1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(zon.heatPort, conRes.port_a) annotation (Line(points={{110,140},{130,140},{130,30}}, color={191,0,0})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, -220},{200,200}})), diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo index 90d8bbbbc9c..4b8008fe12b 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo @@ -2,11 +2,11 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse4 "Heating model" extends SimpleHouse3; - parameter Modelica.Units.SI.HeatFlowRate QHea_nominal=3000 + parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=3000 "Nominal capacity of heating system"; parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=0.1 "Nominal mass flow rate for water loop"; - parameter Boolean constantSourceHeater=true + parameter Boolean use_constantHeater=true "To enable/disable the connection between the constant source and heater"; Buildings.Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad( @@ -15,7 +15,7 @@ model SimpleHouse4 "Heating model" T_b_nominal=313.15, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, allowFlowReversal=false, - Q_flow_nominal=3000) "Radiator" + Q_flow_nominal=QHea_flow_nominal) "Radiator" annotation (Placement(transformation(extent={{110,-110},{130,-90}}))); Buildings.Fluid.HeatExchangers.HeaterCooler_u heaWat( redeclare package Medium = MediumWater, @@ -23,40 +23,39 @@ model SimpleHouse4 "Heating model" energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, allowFlowReversal=false, dp_nominal=5000, - Q_flow_nominal=QHea_nominal) "Heater for water circuit" + Q_flow_nominal=QHea_flow_nominal) "Heater for water circuit" annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - Buildings.Fluid.Movers.FlowControlled_m_flow pump( + Buildings.Fluid.Movers.FlowControlled_m_flow pum( redeclare package Medium = MediumWater, use_inputFilter=false, m_flow_nominal=mWat_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, allowFlowReversal=false, nominalValuesDefineDefaultPressureCurve=true, - inputType=Buildings.Fluid.Types.InputType.Constant) - "Pump" + inputType=Buildings.Fluid.Types.InputType.Constant) "Pump" annotation (Placement(transformation(extent={{110,-180},{90,-160}}))); Buildings.Fluid.Sources.Boundary_pT bouWat(redeclare package Medium = MediumWater, nPorts=1) "Pressure bound for water circuit" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, origin={10,-170}))); - Modelica.Blocks.Sources.Constant const(k=1) + Modelica.Blocks.Sources.Constant conHea(k=1) annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); equation connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-100},{110,-100}}, color={0,127,255})); - connect(rad.port_b,pump. port_a) annotation (Line(points={{130,-100},{148,-100}, - {148,-170},{110,-170}},color={0,127,255})); - connect(heaWat.port_a,pump. port_b) annotation (Line(points={{60,-100},{49.75, - -100},{49.75,-170},{90,-170}}, color={0,127,255})); - connect(rad.heatPortCon, zone.heatPort) annotation (Line(points={{118,-92.8}, - {118,140},{110,140}},color={191,0,0})); + connect(rad.port_b, pum.port_a) annotation (Line(points={{130,-100},{148,-100}, + {148,-170},{110,-170}}, color={0,127,255})); + connect(heaWat.port_a, pum.port_b) annotation (Line(points={{60,-100},{49.75, + -100},{49.75,-170},{90,-170}}, color={0,127,255})); + connect(rad.heatPortCon, zon.heatPort) annotation (Line(points={{118,-92.8},{ + 118,140},{110,140}}, color={191,0,0})); connect(rad.heatPortRad, walCap.port) annotation (Line(points={{122,-92.8},{122, - -30},{132,-30},{132,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); - if constantSourceHeater then - connect(const.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50,-94}, - {58,-94}}, color={0,0,127})); + -20},{130,-20},{130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + if use_constantHeater then + connect(conHea.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50, + -94},{58,-94}}, color={0,0,127})); end if; - connect(bouWat.ports[1], pump.port_b) + connect(bouWat.ports[1], pum.port_b) annotation (Line(points={{20,-170},{90,-170}}, color={0,127,255})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, -220},{200,200}})), @@ -72,7 +71,7 @@ First implementation.

        The wall temperature (and therefore the room temperature) is quite low. In this step a heating system is added to resolve this. It consists of a radiator, a pump and a heater. -The radiator has a nominal power of 3~$kW$ for an inlet and outlet temperature of the radiator of 60°C +The radiator has a nominal power of 3 kW for an inlet and outlet temperature of the radiator of 60°C and 40°C, and a room air and radiative temperature of 20°C. The pump has a (nominal) mass flow rate of 0.1 kg/s. Since the heating system uses water as a heat carrier fluid, diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo index b30870a98b2..266f8114602 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo @@ -1,12 +1,11 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse5 "Heating controller model" - extends SimpleHouse4(pump(inputType=Buildings.Fluid.Types.InputType.Stages, - massFlowRates=mWat_flow_nominal*{1}), - constantSourceHeater=false); + extends SimpleHouse4(pum(inputType=Buildings.Fluid.Types.InputType.Stages, + massFlowRates=mWat_flow_nominal*{1}), final use_constantHeater=false); - Modelica.Blocks.Math.BooleanToInteger booleanToInt "Boolean to integer" + Modelica.Blocks.Math.BooleanToInteger booInt "Boolean to integer" annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); - Modelica.Blocks.Math.BooleanToReal booleanToReal "Boolean to real" + Modelica.Blocks.Math.BooleanToReal booRea "Boolean to real" annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 21, uHigh=273.15 + 23) "Hysteresis controller for radiator" @@ -18,20 +17,19 @@ model SimpleHouse5 "Heating controller model" "Zone air temperature sensor" annotation (Placement(transformation(extent={{90,150},{70,170}}))); equation - connect(booleanToInt.y, pump.stage) annotation (Line(points={{21,-140},{100,-140}, - {100,-158}}, color={255,127,0})); - connect(booleanToInt.u,not1. y) annotation (Line(points={{-2,-140},{-11.5,-140}, - {-11.5,-100},{-19,-100}}, - color={255,0,255})); - connect(booleanToReal.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100}, - {40.5,-94},{58,-94}}, color={0,0,127})); + connect(booInt.y, pum.stage) annotation (Line(points={{21,-140},{100,-140},{ + 100,-158}}, color={255,127,0})); + connect(booInt.u, not1.y) annotation (Line(points={{-2,-140},{-11.5,-140},{-11.5, + -100},{-19,-100}}, color={255,0,255})); + connect(booRea.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100},{ + 40.5,-94},{58,-94}}, color={0,0,127})); connect(not1.u,hysRad. y) annotation (Line(points={{-42,-100},{-59,-100}}, color={255,0,255})); connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,160},{-230,160}, {-230,-100},{-82,-100}}, color={0,0,127})); - connect(senTemZonAir.port, zone.heatPort) annotation (Line(points={{90,160},{ - 110,160},{110,140}}, color={191,0,0})); - connect(not1.y, booleanToReal.u) + connect(senTemZonAir.port, zon.heatPort) + annotation (Line(points={{90,160},{110,160},{110,140}}, color={191,0,0})); + connect(not1.y, booRea.u) annotation (Line(points={{-19,-100},{-2,-100}}, color={255,0,255})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, -220},{200,200}})), diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo index e2177eb18b7..8b8d38f8e68 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo @@ -1,22 +1,21 @@ within Buildings.Examples.Tutorial.SimpleHouse; model SimpleHouse6 "Free cooling model" - extends SimpleHouse5(zone(nPorts=2), + extends SimpleHouse5( + zon(nPorts=2), mAir_flow_nominal=0.1, - A_win=6); + AWin=6); parameter Modelica.Units.SI.PressureDifference dpAir_nominal=200 "Pressure drop at nominal mass flow rate for air loop"; - Buildings.Fluid.Actuators.Dampers.Exponential - vavDam( + Buildings.Fluid.Actuators.Dampers.Exponential vavDam( redeclare package Medium = MediumAir, from_dp=true, m_flow_nominal=mAir_flow_nominal, dpDamper_nominal=dpAir_nominal) "Damper" annotation (Placement(transformation(extent={{-10,10},{10, -10}}, origin={50,110}))); - Buildings.Fluid.Movers.FlowControlled_dp - fan( + Buildings.Fluid.Movers.FlowControlled_dp fan( redeclare package Medium = MediumAir, show_T=true, dp_nominal=dpAir_nominal, @@ -27,10 +26,9 @@ model SimpleHouse6 "Free cooling model" "Constant head fan" annotation (Placement(transformation( extent={{-10,10},{10,-10}}, origin={-50,110}))); - Modelica.Blocks.Sources.Constant const_dp(k=dpAir_nominal) "Pressure head" + Modelica.Blocks.Sources.Constant con_dp(k=dpAir_nominal) "Pressure head" annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); - Buildings.Fluid.HeatExchangers.ConstantEffectiveness - hexRec( + Buildings.Fluid.HeatExchangers.ConstantEffectiveness hexRec( redeclare package Medium1 = MediumAir, redeclare package Medium2 = MediumAir, dp1_nominal=10, @@ -50,23 +48,22 @@ model SimpleHouse6 "Free cooling model" Modelica.Blocks.Logical.Hysteresis hysAir(uLow=273.15 + 23, uHigh=273.15 + 25) "Hysteresis controller for damper" annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Modelica.Blocks.Math.BooleanToReal booleanToReal1 - "Boolean to real" + Modelica.Blocks.Math.BooleanToReal booToRea1 "Boolean to real" annotation (Placement(transformation(extent={{20,70},{40,90}}))); equation - connect(const_dp.y,fan. dp_in) annotation (Line(points={{-69,80},{-50,80},{ - -50,98}}, color={0,0,127})); - connect(hexRec.port_a1, zone.ports[1]) annotation (Line(points={{-80,129.6},{97, - 129.6},{97,130},{100,130}}, color={0,127,255})); + connect(con_dp.y, fan.dp_in) + annotation (Line(points={{-69,80},{-50,80},{-50,98}}, color={0,0,127})); + connect(hexRec.port_a1, zon.ports[1]) annotation (Line(points={{-80,129.6},{ + 97,129.6},{97,130},{100,130}}, color={0,127,255})); connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-142,134},{ -150,134},{-150,-10}},color={0,0,127})); connect(hexRec.port_b2, fan.port_a) annotation (Line(points={{-80,110.4},{-69, 110.4},{-69,110},{-60,110}}, color={0,127,255})); - connect(vavDam.port_b, zone.ports[2]) annotation (Line(points={{60,110},{100,110}, - {100,130}}, color={0,127,255})); - connect(booleanToReal1.y, vavDam.y) + connect(vavDam.port_b, zon.ports[2]) annotation (Line(points={{60,110},{100, + 110},{100,130}}, color={0,127,255})); + connect(booToRea1.y, vavDam.y) annotation (Line(points={{41,80},{50,80},{50,98}}, color={0,0,127})); - connect(hysAir.y, booleanToReal1.u) + connect(hysAir.y, booToRea1.u) annotation (Line(points={{1,80},{18,80}}, color={255,0,255})); connect(vavDam.port_a, fan.port_b) annotation (Line(points={{40,110},{-40,110}}, color={0,127,255})); diff --git a/Buildings/Examples/Tutorial/SimpleHouse/package.mo b/Buildings/Examples/Tutorial/SimpleHouse/package.mo index 47123a07a94..3d21a8bdf5d 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/package.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/package.mo @@ -20,16 +20,17 @@ The exercise starts from a template file that should not produce any errors. This file will be extended in several steps, adding complexity. In between each step the user should be able to simulate the model, i.e., no errors should be produced and simulation results may be compared. -<\\p> +

        The model has been created in the following stages:

        1. - -Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate -contains a weather data reader which connects the thermal resistance of the building wall -to the dry bulb temperature and serves as a template to implement the entire SimpleHouse model. + +Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0 +contains a weather data reader which connects the data of the dry bulb temperature +to a PrescribedTemperature component +and serves as a starting model to implement the entire SimpleHouse model.
        2. @@ -75,10 +76,10 @@ If these instructions are not clear immediately, have a look at the model docume try out some things, make an educated guess, etc. Finally, we provide reference results that allow you to check if your implementation is correct. Depending on the parameter values that you choose, results may differ. -<\\p> +

          The graphical representation of the final model is given below. -<\\p> +

          \"Graphical diff --git a/Buildings/Examples/Tutorial/SimpleHouse/package.order b/Buildings/Examples/Tutorial/SimpleHouse/package.order index 799bd75e29b..e975e02c464 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/package.order +++ b/Buildings/Examples/Tutorial/SimpleHouse/package.order @@ -1,7 +1,7 @@ +SimpleHouse0 SimpleHouse1 SimpleHouse2 SimpleHouse3 SimpleHouse4 SimpleHouse5 SimpleHouse6 -SimpleHouseTemplate diff --git a/Buildings/Fluid/Interfaces/PartialFourPort.mo b/Buildings/Fluid/Interfaces/PartialFourPort.mo index c350a8f510c..31bc2b5f1e4 100644 --- a/Buildings/Fluid/Interfaces/PartialFourPort.mo +++ b/Buildings/Fluid/Interfaces/PartialFourPort.mo @@ -34,26 +34,44 @@ partial model PartialFourPort "Partial model with four ports" m_flow(min=if allowFlowReversal1 then -Modelica.Constants.inf else 0), h_outflow(start = Medium1.h_default, nominal = Medium1.h_default)) "Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" - annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); + annotation (Placement(transformation(extent={{port_a1_x-10,port_a1_y-10},{port_a1_x+10,port_a1_y+10}}))); Modelica.Fluid.Interfaces.FluidPort_b port_b1( redeclare final package Medium = Medium1, m_flow(max=if allowFlowReversal1 then +Modelica.Constants.inf else 0), h_outflow(start = Medium1.h_default, nominal = Medium1.h_default)) "Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)" - annotation (Placement(transformation(extent={{110,50},{90,70}}))); + annotation (Placement(transformation(extent={{port_b1_x-10,port_b1_y-10},{port_b1_x+10,port_b1_y+10}}))); Modelica.Fluid.Interfaces.FluidPort_a port_a2( redeclare final package Medium = Medium2, m_flow(min=if allowFlowReversal2 then -Modelica.Constants.inf else 0), h_outflow(start = Medium2.h_default, nominal = Medium2.h_default)) "Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)" - annotation (Placement(transformation(extent={{90,-70},{110,-50}}))); + annotation (Placement(transformation(extent={{port_a2_x-10,port_a2_y-10},{port_a2_x+10,port_a2_y+10}}))); Modelica.Fluid.Interfaces.FluidPort_b port_b2( redeclare final package Medium = Medium2, m_flow(max=if allowFlowReversal2 then +Modelica.Constants.inf else 0), h_outflow(start = Medium2.h_default, nominal = Medium2.h_default)) "Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)" - annotation (Placement(transformation(extent={{-90,-70},{-110,-50}}))); + annotation (Placement(transformation(extent={{port_b2_x-10,port_b2_y-10},{port_b2_x+10,port_b2_y+10}}))); + +protected + constant Integer port_a1_x = -100 + "x-coordinate of port_a1 center"; + constant Integer port_a1_y = 60 + "y-coordinate of port_a1 center"; + constant Integer port_b1_x = 100 + "x-coordinate of port_b1 center"; + constant Integer port_b1_y = 60 + "y-coordinate of port_b1 center"; + constant Integer port_a2_x = 100 + "x-coordinate of port_a2 center"; + constant Integer port_a2_y = -60 + "y-coordinate of port_a2 center"; + constant Integer port_b2_x = -100 + "x-coordinate of port_b2 center"; + constant Integer port_b2_y = -60 + "y-coordinate of port_b2 center"; annotation ( preferredView="info", @@ -83,6 +101,11 @@ are not implemented. ", revisions="

          • +September 1, 2023, by Antoine Gautier:
            +Added constants for parameterization of port placement. +See
            #1781. +
          • +
          • April 6, 2020, by Filip Jorissen:
            Added arrows to the icon indicating the intended flow direction when allowFlowReversal=false. diff --git a/Buildings/Fluid/Interfaces/PartialTwoPort.mo b/Buildings/Fluid/Interfaces/PartialTwoPort.mo index 019219a6463..56b195c9daf 100644 --- a/Buildings/Fluid/Interfaces/PartialTwoPort.mo +++ b/Buildings/Fluid/Interfaces/PartialTwoPort.mo @@ -20,13 +20,23 @@ partial model PartialTwoPort "Partial component with two ports" 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 port_b)" - annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); + annotation (Placement(transformation(extent={{port_a_x-10,port_a_y-10},{port_a_x+10,port_a_y+10}}))); 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 connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{110,-10},{90,10}}))); + annotation (Placement(transformation(extent={{port_b_x-10,port_b_y-10},{port_b_x+10,port_b_y+10}}))); + +protected + constant Integer port_a_x = -100 + "x-coordinate of port_a center"; + constant Integer port_a_y = 0 + "y-coordinate of port_a center"; + constant Integer port_b_x = 100 + "x-coordinate of port_b center"; + constant Integer port_b_y = 0 + "y-coordinate of port_b center"; annotation ( Documentation(info=" @@ -48,6 +58,11 @@ users have not used this global definition to assign parameters. ", revisions="
            • +September 1, 2023, by Antoine Gautier:
              +Added constants for parameterization of port placement. +See #1781. +
            • +
            • January 18, 2019, by Jianjun Hu:
              Limited the media choice. See #1050. diff --git a/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo b/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo index 22818b05ee6..a8be8d9ab14 100644 --- a/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo +++ b/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo @@ -11,6 +11,7 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi property_T=293.15, X_a=0.40) "Propylene glycol water, 40% mass fraction"))); + parameter Integer nPorts "Number of ports" annotation(Evaluate=true, Dialog(connectorSizing=true, tab="General",group="Ports")); parameter Boolean allowFlowReversal=true @@ -22,14 +23,14 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi 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}}))); + annotation (Placement(transformation(extent={{port_a_x-10,port_a_y-10},{port_a_x+10,port_a_y+10}}))); Modelica.Fluid.Interfaces.FluidPorts_b ports_b[nPorts]( redeclare each 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}}))); + annotation (Placement(transformation(extent={{port_b_x-10,port_b_y-40},{port_b_x+10,port_b_y+40}}))); // Diagnostics parameter Boolean show_T = false @@ -49,6 +50,17 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi noEvent(actualStream(ports_b.h_outflow)), noEvent(actualStream(ports_b.Xi_outflow))) if show_T "Medium properties in ports_b"; + +protected + constant Integer port_a_x = -100 + "x-coordinate of port_a center"; + constant Integer port_a_y = 0 + "y-coordinate of port_a center"; + constant Integer port_b_x = 100 + "x-coordinate of port_b center"; + constant Integer port_b_y = 0 + "y-coordinate of port_b center"; + annotation ( Documentation(info="

              @@ -73,6 +85,11 @@ users have not used this global definition to assign parameters. ", revisions="

              • +September 1, 2023, by Antoine Gautier:
                +Added constants for parameterization of port placement. +See #1781. +
              • +
              • March 30, 2021, by Michael Wetter:
                Added annotation HideResult=true.
                This is for diff --git a/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo b/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo index f3095e81471..2756c9ce6f2 100644 --- a/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo +++ b/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo @@ -1,7 +1,8 @@ within Buildings.Fluid.Storage.BaseClasses; model PartialStratified "Partial model of a stratified tank for thermal energy storage" - extends Buildings.Fluid.Interfaces.PartialTwoPortInterface; + extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( + port_a_x=0, port_a_y=100, port_b_x=0, port_b_y=-100); import Modelica.Fluid.Types; import Modelica.Fluid.Types.Dynamics; @@ -165,11 +166,11 @@ equation {52,74},{20,74}}, color={191,0,0})); connect(heaFloBot.port_b, heaPorBot) annotation (Line(points={{42,20},{44,20}, {44,-74},{20,-74}}, color={191,0,0})); - connect(heaFloTop.Q_flow, mul.u1[1]) annotation (Line(points={{36,54},{50,54}, + connect(heaFloTop.Q_flow, mul.u1[1]) annotation (Line(points={{36,53.4},{50,53.4}, {50,52.5},{61.2,52.5}}, color={0,0,127})); - connect(heaFloSid.Q_flow, mul.u2) annotation (Line(points={{36,34},{50,34},{ - 50,49},{61.2,49}}, color={0,0,127})); - connect(heaFloBot.Q_flow, mul.u3[1]) annotation (Line(points={{36,14},{36,10}, + connect(heaFloSid.Q_flow, mul.u2) annotation (Line(points={{36,33.4},{50,33.4}, + {50,49},{61.2,49}},color={0,0,127})); + connect(heaFloBot.Q_flow, mul.u3[1]) annotation (Line(points={{36,13.4},{36,10}, {58,10},{58,45.5},{61.2,45.5}}, color={0,0,127})); connect(mul.y, sum1.u) annotation (Line(points={{70.4,49},{76.8,49}}, color={ 0,0,127})); @@ -331,49 +332,13 @@ Icon(graphics={ fillColor={0,0,127}, fillPattern=FillPattern.Solid), Rectangle( - extent={{-76,2},{-90,-2}}, + extent={{2,100},{-2,60}}, lineColor={0,0,255}, pattern=LinePattern.None, fillColor={0,0,127}, fillPattern=FillPattern.Solid), Rectangle( - extent={{0,84},{-80,80}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-76,84},{-80,-2}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{82,0},{78,-86}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{0,84},{-4,60}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{82,-84},{2,-88}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{6,-60},{2,-84}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{92,2},{78,-2}}, + extent={{2,-60},{-2,-100}}, lineColor={0,0,255}, pattern=LinePattern.None, fillColor={0,0,127}, diff --git a/Buildings/Fluid/Storage/Examples/Stratified.mo b/Buildings/Fluid/Storage/Examples/Stratified.mo index 20ee2cd4601..868a1f488ad 100644 --- a/Buildings/Fluid/Storage/Examples/Stratified.mo +++ b/Buildings/Fluid/Storage/Examples/Stratified.mo @@ -27,14 +27,14 @@ model Stratified "Test model for stratified tank" T=273.15 + 20, use_p_in=true, p=300000, - nPorts=2) annotation (Placement(transformation(extent={{90,-2}, - {70,18}}))); + nPorts=2) annotation (Placement(transformation(extent={{90,-18}, + {70,2}}))); Buildings.Fluid.FixedResistances.PressureDrop res_1( from_dp=true, redeclare package Medium = Medium, dp_nominal=5000, m_flow_nominal=0.1) - annotation (Placement(transformation(extent={{36,0},{56,20}}))); + annotation (Placement(transformation(extent={{34,-18},{54,2}}))); Buildings.Fluid.Storage.StratifiedEnhanced tanEnh( redeclare package Medium = Medium, hTan=3, @@ -42,21 +42,21 @@ model Stratified "Test model for stratified tank" nSeg=10, m_flow_nominal=0.1, VTan=3) "Tank" - annotation (Placement(transformation(extent={{-18,-38},{2,-18}}))); + annotation (Placement(transformation(extent={{-18,-70},{2,-50}}))); Buildings.Fluid.FixedResistances.PressureDrop res_2( from_dp=true, redeclare package Medium = Medium, dp_nominal=5000, m_flow_nominal=0.1) - annotation (Placement(transformation(extent={{38,-38},{58,-18}}))); + annotation (Placement(transformation(extent={{40,-90},{60,-70}}))); Buildings.Fluid.Sensors.EnthalpyFlowRate HOut_flow(redeclare package Medium = Medium, m_flow_nominal=0.1) "Enthalpy flow rate" annotation (Placement(transformation( - extent={{6,2},{22,18}}))); + extent={{4,-16},{20,0}}))); Buildings.Fluid.Sensors.EnthalpyFlowRate HOut_flow1(redeclare package Medium = Medium, m_flow_nominal=0.1) "Enthalpy flow rate" annotation (Placement(transformation( - extent={{18,-36},{34,-20}}))); + extent={{20,-88},{36,-72}}))); Modelica.Blocks.Continuous.Integrator dH "Differenz in enthalpy (should be zero at steady-state)" annotation (Placement(transformation(extent={{68,30},{88,50}}))); @@ -87,25 +87,23 @@ equation connect(TWat.y, sou_1.T_in) annotation (Line( points={{-79,12},{-62,12}}, color={0,0,127})); - connect(tanSim.port_b, HOut_flow.port_a) annotation (Line(points={{ - 5.55112e-16,10},{5.55112e-16,10},{6,10}}, - color={0,127,255})); + connect(tanSim.port_b, HOut_flow.port_a) annotation (Line(points={{-10,0},{ + -10,-8},{4,-8}}, color={0,127,255})); connect(HOut_flow.port_b, res_1.port_a) - annotation (Line(points={{22,10},{30,10},{36,10}}, - color={0,127,255})); + annotation (Line(points={{20,-8},{34,-8}}, color={0,127,255})); connect(tanEnh.port_b, HOut_flow1.port_a) - annotation (Line(points={{2,-28},{2,-28},{18,-28}}, + annotation (Line(points={{-8,-70},{-8,-80},{20,-80}}, color={0,127,255})); - connect(HOut_flow1.port_b, res_2.port_a) annotation (Line(points={{34,-28},{ - 38,-28}}, color={0,127,255})); + connect(HOut_flow1.port_b, res_2.port_a) annotation (Line(points={{36,-80},{ + 40,-80}}, color={0,127,255})); connect(add.y, dH.u) annotation (Line(points={{53,40},{66,40}}, color={0,0,127})); - connect(HOut_flow.H_flow, add.u1) annotation (Line(points={{14,18.8},{14,46}, - {30,46}}, color={0,0,127})); - connect(HOut_flow1.H_flow, add.u2) annotation (Line(points={{26,-19.2},{26,34}, + connect(HOut_flow.H_flow, add.u1) annotation (Line(points={{12,0.8},{12,46},{ + 30,46}}, color={0,0,127})); + connect(HOut_flow1.H_flow, add.u2) annotation (Line(points={{28,-71.2},{28,34}, {30,34}}, color={0,0,127})); connect(P.y, sin_1.p_in) annotation (Line( - points={{41,70},{100,70},{100,16},{92,16}}, + points={{41,70},{100,70},{100,0},{92,0}}, color={0,0,127})); connect(sine.y, TBCSid1.T) annotation (Line(points={{-69,72},{-55.5,72},{ -55.5,90},{-41.2,90}}, color={0,0,127})); @@ -116,23 +114,23 @@ equation connect(sine.y, TBCTop2.T) annotation (Line(points={{-69,72},{-56,72},{-56,38}, {-41.2,38}}, color={0,0,127})); connect(TBCSid2.port, tanEnh.heaPorSid) annotation (Line(points={{-28,56},{ - -24,56},{-24,-12},{-2,-12},{-2,-28},{-2.4,-28}}, color={191,0,0})); + -24,56},{-24,-12},{-2,-12},{-2,-60},{-2.4,-60}}, color={191,0,0})); connect(TBCTop2.port, tanEnh.heaPorTop) annotation (Line(points={{-28,38},{ - -26,38},{-26,-14},{-6,-14},{-6,-20.6}}, color={191,0,0})); + -26,38},{-26,-14},{-6,-14},{-6,-52.6}}, color={191,0,0})); connect(sin_1.ports[1], res_1.port_b) annotation (Line( - points={{70,10},{56,10}}, + points={{70,-9},{64,-9},{64,-8},{54,-8}}, color={0,127,255}, smooth=Smooth.None)); connect(sin_1.ports[2], res_2.port_b) annotation (Line( - points={{70,6},{64,6},{64,-28},{58,-28}}, + points={{70,-7},{64,-7},{64,-80},{60,-80}}, color={0,127,255}, smooth=Smooth.None)); connect(sou_1.ports[1], tanSim.port_a) annotation (Line( - points={{-40,10},{-20,10}}, + points={{-40,7},{-30,7},{-30,20},{-10,20}}, color={0,127,255}, smooth=Smooth.None)); connect(sou_1.ports[2], tanEnh.port_a) annotation (Line( - points={{-40,6},{-30,6},{-30,-28},{-18,-28}}, + points={{-40,9},{-30,9},{-30,-40},{-8,-40},{-8,-50}}, color={0,127,255}, smooth=Smooth.None)); connect(TBCSid1.port, tanSim.heaPorSid) annotation (Line( diff --git a/Buildings/Fluid/Storage/Examples/StratifiedEnhancedInternalHex.mo b/Buildings/Fluid/Storage/Examples/StratifiedEnhancedInternalHex.mo index 676dea97a46..c8d60001e49 100644 --- a/Buildings/Fluid/Storage/Examples/StratifiedEnhancedInternalHex.mo +++ b/Buildings/Fluid/Storage/Examples/StratifiedEnhancedInternalHex.mo @@ -18,7 +18,7 @@ model StratifiedEnhancedInternalHex transformation( extent={{-10,10},{10,-10}}, rotation=180, - origin={70,-12}))); + origin={72,-78}))); Buildings.Fluid.Sources.Boundary_pT solColSup( redeclare package Medium = MediumHex, nPorts=3, @@ -116,37 +116,39 @@ model StratifiedEnhancedInternalHex m_flow_nominal=mHex_flow_nominal, tau=0) "Temperature sensor for outlet of steady state heat exchanger with solid configured dynamic" - annotation (Placement(transformation(extent={{-22,-80},{-42,-60}}))); + annotation (Placement(transformation(extent={{-20,-82},{-40,-62}}))); equation connect(solColSup.ports[1], tanSte.portHex_a) annotation (Line( - points={{-20,42.6667},{-4,42.6667},{-4,65.92},{6,65.92}}, + points={{-20,38.6667},{-4,38.6667},{-4,65.92},{6,65.92}}, color={0,127,255}, smooth=Smooth.None)); connect(senTemSte.port_b, toSolCol.ports[1]) - annotation (Line(points={{-40,10},{-40,10},{-50,10},{-50,-17.3333},{-62, - -17.3333}}, color={0,127,255})); + annotation (Line(points={{-40,10},{-40,10},{-50,10},{-50,-21.3333},{-62, + -21.3333}}, color={0,127,255})); connect(senTemSte.port_a, tanSte.portHex_b) annotation (Line(points={{-20,10}, {0,10},{0,59.2},{6,59.2}}, color={0,127,255})); connect(senTemDyn.port_a, tanDyn.portHex_b) annotation (Line(points={{-22,-20}, {0,-20},{0,-24.8},{4,-24.8}}, color={0,127,255})); connect(senTemDyn.port_b, toSolCol.ports[2]) annotation (Line(points={{-42,-20}, {-52,-20},{-62,-20}}, color={0,127,255})); - connect(tanDynSol.portHex_b, senTemDynSol.port_a) annotation (Line(points={{6, - -72.8},{-8,-72.8},{-8,-70},{-22,-70}}, color={0,127,255})); - connect(senTemDynSol.port_b, toSolCol.ports[3]) annotation (Line(points={{-42,-70}, - {-42,-70},{-50,-70},{-50,-22.6667},{-62,-22.6667}}, color={0,127, + connect(tanDynSol.portHex_b, senTemDynSol.port_a) annotation (Line(points={{6,-72.8}, + {-8,-72.8},{-8,-72},{-20,-72}}, color={0,127,255})); + connect(senTemDynSol.port_b, toSolCol.ports[3]) annotation (Line(points={{-40,-72}, + {-50,-72},{-50,-18.6667},{-62,-18.6667}}, color={0,127, 255})); connect(solColSup.ports[2], tanDyn.portHex_a) annotation (Line(points={{-20,40}, {-14,40},{-4,40},{-4,-18.08},{4,-18.08}}, color={0,127,255})); connect(solColSup.ports[3], tanDynSol.portHex_a) annotation (Line(points={{-20, - 37.3333},{-12,37.3333},{-4,37.3333},{-4,-66.08},{6,-66.08}}, color={0, + 41.3333},{-6,41.3333},{-6,-66.08},{6,-66.08}}, color={0, 127,255})); - connect(bouWat.ports[1], tanSte.port_b) annotation (Line(points={{60,-9.33333}, - {52,-9.33333},{52,72},{40,72}}, color={0,127,255})); + connect(bouWat.ports[1], tanSte.port_b) annotation (Line(points={{62,-79.3333}, + {52,-79.3333},{52,40},{22,40},{22,56},{23,56}}, + color={0,127,255})); connect(bouWat.ports[2], tanDyn.port_b) - annotation (Line(points={{60,-12},{52,-12},{38,-12}}, color={0,127,255})); - connect(bouWat.ports[3], tanDynSol.port_b) annotation (Line(points={{60, - -14.6667},{52,-14.6667},{52,-60},{40,-60}}, + annotation (Line(points={{62,-78},{52,-78},{52,-36},{21,-36},{21,-28}}, + color={0,127,255})); + connect(bouWat.ports[3], tanDynSol.port_b) annotation (Line(points={{62, + -76.6667},{24,-76.6667},{24,-76},{23,-76}}, color={0,127,255})); connect(step.y, solColSup.p_in) annotation (Line(points={{-59,48},{-52,48},{-42,48}}, color={0,0,127})); diff --git a/Buildings/Fluid/Storage/Examples/StratifiedUnloadAtMinimumTemperature.mo b/Buildings/Fluid/Storage/Examples/StratifiedUnloadAtMinimumTemperature.mo index e2a2a47442e..4ab85636396 100644 --- a/Buildings/Fluid/Storage/Examples/StratifiedUnloadAtMinimumTemperature.mo +++ b/Buildings/Fluid/Storage/Examples/StratifiedUnloadAtMinimumTemperature.mo @@ -20,7 +20,7 @@ model StratifiedUnloadAtMinimumTemperature energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, nSeg=nSeg, T_start=353.15) "Hot water storage tank" - annotation (Placement(transformation(extent={{-120,-130},{-100,-110}}))); + annotation (Placement(transformation(extent={{-120,-128},{-100,-108}}))); Buildings.Fluid.Sources.Boundary_pT loa(redeclare package Medium = Medium, nPorts=1) "Load (imposed by a constant pressure boundary condition and the flow of masSou)" @@ -103,13 +103,14 @@ model StratifiedUnloadAtMinimumTemperature "Boolean to real conversion for valve at bottom" annotation (Placement(transformation(extent={{80,30},{100,50}}))); equation - connect(masSou.ports[1], tan.port_b) annotation (Line(points={{222,-120},{-100, - -120}}, color={0,127,255})); + connect(masSou.ports[1], tan.port_b) annotation (Line(points={{222,-120},{56, + -120},{56,-128},{-110,-128}}, + color={0,127,255})); connect(TMid.port, tan.heaPorVol[3]) - annotation (Line(points={{-100,80},{-110,80},{-110,-120}}, + annotation (Line(points={{-100,80},{-100,-118},{-110,-118}}, color={191,0,0})); connect(TBot.port, tan.heaPorVol[5]) - annotation (Line(points={{-100,40},{-110,40},{-110,-120}}, + annotation (Line(points={{-100,40},{-100,-117.76},{-110,-117.76}}, color={191,0,0})); connect(valTop.port_b, senTem.port_a) annotation (Line(points={{132,-20},{182, -20},{182,-60},{190,-60}}, @@ -123,12 +124,14 @@ equation connect(senTem.port_b,loa. ports[1]) annotation (Line(points={{210,-60},{222,-60}}, color={0,127,255})); - connect(valTop.port_a, tan.fluPorVol[1]) annotation (Line(points={{112,-20},{-112.6, - -20},{-112.6,-120}}, color={0,127,255})); - connect(valMid.port_a, tan.fluPorVol[3]) annotation (Line(points={{132,-60},{-112.6, - -60},{-112.6,-120}},color={0,127,255})); - connect(valBot.port_a, tan.fluPorVol[5]) annotation (Line(points={{150,-100},{ - -112.6,-100},{-112.6,-120}}, + connect(valTop.port_a, tan.fluPorVol[1]) annotation (Line(points={{112,-20},{ + -116,-20},{-116,-118},{-112.6,-118},{-112.6,-118.4}}, + color={0,127,255})); + connect(valMid.port_a, tan.fluPorVol[3]) annotation (Line(points={{132,-60},{ + -116,-60},{-116,-118},{-112.6,-118}}, + color={0,127,255})); + connect(valBot.port_a, tan.fluPorVol[5]) annotation (Line(points={{150,-100}, + {-116,-100},{-116,-118},{-112.6,-118},{-112.6,-117.6}}, color={0,127,255})); connect(onOffMid.y, and2.u1) annotation (Line(points={{-29,80},{8,80}}, color={255,0,255})); @@ -150,12 +153,14 @@ equation {-29,40}}, color={255,0,255})); connect(not1.y, and2.u2) annotation (Line(points={{1,60},{4,60},{4,72},{8,72}}, color={255,0,255})); - connect(hea.port, tan.heaPorVol[5]) annotation (Line(points={{-130,-124},{-110, - -124},{-110,-120}}, color={191,0,0})); - connect(TTop.port, tan.heaPorVol[1]) annotation (Line(points={{-160,-90},{-110, - -90},{-110,-120}}, color={191,0,0})); + connect(hea.port, tan.heaPorVol[5]) annotation (Line(points={{-130,-124},{ + -110,-124},{-110,-117.76}}, + color={191,0,0})); + connect(TTop.port, tan.heaPorVol[1]) annotation (Line(points={{-160,-90},{ + -120,-90},{-120,-120},{-110,-120},{-110,-118.24}}, + color={191,0,0})); connect(onOffHea.u, TTop.T) annotation (Line(points={{-212,-124},{-230,-124}, - {-230,-90},{-180,-90}},color={0,0,127})); + {-230,-90},{-181,-90}},color={0,0,127})); connect(onOffHea.y, yHea.u) annotation (Line(points={{-189,-124},{-182,-124}}, color={255,0,255})); connect(hea.Q_flow, yHea.y) @@ -165,9 +170,9 @@ equation connect(yBot.y, valBot.y) annotation (Line(points={{101,40},{160,40},{160,-88}}, color={0,0,127})); connect(TBot.T, onOffBot.u) - annotation (Line(points={{-80,40},{-52,40}}, color={0,0,127})); + annotation (Line(points={{-79,40},{-52,40}}, color={0,0,127})); connect(onOffMid.u, TMid.T) - annotation (Line(points={{-52,80},{-80,80}}, color={0,0,127})); + annotation (Line(points={{-52,80},{-79,80}}, color={0,0,127})); annotation (Diagram( coordinateSystem(preserveAspectRatio=false, extent={{-300,-140},{260,140}})), __Dymola_Commands(file= diff --git a/Buildings/Fluid/Storage/Stratified.mo b/Buildings/Fluid/Storage/Stratified.mo index e979d81ddbf..2e944bada8a 100644 --- a/Buildings/Fluid/Storage/Stratified.mo +++ b/Buildings/Fluid/Storage/Stratified.mo @@ -2,23 +2,24 @@ within Buildings.Fluid.Storage; model Stratified "Model of a stratified tank for thermal energy storage" extends Buildings.Fluid.Storage.BaseClasses.PartialStratified(vol(each nPorts=3)); - Modelica.Fluid.Interfaces.FluidPort_a fluPorVol[nSeg]( + Modelica.Fluid.Interfaces.FluidPorts_a fluPorVol[nSeg]( redeclare each final package Medium = Medium) "Fluid port that connects to the control volumes of the tank" - annotation (Placement(transformation(extent={{-30,-10},{-10,10}}), - iconTransformation(extent={{-36,-10},{-16,10}}))); + annotation (Placement(transformation(extent={{-110,-40},{-90,40}}), + iconTransformation(extent={{-60,-40},{-40,40}}))); equation - connect(port_a, vol[1].ports[1]) annotation (Line(points={{-100,0},{-88,0},{ - -88,-20},{16,-20},{16,-16}}, color={0,127,255})); + connect(port_a, vol[1].ports[1]) annotation (Line(points={{0,0},{-80,0},{-80, + -20},{16,-20},{16,-16}}, color={0,127,255})); connect(vol[nSeg].ports[2], port_b) annotation (Line(points={{16,-16},{20,-16}, - {20,-20},{90,-20},{90,0},{100,0}}, color={0,127,255})); + {20,-20},{90,-20},{90,0},{0,0}}, color={0,127,255})); for i in 1:(nSeg-1) loop connect(vol[i].ports[2], vol[i + 1].ports[1]) annotation (Line(points={{16,-16}, {16,-32},{14,-32},{14,-16},{16,-16}}, color={0,127,255})); end for; for i in 1:nSeg loop - connect(fluPorVol[i], vol[i].ports[3]) annotation (Line(points={{-20,0},{-20,-36}, - {16,-36},{16,-16}}, color={0,127,255})); + connect(fluPorVol[i], vol[i].ports[3]) annotation (Line(points={{-100,0},{ + -88,0},{-88,-36},{16,-36},{16,-16}}, + color={0,127,255})); end for; annotation ( defaultComponentName="tan", @@ -157,54 +158,6 @@ Icon(graphics={ pattern=LinePattern.None, fillColor={0,0,127}, fillPattern=FillPattern.Solid), - Rectangle( - extent={{-76,2},{-90,-2}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{0,84},{-80,80}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-76,84},{-80,-2}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{82,0},{78,-86}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{0,84},{-4,60}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{82,-84},{2,-88}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{6,-60},{2,-84}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{92,2},{78,-2}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={0,0,127}, - fillPattern=FillPattern.Solid), Rectangle( extent={{-40,20},{40,-20}}, lineColor={255,0,0}, diff --git a/Buildings/Fluid/Storage/Validation/HeatExchangerDynamics.mo b/Buildings/Fluid/Storage/Validation/HeatExchangerDynamics.mo index 91974f24659..bbb5f8a896c 100644 --- a/Buildings/Fluid/Storage/Validation/HeatExchangerDynamics.mo +++ b/Buildings/Fluid/Storage/Validation/HeatExchangerDynamics.mo @@ -87,11 +87,11 @@ model HeatExchangerDynamics Buildings.Fluid.Sources.MassFlowSource_T mWatTanDyn_flow( redeclare package Medium = Medium, nPorts=1) "Mass flow rate through the tank" - annotation (Placement(transformation(extent={{88,20},{68,40}}))); + annotation (Placement(transformation(extent={{82,10},{62,30}}))); Buildings.Fluid.Sources.MassFlowSource_T mWatTanSte_flow( redeclare package Medium = Medium, nPorts=1) "Mass flow rate through the tank" - annotation (Placement(transformation(extent={{88,-20},{68,0}}))); + annotation (Placement(transformation(extent={{82,-30},{62,-10}}))); equation connect(mHex_flow_in.y, mHex_flow1.m_flow_in) annotation (Line( points={{-79,20},{-70,20},{-70,28},{-62,28}}, @@ -101,26 +101,27 @@ equation {-70,-2},{-70,20},{-79,20}}, color={0,0,127})); connect(mHex_flow2.ports[1], tanSte.portHex_a) annotation (Line(points={{-40,-10}, {-32,-10},{-30,-10},{-30,-13.8},{32,-13.8}}, color={0,127,255})); - connect(watInTan.ports[1], tanSte.port_a) annotation (Line(points={{-40,62},{ - -40,59},{-22,59},{-22,-10},{32,-10}}, - color={0,127,255})); + connect(watInTan.ports[1], tanSte.port_a) annotation (Line(points={{-40,59},{ + -40,59},{-22,59},{-22,0},{42,0}}, color={0,127,255})); connect(mHex_flow1.ports[1], tanDyn.portHex_a) annotation (Line(points={{-40, 20},{-30,20},{-30,26.2},{32,26.2}}, color={0,127,255})); - connect(watInTan.ports[2], tanDyn.port_a) annotation (Line(points={{-40,58},{ - -30,58},{-20,58},{-20,30},{32,30}}, + connect(watInTan.ports[2], tanDyn.port_a) annotation (Line(points={{-40,61},{ + -30,61},{-20,61},{-20,40},{42,40}}, color={0,127,255})); connect(senTanDyn.port_a, tanDyn.portHex_b) annotation (Line(points={{10,10},{ 20,10},{20,22},{32,22}}, color={0,127,255})); connect(senTanSte.port_a, tanSte.portHex_b) annotation (Line(points={{10,-40}, {20,-40},{20,-18},{32,-18}}, color={0,127,255})); - connect(senTanDyn.port_b, sin.ports[1]) annotation (Line(points={{-10,10},{-20, - 10},{-20,-36},{-42,-36}}, color={0,127,255})); - connect(senTanSte.port_b, sin.ports[2]) annotation (Line(points={{-10,-40},{-16, - -40},{-42,-40}}, color={0,127,255})); + connect(senTanDyn.port_b, sin.ports[1]) annotation (Line(points={{-10,10},{ + -20,10},{-20,-39},{-42,-39}}, + color={0,127,255})); + connect(senTanSte.port_b, sin.ports[2]) annotation (Line(points={{-10,-40},{ + -42,-40},{-42,-37}}, + color={0,127,255})); connect(mWatTanDyn_flow.ports[1], tanDyn.port_b) - annotation (Line(points={{68,30},{52,30}}, color={0,127,255})); + annotation (Line(points={{62,20},{42,20}}, color={0,127,255})); connect(mWatTanSte_flow.ports[1], tanSte.port_b) - annotation (Line(points={{68,-10},{52,-10}}, color={0,127,255})); + annotation (Line(points={{62,-20},{42,-20}}, color={0,127,255})); annotation ( __Dymola_Commands(file="modelica://Buildings/Resources/Scripts/Dymola/Fluid/Storage/Validation/HeatExchangerDynamics.mos" "Simulate and plot"), diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_HydronicHeating_TwoRoomsWithStorage.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_HydronicHeating_TwoRoomsWithStorage.txt index 83883fea6ca..d8c650cab91 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_HydronicHeating_TwoRoomsWithStorage.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_HydronicHeating_TwoRoomsWithStorage.txt @@ -1,27 +1,27 @@ -last-generated=2023-02-24 +last-generated=2023-09-15 statistics-initialization= { - "nonlinear": "1, 5, 5, 23, 23, 2, 1, 0, 1, 0, 1", + "nonlinear": "1, 5, 5, 23, 23, 3, 1, 1, 0, 1, 0", "numerical Jacobians": "0" } statistics-simulation= { - "linear": "0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 1, 1, 2, 1", + "linear": "0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0", + "nonlinear": "1, 2, 1, 1, 1", "number of continuous time states": "78", "numerical Jacobians": "0" } time=[0e+00, 6.048e+05] -roo1.air.vol.T=[2.931499938964844e+02, 2.907405090332031e+02, 2.904394836425781e+02, 2.901079711914062e+02, 2.897971496582031e+02, 2.933867797851562e+02, 2.937170104980469e+02, 2.939196472167969e+02, 2.93886962890625e+02, 2.936654052734375e+02, 2.9373046875e+02, 2.936729431152344e+02, 2.922828063964844e+02, 2.915926513671875e+02, 2.912004089355469e+02, 2.908153991699219e+02, 2.905627136230469e+02, 2.904002075195312e+02, 2.902615966796875e+02, 2.933389892578125e+02, 2.933187561035156e+02, 2.933864135742188e+02, 2.936456909179688e+02, 2.935987548828125e+02, 2.934690551757812e+02, 2.934531555175781e+02, 2.920702209472656e+02, 2.910976867675781e+02, 2.908577575683594e+02, 2.905094299316406e+02, 2.902413024902344e+02, 2.900233764648438e+02, 2.897070007324219e+02, 2.931607360839844e+02, 2.931961059570312e+02, 2.931128540039062e+02, 2.934682006835938e+02, 2.935313720703125e+02, 2.934728393554688e+02, 2.934128112792969e+02, 2.929990539550781e+02, 2.910484924316406e+02, 2.902735595703125e+02, 2.899629211425781e+02, 2.896831665039062e+02, 2.894163818359375e+02, 2.891811218261719e+02, 2.890089111328125e+02, 2.930332946777344e+02, 2.930879821777344e+02, 2.933268737792969e+02, 2.934097900390625e+02, 2.9333837890625e+02, 2.932888488769531e+02, 2.932809143066406e+02, 2.905274353027344e+02, 2.897225952148438e+02, 2.892615966796875e+02, 2.8891552734375e+02, 2.886834411621094e+02, 2.882227172851562e+02, 2.888326110839844e+02, 2.926442565917969e+02, 2.928740234375e+02, 2.934872741699219e+02, 2.937519836425781e+02, 2.939758911132812e+02, 2.936537780761719e+02, 2.935497131347656e+02, 2.918592529296875e+02, 2.907551574707031e+02, 2.902430419921875e+02, 2.897132263183594e+02, 2.89314453125e+02, 2.888436889648438e+02, 2.885092163085938e+02, 2.927431030273438e+02, 2.928492126464844e+02, 2.932879333496094e+02, 2.935122680664062e+02, 2.935497741699219e+02, 2.935004272460938e+02, 2.934204406738281e+02, 2.913000183105469e+02, 2.895914306640625e+02, 2.889050598144531e+02, 2.884204711914062e+02, 2.887821350097656e+02, 2.888541564941406e+02, 2.888052368164062e+02, 2.912527465820312e+02, 2.926051330566406e+02, 2.930339660644531e+02, 2.933880004882812e+02, 2.938103332519531e+02, 2.938785095214844e+02, 2.936098937988281e+02, 2.935303344726562e+02, 2.90976318359375e+02, 2.899585266113281e+02, 2.89455322265625e+02] -roo2.air.vol.T=[2.931499938964844e+02, 2.914580688476562e+02, 2.912465209960938e+02, 2.909927062988281e+02, 2.907488098144531e+02, 2.935981140136719e+02, 2.940210571289062e+02, 2.941265869140625e+02, 2.939227294921875e+02, 2.938740844726562e+02, 2.938685913085938e+02, 2.93809326171875e+02, 2.923784484863281e+02, 2.920482177734375e+02, 2.921090698242188e+02, 2.918030395507812e+02, 2.916077880859375e+02, 2.914898681640625e+02, 2.913878784179688e+02, 2.934431762695312e+02, 2.934980163574219e+02, 2.936741943359375e+02, 2.936714172363281e+02, 2.936159362792969e+02, 2.935979919433594e+02, 2.935836791992188e+02, 2.920374450683594e+02, 2.914643859863281e+02, 2.917010192871094e+02, 2.914320983886719e+02, 2.912239990234375e+02, 2.910562744140625e+02, 2.907914428710938e+02, 2.932868347167969e+02, 2.933726196289062e+02, 2.933329467773438e+02, 2.935297546386719e+02, 2.935578308105469e+02, 2.935744323730469e+02, 2.935287170410156e+02, 2.929368286132812e+02, 2.910945739746094e+02, 2.910774230957031e+02, 2.908676452636719e+02, 2.906566467285156e+02, 2.904475402832031e+02, 2.902621154785156e+02, 2.901263732910156e+02, 2.932121887207031e+02, 2.93277587890625e+02, 2.934767761230469e+02, 2.934381408691406e+02, 2.934375610351562e+02, 2.93405029296875e+02, 2.933997802734375e+02, 2.906352233886719e+02, 2.903763122558594e+02, 2.901867980957031e+02, 2.899142761230469e+02, 2.897268371582031e+02, 2.892660217285156e+02, 2.891390686035156e+02, 2.929291381835938e+02, 2.932514038085938e+02, 2.937745361328125e+02, 2.938045043945312e+02, 2.938480834960938e+02, 2.937190551757812e+02, 2.936506958007812e+02, 2.918720397949219e+02, 2.911580200195312e+02, 2.910920715332031e+02, 2.906704406738281e+02, 2.903535766601562e+02, 2.899548034667969e+02, 2.896474304199219e+02, 2.929354248046875e+02, 2.932317810058594e+02, 2.93658447265625e+02, 2.93627197265625e+02, 2.936286010742188e+02, 2.936150512695312e+02, 2.935596008300781e+02, 2.915086059570312e+02, 2.901874694824219e+02, 2.899816284179688e+02, 2.895532531738281e+02, 2.892115783691406e+02, 2.891405639648438e+02, 2.891346130371094e+02, 2.916530456542969e+02, 2.930303039550781e+02, 2.934238586425781e+02, 2.935437316894531e+02, 2.938160095214844e+02, 2.938309020996094e+02, 2.936795959472656e+02, 2.936291809082031e+02, 2.910736083984375e+02, 2.907419738769531e+02, 2.903886108398438e+02] +roo1.air.vol.T=[2.931499938964844e+02, 2.907405090332031e+02, 2.904394836425781e+02, 2.901080017089844e+02, 2.897971496582031e+02, 2.9338671875e+02, 2.937169799804688e+02, 2.939195556640625e+02, 2.938869934082031e+02, 2.934970397949219e+02, 2.937295227050781e+02, 2.936726379394531e+02, 2.922807006835938e+02, 2.915906372070312e+02, 2.911985473632812e+02, 2.90813720703125e+02, 2.905610961914062e+02, 2.903987121582031e+02, 2.902601013183594e+02, 2.933386535644531e+02, 2.933184204101562e+02, 2.933860778808594e+02, 2.936453247070312e+02, 2.9351220703125e+02, 2.934684448242188e+02, 2.934525756835938e+02, 2.920677795410156e+02, 2.910948486328125e+02, 2.908551025390625e+02, 2.905068054199219e+02, 2.9023876953125e+02, 2.900209350585938e+02, 2.897046203613281e+02, 2.931600952148438e+02, 2.931954040527344e+02, 2.933895263671875e+02, 2.934135131835938e+02, 2.935303649902344e+02, 2.934719848632812e+02, 2.934120788574219e+02, 2.92997314453125e+02, 2.910453491210938e+02, 2.902704467773438e+02, 2.899598693847656e+02, 2.896800537109375e+02, 2.894133911132812e+02, 2.8917822265625e+02, 2.890061950683594e+02, 2.930313415527344e+02, 2.930541381835938e+02, 2.933103942871094e+02, 2.934093017578125e+02, 2.933380737304688e+02, 2.9328857421875e+02, 2.932807006835938e+02, 2.90525634765625e+02, 2.897207641601562e+02, 2.89259765625e+02, 2.889137878417969e+02, 2.886817626953125e+02, 2.882213745117188e+02, 2.888322143554688e+02, 2.92473388671875e+02, 2.92861083984375e+02, 2.934633178710938e+02, 2.93751953125e+02, 2.939757995605469e+02, 2.936537475585938e+02, 2.935496826171875e+02, 2.918590698242188e+02, 2.907550048828125e+02, 2.902428894042969e+02, 2.897130737304688e+02, 2.893143005371094e+02, 2.888435363769531e+02, 2.885090637207031e+02, 2.927393798828125e+02, 2.928404235839844e+02, 2.932807922363281e+02, 2.93514892578125e+02, 2.935495300292969e+02, 2.93500244140625e+02, 2.93420166015625e+02, 2.91299560546875e+02, 2.895908203125e+02, 2.889045104980469e+02, 2.884200439453125e+02, 2.887905883789062e+02, 2.888540649414062e+02, 2.888051452636719e+02, 2.911376647949219e+02, 2.92585693359375e+02, 2.930090637207031e+02, 2.933526916503906e+02, 2.937903747558594e+02, 2.938760070800781e+02, 2.936084289550781e+02, 2.935292358398438e+02, 2.909700317382812e+02, 2.899524230957031e+02, 2.894494323730469e+02] +roo2.air.vol.T=[2.931499938964844e+02, 2.914580688476562e+02, 2.912465209960938e+02, 2.909927368164062e+02, 2.907488098144531e+02, 2.935980529785156e+02, 2.9402099609375e+02, 2.941265869140625e+02, 2.939227294921875e+02, 2.937215881347656e+02, 2.938676147460938e+02, 2.938089904785156e+02, 2.923763732910156e+02, 2.920462341308594e+02, 2.921072998046875e+02, 2.918014221191406e+02, 2.916062622070312e+02, 2.914884643554688e+02, 2.91386474609375e+02, 2.934428405761719e+02, 2.934976501464844e+02, 2.936737670898438e+02, 2.936710510253906e+02, 2.935277709960938e+02, 2.935973815917969e+02, 2.935830993652344e+02, 2.920350341796875e+02, 2.91461669921875e+02, 2.91698486328125e+02, 2.914295959472656e+02, 2.912215881347656e+02, 2.910539245605469e+02, 2.907891845703125e+02, 2.932861938476562e+02, 2.933719177246094e+02, 2.935625305175781e+02, 2.934768676757812e+02, 2.935570373535156e+02, 2.935736694335938e+02, 2.935280151367188e+02, 2.929353637695312e+02, 2.910916748046875e+02, 2.910744934082031e+02, 2.908648681640625e+02, 2.9065380859375e+02, 2.904447631835938e+02, 2.902594299316406e+02, 2.901237182617188e+02, 2.93210205078125e+02, 2.932519226074219e+02, 2.934615173339844e+02, 2.934377746582031e+02, 2.934372863769531e+02, 2.934047546386719e+02, 2.933995971679688e+02, 2.906335144042969e+02, 2.903742980957031e+02, 2.9018505859375e+02, 2.899125366210938e+02, 2.8972509765625e+02, 2.892642822265625e+02, 2.891390380859375e+02, 2.928526916503906e+02, 2.932430419921875e+02, 2.937546997070312e+02, 2.938046264648438e+02, 2.938481750488281e+02, 2.937191467285156e+02, 2.936507263183594e+02, 2.918721618652344e+02, 2.911582336425781e+02, 2.9109228515625e+02, 2.906706237792969e+02, 2.90353759765625e+02, 2.899549865722656e+02, 2.896475830078125e+02, 2.929364318847656e+02, 2.932264404296875e+02, 2.936526794433594e+02, 2.936300964355469e+02, 2.93628662109375e+02, 2.936151428222656e+02, 2.935595092773438e+02, 2.915088806152344e+02, 2.901878356933594e+02, 2.899819946289062e+02, 2.895536499023438e+02, 2.892120971679688e+02, 2.891405944824219e+02, 2.891346130371094e+02, 2.915416870117188e+02, 2.930174865722656e+02, 2.934072265625e+02, 2.935135803222656e+02, 2.937966918945312e+02, 2.938291931152344e+02, 2.936785583496094e+02, 2.936283874511719e+02, 2.910689392089844e+02, 2.907374572753906e+02, 2.903842468261719e+02] weaBus.TDryBul=[2.609500122070312e+02, 2.612774658203125e+02, 2.621011047363281e+02, 2.625499877929688e+02, 2.625499877929688e+02, 2.634906005859375e+02, 2.665859985351562e+02, 2.694419860839844e+02, 2.715532531738281e+02, 2.720499877929688e+02, 2.720499877929688e+02, 2.711899108886719e+02, 2.720211181640625e+02, 2.720336303710938e+02, 2.714474182128906e+02, 2.693314514160156e+02, 2.698616027832031e+02, 2.713856811523438e+02, 2.721641845703125e+02, 2.72510986328125e+02, 2.73510009765625e+02, 2.748500061035156e+02, 2.748500061035156e+02, 2.725921325683594e+02, 2.73848876953125e+02, 2.725499877929688e+02, 2.740790100097656e+02, 2.75053955078125e+02, 2.731499938964844e+02, 2.731499938964844e+02, 2.733664245605469e+02, 2.7306201171875e+02, 2.712139892578125e+02, 2.697578430175781e+02, 2.687122497558594e+02, 2.691380004882812e+02, 2.701607055664062e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.700260009765625e+02, 2.698500061035156e+02, 2.703376159667969e+02, 2.707337341308594e+02, 2.714786071777344e+02, 2.720499877929688e+02, 2.726159973144531e+02, 2.7205712890625e+02, 2.703059997558594e+02, 2.684580078125e+02, 2.684077453613281e+02, 2.6806201171875e+02, 2.662139892578125e+02, 2.661690368652344e+02, 2.658251953125e+02, 2.615640869140625e+02, 2.582152099609375e+02, 2.592766723632812e+02, 2.610854797363281e+02, 2.64716796875e+02, 2.666700134277344e+02, 2.690650634765625e+02, 2.692225952148438e+02, 2.680060119628906e+02, 2.665409545898438e+02, 2.646900024414062e+02, 2.639419860839844e+02, 2.62093994140625e+02, 2.614129638671875e+02, 2.591625671386719e+02, 2.5875e+02, 2.582370910644531e+02, 2.594412841796875e+02, 2.609939880371094e+02, 2.616118469238281e+02, 2.618193054199219e+02, 2.608738708496093e+02, 2.578509826660156e+02, 2.558468933105469e+02, 2.543108673095703e+02, 2.552683868408203e+02, 2.542709197998047e+02, 2.536540069580078e+02, 2.5264599609375e+02, 2.515209808349609e+02, 2.503481140136719e+02, 2.545215454101562e+02, 2.581070861816406e+02, 2.589879760742188e+02, 2.603697204589844e+02, 2.595094604492188e+02, 2.568208923339844e+02, 2.548866882324219e+02, 2.541324615478516e+02, 2.532756500244141e+02, 2.531499938964844e+02] -tan.vol[1].T=[2.931499938964844e+02, 3.122945861816406e+02, 3.259811401367188e+02, 3.388639526367188e+02, 3.415999145507812e+02, 3.376930847167969e+02, 3.319612731933594e+02, 3.272052001953125e+02, 3.217992858886719e+02, 3.153880004882812e+02, 3.248574829101562e+02, 3.330001220703125e+02, 3.419000854492188e+02, 3.41663330078125e+02, 3.414278259277344e+02, 3.411935424804688e+02, 3.409604797363281e+02, 3.407286376953125e+02, 3.404979858398438e+02, 3.38436767578125e+02, 3.3404833984375e+02, 3.2761865234375e+02, 3.196103515625e+02, 3.147037658691406e+02, 3.220927734375e+02, 3.28130126953125e+02, 3.390479125976562e+02, 3.417288513183594e+02, 3.414945068359375e+02, 3.412613830566406e+02, 3.410294799804688e+02, 3.407987365722656e+02, 3.405691833496094e+02, 3.390486450195312e+02, 3.326747131347656e+02, 3.172689208984375e+02, 3.186065368652344e+02, 3.247748413085938e+02, 3.302955627441406e+02, 3.349245300292969e+02, 3.364518737792969e+02, 3.362450866699219e+02, 3.360393371582031e+02, 3.358345947265625e+02, 3.35630859375e+02, 3.354281311035156e+02, 3.352263793945312e+02, 3.350250549316406e+02, 3.267062072753906e+02, 3.15864501953125e+02, 3.188446960449219e+02, 3.238766174316406e+02, 3.283727111816406e+02, 3.318438110351562e+02, 3.342525939941406e+02, 3.408751220703125e+02, 3.406366882324219e+02, 3.403995971679688e+02, 3.401603393554688e+02, 3.399124755859375e+02, 3.396277160644531e+02, 3.384352416992188e+02, 3.2817919921875e+02, 3.2353857421875e+02, 3.23478515625e+02, 3.309364318847656e+02, 3.394559631347656e+02, 3.383704528808594e+02, 3.362113952636718e+02, 3.342764282226562e+02, 3.340599975585938e+02, 3.338447265625e+02, 3.336305847167969e+02, 3.334175720214844e+02, 3.331980895996094e+02, 3.329445495605469e+02, 3.263773498535156e+02, 3.221276550292969e+02, 3.214392395019531e+02, 3.257544860839844e+02, 3.297653198242188e+02, 3.333765869140625e+02, 3.3471826171875e+02, 3.337433776855469e+02, 3.3354541015625e+02, 3.33346923828125e+02, 3.331324462890625e+02, 3.327634887695312e+02, 3.317131652832031e+02, 3.294943542480469e+02, 3.179471740722656e+02, 3.139362182617188e+02, 3.153666381835938e+02, 3.192913208007812e+02, 3.261524353027344e+02, 3.33386962890625e+02, 3.367963562011719e+02, 3.348247680664062e+02, 3.345229187011719e+02, 3.3431494140625e+02, 3.341080017089844e+02] -tan.vol[2].T=[2.931499938964844e+02, 3.099512634277344e+02, 3.237176818847656e+02, 3.367104797363281e+02, 3.395128479003906e+02, 3.341085510253906e+02, 3.256299133300781e+02, 3.198599853515625e+02, 3.141680297851562e+02, 3.138993530273438e+02, 3.231730346679688e+02, 3.315276794433594e+02, 3.395955200195312e+02, 3.394049072265625e+02, 3.392147521972656e+02, 3.39025146484375e+02, 3.388360595703125e+02, 3.386474914550781e+02, 3.3845947265625e+02, 3.359859313964844e+02, 3.291004028320312e+02, 3.206175537109375e+02, 3.122562866210938e+02, 3.132184143066406e+02, 3.206200866699219e+02, 3.2685595703125e+02, 3.366529541015625e+02, 3.397392272949219e+02, 3.395475463867188e+02, 3.393563842773438e+02, 3.391657409667969e+02, 3.389756164550781e+02, 3.387860412597656e+02, 3.369316101074219e+02, 3.270412292480468e+02, 3.163013000488281e+02, 3.171920776367188e+02, 3.234828796386719e+02, 3.29130126953125e+02, 3.3395703125e+02, 3.354877014160156e+02, 3.353109130859375e+02, 3.351346130371094e+02, 3.349588012695312e+02, 3.34783447265625e+02, 3.346085510253906e+02, 3.344341735839844e+02, 3.342592468261719e+02, 3.207646179199219e+02, 3.158825988769531e+02, 3.17377197265625e+02, 3.226534118652344e+02, 3.275365600585938e+02, 3.311941528320312e+02, 3.337272338867188e+02, 3.37462158203125e+02, 3.372858276367188e+02, 3.371098937988281e+02, 3.369318237304688e+02, 3.367470092773438e+02, 3.3653466796875e+02, 3.35650634765625e+02, 3.232129516601562e+02, 3.231185302734375e+02, 3.220856323242188e+02, 3.293954772949219e+02, 3.378525085449219e+02, 3.366751098632812e+02, 3.330583801269531e+02, 3.298462829589844e+02, 3.2967578125e+02, 3.29505859375e+02, 3.293364562988281e+02, 3.291676025390625e+02, 3.289860534667969e+02, 3.287438049316406e+02, 3.222404479980469e+02, 3.221566467285156e+02, 3.20247802734375e+02, 3.247636108398438e+02, 3.287667846679688e+02, 3.326090393066407e+02, 3.343984680175781e+02, 3.323201904296875e+02, 3.321445617675781e+02, 3.319656372070312e+02, 3.317413635253906e+02, 3.311070556640625e+02, 3.289582214355469e+02, 3.249802856445312e+02, 3.173630676269531e+02, 3.115600280761719e+02, 3.137251586914062e+02, 3.180593872070312e+02, 3.246318359375e+02, 3.320472717285156e+02, 3.360454406738281e+02, 3.322212829589844e+02, 3.318508605957031e+02, 3.316737670898438e+02, 3.314972229003906e+02] -tan.vol[3].T=[2.931499938964844e+02, 3.076447448730469e+02, 3.214359741210938e+02, 3.345399475097656e+02, 3.373740539550781e+02, 3.281128234863281e+02, 3.171331176757812e+02, 3.114118957519531e+02, 3.065363159179688e+02, 3.127910766601562e+02, 3.214341735839844e+02, 3.299884948730469e+02, 3.371846008300781e+02, 3.370047912597656e+02, 3.368256225585938e+02, 3.366470947265625e+02, 3.364692077636719e+02, 3.362919311523438e+02, 3.361153259277344e+02, 3.323418273925781e+02, 3.215512084960938e+02, 3.123046264648438e+02, 3.053130493164062e+02, 3.120665283203125e+02, 3.190702819824219e+02, 3.255645141601562e+02, 3.341362609863281e+02, 3.375457763671875e+02, 3.373628540039062e+02, 3.371806030273438e+02, 3.369990234375e+02, 3.36818115234375e+02, 3.366378784179688e+02, 3.338043212890625e+02, 3.191693725585937e+02, 3.109217834472656e+02, 3.161389465332031e+02, 3.221435852050781e+02, 3.279712219238281e+02, 3.329836120605469e+02, 3.341766052246094e+02, 3.339960327148438e+02, 3.338160705566406e+02, 3.3363671875e+02, 3.334579162597656e+02, 3.332797546386719e+02, 3.331021728515625e+02, 3.32922607421875e+02, 3.135616149902344e+02, 3.130221557617188e+02, 3.162892761230469e+02, 3.213918762207031e+02, 3.265531616210938e+02, 3.304480285644531e+02, 3.331575927734375e+02, 3.351415405273438e+02, 3.349736328125e+02, 3.348063049316406e+02, 3.346381530761719e+02, 3.344666137695312e+02, 3.342798156738281e+02, 3.334793090820312e+02, 3.163628845214844e+02, 3.178732299804688e+02, 3.212572326660156e+02, 3.279077758789062e+02, 3.362344665527344e+02, 3.342903442382812e+02, 3.27216583251953e+02, 3.223779296875e+02, 3.222355346679688e+02, 3.220938415527344e+02, 3.219527893066406e+02, 3.218124084472656e+02, 3.216544189453125e+02, 3.214125671386719e+02, 3.141404113769531e+02, 3.172230529785156e+02, 3.196451721191406e+02, 3.237556762695312e+02, 3.278238525390625e+02, 3.318197631835938e+02, 3.340617065429688e+02, 3.285936889648438e+02, 3.284206237792969e+02, 3.282400817871094e+02, 3.279619445800781e+02, 3.268450012207031e+02, 3.230991516113281e+02, 3.172489318847656e+02, 3.157159423828125e+02, 3.09271240234375e+02, 3.116270751953125e+02, 3.167298583984375e+02, 3.231195983886719e+02, 3.306841430664062e+02, 3.350718078613281e+02, 3.267851257324219e+02, 3.262829284667969e+02, 3.261199951171875e+02, 3.259578552246094e+02] -tan.vol[4].T=[2.931499938964844e+02, 3.0524658203125e+02, 3.191341857910156e+02, 3.323522338867188e+02, 3.352181701660156e+02, 3.184777526855469e+02, 3.078802185058594e+02, 3.03627685546875e+02, 3.00399169921875e+02, 3.109693908691406e+02, 3.196363830566406e+02, 3.284007873535156e+02, 3.350037231445312e+02, 3.34832275390625e+02, 3.34661376953125e+02, 3.344910278320312e+02, 3.343212585449219e+02, 3.341520080566406e+02, 3.339833374023438e+02, 3.253618469238281e+02, 3.117658081054688e+02, 3.044595336914062e+02, 3.001219787597656e+02, 3.103767395019531e+02, 3.174732666015625e+02, 3.242360229492188e+02, 3.319086303710938e+02, 3.352540893554688e+02, 3.350805358886719e+02, 3.349075622558594e+02, 3.347351684570312e+02, 3.345633850097656e+02, 3.343921508789062e+02, 3.277192077636719e+02, 3.102442016601562e+02, 3.053779907226562e+02, 3.150471496582031e+02, 3.207615051269531e+02, 3.267835388183594e+02, 3.319802856445312e+02, 3.309158935546875e+02, 3.307172546386719e+02, 3.305200805664062e+02, 3.303243713378906e+02, 3.301301574707031e+02, 3.299373474121094e+02, 3.297459716796875e+02, 3.295482788085938e+02, 3.069843444824219e+02, 3.088235473632812e+02, 3.152792358398438e+02, 3.201150207519531e+02, 3.254468078613281e+02, 3.296131286621094e+02, 3.325492553710938e+02, 3.33859375e+02, 3.336930847167969e+02, 3.335272827148438e+02, 3.333610229492188e+02, 3.331913757324219e+02, 3.330006103515625e+02, 3.305057373046875e+02, 3.102025451660156e+02, 3.120267639160156e+02, 3.205284423828125e+02, 3.264643859863281e+02, 3.346203002929688e+02, 3.289881286621094e+02, 3.171858825683593e+02, 3.119412841796875e+02, 3.118551940917969e+02, 3.117695617675781e+02, 3.116844177246094e+02, 3.115997009277344e+02, 3.114978942871094e+02, 3.113155212402344e+02, 3.056983947753906e+02, 3.096346435546875e+02, 3.189261474609375e+02, 3.227017822265625e+02, 3.26900390625e+02, 3.310012207031251e+02, 3.336575622558594e+02, 3.204776000976562e+02, 3.203363952636719e+02, 3.201838684082031e+02, 3.198867492675781e+02, 3.183527221679688e+02, 3.132944641113281e+02, 3.067956237792969e+02, 3.116649475097656e+02, 3.077788391113281e+02, 3.096590270996094e+02, 3.15335693359375e+02, 3.216329956054688e+02, 3.292432861328125e+02, 3.332663269042969e+02, 3.171503295898438e+02, 3.166169738769531e+02, 3.165009155273438e+02, 3.163856506347656e+02] -tan.vol[5].T=[2.931499938964844e+02, 3.027274169921875e+02, 3.168130493164062e+02, 3.3014599609375e+02, 3.330363159179688e+02, 3.067096862792969e+02, 3.005469360351562e+02, 2.981742553710938e+02, 2.966031188964844e+02, 3.079685668945312e+02, 3.178139038085938e+02, 3.267699890136719e+02, 3.331180114746094e+02, 3.329404907226562e+02, 3.327637634277344e+02, 3.325877990722656e+02, 3.324126281738281e+02, 3.322381896972656e+02, 3.320645141601562e+02, 3.123729858398438e+02, 3.026878662109375e+02, 2.990689697265625e+02, 2.971922912597656e+02, 3.077438049316406e+02, 3.158543395996094e+02, 3.228587036132812e+02, 3.300761413574219e+02, 3.330404052734375e+02, 3.32864990234375e+02, 3.326903076171875e+02, 3.325163879394531e+02, 3.323432006835938e+02, 3.321707153320312e+02, 3.156509399414062e+02, 3.031355590820312e+02, 3.014333190917969e+02, 3.133692321777344e+02, 3.193683166503906e+02, 3.255435180664062e+02, 3.309296569824219e+02, 3.200619201660156e+02, 3.199871215820312e+02, 3.199119873046875e+02, 3.198365173339844e+02, 3.197607116699219e+02, 3.196845703125e+02, 3.196081237792969e+02, 3.195083618164062e+02, 3.029806518554688e+02, 3.051771240234375e+02, 3.138469848632812e+02, 3.188489990234375e+02, 3.242774353027344e+02, 3.28710205078125e+02, 3.318994140625e+02, 3.3304541015625e+02, 3.328624267578125e+02, 3.326803283691406e+02, 3.324524841308594e+02, 3.320919494628906e+02, 3.312069702148438e+02, 3.195270690917969e+02, 3.066297302246094e+02, 3.079346618652344e+02, 3.192349853515625e+02, 3.250618286132812e+02, 3.33020751953125e+02, 3.157082824707031e+02, 3.046600646972656e+02, 3.018167724609375e+02, 3.018143310546875e+02, 3.018114318847656e+02, 3.0180810546875e+02, 3.018043518066406e+02, 3.017779846191406e+02, 3.016456298828125e+02, 3.015467834472656e+02, 3.040757446289062e+02, 3.171820373535156e+02, 3.21640380859375e+02, 3.25961181640625e+02, 3.301323852539063e+02, 3.329803466796881e+02, 3.082870178222656e+02, 3.082686462402344e+02, 3.082304077148438e+02, 3.079603271484375e+02, 3.058677673339844e+02, 3.008295593261719e+02, 2.964446411132812e+02, 3.064673461914062e+02, 3.070240173339844e+02, 3.081733093261719e+02, 3.138283081054688e+02, 3.201824951171875e+02, 3.277445678710938e+02, 3.257334289550781e+02, 3.051642761230469e+02, 3.049024353027344e+02, 3.048956298828125e+02, 3.048882751464844e+02] -temSup.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.256166076660156e+02, 3.230456237792969e+02, 3.206211853027344e+02, 3.187931518554688e+02, 3.175880126953125e+02, 3.183963012695312e+02, 3.19131103515625e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.193392944335938e+02, 3.179621276855469e+02, 3.170744934082031e+02, 3.158700866699219e+02, 3.158459777832031e+02, 3.168748168945312e+02, 3.16804931640625e+02, 3.179460144042969e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.168829650878906e+02, 3.203154602050781e+02, 3.212285766601562e+02, 3.121131896972656e+02, 3.201327209472656e+02, 3.198696594238281e+02, 3.198606262207031e+02, 3.198569946289062e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.19846923828125e+02, 3.104401550292969e+02, 3.1946923828125e+02, 3.143295288085938e+02, 3.184088134765625e+02, 3.178886413574219e+02, 3.183852844238281e+02, 3.198889770507812e+02, 3.214695129394531e+02, 3.217307434082031e+02, 3.217307434082031e+02, 3.217307434082031e+02, 3.141400451660156e+02, 3.144352111816406e+02, 3.180652770996094e+02, 3.208466796875e+02, 3.192688293457031e+02, 3.160785827636719e+02, 3.247532348632812e+02, 3.230067443847656e+02, 3.209699096679688e+02, 3.208127746582031e+02, 3.218468017578125e+02, 3.222285461425781e+02, 3.222285461425781e+02, 3.222285461425781e+02, 3.222285461425781e+02, 3.222285461425781e+02, 3.200734252929688e+02, 3.204103698730469e+02, 3.168642883300781e+02, 3.149187622070312e+02, 3.228009948730469e+02, 3.267923278808594e+02, 3.270078735351562e+02, 3.277622985839844e+02, 3.301435241699215e+02, 3.316792907714844e+02, 3.316792907714844e+02, 3.230503540039062e+02, 3.240529174804688e+02, 3.247037963867188e+02, 3.253432006835938e+02, 3.262279968261719e+02, 3.180908203125e+02, 3.174338684082031e+02, 3.162064208984375e+02, 3.204132080078125e+02, 3.277019653320312e+02, 3.288730163574219e+02, 3.310016784667969e+02, 3.32514404296875e+02, 3.325428161621094e+02, 3.325428161621094e+02, 3.325428161621094e+02] -temRet.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.986973876953125e+02, 2.9666796875e+02, 2.952354431152344e+02, 2.950699157714844e+02, 2.951083679199219e+02, 2.9549560546875e+02, 2.955911560058594e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.958237609863281e+02, 2.981221618652344e+02, 2.980549926757812e+02, 2.970009155273438e+02, 2.959505004882812e+02, 2.961983947753906e+02, 2.967511596679688e+02, 2.970644226074219e+02, 2.97052490234375e+02, 2.97052490234375e+02, 2.97052490234375e+02, 2.97052490234375e+02, 2.97052490234375e+02, 2.97052490234375e+02, 2.97052490234375e+02, 3.009119262695312e+02, 3.000155639648438e+02, 2.98444580078125e+02, 2.974772338867188e+02, 2.968981018066406e+02, 2.971343688964844e+02, 2.976101684570312e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.977586669921875e+02, 2.918778076171875e+02, 3.016289672851562e+02, 2.997361755371094e+02, 2.981669311523438e+02, 2.9771435546875e+02, 2.981965637207031e+02, 2.987520751953125e+02, 2.991229553222656e+02, 2.991790466308594e+02, 2.991790466308594e+02, 2.991790466308594e+02, 2.918187255859375e+02, 2.891380004882812e+02, 2.887023010253906e+02, 2.903411560058594e+02, 3.06204833984375e+02, 3.024461669921875e+02, 2.978390197753906e+02, 2.958739013671875e+02, 2.951653747558594e+02, 2.959566040039062e+02, 2.967401123046875e+02, 2.969478759765625e+02, 2.969478759765625e+02, 2.969478759765625e+02, 2.969478759765625e+02, 2.969478759765625e+02, 2.913100891113281e+02, 2.890219116210938e+02, 3.0453271484375e+02, 3.022625427246094e+02, 2.980336608886719e+02, 2.974614562988281e+02, 2.972906188964844e+02, 2.975031433105469e+02, 2.985635375976562e+02, 2.990922546386719e+02, 2.990922546386719e+02, 2.933818359375e+02, 2.889996032714844e+02, 2.890739135742188e+02, 2.904083862304688e+02, 2.905770568847656e+02, 3.070957641601562e+02, 3.056141052246094e+02, 3.006618041992188e+02, 2.979122619628906e+02, 2.959224853515625e+02, 2.955749206542969e+02, 2.968649291992188e+02, 2.977117309570312e+02, 2.977337646484375e+02, 2.977337646484375e+02, 2.977337646484375e+02] -boi.T=[2.931499938964844e+02, 3.147298583984375e+02, 3.282310180664062e+02, 3.410038757324219e+02, 2.941524963378906e+02, 2.884867553710938e+02, 2.881688842773438e+02, 2.881510620117188e+02, 2.881500549316406e+02, 3.17562744140625e+02, 3.265435791015625e+02, 3.343749084472656e+02, 3.122859191894531e+02, 2.895038452148438e+02, 2.882259521484375e+02, 2.881542663574219e+02, 2.881502380371094e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.168589782714844e+02, 3.234840087890625e+02, 3.29421630859375e+02, 3.409718322753906e+02, 2.945198974609375e+02, 2.8850732421875e+02, 2.881700439453125e+02, 2.88151123046875e+02, 2.881500549316406e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.121060791015625e+02, 3.204200134277344e+02, 3.260563049316406e+02, 3.314628601074219e+02, 3.359031066894531e+02, 2.986400756835938e+02, 2.887384643554688e+02, 2.881830139160156e+02, 2.8815185546875e+02, 2.881501159667969e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.143221130371094e+02, 3.2043896484375e+02, 3.250668334960938e+02, 3.294125061035156e+02, 3.324579772949219e+02, 3.34734130859375e+02, 2.97533447265625e+02, 2.886763916015625e+02, 2.881796264648438e+02, 2.881516723632812e+02, 2.881500854492188e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.182621459960938e+02, 3.16075927734375e+02, 3.25481689453125e+02, 3.325211791992188e+02, 3.410118713378906e+02, 2.9118896484375e+02, 2.88320556640625e+02, 2.881595764160156e+02, 2.881505432128906e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.167120971679688e+02, 3.149152221679688e+02, 3.227687377929688e+02, 3.267751770019531e+02, 3.308482971191406e+02, 3.340712280273438e+02, 3.333126220703138e+02, 2.906834411621094e+02, 2.882921142578125e+02, 2.88157958984375e+02, 2.881504516601562e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.182884826660156e+02, 3.177637023925781e+02, 3.162019348144531e+02, 3.204047546386719e+02, 3.276748352050781e+02, 3.347827758789062e+02, 3.152982788085938e+02, 2.896729431152344e+02, 2.882354431152344e+02, 2.8815478515625e+02, 2.881502685546875e+02] -val1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.816154599189758e-01, 2.164909392595291e-01, 1.15179389715195e-01, 1.315124928951263e-01, 2.422960102558136e-01, 2.097594887018204e-01, 2.385241836309433e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.055001735687256e-01, 4.156181514263153e-01, 3.817882537841797e-01, 2.521577477455139e-01, 2.756159007549286e-01, 3.40470552444458e-01, 3.484233319759369e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.946279525756836e-01, 4.769542813301084e-01, 5.185710191726685e-01, 3.409066796302795e-01, 3.093134462833405e-01, 3.385860919952393e-01, 3.685905039310455e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.054253667593002e-02, 5.583541393280029e-01, 5.310066342353821e-01, 4.115643799304962e-01, 3.701085150241852e-01, 4.058051407337189e-01, 4.305736124515533e-01, 4.345465898513794e-01, 0e+00, 0e+00, 0e+00, 1.172322183847427e-01, 2.332743108272552e-01, 4.636387228965759e-01, 1.587015986442566e-01, 7.528689503669739e-01, 6.379871964454651e-01, 3.313632905483246e-01, 1.990095525979996e-01, 8.705365657806396e-02, 2.481130659580231e-01, 3.001418709754947e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.531613916158676e-01, 3.20392906665802e-01, 7.034416794776917e-01, 6.503971219062805e-01, 4.31030660867691e-01, 3.188629746437073e-01, 3.001069128513336e-01, 3.247909545898444e-01, 3.647754788398742e-01, 0e+00, 0e+00, 1.224694401025772e-01, 3.647631704807281e-01, 1.839315146207809e-01, 1.479225307703018e-01, 1.723887771368027e-01, 1e+00, 7.724314332008362e-01, 5.5801922082901e-01, 3.810068368911743e-01, 1.698287725448608e-01, 1.357383877038956e-01, 2.700534760951996e-01, 3.098379373550415e-01, 0e+00, 0e+00, 0e+00] -val2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.759403884410858e-01, 6.447894126176834e-02, 1.171246543526651e-02, 1.136298999190331e-01, 1.379596441984177e-01, 1.407115161418915e-01, 1.703380048274994e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.534094095230103e-01, 3.259993195533752e-01, 2.379082292318344e-01, 2.392948120832443e-01, 2.670372426509857e-01, 2.760116159915924e-01, 2.831592559814453e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.315845370292664e-01, 3.886885941028592e-01, 4.085276424884796e-01, 3.101270496845245e-01, 2.960846126079559e-01, 2.877827286720276e-01, 3.106429874897003e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.689050614833832e-01, 4.362123608589172e-01, 3.366109132766724e-01, 3.559300005435944e-01, 3.562134504318237e-01, 3.724898993968964e-01, 3.751041293144226e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.462254397571087e-03, 6.104282140731812e-01, 4.49298620223999e-01, 1.87734842300415e-01, 1.72754168510437e-01, 1.50957778096199e-01, 2.154760658740997e-01, 2.49656140804291e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.072949171066284e-01, 4.591110944747925e-01, 2.457806766033173e-01, 2.614079713821411e-01, 2.606984972953796e-01, 2.674683034420018e-01, 2.952066957950591e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.713859409093857e-03, 7.690220139920712e-03, 1e+00, 5.598503947257996e-01, 3.630674183368683e-01, 3.031311631202698e-01, 1.670027375221252e-01, 1.595551073551178e-01, 2.352025955915451e-01, 2.604096829891205e-01, 0e+00, 0e+00, 0e+00] +tan.vol[1].T=[2.931499938964844e+02, 3.120121765136719e+02, 3.257661743164062e+02, 3.386746215820312e+02, 3.41603759765625e+02, 3.38575439453125e+02, 3.336649475097656e+02, 3.292648620605469e+02, 3.240478820800781e+02, 3.130953674316406e+02, 3.203178100585938e+02, 3.285021362304688e+02, 3.407908020019531e+02, 3.415951538085938e+02, 3.413639526367188e+02, 3.411339111328125e+02, 3.40905029296875e+02, 3.406772766113281e+02, 3.4045068359375e+02, 3.390309448242188e+02, 3.3563134765625e+02, 3.29938720703125e+02, 3.222859191894531e+02, 3.124270629882812e+02, 3.199447937011719e+02, 3.259702758789062e+02, 3.369139099121094e+02, 3.416356201171875e+02, 3.414041137695312e+02, 3.411737670898438e+02, 3.409446105957031e+02, 3.407165832519531e+02, 3.404896850585938e+02, 3.393245544433594e+02, 3.341614990234374e+02, 3.221593322753906e+02, 3.162012329101562e+02, 3.22926025390625e+02, 3.284814453125e+02, 3.33202392578125e+02, 3.36838623046875e+02, 3.366317749023438e+02, 3.364259643554688e+02, 3.362211608886719e+02, 3.36017333984375e+02, 3.358145141601562e+02, 3.356127014160156e+02, 3.35411376953125e+02, 3.31055908203125e+02, 3.165077209472656e+02, 3.165750427246094e+02, 3.221387939453125e+02, 3.266525268554688e+02, 3.302205810546875e+02, 3.327254638671875e+02, 3.422648315429688e+02, 3.420303344726562e+02, 3.417969970703125e+02, 3.415631408691406e+02, 3.413260192871094e+02, 3.410725402832031e+02, 3.403580017089844e+02, 3.289639892578125e+02, 3.238211975097656e+02, 3.220364379882812e+02, 3.297832641601562e+02, 3.383424072265625e+02, 3.386565246582031e+02, 3.371368103027344e+02, 3.356703186035156e+02, 3.354531860351562e+02, 3.352371215820312e+02, 3.350220642089844e+02, 3.348080444335938e+02, 3.345891418457031e+02, 3.343439636230469e+02, 3.28221435546875e+02, 3.240810852050781e+02, 3.213815307617188e+02, 3.25969970703125e+02, 3.299577331542969e+02, 3.335611267089844e+02, 3.347139587402344e+02, 3.338796997070312e+02, 3.336817016601562e+02, 3.334832153320312e+02, 3.332696838378906e+02, 3.32908447265625e+02, 3.3188818359375e+02, 3.297095336914062e+02, 3.173978576660156e+02, 3.122425842285156e+02, 3.144533081054688e+02, 3.178322448730469e+02, 3.248572387695312e+02, 3.320982666015625e+02, 3.363759460449219e+02, 3.35470947265625e+02, 3.352226867675781e+02, 3.350192260742188e+02, 3.348166809082031e+02] +tan.vol[2].T=[2.931499938964844e+02, 3.101406860351562e+02, 3.240060424804688e+02, 3.369990234375e+02, 3.399849243164062e+02, 3.356663513183594e+02, 3.277281799316406e+02, 3.21898193359375e+02, 3.159494934082031e+02, 3.131330871582031e+02, 3.187467041015625e+02, 3.273051147460938e+02, 3.392646179199219e+02, 3.400822448730469e+02, 3.398883361816406e+02, 3.396949768066406e+02, 3.395021667480469e+02, 3.393098754882812e+02, 3.391181335449219e+02, 3.37349365234375e+02, 3.313553161621094e+02, 3.230186462402344e+02, 3.142534484863281e+02, 3.12359130859375e+02, 3.186963500976562e+02, 3.249386901855469e+02, 3.350908813476562e+02, 3.400973510742188e+02, 3.3990380859375e+02, 3.397107543945312e+02, 3.395182495117188e+02, 3.393262939453125e+02, 3.391348571777344e+02, 3.3779931640625e+02, 3.290148315429687e+02, 3.144956665039062e+02, 3.154996337890625e+02, 3.219294128417969e+02, 3.275381469726562e+02, 3.324257202148438e+02, 3.361633911132812e+02, 3.359850769042969e+02, 3.358072814941406e+02, 3.356300048828125e+02, 3.354532165527344e+02, 3.352769775390625e+02, 3.351012573242188e+02, 3.349255981445312e+02, 3.266725158691406e+02, 3.157622985839844e+02, 3.157290344238281e+02, 3.211645202636719e+02, 3.260097045898438e+02, 3.297192687988281e+02, 3.323056945800781e+02, 3.406618347167969e+02, 3.404615173339844e+02, 3.402618408203125e+02, 3.400606079101562e+02, 3.398538818359375e+02, 3.396233825683594e+02, 3.387545776367188e+02, 3.232388916015625e+02, 3.234971313476562e+02, 3.210463562011719e+02, 3.285899658203125e+02, 3.370909118652344e+02, 3.375189208984375e+02, 3.348850708007812e+02, 3.321994018554688e+02, 3.3200634765625e+02, 3.318141479492188e+02, 3.316227722167969e+02, 3.314322204589844e+02, 3.31231201171875e+02, 3.30978515625e+02, 3.24572998046875e+02, 3.241160583496094e+02, 3.207577209472656e+02, 3.252241821289062e+02, 3.291572265625e+02, 3.329631652832032e+02, 3.344917602539062e+02, 3.325625610351562e+02, 3.323770751953125e+02, 3.321885375976562e+02, 3.319559936523438e+02, 3.313220520019531e+02, 3.291997985839844e+02, 3.252313232421875e+02, 3.169614562988281e+02, 3.095590515136719e+02, 3.126986389160156e+02, 3.169484558105469e+02, 3.236604309082031e+02, 3.310537719726562e+02, 3.358639526367188e+02, 3.342310791015625e+02, 3.339302062988281e+02, 3.337416687011719e+02, 3.335538024902344e+02] +tan.vol[3].T=[2.931499938964844e+02, 3.081793518066406e+02, 3.219237365722656e+02, 3.350106811523438e+02, 3.38024658203125e+02, 3.282526245117188e+02, 3.161798095703125e+02, 3.099286499023438e+02, 3.047733154296875e+02, 3.091670227050781e+02, 3.168209533691406e+02, 3.258623962402344e+02, 3.372948303222656e+02, 3.381923828125e+02, 3.380021057128906e+02, 3.378125915527344e+02, 3.376238708496094e+02, 3.374359436035156e+02, 3.372487487792969e+02, 3.332163391113281e+02, 3.214546203613281e+02, 3.111887512207031e+02, 3.037210693359375e+02, 3.116323852539062e+02, 3.170518188476562e+02, 3.237452697753906e+02, 3.325039367675781e+02, 3.382555236816406e+02, 3.380648498535156e+02, 3.378749694824219e+02, 3.376858825683594e+02, 3.374975891113281e+02, 3.3731005859375e+02, 3.343779296875e+02, 3.184269714355468e+02, 3.049082946777344e+02, 3.154490966796875e+02, 3.205759887695312e+02, 3.264688720703125e+02, 3.315313720703125e+02, 3.353130187988281e+02, 3.351366577148438e+02, 3.349609069824219e+02, 3.347858276367188e+02, 3.346114196777344e+02, 3.344376220703125e+02, 3.342644958496094e+02, 3.340910949707031e+02, 3.172734985351562e+02, 3.092259216308594e+02, 3.155176086425781e+02, 3.198506469726562e+02, 3.251239318847656e+02, 3.29048583984375e+02, 3.317767944335938e+02, 3.378844299316406e+02, 3.376989440917969e+02, 3.3751416015625e+02, 3.373268432617188e+02, 3.371309509277344e+02, 3.36899658203125e+02, 3.356764221191406e+02, 3.130529174804688e+02, 3.153307189941406e+02, 3.207789001464844e+02, 3.271829528808594e+02, 3.355843505859375e+02, 3.351681213378906e+02, 3.28271026611328e+02, 3.2310595703125e+02, 3.229603881835938e+02, 3.228155212402344e+02, 3.2267138671875e+02, 3.225279235839844e+02, 3.223652038574219e+02, 3.22111083984375e+02, 3.13353759765625e+02, 3.178846130371094e+02, 3.2066796875e+02, 3.2425537109375e+02, 3.28290283203125e+02, 3.322711181640626e+02, 3.341771240234375e+02, 3.272791442871094e+02, 3.271067504882812e+02, 3.269255981445312e+02, 3.26631103515625e+02, 3.253685913085938e+02, 3.211794738769531e+02, 3.147554931640625e+02, 3.142424621582031e+02, 3.067947082519531e+02, 3.096283569335938e+02, 3.159135437011719e+02, 3.222028198242188e+02, 3.298296813964844e+02, 3.352489624023438e+02, 3.295444030761719e+02, 3.290449829101562e+02, 3.288643798828125e+02, 3.286847534179688e+02] +tan.vol[4].T=[2.931499938964844e+02, 3.050978393554688e+02, 3.18925537109375e+02, 3.321615295410156e+02, 3.352251892089844e+02, 3.169194946289062e+02, 3.060076599121094e+02, 3.019718627929688e+02, 2.990953063964844e+02, 3.021024169921875e+02, 3.145801086425781e+02, 3.2371826171875e+02, 3.342864379882812e+02, 3.352784118652344e+02, 3.351078186035156e+02, 3.34937744140625e+02, 3.347681579589844e+02, 3.345990600585938e+02, 3.344304809570312e+02, 3.246712951660156e+02, 3.100705871582031e+02, 3.028651428222656e+02, 2.990513305664062e+02, 3.070137329101562e+02, 3.14958740234375e+02, 3.219692993164062e+02, 3.295912170410156e+02, 3.353622436523438e+02, 3.351911010742188e+02, 3.350204772949219e+02, 3.34850341796875e+02, 3.346807250976562e+02, 3.345116271972656e+02, 3.270436706542969e+02, 3.084378051757812e+02, 3.010499267578125e+02, 3.133165588378906e+02, 3.186525268554688e+02, 3.248847045898438e+02, 3.301905212402344e+02, 3.340513000488281e+02, 3.338774719238281e+02, 3.337043151855469e+02, 3.335317993164062e+02, 3.333598937988281e+02, 3.331886596679688e+02, 3.330180358886719e+02, 3.328460693359375e+02, 3.084772644042969e+02, 3.0399951171875e+02, 3.135982666015625e+02, 3.180942077636719e+02, 3.2362841796875e+02, 3.2790869140625e+02, 3.30949951171875e+02, 3.347658996582031e+02, 3.346015319824219e+02, 3.344375915527344e+02, 3.342714538574219e+02, 3.340973205566406e+02, 3.338842468261719e+02, 3.309635314941406e+02, 3.075260314941406e+02, 3.086493835449219e+02, 3.196149291992188e+02, 3.252365112304688e+02, 3.334612426757812e+02, 3.294833374023438e+02, 3.16663848876953e+02, 3.109508056640625e+02, 3.108858642578125e+02, 3.108210144042969e+02, 3.107562561035156e+02, 3.106915588378906e+02, 3.106076354980469e+02, 3.104343872070312e+02, 3.035135192871094e+02, 3.072955932617188e+02, 3.193760986328125e+02, 3.228565063476562e+02, 3.271084899902344e+02, 3.312167663574219e+02, 3.330110168457032e+02, 3.168211669921875e+02, 3.167172241210938e+02, 3.166007995605469e+02, 3.163327026367188e+02, 3.147741394042969e+02, 3.096725463867188e+02, 3.03315673828125e+02, 3.081430358886719e+02, 3.065946655273438e+02, 3.074190673828125e+02, 3.138603820800781e+02, 3.202077941894531e+02, 3.279192504882812e+02, 3.340563354492188e+02, 3.192791442871094e+02, 3.1867138671875e+02, 3.185533752441406e+02, 3.184360046386719e+02] +tan.vol[5].T=[2.931499938964844e+02, 3.025149230957031e+02, 3.165956726074219e+02, 3.299516296386719e+02, 3.330389404296875e+02, 3.068207397460938e+02, 3.006994934082031e+02, 2.983390197753906e+02, 2.967586975097656e+02, 2.985130615234375e+02, 3.128932189941406e+02, 3.220048217773438e+02, 3.320427551269531e+02, 3.3301123046875e+02, 3.328362426757812e+02, 3.326619873046875e+02, 3.324884948730469e+02, 3.323157653808594e+02, 3.321437683105469e+02, 3.124784545898438e+02, 3.028606567382812e+02, 2.992521667480469e+02, 2.973537902832031e+02, 3.030278625488281e+02, 3.134100952148438e+02, 3.205327758789062e+02, 3.278096923828125e+02, 3.330711975097656e+02, 3.328960571289062e+02, 3.327217102050781e+02, 3.32548095703125e+02, 3.323752136230469e+02, 3.322030944824219e+02, 3.156830139160156e+02, 3.032564697265625e+02, 2.9948095703125e+02, 3.103772583007812e+02, 3.172560119628906e+02, 3.236015319824219e+02, 3.291027221679688e+02, 3.31995361328125e+02, 3.318234558105469e+02, 3.316522216796875e+02, 3.314817199707031e+02, 3.313119201660156e+02, 3.31142822265625e+02, 3.309744262695312e+02, 3.307741394042969e+02, 3.042063598632812e+02, 3.022070617675781e+02, 3.110671997070312e+02, 3.16839111328125e+02, 3.224088134765625e+02, 3.269627685546875e+02, 3.302702331542969e+02, 3.331000671386719e+02, 3.329214782714844e+02, 3.327437133789062e+02, 3.32520751953125e+02, 3.321678771972656e+02, 3.313016357421875e+02, 3.198916625976562e+02, 3.058988647460938e+02, 3.064405822753906e+02, 3.176975708007812e+02, 3.238034057617188e+02, 3.318475646972656e+02, 3.172693176269531e+02, 3.054237670898437e+02, 3.023647766113281e+02, 3.02351806640625e+02, 3.023385925292969e+02, 3.023251342773438e+02, 3.023114929199219e+02, 3.022752075195312e+02, 3.021323852539062e+02, 3.013936462402344e+02, 3.03017578125e+02, 3.169749450683594e+02, 3.218397827148438e+02, 3.261759338378906e+02, 3.303420410156251e+02, 3.272346496582036e+02, 3.067142333984375e+02, 3.066912231445312e+02, 3.066502380371094e+02, 3.063971252441406e+02, 3.044674987792969e+02, 2.998914184570312e+02, 2.959124145507812e+02, 3.043063659667969e+02, 3.06506591796875e+02, 3.067177734375e+02, 3.120355834960938e+02, 3.187302551269531e+02, 3.263916015625e+02, 3.329654541015625e+02, 3.076566467285156e+02, 3.073026733398438e+02, 3.072840270996094e+02, 3.07264892578125e+02] +temSup.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 3.256188354492188e+02, 3.230475463867188e+02, 3.206227111816406e+02, 3.187970581054688e+02, 3.099652099609375e+02, 3.183975524902344e+02, 3.191349792480469e+02, 3.193421020507812e+02, 3.193421020507812e+02, 3.193421020507812e+02, 3.193421020507812e+02, 3.193421020507812e+02, 3.193421020507812e+02, 3.193420715332031e+02, 3.17962646484375e+02, 3.170766296386719e+02, 3.158730773925781e+02, 3.158559265136719e+02, 3.132024841308594e+02, 3.168089294433594e+02, 3.179489440917969e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.168845520019531e+02, 3.203175964355469e+02, 3.212330017089844e+02, 3.208264465332031e+02, 3.180168762207031e+02, 3.198740539550781e+02, 3.198624572753906e+02, 3.1985791015625e+02, 3.198330078125e+02, 3.198330078125e+02, 3.198330078125e+02, 3.198330078125e+02, 3.198330078125e+02, 3.198330078125e+02, 3.198330078125e+02, 3.104444885253906e+02, 3.194959716796875e+02, 3.131055908203125e+02, 3.181314697265625e+02, 3.178911437988281e+02, 3.183878784179688e+02, 3.1988916015625e+02, 3.214697265625e+02, 3.217308044433594e+02, 3.217308044433594e+02, 3.217308044433594e+02, 3.141393432617188e+02, 3.144353332519531e+02, 3.180656433105469e+02, 3.208478698730469e+02, 3.19947509765625e+02, 3.156688842773438e+02, 3.240574035644531e+02, 3.230086364746094e+02, 3.209706420898438e+02, 3.208121948242188e+02, 3.218486938476562e+02, 3.222317504882812e+02, 3.222317504882812e+02, 3.222317504882812e+02, 3.222317504882812e+02, 3.222317504882812e+02, 3.200734558105469e+02, 3.204107971191406e+02, 3.168961791992188e+02, 3.146908874511719e+02, 3.225734558105469e+02, 3.269641418457031e+02, 3.270079345703125e+02, 3.277624816894531e+02, 3.301795959472656e+02, 3.3168017578125e+02, 3.3168017578125e+02, 3.230538940429688e+02, 3.240528564453125e+02, 3.247028503417969e+02, 3.253434448242188e+02, 3.262286071777344e+02, 3.176151733398438e+02, 3.172063903808594e+02, 3.155133361816406e+02, 3.190210266113281e+02, 3.264122009277344e+02, 3.288744812011719e+02, 3.3101318359375e+02, 3.32521728515625e+02, 3.3255078125e+02, 3.3255078125e+02, 3.3255078125e+02] +temRet.T=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.986968383789062e+02, 2.966675415039062e+02, 2.952355041503906e+02, 2.950697326660156e+02, 2.951537780761719e+02, 2.955013427734375e+02, 2.955938415527344e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.958265380859375e+02, 2.981253967285156e+02, 2.980572509765625e+02, 2.970023803710938e+02, 2.9595068359375e+02, 2.964130859375e+02, 2.967606201171875e+02, 2.970719299316406e+02, 2.970589904785156e+02, 2.970589904785156e+02, 2.970589904785156e+02, 2.970589904785156e+02, 2.970589904785156e+02, 2.970589904785156e+02, 2.970589904785156e+02, 3.009174499511719e+02, 3.000195007324219e+02, 2.978386840820312e+02, 2.977105102539062e+02, 2.969099731445312e+02, 2.971434326171875e+02, 2.976184997558594e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.977650451660156e+02, 2.91803466796875e+02, 3.016221313476562e+02, 2.998193359375e+02, 2.982860717773438e+02, 2.977245788574219e+02, 2.982049255371094e+02, 2.987593078613281e+02, 2.991294860839844e+02, 2.991854553222656e+02, 2.991854553222656e+02, 2.991854553222656e+02, 2.917838439941406e+02, 2.891346740722656e+02, 2.887006530761719e+02, 2.903417663574219e+02, 3.054011535644531e+02, 3.024534912109375e+02, 2.979750366210938e+02, 2.958736267089844e+02, 2.951653442382812e+02, 2.959565124511719e+02, 2.967398681640625e+02, 2.969474792480469e+02, 2.969474792480469e+02, 2.969474792480469e+02, 2.969474792480469e+02, 2.969474792480469e+02, 2.913080749511719e+02, 2.890217590332031e+02, 3.045021362304688e+02, 3.0227490234375e+02, 2.980868225097656e+02, 2.974461364746094e+02, 2.972914733886719e+02, 2.975037841796875e+02, 2.985655517578125e+02, 2.990927734375e+02, 2.990927734375e+02, 2.933696899414062e+02, 2.889990234375e+02, 2.890831909179688e+02, 2.904089050292969e+02, 2.905774230957031e+02, 3.067073059082031e+02, 3.056609497070312e+02, 3.007421264648438e+02, 2.98074462890625e+02, 2.959891662597656e+02, 2.955840454101562e+02, 2.968770751953125e+02, 2.97721923828125e+02, 2.977438354492188e+02, 2.977438354492188e+02, 2.977438354492188e+02] +boi.T=[2.931499938964844e+02, 3.145199890136719e+02, 3.280221862792969e+02, 3.408175048828125e+02, 2.944131469726562e+02, 2.885013732910156e+02, 2.881697082519531e+02, 2.881510925292969e+02, 2.881500549316406e+02, 3.099475402832031e+02, 3.220867004394531e+02, 3.299596862792969e+02, 3.428172302246094e+02, 2.920494995117188e+02, 2.883686828613281e+02, 2.881622924804688e+02, 2.881506958007812e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.131911315917969e+02, 3.213524780273438e+02, 3.27313232421875e+02, 3.388067016601562e+02, 2.985252990722656e+02, 2.887320861816406e+02, 2.881826477050781e+02, 2.881518249511719e+02, 2.881501159667969e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.180075378417969e+02, 3.241776123046875e+02, 3.296861877441406e+02, 3.342117004394531e+02, 3.1964306640625e+02, 2.899166564941407e+02, 2.882491455078125e+02, 2.881555786132812e+02, 2.881502990722656e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.1309423828125e+02, 3.181221313476562e+02, 3.233136291503906e+02, 3.277310485839844e+02, 3.308626403808594e+02, 3.332315979003906e+02, 3.070059814453125e+02, 2.89207763671875e+02, 2.882092895507812e+02, 2.881533203125e+02, 2.881501770019531e+02, 2.881500244140625e+02, 2.881499938964844e+02, 3.169956359863281e+02, 3.156653442382812e+02, 3.240617980957031e+02, 3.313585510253906e+02, 3.399079895019531e+02, 2.925779724121094e+02, 2.883984680175781e+02, 2.881639404296875e+02, 2.881507873535156e+02, 2.881500549316406e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.166841430664062e+02, 3.146869201660156e+02, 3.225437927246094e+02, 3.269466552734375e+02, 3.310426025390625e+02, 3.342625732421875e+02, 3.208825683593761e+02, 2.899861755371094e+02, 2.882529907226562e+02, 2.881557922363281e+02, 2.881503295898438e+02, 2.881500244140625e+02, 2.881499938964844e+02, 2.881499938964844e+02, 3.178860168457031e+02, 3.178082580566406e+02, 3.155057983398438e+02, 3.190133361816406e+02, 3.263859252929688e+02, 3.335111083984375e+02, 3.370455627441406e+02, 2.911400451660156e+02, 2.883177185058594e+02, 2.88159423828125e+02, 2.881505432128906e+02] +val1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.816385567188263e-01, 2.165157496929169e-01, 1.152255386114123e-01, 1.315095722675323e-01, 3.264842331409454e-01, 2.102323025465012e-01, 2.38674134016037e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.056768119335175e-01, 4.15797084569931e-01, 3.819682002067566e-01, 2.523422837257385e-01, 3.189017772674561e-01, 3.407725095748901e-01, 3.487116098403931e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.949462115764618e-01, 4.772971868515012e-01, 3.802428245544434e-01, 3.682388067245483e-01, 3.098104596138e-01, 3.390062749385834e-01, 3.689593076705933e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.190818339586258e-02, 5.593255758285522e-01, 5.479357838630676e-01, 4.198070466518402e-01, 3.703529238700867e-01, 4.059667587280273e-01, 4.307170808315277e-01, 4.346539974212646e-01, 0e+00, 0e+00, 0e+00, 1.181134432554245e-01, 2.341202199459076e-01, 4.643095433712006e-01, 1.588860899209976e-01, 8.383031487464905e-01, 6.44451916217804e-01, 3.433343172073364e-01, 1.990256607532501e-01, 8.710396289825439e-02, 2.481199651956558e-01, 3.001629412174228e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.532355695962906e-01, 3.204615712165833e-01, 7.053045034408569e-01, 6.547838449478149e-01, 4.346028864383698e-01, 3.175489604473114e-01, 3.002402484416962e-01, 3.248827159404761e-01, 3.649094104766845e-01, 0e+00, 0e+00, 1.227483972907066e-01, 3.649803698062897e-01, 1.797108203172684e-01, 1.479613184928894e-01, 1.724251806735992e-01, 1e+00, 7.821504473686218e-01, 5.704678297042847e-01, 3.986476063728333e-01, 1.798134446144104e-01, 1.369947344064713e-01, 2.707929015159607e-01, 3.103765249252319e-01, 0e+00, 0e+00, 0e+00] +val2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.759676575660706e-01, 6.450822949409485e-02, 1.1711273342371e-02, 1.136280745267868e-01, 2.142017036676407e-01, 1.411939859390259e-01, 1.705066859722137e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.53577584028244e-01, 3.261803686618805e-01, 2.381162196397781e-01, 2.394731789827347e-01, 3.111186623573303e-01, 2.763030529022217e-01, 2.834488749504089e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.319035708904266e-01, 3.890336155891416e-01, 2.937272489070892e-01, 3.365603685379028e-01, 2.964770197868347e-01, 2.881713509559631e-01, 3.109926283359528e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.699026048183441e-01, 4.490375518798828e-01, 3.442372679710388e-01, 3.561121225357056e-01, 3.563507795333862e-01, 3.726206421852112e-01, 3.752063810825348e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.480071995407343e-03, 6.48650050163269e-01, 4.53479528427124e-01, 1.976438462734222e-01, 1.726873368024826e-01, 1.509132236242294e-01, 2.154240310192108e-01, 2.496390491724017e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.06789767742157e-01, 4.617750942707062e-01, 2.486635744571686e-01, 2.599547803401947e-01, 2.606691122055054e-01, 2.674352824687963e-01, 2.952465713024139e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.709231667220592e-03, 7.685872260481119e-03, 1e+00, 5.662516951560974e-01, 3.713929057121277e-01, 3.18213164806366e-01, 1.766519248485565e-01, 1.604105979204178e-01, 2.357254028320312e-01, 2.608088850975037e-01, 0e+00, 0e+00, 0e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouseTemplate.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse0.txt similarity index 96% rename from Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouseTemplate.txt rename to Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse0.txt index 66aac03fd52..edb38889147 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouseTemplate.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse0.txt @@ -1,4 +1,4 @@ -last-generated=2023-09-08 +last-generated=2023-09-15 statistics-simulation= { "linear": " ", @@ -6,4 +6,4 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 1e+06] -Tout.T=[2.609500122070312e+02, 2.619280090332031e+02, 2.625499877929688e+02, 2.634280090332031e+02, 2.683388977050781e+02, 2.720243530273438e+02, 2.720499877929688e+02, 2.713381958007812e+02, 2.719623107910156e+02, 2.6925e+02, 2.701626892089844e+02, 2.723464965820312e+02, 2.733500061035156e+02, 2.748500061035156e+02, 2.725348815917969e+02, 2.727846984863281e+02, 2.745153503417969e+02, 2.731499938964844e+02, 2.731499938964844e+02, 2.7229443359375e+02, 2.698047180175781e+02, 2.689043273925781e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.698500061035156e+02, 2.706798400878906e+02, 2.716392211914062e+02, 2.7251513671875e+02, 2.704963989257812e+02, 2.680260009765625e+02, 2.676611022949219e+02, 2.660404052734375e+02, 2.6425e+02, 2.58110595703125e+02, 2.604417114257812e+02, 2.657166748046875e+02, 2.6940087890625e+02, 2.682166748046875e+02, 2.657166748046875e+02, 2.637611083984375e+02, 2.618667907714844e+02, 2.5925e+02, 2.581764831542969e+02, 2.604611206054688e+02, 2.616584777832031e+02, 2.608323364257812e+02, 2.561037292480469e+02, 2.546492767333984e+02, 2.542643737792969e+02, 2.530166625976562e+02, 2.509499969482422e+02, 2.541903991699219e+02, 2.587667236328125e+02, 2.602073364257812e+02, 2.569347839355469e+02, 2.549143829345703e+02, 2.536127471923828e+02, 2.520500030517578e+02, 2.519742736816406e+02, 2.514499969482422e+02, 2.582235412597656e+02, 2.619212036132812e+02, 2.638611145019531e+02, 2.631499938964844e+02, 2.642012023925781e+02, 2.644055480957031e+02, 2.645002136230469e+02, 2.648500061035156e+02, 2.653500061035156e+02, 2.700659484863281e+02, 2.745177612304688e+02, 2.744092712402344e+02, 2.731917419433594e+02, 2.732166748046875e+02, 2.720499877929688e+02, 2.728128356933594e+02, 2.71162841796875e+02, 2.720499877929688e+02, 2.747403564453125e+02, 2.748898315429688e+02, 2.714833374023438e+02, 2.680546264648438e+02, 2.682166748046875e+02, 2.695e+02, 2.701371154785156e+02, 2.691971130371094e+02, 2.709500122070312e+02, 2.748510131835938e+02, 2.769389038085938e+02, 2.755428771972656e+02, 2.76398193359375e+02, 2.743096923828125e+02, 2.759377136230469e+02, 2.759291076660156e+02, 2.744010620117188e+02, 2.759500122070312e+02, 2.764174499511719e+02] +TOut.T=[2.609500122070312e+02, 2.619280090332031e+02, 2.625499877929688e+02, 2.634280090332031e+02, 2.683388977050781e+02, 2.720243530273438e+02, 2.720499877929688e+02, 2.713381958007812e+02, 2.719623107910156e+02, 2.6925e+02, 2.701626892089844e+02, 2.723464965820312e+02, 2.733500061035156e+02, 2.748500061035156e+02, 2.725348815917969e+02, 2.727846984863281e+02, 2.745153503417969e+02, 2.731499938964844e+02, 2.731499938964844e+02, 2.7229443359375e+02, 2.698047180175781e+02, 2.689043273925781e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.703500061035156e+02, 2.698500061035156e+02, 2.706798400878906e+02, 2.716392211914062e+02, 2.7251513671875e+02, 2.704963989257812e+02, 2.680260009765625e+02, 2.676611022949219e+02, 2.660404052734375e+02, 2.6425e+02, 2.58110595703125e+02, 2.604417114257812e+02, 2.657166748046875e+02, 2.6940087890625e+02, 2.682166748046875e+02, 2.657166748046875e+02, 2.637611083984375e+02, 2.618667907714844e+02, 2.5925e+02, 2.581764831542969e+02, 2.604611206054688e+02, 2.616584777832031e+02, 2.608323364257812e+02, 2.561037292480469e+02, 2.546492767333984e+02, 2.542643737792969e+02, 2.530166625976562e+02, 2.509499969482422e+02, 2.541903991699219e+02, 2.587667236328125e+02, 2.602073364257812e+02, 2.569347839355469e+02, 2.549143829345703e+02, 2.536127471923828e+02, 2.520500030517578e+02, 2.519742736816406e+02, 2.514499969482422e+02, 2.582235412597656e+02, 2.619212036132812e+02, 2.638611145019531e+02, 2.631499938964844e+02, 2.642012023925781e+02, 2.644055480957031e+02, 2.645002136230469e+02, 2.648500061035156e+02, 2.653500061035156e+02, 2.700659484863281e+02, 2.745177612304688e+02, 2.744092712402344e+02, 2.731917419433594e+02, 2.732166748046875e+02, 2.720499877929688e+02, 2.728128356933594e+02, 2.71162841796875e+02, 2.720499877929688e+02, 2.747403564453125e+02, 2.748898315429688e+02, 2.714833374023438e+02, 2.680546264648438e+02, 2.682166748046875e+02, 2.695e+02, 2.701371154785156e+02, 2.691971130371094e+02, 2.709500122070312e+02, 2.748510131835938e+02, 2.769389038085938e+02, 2.755428771972656e+02, 2.76398193359375e+02, 2.743096923828125e+02, 2.759377136230469e+02, 2.759291076660156e+02, 2.744010620117188e+02, 2.759500122070312e+02, 2.764174499511719e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse3.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse3.txt index 32dcfc4a3c3..784b75e0c68 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse3.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse3.txt @@ -1,4 +1,4 @@ -last-generated=2023-09-08 +last-generated=2023-09-15 statistics-simulation= { "linear": " ", @@ -7,4 +7,4 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 1e+06] -zone.T=[2.931499938964844e+02, 2.930606689453125e+02, 2.929643249511719e+02, 2.928974304199219e+02, 2.930238342285156e+02, 2.930650634765625e+02, 2.930123291015625e+02, 2.929456481933594e+02, 2.928767395019531e+02, 2.928078918457031e+02, 2.927404479980469e+02, 2.9267724609375e+02, 2.926165771484375e+02, 2.925605163574219e+02, 2.925022888183594e+02, 2.924439086914062e+02, 2.923875122070312e+02, 2.923274841308594e+02, 2.92265869140625e+02, 2.922026977539062e+02, 2.921306457519531e+02, 2.920592956542969e+02, 2.919894714355469e+02, 2.919207763671875e+02, 2.918522338867188e+02, 2.917841491699219e+02, 2.917159729003906e+02, 2.916467895507812e+02, 2.915788269042969e+02, 2.915138549804688e+02, 2.914527893066406e+02, 2.913910827636719e+02, 2.913223266601562e+02, 2.912518920898438e+02, 2.911763610839844e+02, 2.910963134765625e+02, 2.91012939453125e+02, 2.909146118164062e+02, 2.909188232421875e+02, 2.911439819335938e+02, 2.913373718261719e+02, 2.9132763671875e+02, 2.912524108886719e+02, 2.911689758300781e+02, 2.910796508789062e+02, 2.909833679199219e+02, 2.9088916015625e+02, 2.909557800292969e+02, 2.909430236816406e+02, 2.908749084472656e+02, 2.907784423828125e+02, 2.906665649414062e+02, 2.905516052246094e+02, 2.904307250976562e+02, 2.903084411621094e+02, 2.902685852050781e+02, 2.904729614257812e+02, 2.90720458984375e+02, 2.908230285644531e+02, 2.907205505371094e+02, 2.906036071777344e+02, 2.904841613769531e+02, 2.90362548828125e+02, 2.902437438964844e+02, 2.902868347167969e+02, 2.904608154296875e+02, 2.906579284667969e+02, 2.906626892089844e+02, 2.905770263671875e+02, 2.904942626953125e+02, 2.904112548828125e+02, 2.90329833984375e+02, 2.902554016113281e+02, 2.902565612792969e+02, 2.903314819335938e+02, 2.903802490234375e+02, 2.903304748535156e+02, 2.902759704589844e+02, 2.902184753417969e+02, 2.901612548828125e+02, 2.901092224121094e+02, 2.901262512207031e+02, 2.903362731933594e+02, 2.905704040527344e+02, 2.906482238769531e+02, 2.905876770019531e+02, 2.905180358886719e+02, 2.904518127441406e+02, 2.903863830566406e+02, 2.903204040527344e+02, 2.902714538574219e+02, 2.903493041992188e+02, 2.905325927734375e+02, 2.905527954101562e+02, 2.905055541992188e+02, 2.904557495117188e+02, 2.904060974121094e+02, 2.903577270507812e+02, 2.903117370605469e+02, 2.902666931152344e+02, 2.902240600585938e+02] +zon.T=[2.931499938964844e+02, 2.9306005859375e+02, 2.929616394042969e+02, 2.928758544921875e+02, 2.92997802734375e+02, 2.930461120605469e+02, 2.930009460449219e+02, 2.929330749511719e+02, 2.928653259277344e+02, 2.927970275878906e+02, 2.927247314453125e+02, 2.926568298339844e+02, 2.925936889648438e+02, 2.925356750488281e+02, 2.924778442382812e+02, 2.924168395996094e+02, 2.923566589355469e+02, 2.923004150390625e+02, 2.922396240234375e+02, 2.921795349121094e+02, 2.921127014160156e+02, 2.920400695800781e+02, 2.91968505859375e+02, 2.919002075195312e+02, 2.918317260742188e+02, 2.917633666992188e+02, 2.916952209472656e+02, 2.916273498535156e+02, 2.915586242675781e+02, 2.914906921386719e+02, 2.9142626953125e+02, 2.913652038574219e+02, 2.913036499023438e+02, 2.912339782714844e+02, 2.911610717773438e+02, 2.910832824707031e+02, 2.910033264160156e+02, 2.909085388183594e+02, 2.908991394042969e+02, 2.91130859375e+02, 2.913405151367188e+02, 2.913243408203125e+02, 2.912484436035156e+02, 2.911644287109375e+02, 2.910741271972656e+02, 2.909767150878906e+02, 2.908773498535156e+02, 2.909516296386719e+02, 2.909401245117188e+02, 2.908738098144531e+02, 2.907816467285156e+02, 2.906694030761719e+02, 2.905554809570312e+02, 2.904389343261719e+02, 2.9031787109375e+02, 2.902599792480469e+02, 2.904719848632812e+02, 2.90725341796875e+02, 2.908395080566406e+02, 2.907338562011719e+02, 2.906170349121094e+02, 2.904976806640625e+02, 2.903753662109375e+02, 2.902527465820312e+02, 2.902908630371094e+02, 2.904625244140625e+02, 2.906626586914062e+02, 2.906727905273438e+02, 2.905862731933594e+02, 2.905029602050781e+02, 2.904198303222656e+02, 2.903381042480469e+02, 2.902600708007812e+02, 2.902568969726562e+02, 2.903194580078125e+02, 2.903845825195312e+02, 2.903355712890625e+02, 2.902826538085938e+02, 2.902266540527344e+02, 2.9016943359375e+02, 2.901140441894531e+02, 2.901040954589844e+02, 2.903139343261719e+02, 2.905582275390625e+02, 2.906391906738281e+02, 2.90573974609375e+02, 2.905021667480469e+02, 2.904314270019531e+02, 2.903667602539062e+02, 2.903014831542969e+02, 2.902439270019531e+02, 2.903185424804688e+02, 2.905068054199219e+02, 2.9053369140625e+02, 2.90487548828125e+02, 2.904394226074219e+02, 2.903887329101562e+02, 2.903447265625e+02, 2.903069458007812e+02, 2.902811279296875e+02, 2.902364501953125e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse4.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse4.txt index bc2dbab8342..4a6fc73c516 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse4.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse4.txt @@ -1,4 +1,4 @@ -last-generated=2023-09-08 +last-generated=2023-09-15 statistics-initialization= { "nonlinear": "5", @@ -12,5 +12,5 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 1e+06] -zone.T=[2.931499938964844e+02, 3.018652954101562e+02, 3.023765258789062e+02, 3.028914794921875e+02, 3.035993041992188e+02, 3.042365112304688e+02, 3.047744750976562e+02, 3.05290771484375e+02, 3.058043518066406e+02, 3.063145751953125e+02, 3.068218383789062e+02, 3.073329162597656e+02, 3.078472290039062e+02, 3.083641052246094e+02, 3.088750305175781e+02, 3.093839111328125e+02, 3.09893310546875e+02, 3.104012756347656e+02, 3.109044189453125e+02, 3.114033813476562e+02, 3.118929748535156e+02, 3.123785400390625e+02, 3.128649291992188e+02, 3.133509521484375e+02, 3.138353881835938e+02, 3.143179016113281e+02, 3.147996215820312e+02, 3.152798156738281e+02, 3.157587890625e+02, 3.162375793457031e+02, 3.167167358398438e+02, 3.171956787109375e+02, 3.176707153320312e+02, 3.181366271972656e+02, 3.185990600585938e+02, 3.190547790527344e+02, 3.195059204101562e+02, 3.199426879882812e+02, 3.204760131835938e+02, 3.212296752929688e+02, 3.219649047851562e+02, 3.224814147949219e+02, 3.229290466308594e+02, 3.233672485351562e+02, 3.237968139648438e+02, 3.242164001464844e+02, 3.2463623046875e+02, 3.252275695800781e+02, 3.257299194335938e+02, 3.261766662597656e+02, 3.265938110351562e+02, 3.269905395507812e+02, 3.273827819824219e+02, 3.277706298828125e+02, 3.281524353027344e+02, 3.285976257324219e+02, 3.293054809570312e+02, 3.300552368164062e+02, 3.306694946289062e+02, 3.310607299804688e+02, 3.314381103515625e+02, 3.318106689453125e+02, 3.321793823242188e+02, 3.325464172363281e+02, 3.330693054199219e+02, 3.33726806640625e+02, 3.344093933105469e+02, 3.349058532714844e+02, 3.353015441894531e+02, 3.356973266601562e+02, 3.360923461914062e+02, 3.364874877929688e+02, 3.36885986328125e+02, 3.373557434082031e+02, 3.378902282714844e+02, 3.384234008789062e+02, 3.388450622558594e+02, 3.392593994140625e+02, 3.396685180664062e+02, 3.400756225585938e+02, 3.404804382324219e+02, 3.409362487792969e+02, 3.416002807617188e+02, 3.423026733398438e+02, 3.428507385253906e+02, 3.432394714355469e+02, 3.436236572265625e+02, 3.440080871582031e+02, 3.443947143554688e+02, 3.447819519042969e+02, 3.451823425292969e+02, 3.457003173828125e+02, 3.46326171875e+02, 3.468087768554688e+02, 3.472050476074219e+02, 3.475966491699219e+02, 3.479892883300781e+02, 3.483822021484375e+02, 3.487869262695312e+02, 3.491904907226562e+02, 3.49581298828125e+02] +zon.T=[2.931499938964844e+02, 3.018655395507812e+02, 3.023765258789062e+02, 3.028820190429688e+02, 3.035917358398438e+02, 3.042312316894531e+02, 3.047730407714844e+02, 3.052900390625e+02, 3.058052062988281e+02, 3.063175659179688e+02, 3.0682421875e+02, 3.073335266113281e+02, 3.078456726074219e+02, 3.083611450195312e+02, 3.088749389648438e+02, 3.093839416503906e+02, 3.098919067382812e+02, 3.104018859863281e+02, 3.109057312011719e+02, 3.114082336425781e+02, 3.11902587890625e+02, 3.123892517089844e+02, 3.12875244140625e+02, 3.133624267578125e+02, 3.138478088378906e+02, 3.1433154296875e+02, 3.148138122558594e+02, 3.152944946289062e+02, 3.157728576660156e+02, 3.162499389648438e+02, 3.167288513183594e+02, 3.1720947265625e+02, 3.176881103515625e+02, 3.181569519042969e+02, 3.186206970214844e+02, 3.190777587890625e+02, 3.195311584472656e+02, 3.199681701660156e+02, 3.204857482910156e+02, 3.21242431640625e+02, 3.219795227050781e+02, 3.224912109375e+02, 3.229386901855469e+02, 3.233761596679688e+02, 3.238057250976562e+02, 3.242266540527344e+02, 3.246435546875e+02, 3.252288818359375e+02, 3.257330017089844e+02, 3.261781921386719e+02, 3.265964660644531e+02, 3.269928283691406e+02, 3.273857421875e+02, 3.277745056152344e+02, 3.281571044921875e+02, 3.2859912109375e+02, 3.293075866699219e+02, 3.3005908203125e+02, 3.306735229492188e+02, 3.310649719238281e+02, 3.314421691894531e+02, 3.318154296875e+02, 3.321842041015625e+02, 3.325507507324219e+02, 3.330729370117188e+02, 3.337298278808594e+02, 3.344135131835938e+02, 3.349103698730469e+02, 3.353056640625e+02, 3.357024536132812e+02, 3.360977783203125e+02, 3.364932250976562e+02, 3.3689013671875e+02, 3.373594970703125e+02, 3.378935241699219e+02, 3.384297790527344e+02, 3.388514404296875e+02, 3.392666931152344e+02, 3.396771240234375e+02, 3.40084716796875e+02, 3.404930725097656e+02, 3.409429016113281e+02, 3.416102905273438e+02, 3.423132629394531e+02, 3.428550415039062e+02, 3.432469482421875e+02, 3.436300048828125e+02, 3.440122680664062e+02, 3.443994750976562e+02, 3.447848205566406e+02, 3.451763000488281e+02, 3.456962280273438e+02, 3.463292846679688e+02, 3.468038024902344e+02, 3.472008666992188e+02, 3.475947265625e+02, 3.47984619140625e+02, 3.483796081542969e+02, 3.487793884277344e+02, 3.491901550292969e+02, 3.495806274414062e+02] heaWat.u=[1e+00, 1e+00] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse5.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse5.txt index aeeebea78ad..f9784a13b41 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse5.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse5.txt @@ -1,4 +1,4 @@ -last-generated=2023-09-08 +last-generated=2023-09-15 statistics-initialization= { "nonlinear": "5", @@ -12,5 +12,5 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 1e+06] -zone.T=[2.931499938964844e+02, 2.945088500976562e+02, 2.959101867675781e+02, 2.966435546875e+02, 2.963061828613281e+02, 2.943134765625e+02, 2.955157165527344e+02, 2.947713317871094e+02, 2.949506225585938e+02, 2.954654846191406e+02, 2.949836730957031e+02, 2.943354187011719e+02, 2.95562255859375e+02, 2.943411865234375e+02, 2.964649658203125e+02, 2.953833618164062e+02, 2.944506530761719e+02, 2.941693420410156e+02, 2.967954406738281e+02, 2.956394958496094e+02, 2.947533264160156e+02, 2.943429870605469e+02, 2.941551513671875e+02, 2.967920837402344e+02, 2.954975280761719e+02, 2.946376953125e+02, 2.942773742675781e+02, 2.945584716796875e+02, 2.964990844726562e+02, 2.9513818359375e+02, 2.944798889160156e+02, 2.942196655273438e+02, 2.952792663574219e+02, 2.963535461425781e+02, 2.950684814453125e+02, 2.944270324707031e+02, 2.941518249511719e+02, 2.964158020019531e+02, 2.948146362304688e+02, 2.942771301269531e+02, 2.944650268554688e+02, 2.944434509277344e+02, 2.943599548339844e+02, 2.942665710449219e+02, 2.941667785644531e+02, 2.942500915527344e+02, 2.942366638183594e+02, 2.943132629394531e+02, 2.941784362792969e+02, 2.943945007324219e+02, 2.946878356933594e+02, 2.944981079101562e+02, 2.942091064453125e+02, 2.966917724609375e+02, 2.947072448730469e+02, 2.950520935058594e+02, 2.942230224609375e+02, 2.94413330078125e+02, 2.945167541503906e+02, 2.94404541015625e+02, 2.942772216796875e+02, 2.942956848144531e+02, 2.945955810546875e+02, 2.966785278320312e+02, 2.95890869140625e+02, 2.943241577148438e+02, 2.944898376464844e+02, 2.944913635253906e+02, 2.943954162597656e+02, 2.943005065917969e+02, 2.942054138183594e+02, 2.951721496582031e+02, 2.958705444335938e+02, 2.944257202148438e+02, 2.942926330566406e+02, 2.942910766601562e+02, 2.9422998046875e+02, 2.941651000976562e+02, 2.943297424316406e+02, 2.947159729003906e+02, 2.951884765625e+02, 2.956945190429688e+02, 2.9439013671875e+02, 2.946013793945312e+02, 2.946728820800781e+02, 2.94598388671875e+02, 2.945144958496094e+02, 2.944308471679688e+02, 2.943534240722656e+02, 2.942757568359375e+02, 2.942055969238281e+02, 2.942643432617188e+02, 2.944358215332031e+02, 2.9445458984375e+02, 2.943978271484375e+02, 2.943378601074219e+02, 2.942750549316406e+02, 2.942183227539062e+02, 2.94168212890625e+02, 2.954824829101562e+02, 2.941523742675781e+02] +zon.T=[2.931499938964844e+02, 2.945088500976562e+02, 2.959101867675781e+02, 2.966435546875e+02, 2.963061828613281e+02, 2.943134765625e+02, 2.955157165527344e+02, 2.947713317871094e+02, 2.949506225585938e+02, 2.954654846191406e+02, 2.949836730957031e+02, 2.943354187011719e+02, 2.95562255859375e+02, 2.943411865234375e+02, 2.964649658203125e+02, 2.953833618164062e+02, 2.944506530761719e+02, 2.941693420410156e+02, 2.967954406738281e+02, 2.956394958496094e+02, 2.947533264160156e+02, 2.943429870605469e+02, 2.941551513671875e+02, 2.967920837402344e+02, 2.954975280761719e+02, 2.946376953125e+02, 2.942773742675781e+02, 2.945584716796875e+02, 2.964990844726562e+02, 2.9513818359375e+02, 2.944798889160156e+02, 2.942196655273438e+02, 2.952792663574219e+02, 2.963535461425781e+02, 2.950684814453125e+02, 2.944270324707031e+02, 2.941518249511719e+02, 2.964158020019531e+02, 2.948146362304688e+02, 2.942771301269531e+02, 2.944650268554688e+02, 2.944434509277344e+02, 2.943599548339844e+02, 2.942665710449219e+02, 2.941667785644531e+02, 2.942500915527344e+02, 2.942366638183594e+02, 2.943132629394531e+02, 2.941784362792969e+02, 2.943945007324219e+02, 2.946878356933594e+02, 2.944981079101562e+02, 2.942091064453125e+02, 2.966917724609375e+02, 2.947072448730469e+02, 2.950520935058594e+02, 2.942230224609375e+02, 2.94413330078125e+02, 2.945167541503906e+02, 2.94404541015625e+02, 2.942772216796875e+02, 2.942956848144531e+02, 2.945955810546875e+02, 2.966785278320312e+02, 2.95890869140625e+02, 2.943241577148438e+02, 2.944898376464844e+02, 2.944913635253906e+02, 2.943954162597656e+02, 2.943005065917969e+02, 2.942054138183594e+02, 2.951721496582031e+02, 2.958705444335938e+02, 2.944257202148438e+02, 2.942926330566406e+02, 2.942910766601562e+02, 2.9422998046875e+02, 2.941651000976562e+02, 2.943297424316406e+02, 2.947159729003906e+02, 2.951884765625e+02, 2.956945190429688e+02, 2.9439013671875e+02, 2.946013793945312e+02, 2.946728820800781e+02, 2.94598388671875e+02, 2.945144958496094e+02, 2.944308471679688e+02, 2.943534240722656e+02, 2.942757568359375e+02, 2.942055969238281e+02, 2.942643432617188e+02, 2.944358215332031e+02, 2.9445458984375e+02, 2.943978271484375e+02, 2.943378601074219e+02, 2.942750549316406e+02, 2.942183227539062e+02, 2.94168212890625e+02, 2.954824829101562e+02, 2.941523742675781e+02] heaWat.u=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 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, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse6.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse6.txt index a85657b1662..74e184818bc 100644 --- a/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse6.txt +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_Examples_Tutorial_SimpleHouse_SimpleHouse6.txt @@ -1,4 +1,4 @@ -last-generated=2023-09-08 +last-generated=2023-09-15 statistics-initialization= { "nonlinear": "5, 1", @@ -12,7 +12,7 @@ statistics-simulation= "numerical Jacobians": "0" } time=[0e+00, 1e+06] -zone.T=[2.931499938964844e+02, 2.945050964355469e+02, 2.959047546386719e+02, 2.96646484375e+02, 2.943834838867188e+02, 2.942815856933594e+02, 2.942722473144531e+02, 2.942023620605469e+02, 2.9615576171875e+02, 2.945042724609375e+02, 2.941602172851562e+02, 2.941692199707031e+02, 2.941705627441406e+02, 2.941705932617188e+02, 2.941704406738281e+02, 2.941652526855469e+02, 2.941562194824219e+02, 2.941512756347656e+02, 2.944099426269531e+02, 2.951903076171875e+02, 2.966014404296875e+02, 2.966050109863281e+02, 2.957460021972656e+02, 2.950239562988281e+02, 2.945757141113281e+02, 2.943212280273438e+02, 2.941802368164062e+02, 2.960645446777344e+02, 2.962243957519531e+02, 2.950863647460938e+02, 2.945101013183594e+02, 2.942584533691406e+02, 2.941826782226562e+02, 2.967984619140625e+02, 2.956029663085938e+02, 2.946762084960938e+02, 2.942572631835938e+02, 2.9655712890625e+02, 2.942179870605469e+02, 2.950230712890625e+02, 2.957950439453125e+02, 2.958896789550781e+02, 2.958037719726562e+02, 2.957060852050781e+02, 2.956017150878906e+02, 2.954903564453125e+02, 2.953819580078125e+02, 2.957755432128906e+02, 2.959239501953125e+02, 2.958983764648438e+02, 2.958122863769531e+02, 2.956854858398438e+02, 2.955560913085938e+02, 2.954240417480469e+02, 2.9528759765625e+02, 2.95342041015625e+02, 2.961524658203125e+02, 2.970876770019531e+02, 2.97622314453125e+02, 2.975182495117188e+02, 2.973820190429688e+02, 2.972417297363281e+02, 2.970984191894531e+02, 2.969559326171875e+02, 2.972681274414062e+02, 2.979461669921875e+02, 2.965861511230469e+02, 2.966249084472656e+02, 2.964938659667969e+02, 2.963466186523438e+02, 2.961501159667969e+02, 2.980364990234375e+02, 2.979473571777344e+02, 2.980525207519531e+02, 2.969268188476562e+02, 2.971317443847656e+02, 2.969201354980469e+02, 2.968055725097656e+02, 2.965866394042969e+02, 2.964843139648438e+02, 2.962891540527344e+02, 2.97805908203125e+02, 2.971761474609375e+02, 2.978529968261719e+02, 2.979222412109375e+02, 2.9753515625e+02, 2.973719787597656e+02, 2.972562866210938e+02, 2.971741333007812e+02, 2.969613037109375e+02, 2.969106140136719e+02, 2.973577270507812e+02, 2.980824584960938e+02, 2.980605163574219e+02, 2.979991455078125e+02, 2.977561340332031e+02, 2.976838989257812e+02, 2.976190185546875e+02, 2.974039306640625e+02, 2.974400024414062e+02, 2.973416442871094e+02] +zon.T=[2.931499938964844e+02, 2.945050964355469e+02, 2.959047546386719e+02, 2.96646484375e+02, 2.943834838867188e+02, 2.942815856933594e+02, 2.942722473144531e+02, 2.942023620605469e+02, 2.9615576171875e+02, 2.945042724609375e+02, 2.941602172851562e+02, 2.941692199707031e+02, 2.941705627441406e+02, 2.941705932617188e+02, 2.941704406738281e+02, 2.941652526855469e+02, 2.941562194824219e+02, 2.941512756347656e+02, 2.944099426269531e+02, 2.951903076171875e+02, 2.966014404296875e+02, 2.966050109863281e+02, 2.957460021972656e+02, 2.950239562988281e+02, 2.945757141113281e+02, 2.943212280273438e+02, 2.941802368164062e+02, 2.960645446777344e+02, 2.962243957519531e+02, 2.950863647460938e+02, 2.945101013183594e+02, 2.942584533691406e+02, 2.941826782226562e+02, 2.967984619140625e+02, 2.956029663085938e+02, 2.946762084960938e+02, 2.942572631835938e+02, 2.9655712890625e+02, 2.942179870605469e+02, 2.950230712890625e+02, 2.957950439453125e+02, 2.958896789550781e+02, 2.958037719726562e+02, 2.957060852050781e+02, 2.956017150878906e+02, 2.954903564453125e+02, 2.953819580078125e+02, 2.957755432128906e+02, 2.959239501953125e+02, 2.958983764648438e+02, 2.958122863769531e+02, 2.956854858398438e+02, 2.955560913085938e+02, 2.954240417480469e+02, 2.9528759765625e+02, 2.95342041015625e+02, 2.961524658203125e+02, 2.970876770019531e+02, 2.97622314453125e+02, 2.975182495117188e+02, 2.973820190429688e+02, 2.972417297363281e+02, 2.970984191894531e+02, 2.969559326171875e+02, 2.972681274414062e+02, 2.979461669921875e+02, 2.965861511230469e+02, 2.966249084472656e+02, 2.964938659667969e+02, 2.963466186523438e+02, 2.961501159667969e+02, 2.980364990234375e+02, 2.979473571777344e+02, 2.980525207519531e+02, 2.969268188476562e+02, 2.971317443847656e+02, 2.969201354980469e+02, 2.968055725097656e+02, 2.965866394042969e+02, 2.964843139648438e+02, 2.962891540527344e+02, 2.97805908203125e+02, 2.971761474609375e+02, 2.978529968261719e+02, 2.979222412109375e+02, 2.9753515625e+02, 2.973719787597656e+02, 2.972562866210938e+02, 2.971741333007812e+02, 2.969613037109375e+02, 2.969106140136719e+02, 2.973577270507812e+02, 2.980824584960938e+02, 2.980605163574219e+02, 2.979991455078125e+02, 2.977561340332031e+02, 2.976838989257812e+02, 2.976190185546875e+02, 2.974039306640625e+02, 2.974400024414062e+02, 2.973416442871094e+02] heaWat.u=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 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, 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] vavDam.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, 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, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+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] fan.sta_a.T=[2.609500122070312e+02, 2.619339904785156e+02, 2.625560607910156e+02, 2.634340515136719e+02, 2.68343994140625e+02, 2.720289611816406e+02, 2.720545959472656e+02, 2.713428955078125e+02, 2.719671630859375e+02, 2.692550048828125e+02, 2.701675109863281e+02, 2.723510437011719e+02, 2.733544006347656e+02, 2.748542175292969e+02, 2.725393981933594e+02, 2.727891845703125e+02, 2.745196228027344e+02, 2.731544494628906e+02, 2.731544799804688e+02, 2.722991333007812e+02, 2.698099365234375e+02, 2.689096374511719e+02, 2.703550109863281e+02, 2.703549194335938e+02, 2.703548583984375e+02, 2.703548278808594e+02, 2.703548278808594e+02, 2.703550720214844e+02, 2.698551635742188e+02, 2.706847229003906e+02, 2.716439208984375e+02, 2.725196838378906e+02, 2.705011901855469e+02, 2.680314636230469e+02, 2.676664733886719e+02, 2.660458374023438e+02, 2.64255615234375e+02, 2.581173400878906e+02, 2.604478149414062e+02, 2.657221984863281e+02, 2.69406005859375e+02, 2.682219848632812e+02, 2.657222900390625e+02, 2.637669982910156e+02, 2.618729248046875e+02, 2.592564392089844e+02, 2.581830444335938e+02, 2.604674377441406e+02, 2.616646728515625e+02, 2.608386535644531e+02, 2.561106262207031e+02, 2.546563415527344e+02, 2.54271484375e+02, 2.5302392578125e+02, 2.509575042724609e+02, 2.541974792480469e+02, 2.587733154296875e+02, 2.602138671875e+02, 2.569418334960938e+02, 2.549216613769531e+02, 2.536201782226562e+02, 2.520576171875e+02, 2.519818878173828e+02, 2.514576568603516e+02, 2.582303466796875e+02, 2.619276123046875e+02, 2.916773986816406e+02, 2.916036682128906e+02, 2.916499633789062e+02, 2.915554504394531e+02, 2.914026489257812e+02, 2.648560485839844e+02, 2.6535595703125e+02, 2.700713195800781e+02, 2.935654602050781e+02, 2.937233581542969e+02, 2.933609008789062e+02, 2.932672424316406e+02, 2.929061584472656e+02, 2.9293359375e+02, 2.925202331542969e+02, 2.720550537109375e+02, 2.93810791015625e+02, 2.944085388183594e+02, 2.939564208984375e+02, 2.931130676269531e+02, 2.929986877441406e+02, 2.930928344726562e+02, 2.931185607910156e+02, 2.927966613769531e+02, 2.930165100097656e+02, 2.939817199707031e+02, 2.949109191894531e+02, 2.94682861328125e+02, 2.947590026855469e+02, 2.942391662597656e+02, 2.944219665527344e+02, 2.943655395507812e+02, 2.939534912109375e+02, 2.942164916992188e+02, 2.942030029296875e+02] diff --git a/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_ReducedOrder_Examples_SimpleRoomTwoElementsNonConstantTGround.txt b/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_ReducedOrder_Examples_SimpleRoomTwoElementsNonConstantTGround.txt new file mode 100644 index 00000000000..00558d83d53 --- /dev/null +++ b/Buildings/Resources/ReferenceResults/Dymola/Buildings_ThermalZones_ReducedOrder_Examples_SimpleRoomTwoElementsNonConstantTGround.txt @@ -0,0 +1,14 @@ +last-generated=2023-09-14 +statistics-initialization= +{ + "linear": "5" +} +statistics-simulation= +{ + "linear": "0, 3, 0", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 3.1536e+07] +eqAirTemp.TEqAir=[2.789571533203125e+02, 2.813718017578125e+02, 2.7872587890625e+02, 2.807901184082031e+02, 2.835259521484375e+02, 2.823024597167969e+02, 2.827985473632813e+02, 2.822135131835938e+02, 2.784553283691406e+02, 2.797283508300781e+02, 2.843675231933594e+02, 2.796825317382812e+02, 2.830658447265625e+02, 2.863615112304688e+02, 2.829901916503906e+02, 2.81193115234375e+02, 2.834943542480469e+02, 2.822643676757813e+02, 2.849333984375e+02, 2.8688466796875e+02, 2.813687744140625e+02, 2.854065185546875e+02, 2.824746765136719e+02, 2.820121215820312e+02, 2.881613098144531e+02, 2.850013122558594e+02, 2.823730773925781e+02, 2.873432434082031e+02, 2.857710876464844e+02, 2.85406591796875e+02, 2.900100402832031e+02, 2.826182189941406e+02, 2.84790185546875e+02, 2.966639404296875e+02, 2.837040283203125e+02, 2.864047241210938e+02, 2.959377624511719e+02, 2.883143005371094e+02, 2.897021667480469e+02, 2.957674682617188e+02, 2.864564819335938e+02, 2.896947265625e+02, 2.955205017089844e+02, 2.871305236816406e+02, 2.91426025390625e+02, 2.9104345703125e+02, 2.86251953125e+02, 2.90456201171875e+02, 2.876586730957031e+02, 2.879760803222656e+02, 2.924863586425781e+02, 2.866445068359375e+02, 2.888368591308594e+02, 2.952922973632812e+02, 2.882718566894531e+02, 2.897318420410156e+02, 2.960734008789062e+02, 2.874204406738281e+02, 2.916609802246094e+02, 2.970692016601562e+02, 2.87395751953125e+02, 2.934731872558594e+02, 2.889349975585938e+02, 2.884504028320313e+02, 2.923549438476563e+02, 2.880719299316406e+02, 2.882120971679688e+02, 2.9177724609375e+02, 2.858329772949219e+02, 2.879469116210938e+02, 2.915469055175781e+02, 2.855946655273438e+02, 2.865959594726563e+02, 2.939826416015625e+02, 2.875797424316406e+02, 2.867238159179688e+02, 2.938005920410156e+02, 2.847250549316406e+02, 2.881406921386719e+02, 2.924451721191406e+02, 2.846399841308594e+02, 2.869987976074219e+02, 2.848623596191406e+02, 2.824324584960938e+02, 2.857318481445312e+02, 2.833520812988281e+02, 2.841896728515625e+02, 2.867588134765625e+02, 2.826075927734375e+02, 2.824429504394531e+02, 2.851797180175781e+02, 2.797426086425781e+02, 2.819598083496094e+02, 2.841822814941406e+02, 2.791549987792969e+02, 2.806098937988281e+02, 2.82980029296875e+02, 2.807776794433594e+02, 2.813313049316406e+02, 2.808358093261719e+02, 2.823453063964844e+02] diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos new file mode 100644 index 00000000000..5c4b25d2f9f --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos @@ -0,0 +1,2 @@ +simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouse0"); +createPlot(id=1,position={0, 0, 792, 1247}, y={"TOut.T"}, range={0.0, 1e+06, 12.5, 20.5}, grid=true, colors={{28,108,200}}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos index c2bbb63738e..dfe87103f4d 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos @@ -1,2 +1,2 @@ simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouse3"); -createPlot(id=1,position={0, 0, 792, 1247}, y={"zone.T"}, range={0.0, 1e+06, 16.5, 20.5}, grid=true, colors={{28,108,200}}); \ No newline at end of file +createPlot(id=1,position={0, 0, 792, 1247}, y={"zon.T"}, range={0.0, 1e+06, 16.5, 20.5}, grid=true, colors={{28,108,200}}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos index f601520d922..3612ed30880 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos @@ -1,3 +1,3 @@ simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouse4"); -createPlot(id=1,position={0, 0, 792, 1247}, y={"zone.T"}, range={0.0, 1e+06, 20, 80}, grid=true, colors={{28,108,200}}); +createPlot(id=1,position={0, 0, 792, 1247}, y={"zon.T"}, range={0.0, 1e+06, 20, 80}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={0, 0, 792, 413}, y={"heaWat.u"}, range={0.0, 1e+06, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos index b34bdcba8ce..e9ffb3c980e 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos @@ -1,3 +1,3 @@ simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouse5"); -createPlot(id=1,position={0, 0, 792, 1247}, y={"zone.T"}, range={0.0, 1e+06, 20, 24}, grid=true, colors={{28,108,200}}); +createPlot(id=1,position={0, 0, 792, 1247}, y={"zon.T"}, range={0.0, 1e+06, 20, 24}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={0, 0, 792, 413}, y={"heaWat.u"}, range={0.0, 1e+06, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos index 0fd6df48629..de811aef8b6 100644 --- a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos +++ b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos @@ -1,5 +1,5 @@ simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouse6"); -createPlot(id=1,position={0, 0, 792, 1247}, y={"zone.T"}, range={0.0, 1e+06, 20, 26}, grid=true, colors={{28,108,200}}); +createPlot(id=1,position={0, 0, 792, 1247}, y={"zon.T"}, range={0.0, 1e+06, 20, 26}, grid=true, colors={{28,108,200}}); createPlot(id=1, position={0, 0, 792, 413}, y={"heaWat.u"}, range={0.0, 1e+06, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}); createPlot(id=1, position={0, 0, 792, 413}, y={"vavDam.y"}, range={0.0, 1e+06, -0.1, 1.1}, grid=true, subPlot=3, colors={{28,108,200}}); createPlot(id=2, position={818, 10, 662, 377}, y={"fan.sta_a.T", "fan.sta_b.T"}, range={0.0, 380.0, 18.0, 22.5}, grid=true, colors={{28,108,200}, {238,46,47}}); diff --git a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos b/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos deleted file mode 100644 index b11dcdaf9b9..00000000000 --- a/Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate", stopTime=1e+06, method="CVode", tolerance=1e-06, resultFile="SimpleHouseTemplate"); -createPlot(id=1,position={0, 0, 792, 1247}, y={"Tout.T"}, range={0.0, 1e+06, 12.5, 20.5}, grid=true, colors={{28,108,200}}); \ No newline at end of file diff --git a/Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos b/Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos new file mode 100644 index 00000000000..763067c5a36 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos @@ -0,0 +1,12 @@ +simulateModel("Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElementsNonConstantTGround", tolerance=1e-6, stopTime=3.1536e+007, numberOfIntervals=0, outputInterval=3600, method="CVode", resultFile="SimpleRoomTwoElementsNonConstantTGround"); +createPlot(id = 1, + position = {55, 50, 697, 502}, + x = "time", + y = {"eqAirTemp.TEqAir"}, + autoscale = true, + autoerase = true, + autoreplot = true, + grid = true, + color = true, + leftTitleType = 1, + bottomTitleType = 1); diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0.mos similarity index 64% rename from Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.mos rename to Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0.mos index bf95e73c2e3..dc7bc9ddf22 100644 --- a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouseTemplate.mos +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse0.mos @@ -1,4 +1,4 @@ compareVars := { - "Tout.T" + "TOut.T" }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3.mos index 5bde1e52cfa..981ed9bec0b 100644 --- a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3.mos +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse3.mos @@ -1,4 +1,4 @@ compareVars := { - "zone.T" + "zon.T" }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4.mos index c5fc10af364..da9251ec531 100644 --- a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4.mos +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse4.mos @@ -1,5 +1,5 @@ compareVars := { - "zone.T", + "zon.T", "heaWat.u" }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5.mos index c5fc10af364..da9251ec531 100644 --- a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5.mos +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse5.mos @@ -1,5 +1,5 @@ compareVars := { - "zone.T", + "zon.T", "heaWat.u" }; diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6.mos index 1da58b60230..0c82aa4c8b3 100644 --- a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6.mos +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.Examples.Tutorial.SimpleHouse.SimpleHouse6.mos @@ -1,6 +1,6 @@ compareVars := { - "zone.T", + "zon.T", "heaWat.u", "vavDam.y", "fan.sta_a.T", diff --git a/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElementsNonConstantTGround.mos b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElementsNonConstantTGround.mos new file mode 100644 index 00000000000..3630bb63c2f --- /dev/null +++ b/Buildings/Resources/Scripts/OpenModelica/compareVars/Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElementsNonConstantTGround.mos @@ -0,0 +1,4 @@ +compareVars := + { + "eqAirTemp.TEqAir" + }; diff --git a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/PartialVDI6007.mo b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/PartialVDI6007.mo index 5a6e871a9a4..6f6cc91742e 100644 --- a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/PartialVDI6007.mo +++ b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/PartialVDI6007.mo @@ -10,7 +10,10 @@ partial model PartialVDI6007 parameter Real wfGro(unit="1") "Weight factor of the ground (0 if not considered)"; parameter Modelica.Units.SI.Temperature TGro - "Temperature of the ground in contact with floor plate"; + "Constant temperature of the ground in contact with floor plate" + annotation ( + HideResult=TGroundFromInput, + Dialog(enable=not TGroundFromInput)); parameter Modelica.Units.SI.CoefficientOfHeatTransfer hConWallOut "Exterior walls convective coefficient of heat transfer (outdoor)"; parameter Modelica.Units.SI.CoefficientOfHeatTransfer hRad @@ -18,6 +21,9 @@ partial model PartialVDI6007 parameter Boolean withLongwave=true "Set to true to include longwave radiation exchange" annotation(choices(checkBox = true)); + parameter Boolean TGroundFromInput=false + "Set to true to use TGro_in input connector instead of TGro constant" + annotation(choices(checkBox = true)); Modelica.Units.SI.Temperature TEqWall[n] "Equivalent wall temperature"; Modelica.Units.SI.Temperature TEqWin[n] "Equivalent window temperature"; @@ -61,6 +67,20 @@ partial model PartialVDI6007 extent={{-20,-20},{20,20}}, rotation=-90, origin={0,120}))); + Modelica.Blocks.Interfaces.RealInput TGro_in( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") if TGroundFromInput + "Temperature of the ground in contact with floor plate" + annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,-120}))); + +protected + SourceSelector TGroSouSel(final useInput=TGroundFromInput, p=TGro) + "Input selector for ground temperature"; initial equation assert(noEvent(abs(sum(wfWall) + sum(wfWin) + wfGro) > 0.1), @@ -80,6 +100,7 @@ equation TEqWall=TDryBul.+delTEqSW; end if; + connect(TGro_in, TGroSouSel.uCon); annotation ( Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={ @@ -120,6 +141,12 @@ equation revisions="
                • + May 5, 2023, by Philip Groesdonk:
                  + Added an option for non-constant ground temperature from an input connector. + This is for + #1744. +
                • +
                • July 11, 2019, by Katharina Brinkmann:
                  Renamed alphaRad to hRad, alphaWinOut to hConWallOut diff --git a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/SourceSelector.mo b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/SourceSelector.mo new file mode 100644 index 00000000000..d6609e1fe9c --- /dev/null +++ b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/SourceSelector.mo @@ -0,0 +1,51 @@ +within Buildings.ThermalZones.ReducedOrder.EquivalentAirTemperature.BaseClasses; +block SourceSelector + "Block that selects as its output either a parameter value or its input" + extends Modelica.Blocks.Interfaces.SO; + parameter Boolean useInput "Use input (if true) or parameter value (if false)" + annotation(Evaluate=true); + parameter Real p "Parameter value"; + Modelica.Blocks.Interfaces.RealInput uCon if useInput + "Input signal from input connector" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-120,70},{-100,90}}))); +equation + if not useInput then + y = p; + end if; + connect(uCon, y); + annotation ( + defaultComponentName="souSel", +Documentation(info=" +

                  +Block that produces at its output the input value uCon +or the parameter value p depending on the parameter value +useInput. +

                  +", revisions=" +
                    +
                  • +June 28, 2023, by Philip Groesdonk:
                    +First implementation. +
                  • +
                  +"), + Icon(graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line(points={{12,0},{100,0}}, + color={0,0,127}), + Line(points={{-100,80},{-38,80}}, + color={0,0,127}), + Line(points={{-40,80},{8,0}}, + color={0,0,127}, + visible=useInput, + thickness=1), + Ellipse(lineColor={0,0,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{2,-8},{18,8}})})); +end SourceSelector; diff --git a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.order b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.order index 609fb4d1714..52fe857587b 100644 --- a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.order +++ b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/BaseClasses/package.order @@ -1 +1,2 @@ PartialVDI6007 +SourceSelector diff --git a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007.mo b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007.mo index fa9e0a82a33..6f856d884ee 100644 --- a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007.mo +++ b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007.mo @@ -9,10 +9,16 @@ initial equation equation delTEqLWWin=delTEqLW; - TEqAir = TEqWall*wfWall + TEqWin*wfWin + TGro*wfGro; + TEqAir = TEqWall*wfWall + TEqWin*wfWin + TGroSouSel.y*wfGro; annotation (defaultComponentName = "equAirTem",Documentation(revisions="
                  • + May 5, 2023, by Philip Groesdonk:
                    + Added an option for non-constant ground temperature from an input connector. + This is for + #1744. +
                  • +
                  • September 26, 2016, by Moritz Lauster:
                    Moved calculations to Buildings.ThermalZones.ReducedOrder.EquivalentAirTemperature.BaseClasses.PartialVDI6007. diff --git a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007WithWindow.mo b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007WithWindow.mo index 5c7855e2946..b642b46d29b 100644 --- a/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007WithWindow.mo +++ b/Buildings/ThermalZones/ReducedOrder/EquivalentAirTemperature/VDI6007WithWindow.mo @@ -21,11 +21,17 @@ initial equation equation delTEqLWWin=(TBlaSky - TDryBul)*hRad/(hRad + hConWinOut); - TEqAir = TEqWall*wfWall + TGro*wfGro; + TEqAir = TEqWall*wfWall + TGroSouSel.y*wfGro; TEqAirWin = TEqWin*wfWin; annotation (defaultComponentName = "equAirTem",Documentation(revisions="
                    • + May 5, 2023, by Philip Groesdonk:
                      + Added an option for non-constant ground temperature from an input connector. + This is for + #1744. +
                    • +
                    • July 11, 2019, by Katharina Brinkmann:
                      Renamed alphaWinOut to hConWinOut
                    • diff --git a/Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mo b/Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mo new file mode 100644 index 00000000000..a06296e9e52 --- /dev/null +++ b/Buildings/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mo @@ -0,0 +1,61 @@ +within Buildings.ThermalZones.ReducedOrder.Examples; +model SimpleRoomTwoElementsNonConstantTGround + "Illustrates the use of non-constant ground temperature for equivalent air temperature calculation" + extends Modelica.Icons.Example; + extends Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElements( + eqAirTemp( + wfWall={0.15,0.35}, + wfGro=0.5, + TGroundFromInput=true)); + + Modelica.Blocks.Sources.Trapezoid TGro( + amplitude(unit="K") = 10, + rising(displayUnit="d") = 7884000, + width(displayUnit="d") = 7884000, + falling(displayUnit="d") = 7884000, + period(displayUnit="d") = 31536000, + offset( + unit="K", + displayUnit="degC") = 280.15, + startTime(displayUnit="d") = 5184000) + "Trapezoid-shaped source for ground temperature" + annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}))); +equation + + connect(TGro.y, eqAirTemp.TGro_in) + annotation (Line(points={{-39,-50},{-14,-50},{-14,-16}}, color={0,0,127})); + annotation ( Documentation(info=" +

                      +This example shows the application of + +Buildings.ThermalZones.ReducedOrder.RC.TwoElements +in connection with equivalent air temperature calculation in + +Buildings.ThermalZones.ReducedOrder.EquivalentAirTemperature.VDI6007WithWindow, +where the ground temperature is not a constant, but has a trapezoid source. +Apart from that, it is identical to +Buildings.ThermalZones.ReducedOrder.Examples.SimpleRoomTwoElements. +

                      References

                      +

                      VDI. German Association of Engineers Guideline VDI 6007-1 +March 2012. Calculation of transient thermal response of rooms +and buildings - modelling of rooms.

                      +", revisions=" +
                        +
                      • +June 29, 2023, by Philip Groesdonk:
                        +First implementation.
                        +This is for +IBPSA, #1744. +
                      • +
                      +"), + experiment( + StopTime=31536000, + Interval=3600, + Tolerance=1e-06), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/ThermalZones/ReducedOrder/Examples/SimpleRoomTwoElementsNonConstantTGround.mos" + "Simulate and plot"), + Diagram(coordinateSystem(extent={{-100,-120},{100,100}})), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}))); +end SimpleRoomTwoElementsNonConstantTGround; diff --git a/Buildings/ThermalZones/ReducedOrder/Examples/package.order b/Buildings/ThermalZones/ReducedOrder/Examples/package.order index d0f4429ce2b..36115c644eb 100644 --- a/Buildings/ThermalZones/ReducedOrder/Examples/package.order +++ b/Buildings/ThermalZones/ReducedOrder/Examples/package.order @@ -3,3 +3,4 @@ SimpleRoomFourElementsTraceSubstance SimpleRoomOneElement SimpleRoomThreeElements SimpleRoomTwoElements +SimpleRoomTwoElementsNonConstantTGround diff --git a/Buildings/package.mo b/Buildings/package.mo index 3bacdaf1524..fe23b6bdc2d 100644 --- a/Buildings/package.mo +++ b/Buildings/package.mo @@ -204,9 +204,9 @@ Each class (i.e., model, block and function) must be used in an example or valid package ReleaseNotes "Release notes" extends Modelica.Icons.ReleaseNotes; -class Version_11_0_0 "Version 11.0.0" - extends Modelica.Icons.ReleaseNotes; - annotation (Documentation(info=" + class Version_11_0_0 "Version 11.0.0" + extends Modelica.Icons.ReleaseNotes; + annotation (Documentation(info="

                      Version 11.0.0 is ... @@ -217,9 +217,9 @@ Version 11.0.0 is ... The following new libraries have been added:

    Buildings.Controls.OBC.CDL +
    Buildings.Controls.OBC.CDL.Discrete.Examples + Changed the package name from Examples to Validation.
    + This is for issue 3517. +
    xxx
    - -
    xxx +
    Buildings.Examples.Tutorial.SimpleHouse xxx. + Tutorial for how to build a simple system model.
    @@ -255,20 +255,28 @@ have been improved in a This is for issue 3517.
xxx +
Buildings.Fluid.Interfaces
xxx +
Buildings.Fluid.Interfaces.PartialFourPort
+ Buildings.Fluid.Interfaces.PartialTwoPort
+ Buildings.Fluid.Interfaces.PartialTwoPortVector
xxx. + Changed implementation to allow moving fluid connector. + This accomodates implementation of models that should have connectors on the top and bottom (such as a tank) + and moving of connectors for models that need larger icons.
+ This is for IBPSA, #1781.
xxx +
Buildings.ThermalZones.ReducedOrder
xxx +
Buildings.ThermalZones.ReducedOrder.EquivalentAirTemperature.VDI6007
+ Buildings.ThermalZones.ReducedOrder.EquivalentAirTemperature.VDI6007
xxx. + Changed implementation to allow ground temperature to be taken from an input rather than using + a constant value.
+ This is for IBPSA, #1744.
@@ -346,7 +354,7 @@ xxx ")); -end Version_11_0_0; + end Version_11_0_0; class Version_10_0_0 "Version 10.0.0" From 46042ba818b21e35adbc76d2aa9edd71e50582bf Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Wed, 20 Sep 2023 16:12:50 -0700 Subject: [PATCH 5/5] Merged IBPSA, issue1794_revertPortPlacement and issue1785_modelicaConfTutorial (#3530) --- Buildings/.copiedFiles.txt | 1 + .../Tutorial/SimpleHouse/SimpleHouse0.mo | 41 +++---- .../Tutorial/SimpleHouse/SimpleHouse1.mo | 14 +-- .../Tutorial/SimpleHouse/SimpleHouse2.mo | 19 ++- .../Tutorial/SimpleHouse/SimpleHouse3.mo | 14 +-- .../Tutorial/SimpleHouse/SimpleHouse4.mo | 38 +++--- .../Tutorial/SimpleHouse/SimpleHouse5.mo | 36 +++--- .../Tutorial/SimpleHouse/SimpleHouse6.mo | 57 ++++----- Buildings/Fluid/Interfaces/PartialFourPort.mo | 31 +---- Buildings/Fluid/Interfaces/PartialTwoPort.mo | 19 +-- .../Fluid/Interfaces/PartialTwoPortVector.mo | 21 +--- .../Storage/BaseClasses/PartialStratified.mo | 10 +- .../BaseClasses/PartialTwoPortInterface.mo | 113 ++++++++++++++++++ .../Fluid/Storage/BaseClasses/package.order | 1 + 14 files changed, 241 insertions(+), 174 deletions(-) create mode 100644 Buildings/Fluid/Storage/BaseClasses/PartialTwoPortInterface.mo diff --git a/Buildings/.copiedFiles.txt b/Buildings/.copiedFiles.txt index c0f63cc00cd..b4fa559eb64 100644 --- a/Buildings/.copiedFiles.txt +++ b/Buildings/.copiedFiles.txt @@ -1756,6 +1756,7 @@ Buildings/Fluid/Storage/BaseClasses/Examples/package.mo Buildings/Fluid/Storage/BaseClasses/Examples/package.order Buildings/Fluid/Storage/BaseClasses/IndirectTankHeatExchanger.mo Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo +Buildings/Fluid/Storage/BaseClasses/PartialTwoPortInterface.mo Buildings/Fluid/Storage/BaseClasses/ThirdOrderStratifier.mo Buildings/Fluid/Storage/BaseClasses/package.mo Buildings/Fluid/Storage/BaseClasses/package.order diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo index e9aa7e4ffdb..8f84f4eaf40 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo @@ -13,74 +13,72 @@ model SimpleHouse0 ModelicaServices.ExternalReferences.loadResource( "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) "Weather data reader" - annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); + annotation (Placement(transformation(extent={{-180,-10},{-160,10}}))); Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" - annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); + annotation (Placement(transformation(extent={{-140,-10},{-120,10}}), + iconTransformation(extent={{-152,-10},{-132,10}}))); Buildings.HeatTransfer.Sources.PrescribedTemperature TOut "Exterior temperature boundary condition" annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); equation connect(weaDat.weaBus, weaBus) annotation (Line( - points={{-180,-10},{-150,-10}}, + points={{-160,0},{-130,0}}, color={255,204,51}, thickness=0.5)); connect(TOut.T, weaBus.TDryBul) - annotation (Line(points={{-82,0},{-150,0},{-150,-10}},color={0,0,127})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}}), graphics={ + annotation (Line(points={{-82,0},{-130,0}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}}), graphics={ Rectangle( - extent={{-220,40},{-38,-40}}, + extent={{-200,60},{-20,-60}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), Rectangle( - extent={{-220,-60},{180,-200}}, + extent={{-200,-80},{200,-200}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), Rectangle( - extent={{-220,180},{180,60}}, + extent={{-200,200},{200,80}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), Rectangle( - extent={{-20,40},{180,-40}}, + extent={{0,60},{200,-60}}, fillColor={238,238,238}, fillPattern=FillPattern.Solid, pattern=LinePattern.None), Text( - extent={{22,22},{-23,39}}, + extent={{57.25,40.25},{2.75,59.75}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, - textString="Wall"), + textString="Building"), Text( - extent={{-157,-79},{-223,-61}}, + extent={{-137,-99},{-203,-81}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, textString="Heating"), Text( - extent={{-118,18},{-214,40}}, + extent={{-102,39},{-198,61}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, textString="Weather inputs"), Text( - extent={{-76,158},{-214,180}}, + extent={{-61,179},{-199,201}}, textColor={0,0,127}, fillColor={255,213,170}, fillPattern=FillPattern.Solid, textString="Cooling and ventilation")}), experiment(Tolerance=1E-6, StopTime=1e+06), - __Dymola_Commands(file= - "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos" - "Simulate and plot"), Documentation(revisions="
  • September 4, 2023, by Jelger Jansen:
    -Replace IDEAS by Buildings models. +Replace IDEAS by Buildings models and general revision/update of the model.
  • October 11, 2016, by Filip Jorissen:
    @@ -95,5 +93,8 @@ that allows the user to connect thermal components to the dry bulb temperature. It was based on from the Modelica crash course organised by KU Leuven (https://github.com/open-ideas/__CrashCourse__).

    -")); +"), + __Dymola_Commands(file= + "modelica://Buildings/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse0.mos" + "Simulate and plot")); end SimpleHouse0; diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo index 35b07a8c7ab..08cc3c22dc1 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo @@ -7,17 +7,17 @@ model SimpleHouse1 "Building wall model" "Thermal mass of wall" annotation (Placement(transformation(extent={{-10,-10},{10,10}}, rotation=270, - origin={150,0}))); + origin={170,0}))); Modelica.Thermal.HeatTransfer.Components.ThermalResistor walRes(R=dWall/AWall /kWall) "Thermal resistor for wall: 25 cm of rockwool" - annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); equation - connect(walRes.port_b, walCap.port) annotation (Line(points={{100,0},{112,0}, - {112,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(walRes.port_b, walCap.port) annotation (Line(points={{80,0},{100,0},{100, + 1.77636e-15},{160,1.77636e-15}}, color={191,0,0})); connect(TOut.port, walRes.port_a) - annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + annotation (Line(points={{-60,0},{60,0}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
      diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo index f1ed7671ce8..1b19fc1226a 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo @@ -6,24 +6,23 @@ model SimpleHouse2 "Building window model" Modelica.Blocks.Math.Gain gaiWin(k=AWin) "Gain for solar irradiance through the window" - annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow win "Very simple window model" - annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); equation connect(gaiWin.y, win.Q_flow) - annotation (Line(points={{21,-20},{40,-20}}, color={0,0,127})); - connect(win.port, walCap.port) annotation (Line(points={{60,-20},{130,-20},{ - 130,1.77636e-15},{140,1.77636e-15}}, - color={191,0,0})); - connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-2,-20},{-150,-20}, - {-150,-10}}, color={0,0,127}), Text( + annotation (Line(points={{41,-40},{60,-40}}, color={0,0,127})); + connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{18,-40},{-130,-40}, + {-130,0}}, color={0,0,127}), Text( string="%second", index=1, extent={{-6,3},{-6,3}}, horizontalAlignment=TextAlignment.Right)); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + connect(win.port, walCap.port) annotation (Line(points={{80,-40},{110,-40},{110, + 1.77636e-15},{160,1.77636e-15}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
        diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo index 59f9b7e35e3..1f1b0287cc8 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo @@ -13,20 +13,20 @@ model SimpleHouse3 "Air model" Placement(transformation( extent={{-10,-10},{10,10}}, rotation=270, - origin={130,20}))); + origin={110,20}))); Buildings.Fluid.MixingVolumes.MixingVolume zon( redeclare package Medium = MediumAir, V=VZone, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, m_flow_nominal=mAir_flow_nominal) "Very simple zone air model" - annotation (Placement(transformation(extent={{110,130},{90,150}}))); + annotation (Placement(transformation(extent={{160,50},{180,30}}))); equation - connect(conRes.port_b, walCap.port) annotation (Line(points={{130,10},{130, - 1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); connect(zon.heatPort, conRes.port_a) - annotation (Line(points={{110,140},{130,140},{130,30}}, color={191,0,0})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + annotation (Line(points={{160,40},{110,40},{110,30}}, color={191,0,0})); + connect(conRes.port_b, walCap.port) annotation (Line(points={{110,10},{110,1.77636e-15}, + {160,1.77636e-15}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
          diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo index 4b8008fe12b..873d58c7d07 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo @@ -16,7 +16,7 @@ model SimpleHouse4 "Heating model" energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, allowFlowReversal=false, Q_flow_nominal=QHea_flow_nominal) "Radiator" - annotation (Placement(transformation(extent={{110,-110},{130,-90}}))); + annotation (Placement(transformation(extent={{140,-140},{160,-120}}))); Buildings.Fluid.HeatExchangers.HeaterCooler_u heaWat( redeclare package Medium = MediumWater, m_flow_nominal=mWat_flow_nominal, @@ -24,7 +24,7 @@ model SimpleHouse4 "Heating model" allowFlowReversal=false, dp_nominal=5000, Q_flow_nominal=QHea_flow_nominal) "Heater for water circuit" - annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); + annotation (Placement(transformation(extent={{60,-140},{80,-120}}))); Buildings.Fluid.Movers.FlowControlled_m_flow pum( redeclare package Medium = MediumWater, use_inputFilter=false, @@ -33,32 +33,32 @@ model SimpleHouse4 "Heating model" allowFlowReversal=false, nominalValuesDefineDefaultPressureCurve=true, inputType=Buildings.Fluid.Types.InputType.Constant) "Pump" - annotation (Placement(transformation(extent={{110,-180},{90,-160}}))); + annotation (Placement(transformation(extent={{160,-190},{140,-170}}))); Buildings.Fluid.Sources.Boundary_pT bouWat(redeclare package Medium = MediumWater, nPorts=1) "Pressure bound for water circuit" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, - origin={10,-170}))); + origin={20,-180}))); Modelica.Blocks.Sources.Constant conHea(k=1) - annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); + annotation (Placement(transformation(extent={{80,-110},{60,-90}}))); equation - connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-100},{110,-100}}, + connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-130},{140,-130}}, color={0,127,255})); - connect(rad.port_b, pum.port_a) annotation (Line(points={{130,-100},{148,-100}, - {148,-170},{110,-170}}, color={0,127,255})); - connect(heaWat.port_a, pum.port_b) annotation (Line(points={{60,-100},{49.75, - -100},{49.75,-170},{90,-170}}, color={0,127,255})); - connect(rad.heatPortCon, zon.heatPort) annotation (Line(points={{118,-92.8},{ - 118,140},{110,140}}, color={191,0,0})); - connect(rad.heatPortRad, walCap.port) annotation (Line(points={{122,-92.8},{122, - -20},{130,-20},{130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(rad.port_b, pum.port_a) annotation (Line(points={{160,-130},{175,-130}, + {175,-180},{160,-180}}, color={0,127,255})); + connect(heaWat.port_a, pum.port_b) annotation (Line(points={{60,-130},{39.75,-130}, + {39.75,-180},{140,-180}}, color={0,127,255})); + connect(rad.heatPortCon, zon.heatPort) annotation (Line(points={{148,-122.8},{ + 148,40},{160,40}}, color={191,0,0})); + connect(rad.heatPortRad, walCap.port) annotation (Line(points={{152,-122.8},{152, + 1.77636e-15},{160,1.77636e-15}}, color={191,0,0})); if use_constantHeater then - connect(conHea.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50, - -94},{58,-94}}, color={0,0,127})); + connect(conHea.y, heaWat.u) annotation (Line(points={{59,-100},{40,-100},{40,-124}, + {58,-124}}, color={0,0,127})); end if; connect(bouWat.ports[1], pum.port_b) - annotation (Line(points={{20,-170},{90,-170}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + annotation (Line(points={{30,-180},{140,-180}},color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
            diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo index 266f8114602..cf90827e6e5 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo @@ -4,35 +4,35 @@ model SimpleHouse5 "Heating controller model" massFlowRates=mWat_flow_nominal*{1}), final use_constantHeater=false); Modelica.Blocks.Math.BooleanToInteger booInt "Boolean to integer" - annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + annotation (Placement(transformation(extent={{0,-160},{20,-140}}))); Modelica.Blocks.Math.BooleanToReal booRea "Boolean to real" - annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + annotation (Placement(transformation(extent={{0,-120},{20,-100}}))); Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 21, uHigh=273.15 + 23) "Hysteresis controller for radiator" - annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + annotation (Placement(transformation(extent={{-80,-120},{-60,-100}}))); Modelica.Blocks.Logical.Not not1 "Negation for enabling heating when temperature is low" - annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemZonAir "Zone air temperature sensor" - annotation (Placement(transformation(extent={{90,150},{70,170}}))); + annotation (Placement(transformation(extent={{90,160},{70,180}}))); equation - connect(booInt.y, pum.stage) annotation (Line(points={{21,-140},{100,-140},{ - 100,-158}}, color={255,127,0})); - connect(booInt.u, not1.y) annotation (Line(points={{-2,-140},{-11.5,-140},{-11.5, - -100},{-19,-100}}, color={255,0,255})); - connect(booRea.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100},{ - 40.5,-94},{58,-94}}, color={0,0,127})); - connect(not1.u,hysRad. y) annotation (Line(points={{-42,-100},{-59,-100}}, + connect(booInt.y, pum.stage) annotation (Line(points={{21,-150},{150,-150},{150, + -168}}, color={255,127,0})); + connect(booInt.u, not1.y) annotation (Line(points={{-2,-150},{-11.5,-150},{-11.5, + -110},{-19,-110}}, color={255,0,255})); + connect(not1.u,hysRad. y) annotation (Line(points={{-42,-110},{-59,-110}}, color={255,0,255})); - connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,160},{-230,160}, - {-230,-100},{-82,-100}}, color={0,0,127})); + connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,170},{-210,170}, + {-210,-110},{-82,-110}}, color={0,0,127})); connect(senTemZonAir.port, zon.heatPort) - annotation (Line(points={{90,160},{110,160},{110,140}}, color={191,0,0})); + annotation (Line(points={{90,170},{160,170},{160,40}}, color={191,0,0})); connect(not1.y, booRea.u) - annotation (Line(points={{-19,-100},{-2,-100}}, color={255,0,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + annotation (Line(points={{-19,-110},{-2,-110}}, color={255,0,255})); + connect(booRea.y, heaWat.u) annotation (Line(points={{21,-110},{40,-110},{40,-124}, + {58,-124}}, color={0,0,127})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
              diff --git a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo index 8b8d38f8e68..47cd8a4cd04 100644 --- a/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo +++ b/Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo @@ -14,7 +14,7 @@ model SimpleHouse6 "Free cooling model" m_flow_nominal=mAir_flow_nominal, dpDamper_nominal=dpAir_nominal) "Damper" annotation (Placement(transformation(extent={{-10,10},{10, - -10}}, origin={50,110}))); + -10}}, origin={110,130}))); Buildings.Fluid.Movers.FlowControlled_dp fan( redeclare package Medium = MediumAir, show_T=true, @@ -25,9 +25,9 @@ model SimpleHouse6 "Free cooling model" m_flow_nominal=mAir_flow_nominal) "Constant head fan" annotation (Placement(transformation( extent={{-10,10},{10,-10}}, - origin={-50,110}))); + origin={0,130}))); Modelica.Blocks.Sources.Constant con_dp(k=dpAir_nominal) "Pressure head" - annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); Buildings.Fluid.HeatExchangers.ConstantEffectiveness hexRec( redeclare package Medium1 = MediumAir, redeclare package Medium2 = MediumAir, @@ -36,7 +36,7 @@ model SimpleHouse6 "Free cooling model" m1_flow_nominal=mAir_flow_nominal, m2_flow_nominal=mAir_flow_nominal, eps=0.85) "Heat exchanger for heat recuperation" - annotation (Placement(transformation(extent={{-80,104},{-110,136}}))); + annotation (Placement(transformation(extent={{-55,124},{-85,156}}))); Buildings.Fluid.Sources.Boundary_pT bouAir( redeclare package Medium = MediumAir, @@ -44,37 +44,40 @@ model SimpleHouse6 "Free cooling model" nPorts=2) "Air boundary with constant temperature" annotation (Placement(transformation( extent={{-10,-10},{10,10}}, - origin={-130,130}))); + origin={-110,140}))); Modelica.Blocks.Logical.Hysteresis hysAir(uLow=273.15 + 23, uHigh=273.15 + 25) "Hysteresis controller for damper" - annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + annotation (Placement(transformation(extent={{40,90},{60,110}}))); Modelica.Blocks.Math.BooleanToReal booToRea1 "Boolean to real" - annotation (Placement(transformation(extent={{20,70},{40,90}}))); + annotation (Placement(transformation(extent={{80,90},{100,110}}))); equation connect(con_dp.y, fan.dp_in) - annotation (Line(points={{-69,80},{-50,80},{-50,98}}, color={0,0,127})); - connect(hexRec.port_a1, zon.ports[1]) annotation (Line(points={{-80,129.6},{ - 97,129.6},{97,130},{100,130}}, color={0,127,255})); - connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-142,134},{ - -150,134},{-150,-10}},color={0,0,127})); - connect(hexRec.port_b2, fan.port_a) annotation (Line(points={{-80,110.4},{-69, - 110.4},{-69,110},{-60,110}}, color={0,127,255})); - connect(vavDam.port_b, zon.ports[2]) annotation (Line(points={{60,110},{100, - 110},{100,130}}, color={0,127,255})); + annotation (Line(points={{-39,100},{0,100},{0,118}}, color={0,0,127})); + connect(hexRec.port_a1, zon.ports[1]) annotation (Line(points={{-55,149.6},{169, + 149.6},{169,50},{170,50}}, color={0,127,255})); + connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-122,144},{-130, + 144},{-130,0}}, color={0,0,127})); + connect(vavDam.port_b, zon.ports[2]) annotation (Line(points={{120,130},{142,130}, + {142,50},{170,50}}, + color={0,127,255})); connect(booToRea1.y, vavDam.y) - annotation (Line(points={{41,80},{50,80},{50,98}}, color={0,0,127})); + annotation (Line(points={{101,100},{110,100},{110,118}}, + color={0,0,127})); connect(hysAir.y, booToRea1.u) - annotation (Line(points={{1,80},{18,80}}, color={255,0,255})); + annotation (Line(points={{61,100},{78,100}}, + color={255,0,255})); connect(vavDam.port_a, fan.port_b) - annotation (Line(points={{40,110},{-40,110}}, color={0,127,255})); - connect(hysAir.u, hysRad.u) annotation (Line(points={{-22,80},{-30,80},{-30, - 160},{-230,160},{-230,-100},{-82,-100}}, color={0,0,127})); - connect(bouAir.ports[1], hexRec.port_b1) annotation (Line(points={{-120,129}, - {-119,129},{-119,129.6},{-110,129.6}}, color={0,127,255})); - connect(bouAir.ports[2], hexRec.port_a2) annotation (Line(points={{-120,131}, - {-120,110.4},{-110,110.4}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), + annotation (Line(points={{100,130},{10,130}}, color={0,127,255})); + connect(hysAir.u, hysRad.u) annotation (Line(points={{38,100},{30,100},{30,170}, + {-210,170},{-210,-110},{-82,-110}}, color={0,0,127})); + connect(bouAir.ports[1], hexRec.port_a2) annotation (Line(points={{-100,139},{ + -100,130.4},{-85,130.4}}, color={0,127,255})); + connect(fan.port_a, hexRec.port_b2) annotation (Line(points={{-10,130},{-32,130}, + {-32,130.4},{-55,130.4}}, color={0,127,255})); + connect(hexRec.port_b1, bouAir.ports[2]) annotation (Line(points={{-85,149.6}, + {-100,149.6},{-100,141}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -220},{220,220}})), experiment(Tolerance=1e-6, StopTime=1e+06), Documentation(revisions="
                diff --git a/Buildings/Fluid/Interfaces/PartialFourPort.mo b/Buildings/Fluid/Interfaces/PartialFourPort.mo index 31bc2b5f1e4..c350a8f510c 100644 --- a/Buildings/Fluid/Interfaces/PartialFourPort.mo +++ b/Buildings/Fluid/Interfaces/PartialFourPort.mo @@ -34,44 +34,26 @@ partial model PartialFourPort "Partial model with four ports" m_flow(min=if allowFlowReversal1 then -Modelica.Constants.inf else 0), h_outflow(start = Medium1.h_default, nominal = Medium1.h_default)) "Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)" - annotation (Placement(transformation(extent={{port_a1_x-10,port_a1_y-10},{port_a1_x+10,port_a1_y+10}}))); + annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); Modelica.Fluid.Interfaces.FluidPort_b port_b1( redeclare final package Medium = Medium1, m_flow(max=if allowFlowReversal1 then +Modelica.Constants.inf else 0), h_outflow(start = Medium1.h_default, nominal = Medium1.h_default)) "Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)" - annotation (Placement(transformation(extent={{port_b1_x-10,port_b1_y-10},{port_b1_x+10,port_b1_y+10}}))); + annotation (Placement(transformation(extent={{110,50},{90,70}}))); Modelica.Fluid.Interfaces.FluidPort_a port_a2( redeclare final package Medium = Medium2, m_flow(min=if allowFlowReversal2 then -Modelica.Constants.inf else 0), h_outflow(start = Medium2.h_default, nominal = Medium2.h_default)) "Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)" - annotation (Placement(transformation(extent={{port_a2_x-10,port_a2_y-10},{port_a2_x+10,port_a2_y+10}}))); + annotation (Placement(transformation(extent={{90,-70},{110,-50}}))); Modelica.Fluid.Interfaces.FluidPort_b port_b2( redeclare final package Medium = Medium2, m_flow(max=if allowFlowReversal2 then +Modelica.Constants.inf else 0), h_outflow(start = Medium2.h_default, nominal = Medium2.h_default)) "Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)" - annotation (Placement(transformation(extent={{port_b2_x-10,port_b2_y-10},{port_b2_x+10,port_b2_y+10}}))); - -protected - constant Integer port_a1_x = -100 - "x-coordinate of port_a1 center"; - constant Integer port_a1_y = 60 - "y-coordinate of port_a1 center"; - constant Integer port_b1_x = 100 - "x-coordinate of port_b1 center"; - constant Integer port_b1_y = 60 - "y-coordinate of port_b1 center"; - constant Integer port_a2_x = 100 - "x-coordinate of port_a2 center"; - constant Integer port_a2_y = -60 - "y-coordinate of port_a2 center"; - constant Integer port_b2_x = -100 - "x-coordinate of port_b2 center"; - constant Integer port_b2_y = -60 - "y-coordinate of port_b2 center"; + annotation (Placement(transformation(extent={{-90,-70},{-110,-50}}))); annotation ( preferredView="info", @@ -101,11 +83,6 @@ are not implemented. ", revisions="
                • -September 1, 2023, by Antoine Gautier:
                  -Added constants for parameterization of port placement. -See #1781. -
                • -
                • April 6, 2020, by Filip Jorissen:
                  Added arrows to the icon indicating the intended flow direction when allowFlowReversal=false. diff --git a/Buildings/Fluid/Interfaces/PartialTwoPort.mo b/Buildings/Fluid/Interfaces/PartialTwoPort.mo index 56b195c9daf..019219a6463 100644 --- a/Buildings/Fluid/Interfaces/PartialTwoPort.mo +++ b/Buildings/Fluid/Interfaces/PartialTwoPort.mo @@ -20,23 +20,13 @@ partial model PartialTwoPort "Partial component with two ports" 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 port_b)" - annotation (Placement(transformation(extent={{port_a_x-10,port_a_y-10},{port_a_x+10,port_a_y+10}}))); + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); 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 connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{port_b_x-10,port_b_y-10},{port_b_x+10,port_b_y+10}}))); - -protected - constant Integer port_a_x = -100 - "x-coordinate of port_a center"; - constant Integer port_a_y = 0 - "y-coordinate of port_a center"; - constant Integer port_b_x = 100 - "x-coordinate of port_b center"; - constant Integer port_b_y = 0 - "y-coordinate of port_b center"; + annotation (Placement(transformation(extent={{110,-10},{90,10}}))); annotation ( Documentation(info=" @@ -58,11 +48,6 @@ users have not used this global definition to assign parameters. ", revisions="
                  • -September 1, 2023, by Antoine Gautier:
                    -Added constants for parameterization of port placement. -See #1781. -
                  • -
                  • January 18, 2019, by Jianjun Hu:
                    Limited the media choice. See #1050. diff --git a/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo b/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo index a8be8d9ab14..22818b05ee6 100644 --- a/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo +++ b/Buildings/Fluid/Interfaces/PartialTwoPortVector.mo @@ -11,7 +11,6 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi property_T=293.15, X_a=0.40) "Propylene glycol water, 40% mass fraction"))); - parameter Integer nPorts "Number of ports" annotation(Evaluate=true, Dialog(connectorSizing=true, tab="General",group="Ports")); parameter Boolean allowFlowReversal=true @@ -23,14 +22,14 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi 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={{port_a_x-10,port_a_y-10},{port_a_x+10,port_a_y+10}}))); + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); Modelica.Fluid.Interfaces.FluidPorts_b ports_b[nPorts]( redeclare each 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={{port_b_x-10,port_b_y-40},{port_b_x+10,port_b_y+40}}))); + annotation (Placement(transformation(extent={{90,-40},{110,40}}))); // Diagnostics parameter Boolean show_T = false @@ -50,17 +49,6 @@ partial model PartialTwoPortVector "Partial component with two ports, one of whi noEvent(actualStream(ports_b.h_outflow)), noEvent(actualStream(ports_b.Xi_outflow))) if show_T "Medium properties in ports_b"; - -protected - constant Integer port_a_x = -100 - "x-coordinate of port_a center"; - constant Integer port_a_y = 0 - "y-coordinate of port_a center"; - constant Integer port_b_x = 100 - "x-coordinate of port_b center"; - constant Integer port_b_y = 0 - "y-coordinate of port_b center"; - annotation ( Documentation(info="

                    @@ -85,11 +73,6 @@ users have not used this global definition to assign parameters. ", revisions="

                    • -September 1, 2023, by Antoine Gautier:
                      -Added constants for parameterization of port placement. -See #1781. -
                    • -
                    • March 30, 2021, by Michael Wetter:
                      Added annotation HideResult=true.
                      This is for diff --git a/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo b/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo index 2756c9ce6f2..adfbdc00025 100644 --- a/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo +++ b/Buildings/Fluid/Storage/BaseClasses/PartialStratified.mo @@ -1,11 +1,11 @@ within Buildings.Fluid.Storage.BaseClasses; model PartialStratified "Partial model of a stratified tank for thermal energy storage" - extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( - port_a_x=0, port_a_y=100, port_b_x=0, port_b_y=-100); + extends Buildings.Fluid.Storage.BaseClasses.PartialTwoPortInterface; import Modelica.Fluid.Types; import Modelica.Fluid.Types.Dynamics; + parameter Modelica.Units.SI.Volume VTan "Tank volume"; parameter Modelica.Units.SI.Length hTan "Height of tank (without insulation)"; parameter Modelica.Units.SI.Length dIns "Thickness of insulation"; @@ -77,6 +77,7 @@ model PartialStratified each final m_flow_small=m_flow_small, each final allowFlowReversal=allowFlowReversal) "Tank segment" annotation (Placement(transformation(extent={{6,-16},{26,4}}))); + protected parameter Medium.ThermodynamicState sta_default = Medium.setState_pTX( T=Medium.T_default, @@ -393,5 +394,8 @@ Icon(graphics={ Line( points={{22,-74},{70,-74},{70,72}}, color={127,0,0}, - pattern=LinePattern.Dot)})); + pattern=LinePattern.Dot), Text( + extent={{-100,100},{-8,70}}, + textString="%name", + textColor={0,0,255})})); end PartialStratified; diff --git a/Buildings/Fluid/Storage/BaseClasses/PartialTwoPortInterface.mo b/Buildings/Fluid/Storage/BaseClasses/PartialTwoPortInterface.mo new file mode 100644 index 00000000000..484e402ced4 --- /dev/null +++ b/Buildings/Fluid/Storage/BaseClasses/PartialTwoPortInterface.mo @@ -0,0 +1,113 @@ +within Buildings.Fluid.Storage.BaseClasses; +partial model PartialTwoPortInterface + "Partial model transporting fluid between two ports without storing mass or energy" + + 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 Boolean allowFlowReversal = true + "= false to simplify equations, assuming, but not enforcing, no flow reversal" + annotation(Dialog(tab="Assumptions"), Evaluate=true); + + Modelica.Fluid.Interfaces.FluidPort_a port_a( + redeclare final package Medium = Medium, + m_flow(min=if allowFlowReversal then -Modelica.Constants.inf else 0), + p(start=Medium.p_default), + h_outflow(start = Medium.h_default, nominal = Medium.h_default)) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-10,90},{10,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b port_b( + redeclare final package Medium = Medium, + m_flow(max=if allowFlowReversal then +Modelica.Constants.inf else 0), + p(start=Medium.p_default), + h_outflow(start = Medium.h_default, nominal = Medium.h_default)) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{10,-110},{-10,-90}}))); + + parameter Modelica.Units.SI.MassFlowRate m_flow_nominal + "Nominal mass flow rate" annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate m_flow_small(min=0) = 1E-4*abs( + m_flow_nominal) "Small mass flow rate for regularization of zero flow" + annotation (Dialog(tab="Advanced")); + // Diagnostics + parameter Boolean show_T = false + "= true, if actual temperature at port is computed" + annotation ( + Dialog(tab="Advanced", group="Diagnostics"), + HideResult=true); + + Modelica.Units.SI.MassFlowRate m_flow(start=_m_flow_start) = port_a.m_flow + "Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction)"; + + Modelica.Units.SI.PressureDifference dp( + start=_dp_start, + displayUnit="Pa") = port_a.p - port_b.p + "Pressure difference between port_a and port_b"; + + Medium.ThermodynamicState sta_a= + if allowFlowReversal then + Medium.setState_phX(port_a.p, + noEvent(actualStream(port_a.h_outflow)), + noEvent(actualStream(port_a.Xi_outflow))) + else + Medium.setState_phX(port_a.p, + noEvent(inStream(port_a.h_outflow)), + noEvent(inStream(port_a.Xi_outflow))) + if show_T "Medium properties in port_a"; + + Medium.ThermodynamicState sta_b= + if allowFlowReversal then + Medium.setState_phX(port_b.p, + noEvent(actualStream(port_b.h_outflow)), + noEvent(actualStream(port_b.Xi_outflow))) + else + Medium.setState_phX(port_b.p, + noEvent(port_b.h_outflow), + noEvent(port_b.Xi_outflow)) + if show_T "Medium properties in port_b"; + +protected + final parameter Modelica.Units.SI.MassFlowRate _m_flow_start=0 + "Start value for m_flow, used to avoid a warning if not set in m_flow, and to avoid m_flow.start in parameter window"; + final parameter Modelica.Units.SI.PressureDifference _dp_start(displayUnit= + "Pa") = 0 + "Start value for dp, used to avoid a warning if not set in dp, and to avoid dp.start in parameter window"; + + annotation ( + preferredView="info", + Documentation(info=" +

                      +This partial class implements the same functionality as + +Buildings.Fluid.Interfaces.StaticTwoPortHeatMassExchanger, +except that port_a and port_b are placed at the top and bottom +of the component. +

                      +

                      Implementation

                      +

                      +The implementation is done in this package as opposed to + +Buildings.Fluid.Interfaces +as it is only used by the storage model, and may be removed when the tool limitations +that are discussed in +IBPSA, #1794. +are removed. +

                      +", revisions=" +
                        +
                      • +September 20, 2023, by Michael Wetter:
                        +First implementation to address +IBPSA, #1794. +
                      • +
                      +")); +end PartialTwoPortInterface; diff --git a/Buildings/Fluid/Storage/BaseClasses/package.order b/Buildings/Fluid/Storage/BaseClasses/package.order index 23ec1825ad5..62b42b3b735 100644 --- a/Buildings/Fluid/Storage/BaseClasses/package.order +++ b/Buildings/Fluid/Storage/BaseClasses/package.order @@ -1,5 +1,6 @@ Buoyancy IndirectTankHeatExchanger PartialStratified +PartialTwoPortInterface ThirdOrderStratifier Examples