Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue1349 reducedorder fails in openmodelica #1377

Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ block AirFlowRateSplit
"VolumeFlowRate", final unit="m3/s") "Aggregated air flow rate"
annotation (Placement(transformation(extent={{-140,-20},{-100,20}}),
iconTransformation(extent={{-140,-20},{-100,20}})));
Modelica.Blocks.Interfaces.RealOutput airFlowOut[dimension](final quantity=
"VolumeFlowRate", final unit="1/h") "Splitted air flow rate"
Modelica.Blocks.Interfaces.RealOutput airFlowOut[dimension](each final quantity=
"VolumeFlowRate", each final unit="1/h") "Splitted air flow rate"
annotation (Placement(transformation(extent={{100,-20},{140,20}}),
iconTransformation(extent={{100,-20},{140,20}})));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
model MultizonePostProcessing
"Calculates and outputs values of interest for multizone model"
parameter Modelica.Units.SI.Volume VAir "Indoor air volume of building";
parameter Integer numZones(min=1)
parameter Integer numZones(min=1)=1
"Number of zones";
parameter AixLib.DataBase.ThermalZones.ZoneBaseRecord zoneParam[numZones]
"Setup for zones" annotation (choicesAllMatching=false);
Expand All @@ -26,31 +26,31 @@ model MultizonePostProcessing
"Average temperature of all zones"
annotation (Placement(transformation(extent={{58,88},{74,104}})));

Modelica.Blocks.Interfaces.RealInput TAir[numZones](final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit= "°C") "Air temperature of each zone"
Modelica.Blocks.Interfaces.RealInput TAir[numZones](each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit= "degC") "Air temperature of each zone"
annotation (Placement(transformation(extent={{-140,80},
{-100,120}}), iconTransformation(extent={{-140,80},{-100,120}})));
Modelica.Blocks.Interfaces.RealInput TRad[numZones](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="°C") "Radiative temperature of each zone"
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC") "Radiative temperature of each zone"
annotation (Placement(transformation(extent={{-140,56},
{-100,96}}), iconTransformation(extent={{-140,56},{-100,
96}})));
Modelica.Blocks.Interfaces.RealInput X_w[numZones](
final quantity="MassFraction",
final unit="1") if calc_rel_humidity
each final quantity="MassFraction",
each final unit="1") if calc_rel_humidity
"Absolute humidity in thermal zone" annotation (
Placement(transformation(extent={{-140,28},{-100,68}}),
iconTransformation(extent={{-140,22},{-100,62}})));
Modelica.Blocks.Interfaces.RealInput PCooler[numZones](final quantity="HeatFlowRate",
final unit="W")
Modelica.Blocks.Interfaces.RealInput PCooler[numZones](each final quantity="HeatFlowRate",
each final unit="W")
"Power consumed for cooling with ideal coolers by each zone" annotation (
Placement(transformation(extent={{-140,-34},{-100,6}}),
iconTransformation(extent={{-140,-34},{-100,6}})));
Modelica.Blocks.Interfaces.RealInput PHeater[numZones](final quantity="HeatFlowRate",
final unit="W")
Modelica.Blocks.Interfaces.RealInput PHeater[numZones](each final quantity="HeatFlowRate",
each final unit="W")
"Power consumed for heating ling with ideal heaters by each zone"
annotation (Placement(transformation(extent={{-140,-6},{-100,34}}),
iconTransformation(extent={{-140,-6},{-100,34}})));
Expand Down Expand Up @@ -145,7 +145,7 @@ model MultizonePostProcessing
Utilities.Psychrometrics.Phi_pTX calcPhi[numZones] if calc_rel_humidity
"Calculates relative humdity"
annotation (Placement(transformation(extent={{-22,32},{-2,52}})));
Modelica.Blocks.Sources.Constant constPressure[numZones](k=PAirConstant)
Modelica.Blocks.Sources.Constant constPressure[numZones](each k=PAirConstant)
if calc_rel_humidity
annotation (Placement(transformation(extent={{-78,20},{-62,36}})));
Modelica.Blocks.Interfaces.RealOutput TOperativeMean(
Expand All @@ -169,14 +169,14 @@ model MultizonePostProcessing
"Average relative humidity of all zones"
annotation (Placement(transformation(extent={{58,48},{74,64}})));
Modelica.Blocks.Interfaces.RealOutput QIntGains[numZones,3](
final quantity="Energy",
final unit="J",
displayUnit="kWh")
each final quantity="Energy",
each final unit="J",
each displayUnit="kWh")
"Heat gains based on internal gains for each zone from persons, machines, and light"
annotation (Placement(transformation(extent={{100,-122},{120,-102}}),
iconTransformation(extent={{100,-130},{120,-110}})));
Modelica.Blocks.Interfaces.RealInput QIntGains_flow[numZones,3](final
quantity="HeatFlowRate", final unit="W")
Modelica.Blocks.Interfaces.RealInput QIntGains_flow[numZones,3](each final
quantity="HeatFlowRate", each final unit="W")
"Heat flow based on internal gains for each zone from persons, machines, and light"
annotation (
Placement(transformation(extent={{-140,-140},{-100,-100}}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,16 @@ partial model PartialMultizone "Partial model for multizone models"
rotation=90,
origin={60,-110})));
Modelica.Blocks.Interfaces.RealOutput TAir[size(zone, 1)](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") if ASurTot > 0 or VAir > 0
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC") if ASurTot > 0 or VAir > 0
"Indoor air temperature"
annotation (Placement(transformation(extent={{100,71},{120,91}}),
iconTransformation(extent={{80,19},{100,40}})));
Modelica.Blocks.Interfaces.RealOutput TRad[size(zone, 1)](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") if ASurTot > 0
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC") if ASurTot > 0
"Mean indoor radiation temperature"
annotation (Placement(transformation(extent={{100,49},{120,69}}),
iconTransformation(extent={{80,0},{100,20}})));
Expand Down Expand Up @@ -149,10 +149,10 @@ partial model PartialMultizone "Partial model for multizone models"
enable=not recOrSep));

Modelica.Blocks.Interfaces.RealInput TSetHeat[numZones](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC",
min=0) "Set point for heater - used only if zoneParam[i].HeaterOn is true"
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC",
each min=0) "Set point for heater - used only if zoneParam[i].HeaterOn is true"
annotation (Placement(transformation(
extent={{20,-20},{-20,20}},
rotation=270,
Expand All @@ -161,31 +161,31 @@ partial model PartialMultizone "Partial model for multizone models"
rotation=270,
origin={-52,-110})));
Modelica.Blocks.Interfaces.RealInput TSetCool[numZones](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC",
min=0) "Set point for cooler - used only if zoneParam[i].CoolerOn is true"
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC",
each min=0) "Set point for cooler - used only if zoneParam[i].CoolerOn is true"
annotation (Placement(transformation(
extent={{20,-20},{-20,20}},
rotation=270,
origin={-80,-100}), iconTransformation(
extent={{10,-10},{-10,10}},
rotation=270,
origin={-74,-110})));
Modelica.Blocks.Interfaces.RealOutput PHeater[numZones](final quantity="HeatFlowRate",
final unit="W")
Modelica.Blocks.Interfaces.RealOutput PHeater[numZones](each final quantity="HeatFlowRate",
each final unit="W")
"Power for heating"
annotation (
Placement(transformation(extent={{100,-56},{120,-36}}),
iconTransformation(extent={{80,-80},{100,-60}})));
Modelica.Blocks.Interfaces.RealOutput PCooler[numZones](final quantity="HeatFlowRate",
final unit="W")
Modelica.Blocks.Interfaces.RealOutput PCooler[numZones](each final quantity="HeatFlowRate",
each final unit="W")
"Power for cooling"
annotation (
Placement(transformation(extent={{100,-70},{120,-50}}),iconTransformation(
extent={{80,-100},{100,-80}})));
Modelica.Blocks.Interfaces.RealOutput QIntGains_flow[numZones,3](final
quantity="HeatFlowRate", final unit="W") if ASurTot > 0 or VAir > 0
Modelica.Blocks.Interfaces.RealOutput QIntGains_flow[numZones,3](each final
quantity="HeatFlowRate", each final unit="W") if ASurTot > 0 or VAir > 0
"Heat flow based on internal gains for each zone from persons, machines, and light"
annotation (Placement(transformation(extent={{100,-90},{
120,-70}}), iconTransformation(extent={{80,-100},{100,-80}})));
Expand Down
12 changes: 6 additions & 6 deletions AixLib/ThermalZones/ReducedOrder/Multizone/Multizone.mo
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ model Multizone


Modelica.Blocks.Interfaces.RealInput ventTemp[numZones](
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC",
min=0)
each final quantity="ThermodynamicTemperature",
each final unit="K",
each displayUnit="degC",
each min=0)
"Ventilation and infiltration temperature"
annotation (Placement(transformation(extent={{-120,-12},{-80,28}}),
iconTransformation(
extent={{-10,-10},{10,10}},
rotation=0,
origin={-90,0})));
Modelica.Blocks.Interfaces.RealInput ventRate[numZones](final
quantity="VolumeFlowRate", final unit="1/h")
Modelica.Blocks.Interfaces.RealInput ventRate[numZones](
each final quantity="VolumeFlowRate", each final unit="1/h")
"Ventilation and infiltration rate"
annotation (Placement(transformation(extent={{-120,-40},{-80,0}}),
iconTransformation(extent={{-100,-36},{-80,-16}})));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ model MultizoneEquipped
"CO2 concentration in the thermal zone in ppm"
annotation (Placement(transformation(extent={{100,10},{120,30}})));
protected
parameter Real zoneFactor[numZones,1](fixed=false)
parameter Real zoneFactor[numZones,1](each fixed=false)
"Calculated zone factors";
parameter Real VAirRes(fixed=false)
"Resulting air volume in zones supplied by the AHU";
Expand Down
2 changes: 1 addition & 1 deletion AixLib/ThermalZones/ReducedOrder/RC/OneElement.mo
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ model OneElement "Thermal Zone with one element for exterior walls"
parameter Modelica.Units.SI.CoefficientOfHeatTransfer hRad
"Coefficient of heat transfer for linearized radiation exchange between walls"
annotation (Dialog(group="Thermal zone"));
parameter Integer nOrientations(min=1) "Number of orientations"
parameter Integer nOrientations(min=1)=1 "Number of orientations"
annotation(Dialog(group="Thermal zone"));
parameter Integer nPorts=0 "Number of fluid ports"
annotation(Evaluate=true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ within AixLib.ThermalZones.ReducedOrder.SolarGain.BaseClasses;
partial model PartialCorrectionG
"Partial model for correction of the solar gain factor"

parameter Integer n(min = 1) "Vector size for input and output";
parameter Integer n(min = 1)=1 "Vector size for input and output";
parameter Modelica.Units.SI.CoefficientOfHeatTransfer UWin
"Thermal transmission coefficient of whole window";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,73 +2,73 @@ within AixLib.ThermalZones.ReducedOrder.SolarGain.BaseClasses;
partial model PartialCorrectionGTaue
"Partial model for correction of the solar gain factor and for the
translucence"
parameter Integer n(min = 1) "Number of windows"
parameter Integer n(min = 1)=1 "Number of windows"
annotation(dialog(group="window"));
parameter Modelica.Units.SI.CoefficientOfHeatTransfer UWin
"Thermal transmission coefficient of whole window"
annotation (dialog(group="window"));
parameter Modelica.Units.SI.Angle xi(displayUnit="degree") = 0
"Elevation angle";
parameter Modelica.Units.SI.Angle[n] til(displayUnit="degree")
parameter Modelica.Units.SI.Angle[n] til(each displayUnit="degree")
"Surface tilt. til=90 degree for walls; til=0 for ceilings; til=180 for roof"
annotation (dialog(group="window"));

Modelica.Blocks.Interfaces.RealOutput[n] corG_Dir(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Transmission coefficient correction factor for direct radiation"
annotation (Placement(transformation(extent={{80,-30},{100,-10}}),
iconTransformation(extent={{80,-30},{100,-10}})));
Modelica.Blocks.Interfaces.RealOutput[n] corG_DifCle(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Transmission coefficient correction factor for diffuse radiation while
clear sky"
annotation (Placement(transformation(extent={{80,-50},{100,-30}}),
iconTransformation(extent={{80,-50},{100,-30}})));
Modelica.Blocks.Interfaces.RealOutput[n] corG_DifCov(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Transmission coefficient correction factor for diffuse radiation while
covered sky"
annotation (Placement(transformation(extent={{80,-70},{100,-50}}),
iconTransformation(extent={{80,-70},{100,-50}})));
Modelica.Blocks.Interfaces.RealOutput[n] corG_Gro(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Transmission coefficient correction factor for ground reflection radiation"
annotation (Placement(transformation(extent={{80,-90},{100,-70}}),
iconTransformation(extent={{80,-90},{100,-70}})));
Modelica.Blocks.Interfaces.RealOutput[n] corTaue_Dir(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Correction value for translucence for direct irradiation"
annotation (Placement(transformation(extent={{80,10},{100,30}}),
iconTransformation(extent={{80,10},{100,30}})));
Modelica.Blocks.Interfaces.RealOutput[n] corTaue_DifCle(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Correction value for translucence for diffuse irradiation during clear sky"
annotation (Placement(transformation(extent={{80,30},{100,50}}),
iconTransformation(extent={{80,30},{100,50}})));
Modelica.Blocks.Interfaces.RealOutput[n] corTaue_DifCov(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Correction value for translucence for diffuse irradiation during covered
sky"
annotation (Placement(transformation(extent={{80,50},{100,70}}),
iconTransformation(extent={{80,50},{100,70}})));
Modelica.Blocks.Interfaces.RealOutput[n] corTaue_Gro(
final quantity="TransmissionCoefficient",
final unit="1")
each final quantity="TransmissionCoefficient",
each final unit="1")
"Correction value for translucence for ground reflection radiation"
annotation (Placement(transformation(extent={{80,70},{100,90}}),
iconTransformation(extent={{80,70},{100,90}})));

Modelica.Blocks.Interfaces.RealInput incAng[n](
final quantity="Angle",
final unit="rad",
displayUnit="degree")
each final quantity="Angle",
each final unit="rad",
each displayUnit="degree")
"Incidence angles of the sun beam on a tilted surface"
annotation (Placement(transformation(extent={{-120,-10},{-80,30}}),
iconTransformation(extent={{-100,10},{-80,30}})));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ protected
"Constant 5 to calculate reference transmission";
parameter Real A6=4.74*10^(-12)
"Constant 6 to calculate reference transmission";
parameter Modelica.Units.SI.CoefficientOfHeatTransfer UWin_dimless=1
"Auxiliary parameter for dimensionless UWin";
parameter Modelica.Units.SI.TransmissionCoefficient g_dir0=0.7537 "Reference vertical parallel transmission coefficient for direct radiation
for double pane window";
parameter Modelica.Units.SI.TransmissionCoefficient Ta_diff=0.84 "Energetic degree of transmission for diffuse radiation for uniformly
Expand All @@ -42,21 +44,22 @@ protected
XN2_diff "Energetic dregree of transmission for second pane";
parameter Modelica.Units.SI.Emissivity a1_diff=1 - Ta1_diff - rho_1_diff
"Degree of absorption for single pane window";
parameter Modelica.Units.SI.CoefficientOfHeatTransfer Q21_diff=a1_diff*(1 + (
Ta1_diff*rho_1_diff/XN2_diff))*UWin/25
"Coefficient of heat transfer for exterior pane of double pane window";
parameter Modelica.Units.SI.CoefficientOfHeatTransfer Q22_diff=a1_diff*(
Ta1_diff/XN2_diff)*(1 - (UWin/7.7))
"Coefficient of heat transfer for interior pane of double pane window";
parameter Modelica.Units.SI.CoefficientOfHeatTransfer Qsek2_diff=Q21_diff +
Q22_diff "Overall coefficient of heat transfer for double pane window";
parameter Real Q21_diff=a1_diff*(1 + (
Ta1_diff*rho_1_diff/XN2_diff))*UWin/UWin_dimless/25
"Auxiliary variable for exterior pane of double pane window";
parameter Real Q22_diff=a1_diff*(
Ta1_diff/XN2_diff)*(1 - (UWin/UWin_dimless/7.7))
"Auxiliary variable for interior pane of double pane window";
parameter Real Qsek2_diff=Q21_diff +
Q22_diff "Auxiliary variable for whole double pane window";
parameter Modelica.Units.SI.TransmissionCoefficient CorG_diff=(Ta2_diff +
Qsek2_diff)/g_dir0
"Transmission coefficient correction factor for diffuse radiation";
parameter Modelica.Units.SI.TransmissionCoefficient CorG_gr=(Ta2_diff +
Qsek2_diff)/g_dir0
"Transmission coefficient correction factor for irradiations from ground";


//Calculating the correction factor for direct solar radiation
Modelica.Units.SI.TransmissionCoefficient[n] Ta_dir
"Energetic degree of transmission for direct radiation";
Expand Down