diff --git a/AixLib/.copiedFiles.txt b/AixLib/.copiedFiles.txt index 9db1d605d0..4b6408bc75 100644 --- a/AixLib/.copiedFiles.txt +++ b/AixLib/.copiedFiles.txt @@ -199,6 +199,10 @@ AixLib\Controls\SetPoints\Examples\package.order AixLib\Controls\SetPoints\HotWaterTemperatureReset.mo AixLib\Controls\SetPoints\OccupancySchedule.mo AixLib\Controls\SetPoints\Table.mo +AixLib\Controls\SetPoints\Validation\OccupancyScheduleNegativeStartTime.mo +AixLib\Controls\SetPoints\Validation\OccupancySchedulePositiveStartTime.mo +AixLib\Controls\SetPoints\Validation\package.mo +AixLib\Controls\SetPoints\Validation\package.order AixLib\Controls\SetPoints\package.mo AixLib\Controls\SetPoints\package.order AixLib\Controls\package.mo @@ -250,6 +254,7 @@ AixLib\Fluid\Actuators\Valves\ThreeWayEqualPercentageLinear.mo AixLib\Fluid\Actuators\Valves\ThreeWayLinear.mo AixLib\Fluid\Actuators\Valves\TwoWayEqualPercentage.mo AixLib\Fluid\Actuators\Valves\TwoWayLinear.mo +AixLib\Fluid\Actuators\Valves\TwoWayPolynomial.mo AixLib\Fluid\Actuators\Valves\TwoWayPressureIndependent.mo AixLib\Fluid\Actuators\Valves\TwoWayQuickOpening.mo AixLib\Fluid\Actuators\Valves\TwoWayTable.mo @@ -441,18 +446,52 @@ AixLib\Fluid\FMI\Validation\package.mo AixLib\Fluid\FMI\Validation\package.order AixLib\Fluid\FMI\package.mo AixLib\Fluid\FMI\package.order +AixLib\Fluid\FixedResistances\BaseClasses\PlugFlow.mo +AixLib\Fluid\FixedResistances\BaseClasses\PlugFlowCore.mo +AixLib\Fluid\FixedResistances\BaseClasses\PlugFlowHeatLoss.mo +AixLib\Fluid\FixedResistances\BaseClasses\PlugFlowTransportDelay.mo +AixLib\Fluid\FixedResistances\BaseClasses\Validation\PlugFlowCore.mo +AixLib\Fluid\FixedResistances\BaseClasses\Validation\package.mo +AixLib\Fluid\FixedResistances\BaseClasses\Validation\package.order +AixLib\Fluid\FixedResistances\BaseClasses\package.mo +AixLib\Fluid\FixedResistances\BaseClasses\package.order AixLib\Fluid\FixedResistances\Examples\FlowJunction.mo AixLib\Fluid\FixedResistances\Examples\HydraulicDiameter.mo +AixLib\Fluid\FixedResistances\Examples\PlugFlowPipe.mo AixLib\Fluid\FixedResistances\Examples\PressureDrop.mo AixLib\Fluid\FixedResistances\Examples\package.mo AixLib\Fluid\FixedResistances\Examples\package.order AixLib\Fluid\FixedResistances\HydraulicDiameter.mo AixLib\Fluid\FixedResistances\Junction.mo AixLib\Fluid\FixedResistances\LosslessPipe.mo +AixLib\Fluid\FixedResistances\PlugFlowPipe.mo AixLib\Fluid\FixedResistances\PressureDrop.mo AixLib\Fluid\FixedResistances\Validation\FlowJunctionSteadyState.mo AixLib\Fluid\FixedResistances\Validation\FlowJunctionSteadyStateNoPressureDrop.mo AixLib\Fluid\FixedResistances\Validation\LosslessPipe.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\BaseClasses\PipeDataBaseDefinition.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\BaseClasses\PipeDataULg.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\BaseClasses\package.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\BaseClasses\package.order +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataAIT151218.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg150801.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg151202.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg151204_1.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg151204_2.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg151204_4.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg160104_2.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\PipeDataULg160118_1.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\TestData.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\package.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\package.order +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\FlowReversal.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\MSLAIT.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\MSLAIT2Nodes.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\PlugFlowAIT.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\PlugFlowULg.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\TransportWaterAir.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\package.mo +AixLib\Fluid\FixedResistances\Validation\PlugFlowPipes\package.order AixLib\Fluid\FixedResistances\Validation\PressureDropsExplicit.mo AixLib\Fluid\FixedResistances\Validation\PressureDropsExplicitLinearized.mo AixLib\Fluid\FixedResistances\Validation\PressureDropsParallel.mo @@ -494,11 +533,24 @@ AixLib\Fluid\HeatExchangers\ActiveBeams\Validation\package.mo AixLib\Fluid\HeatExchangers\ActiveBeams\Validation\package.order AixLib\Fluid\HeatExchangers\ActiveBeams\package.mo AixLib\Fluid\HeatExchangers\ActiveBeams\package.order +AixLib\Fluid\HeatExchangers\BaseClasses\Examples\HACoilInside.mo +AixLib\Fluid\HeatExchangers\BaseClasses\Examples\HANaturalCylinder.mo +AixLib\Fluid\HeatExchangers\BaseClasses\Examples\package.mo +AixLib\Fluid\HeatExchangers\BaseClasses\Examples\package.order +AixLib\Fluid\HeatExchangers\BaseClasses\HACoilInside.mo +AixLib\Fluid\HeatExchangers\BaseClasses\HANaturalCylinder.mo +AixLib\Fluid\HeatExchangers\BaseClasses\Internal.mo AixLib\Fluid\HeatExchangers\BaseClasses\PartialEffectiveness.mo AixLib\Fluid\HeatExchangers\BaseClasses\PartialPrescribedOutlet.mo +AixLib\Fluid\HeatExchangers\BaseClasses\dynamicViscosityWater.mo +AixLib\Fluid\HeatExchangers\BaseClasses\epsilon_ntuZ.mo +AixLib\Fluid\HeatExchangers\BaseClasses\isobaricExpansionCoefficientWater.mo +AixLib\Fluid\HeatExchangers\BaseClasses\ntu_epsilonZ.mo AixLib\Fluid\HeatExchangers\BaseClasses\package.mo AixLib\Fluid\HeatExchangers\BaseClasses\package.order +AixLib\Fluid\HeatExchangers\BaseClasses\prandtlNumberWater.mo AixLib\Fluid\HeatExchangers\ConstantEffectiveness.mo +AixLib\Fluid\HeatExchangers\EvaporatorCondenser.mo AixLib\Fluid\HeatExchangers\Examples\AirHeater_T.mo AixLib\Fluid\HeatExchangers\Examples\AirHeater_u.mo AixLib\Fluid\HeatExchangers\Examples\BaseClasses\Heater.mo @@ -520,6 +572,7 @@ AixLib\Fluid\HeatExchangers\Radiators\package.mo AixLib\Fluid\HeatExchangers\Radiators\package.order AixLib\Fluid\HeatExchangers\SensibleCooler_T.mo AixLib\Fluid\HeatExchangers\Validation\ConstantEffectiveness.mo +AixLib\Fluid\HeatExchangers\Validation\EvaporatorCondenser.mo AixLib\Fluid\HeatExchangers\Validation\HeaterCooler_u.mo AixLib\Fluid\HeatExchangers\Validation\PrescribedOutlet.mo AixLib\Fluid\HeatExchangers\Validation\PrescribedOutlet_dynamic.mo @@ -527,18 +580,97 @@ AixLib\Fluid\HeatExchangers\Validation\package.mo AixLib\Fluid\HeatExchangers\Validation\package.order AixLib\Fluid\HeatExchangers\package.mo AixLib\Fluid\HeatExchangers\package.order +AixLib\Fluid\HeatPumps\BaseClasses\PartialWaterToWater.mo +AixLib\Fluid\HeatPumps\BaseClasses\package.mo +AixLib\Fluid\HeatPumps\BaseClasses\package.order +AixLib\Fluid\HeatPumps\Calibration\BaseClasses\PartialWaterToWater.mo +AixLib\Fluid\HeatPumps\Calibration\BaseClasses\package.mo +AixLib\Fluid\HeatPumps\Calibration\BaseClasses\package.order +AixLib\Fluid\HeatPumps\Calibration\ScrollWaterToWater.mo +AixLib\Fluid\HeatPumps\Calibration\package.mo +AixLib\Fluid\HeatPumps\Calibration\package.order AixLib\Fluid\HeatPumps\Carnot_TCon.mo AixLib\Fluid\HeatPumps\Carnot_y.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\PartialCompressor.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\TemperatureProtection.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\Validation\TemperatureProtection.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\Validation\package.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\Validation\package.order +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\package.mo +AixLib\Fluid\HeatPumps\Compressors\BaseClasses\package.order +AixLib\Fluid\HeatPumps\Compressors\ReciprocatingCompressor.mo +AixLib\Fluid\HeatPumps\Compressors\ScrollCompressor.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\ReciprocatingCompressor.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\ReciprocatingCompressor_ZeroInput.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\ScrollCompressor.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\ScrollCompressor_ZeroInput.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\package.mo +AixLib\Fluid\HeatPumps\Compressors\Validation\package.order +AixLib\Fluid\HeatPumps\Compressors\package.mo +AixLib\Fluid\HeatPumps\Compressors\package.order +AixLib\Fluid\HeatPumps\Data\BaseClasses\HeatPumps.mo +AixLib\Fluid\HeatPumps\Data\BaseClasses\package.mo +AixLib\Fluid\HeatPumps\Data\BaseClasses\package.order +AixLib\Fluid\HeatPumps\Data\ReciprocatingWaterToWater\Generic.mo +AixLib\Fluid\HeatPumps\Data\ReciprocatingWaterToWater\package.mo +AixLib\Fluid\HeatPumps\Data\ReciprocatingWaterToWater\package.order +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Generic.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW122_38kW_4_29COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW180_52kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW210_70kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW240_93kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW360_105kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Carrier_50PSW420_140kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\ClimateMaster_TMW036_12kW_4_90COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\ClimateMaster_TMW060_21kW_4_60COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\ClimateMaster_TMW120_42kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\ClimateMaster_TMW170_48kW_4_30COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\ClimateMaster_TMW340_98kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA036_13kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA048_16kW_4_60COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA060_19kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA072_24kW_4_30COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA120_37kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA150_49kW_4_70COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA180_63kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA240_79kW_4_40COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA300_93kW_4_60COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA360_116kW_4_60COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Daikin_WRA420_137kW_4_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Trane_EXW060_21kW_4_30COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Trane_EXW120_40kW_3_90COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Trane_EXW240_76kW_4_10COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Viessmann_BW301A21_28kW_5_94COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Viessmann_BW301A29_37kW_6_0COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\Viessmann_BW301A45_58kW_5_50COP_R410A.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\package.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\Heating\package.order +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\package.mo +AixLib\Fluid\HeatPumps\Data\ScrollWaterToWater\package.order +AixLib\Fluid\HeatPumps\Data\package.mo +AixLib\Fluid\HeatPumps\Data\package.order AixLib\Fluid\HeatPumps\Examples\Carnot_TCon.mo AixLib\Fluid\HeatPumps\Examples\Carnot_y.mo +AixLib\Fluid\HeatPumps\Examples\ScrollWaterToWater_OneRoomRadiator.mo AixLib\Fluid\HeatPumps\Examples\package.mo AixLib\Fluid\HeatPumps\Examples\package.order +AixLib\Fluid\HeatPumps\ReciprocatingWaterToWater.mo +AixLib\Fluid\HeatPumps\ScrollWaterToWater.mo AixLib\Fluid\HeatPumps\Validation\Carnot_TCon_LimitedCapacity.mo AixLib\Fluid\HeatPumps\Validation\Carnot_TCon_LowTemperature.mo AixLib\Fluid\HeatPumps\Validation\Carnot_TCon_etaPL.mo AixLib\Fluid\HeatPumps\Validation\Carnot_TCon_reverseFlow.mo AixLib\Fluid\HeatPumps\Validation\Carnot_y_etaCar.mo AixLib\Fluid\HeatPumps\Validation\Carnot_y_etaPL.mo +AixLib\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_Dynamic.mo +AixLib\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_ScalingFactor.mo +AixLib\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_Static.mo +AixLib\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_VariableSpeed.mo +AixLib\Fluid\HeatPumps\Validation\ScrollWaterToWater_Dynamic.mo +AixLib\Fluid\HeatPumps\Validation\ScrollWaterToWater_ScalingFactor.mo +AixLib\Fluid\HeatPumps\Validation\ScrollWaterToWater_Static.mo +AixLib\Fluid\HeatPumps\Validation\ScrollWaterToWater_TemperatureProtection.mo +AixLib\Fluid\HeatPumps\Validation\ScrollWaterToWater_VariableSpeed.mo AixLib\Fluid\HeatPumps\Validation\package.mo AixLib\Fluid\HeatPumps\Validation\package.order AixLib\Fluid\HeatPumps\package.mo @@ -579,9 +711,11 @@ AixLib\Fluid\Interfaces\FourPortHeatMassExchanger.mo AixLib\Fluid\Interfaces\LumpedVolumeDeclarations.mo AixLib\Fluid\Interfaces\PartialFourPort.mo AixLib\Fluid\Interfaces\PartialFourPortInterface.mo +AixLib\Fluid\Interfaces\PartialFourPortParallel.mo AixLib\Fluid\Interfaces\PartialTwoPort.mo AixLib\Fluid\Interfaces\PartialTwoPortInterface.mo AixLib\Fluid\Interfaces\PartialTwoPortTransport.mo +AixLib\Fluid\Interfaces\PartialTwoPortVector.mo AixLib\Fluid\Interfaces\PrescribedOutlet.mo AixLib\Fluid\Interfaces\StaticFourPortHeatMassExchanger.mo AixLib\Fluid\Interfaces\StaticTwoPortConservationEquation.mo @@ -594,9 +728,20 @@ AixLib\Fluid\MassExchangers\ConstantEffectiveness.mo AixLib\Fluid\MassExchangers\Examples\ConstantEffectiveness.mo AixLib\Fluid\MassExchangers\Examples\package.mo AixLib\Fluid\MassExchangers\Examples\package.order +AixLib\Fluid\MassExchangers\Validation\ConstantEffectivenessZeroFlow.mo +AixLib\Fluid\MassExchangers\Validation\ConstantEffectivenessZeroFlowBothStreams.mo +AixLib\Fluid\MassExchangers\Validation\package.mo +AixLib\Fluid\MassExchangers\Validation\package.order AixLib\Fluid\MassExchangers\package.mo AixLib\Fluid\MassExchangers\package.order +AixLib\Fluid\MixingVolumes\BaseClasses\MixingVolumeHeatMoisturePort.mo +AixLib\Fluid\MixingVolumes\BaseClasses\MixingVolumeHeatPort.mo AixLib\Fluid\MixingVolumes\BaseClasses\PartialMixingVolume.mo +AixLib\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatMoisturePort.mo +AixLib\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatPortAir.mo +AixLib\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatPortWater.mo +AixLib\Fluid\MixingVolumes\BaseClasses\Validation\package.mo +AixLib\Fluid\MixingVolumes\BaseClasses\Validation\package.order AixLib\Fluid\MixingVolumes\BaseClasses\package.mo AixLib\Fluid\MixingVolumes\BaseClasses\package.order AixLib\Fluid\MixingVolumes\Examples\MixingVolumeHeatConduction.mo @@ -611,6 +756,12 @@ AixLib\Fluid\MixingVolumes\Validation\BaseClasses\MoistureMixingConservation.mo AixLib\Fluid\MixingVolumes\Validation\BaseClasses\TraceSubstanceConservation.mo AixLib\Fluid\MixingVolumes\Validation\BaseClasses\package.mo AixLib\Fluid\MixingVolumes\Validation\BaseClasses\package.order +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesAir.mo +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesGlycol47.mo +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedAirPerfectGas.mo +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedWaterConstantProperties_pT.mo +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedWaterTemperatureDependentDensity.mo +AixLib\Fluid\MixingVolumes\Validation\CoupledVolumesWater.mo AixLib\Fluid\MixingVolumes\Validation\MixingVolume.mo AixLib\Fluid\MixingVolumes\Validation\MixingVolumeAdiabaticCooling.mo AixLib\Fluid\MixingVolumes\Validation\MixingVolumeHeatReverseFlow.mo @@ -670,6 +821,7 @@ AixLib\Fluid\Movers\Data\Pumps\Wilo\TopS30slash10.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\TopS30slash5.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\TopS40slash10.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\TopS40slash7.mo +AixLib\Fluid\Movers\Data\Pumps\Wilo\VeroLine50slash150dash4slash2.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\VeroLine80slash115dash2comma2slash2.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\package.mo AixLib\Fluid\Movers\Data\Pumps\Wilo\package.order @@ -772,6 +924,13 @@ AixLib\Fluid\Sensors\VolumeFlowRate.mo AixLib\Fluid\Sensors\package.mo AixLib\Fluid\Sensors\package.order AixLib\Fluid\Sources\BaseClasses\Outside.mo +AixLib\Fluid\Sources\BaseClasses\PartialPropertySource.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource_T.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource_Xi_C.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource_h.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource_m_flow.mo +AixLib\Fluid\Sources\BaseClasses\PartialSource_p.mo AixLib\Fluid\Sources\BaseClasses\package.mo AixLib\Fluid\Sources\BaseClasses\package.order AixLib\Fluid\Sources\Boundary_pT.mo @@ -779,6 +938,8 @@ AixLib\Fluid\Sources\Boundary_ph.mo AixLib\Fluid\Sources\Examples\MassFlowSource_WeatherData.mo AixLib\Fluid\Sources\Examples\Outside.mo AixLib\Fluid\Sources\Examples\Outside_CpLowRise.mo +AixLib\Fluid\Sources\Examples\PropertySource_T.mo +AixLib\Fluid\Sources\Examples\PropertySource_h.mo AixLib\Fluid\Sources\Examples\TraceSubstancesFlowSource.mo AixLib\Fluid\Sources\Examples\package.mo AixLib\Fluid\Sources\Examples\package.order @@ -788,18 +949,54 @@ AixLib\Fluid\Sources\MassFlowSource_WeatherData.mo AixLib\Fluid\Sources\MassFlowSource_h.mo AixLib\Fluid\Sources\Outside.mo AixLib\Fluid\Sources\Outside_CpLowRise.mo +AixLib\Fluid\Sources\PropertySource_T.mo +AixLib\Fluid\Sources\PropertySource_h.mo AixLib\Fluid\Sources\TraceSubstancesFlowSource.mo AixLib\Fluid\Sources\package.mo AixLib\Fluid\Sources\package.order +AixLib\Fluid\Storage\BaseClasses\Buoyancy.mo +AixLib\Fluid\Storage\BaseClasses\Examples\IndirectTankHeatExchanger.mo +AixLib\Fluid\Storage\BaseClasses\Examples\package.mo +AixLib\Fluid\Storage\BaseClasses\Examples\package.order +AixLib\Fluid\Storage\BaseClasses\IndirectTankHeatExchanger.mo +AixLib\Fluid\Storage\BaseClasses\PartialStratified.mo +AixLib\Fluid\Storage\BaseClasses\ThirdOrderStratifier.mo +AixLib\Fluid\Storage\BaseClasses\package.mo +AixLib\Fluid\Storage\BaseClasses\package.order AixLib\Fluid\Storage\Examples\ExpansionVessel.mo +AixLib\Fluid\Storage\Examples\Stratified.mo +AixLib\Fluid\Storage\Examples\StratifiedEnhancedInternalHex.mo +AixLib\Fluid\Storage\Examples\StratifiedUnloadAtMinimumTemperature.mo AixLib\Fluid\Storage\Examples\package.mo AixLib\Fluid\Storage\Examples\package.order AixLib\Fluid\Storage\ExpansionVessel.mo +AixLib\Fluid\Storage\Stratified.mo +AixLib\Fluid\Storage\StratifiedEnhanced.mo +AixLib\Fluid\Storage\StratifiedEnhancedInternalHex.mo +AixLib\Fluid\Storage\UsersGuide.mo +AixLib\Fluid\Storage\Validation\HeatExchangerDynamics.mo +AixLib\Fluid\Storage\Validation\HeatExchangerLocation.mo +AixLib\Fluid\Storage\Validation\StratifiedLoadingUnloading.mo +AixLib\Fluid\Storage\Validation\package.mo +AixLib\Fluid\Storage\Validation\package.order AixLib\Fluid\Storage\package.mo AixLib\Fluid\Storage\package.order AixLib\Fluid\Types.mo AixLib\Fluid\package.order AixLib\Media\Air.mo +AixLib\Media\Antifreeze\BaseClasses\PropertyCoefficients.mo +AixLib\Media\Antifreeze\BaseClasses\package.mo +AixLib\Media\Antifreeze\BaseClasses\package.order +AixLib\Media\Antifreeze\PropyleneGlycolWater.mo +AixLib\Media\Antifreeze\Validation\BaseClasses\FluidProperties.mo +AixLib\Media\Antifreeze\Validation\BaseClasses\PropyleneGlycolWater.mo +AixLib\Media\Antifreeze\Validation\BaseClasses\package.mo +AixLib\Media\Antifreeze\Validation\BaseClasses\package.order +AixLib\Media\Antifreeze\Validation\PropyleneGlycolWater.mo +AixLib\Media\Antifreeze\Validation\package.mo +AixLib\Media\Antifreeze\Validation\package.order +AixLib\Media\Antifreeze\package.mo +AixLib\Media\Antifreeze\package.order AixLib\Media\Examples\AirDerivativeCheck.mo AixLib\Media\Examples\AirProperties.mo AixLib\Media\Examples\AirTemperatureEnthalpyInversion.mo @@ -808,12 +1005,35 @@ AixLib\Media\Examples\BaseClasses\FluidProperties.mo AixLib\Media\Examples\BaseClasses\TestTemperatureEnthalpyInversion.mo AixLib\Media\Examples\BaseClasses\package.mo AixLib\Media\Examples\BaseClasses\package.order +AixLib\Media\Examples\PropyleneGlycolWaterDerivativeCheck.mo +AixLib\Media\Examples\PropyleneGlycolWaterProperties.mo +AixLib\Media\Examples\PropyleneGlycolWaterTemperatureEnthalpyInversion.mo +AixLib\Media\Examples\PropyleneGlycolWaterTestImplementation.mo AixLib\Media\Examples\WaterDerivativeCheck.mo AixLib\Media\Examples\WaterProperties.mo AixLib\Media\Examples\WaterTemperatureEnthalpyInversion.mo AixLib\Media\Examples\WaterTestImplementation.mo AixLib\Media\Examples\package.mo AixLib\Media\Examples\package.order +AixLib\Media\Refrigerants\R410A\dPressureVap_dSpecificVolume_Tv.mo +AixLib\Media\Refrigerants\R410A\dPressureVap_dTemperature_Tv.mo +AixLib\Media\Refrigerants\R410A\dSpecificVolumeVap_pT.mo +AixLib\Media\Refrigerants\R410A\enthalpySatLiq_T.mo +AixLib\Media\Refrigerants\R410A\enthalpySatVap_T.mo +AixLib\Media\Refrigerants\R410A\isentropicExponentVap_Tv.mo +AixLib\Media\Refrigerants\R410A\package.mo +AixLib\Media\Refrigerants\R410A\package.order +AixLib\Media\Refrigerants\R410A\pressureSatLiq_T.mo +AixLib\Media\Refrigerants\R410A\pressureSatVap_T.mo +AixLib\Media\Refrigerants\R410A\pressureVap_Tv.mo +AixLib\Media\Refrigerants\R410A\specificIsobaricHeatCapacityVap_Tv.mo +AixLib\Media\Refrigerants\R410A\specificIsochoricHeatCapacityVap_Tv.mo +AixLib\Media\Refrigerants\R410A\specificVolumeVap_pT.mo +AixLib\Media\Refrigerants\Validation\R410A_dSpecificVolumeVap_pT.mo +AixLib\Media\Refrigerants\Validation\package.mo +AixLib\Media\Refrigerants\Validation\package.order +AixLib\Media\Refrigerants\package.mo +AixLib\Media\Refrigerants\package.order AixLib\Media\Specialized\Air\Examples\PerfectGasDerivativeCheck.mo AixLib\Media\Specialized\Air\Examples\PerfectGasTemperatureEnthalpyInversion.mo AixLib\Media\Specialized\Air\Examples\PerfectGasTestImplementation.mo @@ -839,6 +1059,11 @@ AixLib\Media\Specialized\package.order AixLib\Media\Water.mo AixLib\Media\package.mo AixLib\Media\package.order +AixLib\Resources\C-Sources\fileWriterFree.c +AixLib\Resources\C-Sources\fileWriterInit.c +AixLib\Resources\C-Sources\fileWriterStructure.h +AixLib\Resources\Data\Utilities\IO\Files\Examples\CSVReader\Data.csv +AixLib\Resources\Documentation\userGuide\source\_static\lbl-logo.png AixLib\Resources\Images\Airflow\Multizone\BaseClasses\windPressureLowRise.odp AixLib\Resources\Images\Airflow\Multizone\BaseClasses\windPressureLowRise.png AixLib\Resources\Images\Airflow\Multizone\Examples\3roomValidation.png @@ -886,8 +1111,11 @@ AixLib\Resources\Images\Fluid\FMI\modelica_icon.png AixLib\Resources\Images\Fluid\FixedResistances\Junction.png AixLib\Resources\Images\Fluid\FixedResistances\Junction.svg AixLib\Resources\Images\Fluid\FixedResistances\PressureDrop.png +AixLib\Resources\Images\Fluid\FixedResistances\Validation\PlugFlowPipes\AITTestBench.png +AixLib\Resources\Images\Fluid\FixedResistances\Validation\PlugFlowPipes\ULgTestBench.png AixLib\Resources\Images\Fluid\HeatExchangers\ActiveBeams\schematicAB.png AixLib\Resources\Images\Fluid\HeatExchangers\ActiveBeams\schematicAB.svg +AixLib\Resources\Images\Fluid\HeatPumps\WaterToWater_Cycle.png AixLib\Resources\Images\Fluid\Movers\Data\stratoscurve.png AixLib\Resources\Images\Fluid\Movers\Examples\PumpValidationHead.png AixLib\Resources\Images\Fluid\Movers\Examples\PumpValidationPower.png @@ -902,8 +1130,21 @@ AixLib\Resources\Images\Fluid\Sensors\onePortHex.png AixLib\Resources\Images\Fluid\Sensors\onePortHex.tiff AixLib\Resources\Images\Fluid\Sensors\twoPortHex.png AixLib\Resources\Images\Fluid\Sensors\twoPortHex.tiff +AixLib\Resources\Images\Fluid\Storage\Stratified.pdf +AixLib\Resources\Images\Fluid\Storage\Stratified.png +AixLib\Resources\Images\Fluid\Storage\Stratified.svg +AixLib\Resources\Images\Fluid\Storage\StratifiedHex.pdf +AixLib\Resources\Images\Fluid\Storage\StratifiedHex.png +AixLib\Resources\Images\Fluid\Storage\StratifiedHex.svg AixLib\Resources\Images\IBPSA-logo-text.png AixLib\Resources\Images\IBPSA-logo.png +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterError10degC.pdf +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterError10degC.png +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterError20degC.pdf +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterError20degC.png +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterProperties.pdf +AixLib\Resources\Images\Media\Antifreeze\PropyleneGlycolWaterProperties.png +AixLib\Resources\Images\Media\Antifreeze\propyleneGlycol.py AixLib\Resources\Images\Media\Water\plotCp.pdf AixLib\Resources\Images\Media\Water\plotCp.png AixLib\Resources\Images\Media\Water\plotCp.py @@ -1018,21 +1259,40 @@ AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_ActiveBeams AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_ActiveBeams_Examples_HeatingOnly.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_ActiveBeams_Validation_NumberOfBeams.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_ActiveBeams_Validation_NumberOfBeamsDynamics.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_BaseClasses_Examples_HACoilInside.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_BaseClasses_Examples_HANaturalCylinder.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Examples_AirHeater_T.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Examples_AirHeater_u.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Examples_WaterCooler_T.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Examples_WaterHeater_T.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Examples_WaterHeater_u.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Validation_EvaporatorCondenser.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Validation_PrescribedOutlet.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatExchangers_Validation_PrescribedOutlet_dynamic.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Calibration_ScrollWaterToWater.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Compressors_BaseClasses_Validation_TemperatureProtection.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Compressors_Validation_ReciprocatingCompressor.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Compressors_Validation_ReciprocatingCompressor_ZeroInput.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Compressors_Validation_ScrollCompressor.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Compressors_Validation_ScrollCompressor_ZeroInput.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Examples_Carnot_TCon.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Examples_Carnot_y.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Examples_ScrollWaterToWater_OneRoomRadiator.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_TCon_LimitedCapacity.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_TCon_LowTemperature.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_TCon_etaPL.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_TCon_reverseFlow.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_y_etaCar.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_Carnot_y_etaPL.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ReciprocatingWaterToWater_Dynamic.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ReciprocatingWaterToWater_ScalingFactor.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ReciprocatingWaterToWater_Static.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ReciprocatingWaterToWater_VariableSpeed.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ScrollWaterToWater_Dynamic.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ScrollWaterToWater_ScalingFactor.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ScrollWaterToWater_Static.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ScrollWaterToWater_TemperatureProtection.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_HeatPumps_Validation_ScrollWaterToWater_VariableSpeed.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Humidifiers_Examples_Humidifier_u.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Humidifiers_Validation_SprayAirWasher_X.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Humidifiers_Validation_SprayAirWasher_X_dynamic.txt @@ -1042,6 +1302,14 @@ AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Interfaces_Examples_Prescr AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Interfaces_Examples_PrescribedOutlet_TSetOnly.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Interfaces_Examples_PrescribedOutlet_Water.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Interfaces_Examples_PrescribedOutlet_X_wSetOnly.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MassExchangers_Validation_ConstantEffectivenessZeroFlow.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MassExchangers_Validation_ConstantEffectivenessZeroFlowBothStreams.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesAir.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesGlycol47.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesSpecializedAirPerfectGas.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesSpecializedWaterConstantProperties_pT.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesSpecializedWaterTemperatureDependentDensity.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_CoupledVolumesWater.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_MixingVolume.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_MixingVolumeHeatReverseFlow.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_MixingVolumes_Validation_MixingVolumeHeatReverseFlowPrescribedHeatFlowRate.txt @@ -1072,7 +1340,24 @@ AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sensors_Examples_PPM.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sources_Examples_MassFlowSource_WeatherData.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sources_Examples_Outside.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sources_Examples_Outside_CpLowRise.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sources_Examples_PropertySource_T.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Sources_Examples_PropertySource_h.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_BaseClasses_Examples_IndirectTankHeatExchanger.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Examples_Stratified.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Examples_StratifiedEnhancedInternalHex.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Examples_StratifiedUnloadAtMinimumTemperature.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Validation_HeatExchangerDynamics.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Validation_HeatExchangerLocation.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Fluid_Storage_Validation_StratifiedLoadingUnloading.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Antifreeze_Validation_PropyleneGlycolWater.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Examples_PropyleneGlycolWaterDerivativeCheck.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Examples_PropyleneGlycolWaterProperties.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Examples_PropyleneGlycolWaterTemperatureEnthalpyInversion.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Examples_PropyleneGlycolWaterTestImplementation.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Refrigerants_Validation_R410A_dSpecificVolumeVap_pT.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Media_Specialized_Water_Examples_WaterProperties_pT.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Utilities_IO_Files_Examples_CSVReader.txt +AixLib\Resources\ReferenceResults\Dymola\AixLib_Utilities_IO_Files_Examples_CSVWriter.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Utilities_Math_Examples_IntegratorWithReset.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Utilities_Math_Functions_Examples_Polynomial.txt AixLib\Resources\ReferenceResults\Dymola\AixLib_Utilities_Math_Functions_Examples_RegStep.txt @@ -1146,6 +1431,8 @@ AixLib\Resources\Scripts\Dymola\Controls\Discrete\Examples\BooleanDelay.mos AixLib\Resources\Scripts\Dymola\Controls\SetPoints\Examples\HotWaterTemperatureReset.mos AixLib\Resources\Scripts\Dymola\Controls\SetPoints\Examples\OccupancySchedule.mos AixLib\Resources\Scripts\Dymola\Controls\SetPoints\Examples\Table.mos +AixLib\Resources\Scripts\Dymola\Controls\SetPoints\Validation\OccupancyScheduleNegativeStartTime.mos +AixLib\Resources\Scripts\Dymola\Controls\SetPoints\Validation\OccupancySchedulePositiveStartTime.mos AixLib\Resources\Scripts\Dymola\Fluid\Actuators\BaseClasses\Examples\EqualPercentageDerivativeCheck.mos AixLib\Resources\Scripts\Dymola\Fluid\Actuators\Dampers\Examples\Damper.mos AixLib\Resources\Scripts\Dymola\Fluid\Actuators\Dampers\Examples\MixingBox.mos @@ -1245,12 +1532,21 @@ AixLib\Resources\Scripts\Dymola\Fluid\FMI\Validation\FlowSplitter_u.mos AixLib\Resources\Scripts\Dymola\Fluid\FMI\Validation\HeaterFan.mos AixLib\Resources\Scripts\Dymola\Fluid\FMI\Validation\HeaterFanPressureDriven.mos AixLib\Resources\Scripts\Dymola\Fluid\FMI\Validation\HeaterFan_noReverseFlow.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\BaseClasses\Validation\PlugFlowCore.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Examples\FlowJunction.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Examples\HydraulicDiameter.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Examples\PlugFlowPipe.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Examples\PressureDrop.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\FlowJunctionSteadyState.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\FlowJunctionSteadyStateNoPressureDrop.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\LosslessPipe.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\Data\TestData.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\FlowReversal.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\MSLAIT.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\MSLAIT2Nodes.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\PlugFlowAIT.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\PlugFlowULg.mos +AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PlugFlowPipes\TransportWaterAir.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PressureDropsExplicit.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PressureDropsExplicitLinearized.mos AixLib\Resources\Scripts\Dymola\Fluid\FixedResistances\Validation\PressureDropsParallel.mos @@ -1263,6 +1559,8 @@ AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\ActiveBeams\Examples\Coolin AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\ActiveBeams\Examples\HeatingOnly.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\ActiveBeams\Validation\NumberOfBeams.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\ActiveBeams\Validation\NumberOfBeamsDynamics.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\BaseClasses\Examples\HACoilInside.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\BaseClasses\Examples\HANaturalCylinder.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Examples\AirHeater_T.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Examples\AirHeater_u.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Examples\WaterCooler_T.mos @@ -1270,17 +1568,34 @@ AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Examples\WaterHeater_T.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Examples\WaterHeater_u.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Radiators\Examples\RadiatorEN442_2.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Validation\ConstantEffectiveness.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Validation\EvaporatorCondenser.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Validation\HeaterCooler_u.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Validation\PrescribedOutlet.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatExchangers\Validation\PrescribedOutlet_dynamic.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Calibration\ScrollWaterToWater.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Compressors\BaseClasses\Validation\TemperatureProtection.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Compressors\Validation\ReciprocatingCompressor.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Compressors\Validation\ReciprocatingCompressor_ZeroInput.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Compressors\Validation\ScrollCompressor.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Compressors\Validation\ScrollCompressor_ZeroInput.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Examples\Carnot_TCon.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Examples\Carnot_y.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Examples\ScrollWaterToWater_OneRoomRadiator.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_TCon_LimitedCapacity.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_TCon_LowTemperature.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_TCon_etaPL.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_TCon_reverseFlow.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_y_etaCar.mos AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\Carnot_y_etaPL.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_Dynamic.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_ScalingFactor.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_Static.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ReciprocatingWaterToWater_VariableSpeed.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ScrollWaterToWater_Dynamic.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ScrollWaterToWater_ScalingFactor.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ScrollWaterToWater_Static.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ScrollWaterToWater_TemperatureProtection.mos +AixLib\Resources\Scripts\Dymola\Fluid\HeatPumps\Validation\ScrollWaterToWater_VariableSpeed.mos AixLib\Resources\Scripts\Dymola\Fluid\Humidifiers\Examples\Humidifier_u.mos AixLib\Resources\Scripts\Dymola\Fluid\Humidifiers\Validation\SprayAirWasher_X.mos AixLib\Resources\Scripts\Dymola\Fluid\Humidifiers\Validation\SprayAirWasher_X_dynamic.mos @@ -1298,9 +1613,20 @@ AixLib\Resources\Scripts\Dymola\Fluid\Interfaces\Examples\ReverseFlowHumidifier. AixLib\Resources\Scripts\Dymola\Fluid\Interfaces\Examples\ReverseFlowMassExchanger.mos AixLib\Resources\Scripts\Dymola\Fluid\Interfaces\Examples\StaticTwoPortConservationEquation.mos AixLib\Resources\Scripts\Dymola\Fluid\MassExchangers\Examples\ConstantEffectiveness.mos +AixLib\Resources\Scripts\Dymola\Fluid\MassExchangers\Validation\ConstantEffectivenessZeroFlow.mos +AixLib\Resources\Scripts\Dymola\Fluid\MassExchangers\Validation\ConstantEffectivenessZeroFlowBothStreams.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatMoisturePort.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatPortAir.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\BaseClasses\Validation\MixingVolumeHeatPortWater.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Examples\MixingVolumeHeatConduction.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Examples\MixingVolumeMoistAir.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Examples\MixingVolumePrescribedHeatFlowRate.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesAir.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesGlycol47.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedAirPerfectGas.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedWaterConstantProperties_pT.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesSpecializedWaterTemperatureDependentDensity.mos +AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\CoupledVolumesWater.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\MixingVolume.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\MixingVolumeAdiabaticCooling.mos AixLib\Resources\Scripts\Dymola\Fluid\MixingVolumes\Validation\MixingVolumeHeatReverseFlow.mos @@ -1361,16 +1687,31 @@ AixLib\Resources\Scripts\Dymola\Fluid\Sensors\Examples\VolumeFlowRate.mos AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\MassFlowSource_WeatherData.mos AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\Outside.mos AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\Outside_CpLowRise.mos +AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\PropertySource_T.mos +AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\PropertySource_h.mos AixLib\Resources\Scripts\Dymola\Fluid\Sources\Examples\TraceSubstancesFlowSource.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\BaseClasses\Examples\IndirectTankHeatExchanger.mos AixLib\Resources\Scripts\Dymola\Fluid\Storage\Examples\ExpansionVessel.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Examples\Stratified.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Examples\StratifiedEnhancedInternalHex.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Examples\StratifiedUnloadAtMinimumTemperature.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Validation\HeatExchangerDynamics.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Validation\HeatExchangerLocation.mos +AixLib\Resources\Scripts\Dymola\Fluid\Storage\Validation\StratifiedLoadingUnloading.mos +AixLib\Resources\Scripts\Dymola\Media\Antifreeze\Validation\PropyleneGlycolWater.mos AixLib\Resources\Scripts\Dymola\Media\Examples\AirDerivativeCheck.mos AixLib\Resources\Scripts\Dymola\Media\Examples\AirProperties.mos AixLib\Resources\Scripts\Dymola\Media\Examples\AirTemperatureEnthalpyInversion.mos AixLib\Resources\Scripts\Dymola\Media\Examples\AirTestImplementation.mos +AixLib\Resources\Scripts\Dymola\Media\Examples\PropyleneGlycolWaterDerivativeCheck.mos +AixLib\Resources\Scripts\Dymola\Media\Examples\PropyleneGlycolWaterProperties.mos +AixLib\Resources\Scripts\Dymola\Media\Examples\PropyleneGlycolWaterTemperatureEnthalpyInversion.mos +AixLib\Resources\Scripts\Dymola\Media\Examples\PropyleneGlycolWaterTestImplementation.mos AixLib\Resources\Scripts\Dymola\Media\Examples\WaterDerivativeCheck.mos AixLib\Resources\Scripts\Dymola\Media\Examples\WaterProperties.mos AixLib\Resources\Scripts\Dymola\Media\Examples\WaterTemperatureEnthalpyInversion.mos AixLib\Resources\Scripts\Dymola\Media\Examples\WaterTestImplementation.mos +AixLib\Resources\Scripts\Dymola\Media\Refrigerants\Validation\R410A_dSpecificVolumeVap_pT.mos AixLib\Resources\Scripts\Dymola\Media\Specialized\Air\Examples\PerfectGasDerivativeCheck.mos AixLib\Resources\Scripts\Dymola\Media\Specialized\Air\Examples\PerfectGasTemperatureEnthalpyInversion.mos AixLib\Resources\Scripts\Dymola\Media\Specialized\Air\Examples\PerfectGasTestImplementation.mos @@ -1396,6 +1737,8 @@ AixLib\Resources\Scripts\Dymola\ThermalZones\ReducedOrder\Validation\VDI6007\Tes AixLib\Resources\Scripts\Dymola\ThermalZones\ReducedOrder\Validation\VDI6007\TestCase8.mos AixLib\Resources\Scripts\Dymola\ThermalZones\ReducedOrder\Validation\VDI6007\TestCase9.mos AixLib\Resources\Scripts\Dymola\Utilities\Diagnostics\Validation\CheckEquality.mos +AixLib\Resources\Scripts\Dymola\Utilities\IO\Files\Examples\CSVReader.mos +AixLib\Resources\Scripts\Dymola\Utilities\IO\Files\Examples\CSVWriter.mos AixLib\Resources\Scripts\Dymola\Utilities\Math\Examples\Average.mos AixLib\Resources\Scripts\Dymola\Utilities\Math\Examples\Bicubic.mos AixLib\Resources\Scripts\Dymola\Utilities\Math\Examples\Biquadratic.mos @@ -1459,7 +1802,8 @@ AixLib\Resources\Scripts\Dymola\Utilities\Time\Validation\CalendarTimeMonths.mos AixLib\Resources\Scripts\Dymola\Utilities\Time\Validation\CalendarTimeMonthsMinus.mos AixLib\Resources\Scripts\Dymola\Utilities\Time\Validation\CalendarTimeMonthsPlus.mos AixLib\Resources\Scripts\JModelica\buildingspy_to_csv.py -AixLib\Resources\Scripts\travis\usr\local\bin\dymola +AixLib\Resources\Scripts\travis\bin\dymola +AixLib\Resources\Scripts\travis\bin\jm_ipython.sh AixLib\Resources\bin\ConvertWeatherData.jar AixLib\Resources\src\convertEPW\Makefile AixLib\Resources\src\convertEPW\doc\ConvertWeatherData.html @@ -1480,6 +1824,174 @@ AixLib\Resources\src\convertEPW\doc\stylesheet.css AixLib\Resources\src\convertEPW\src\ConvertWeatherData.java AixLib\Resources\src\convertEPW\src\Makefile AixLib\Resources\src\convertEPW\src\Manifest.txt +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\.gitignore +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\SomeManufacturer_ABC060_70kW_4_0COP_R410A.mo +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\__init__.py +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\dummy_performance_data.py +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\example_calibration.py +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\package.order +AixLib\Resources\src\fluid\heatpumps\calibration\Examples\somePerformanceData.txt +AixLib\Resources\src\fluid\heatpumps\calibration\Makefile +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\__init__.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\calibrate.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\compressors.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\fluids.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\heatexchangers.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\heatpumps.py +AixLib\Resources\src\fluid\heatpumps\calibration\PythonModel\refrigerants.py +AixLib\Resources\src\fluid\heatpumps\calibration\__init__.py +AixLib\Resources\src\fluid\heatpumps\calibration\doc\Makefile +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_images\calibration_final_parameters.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_images\calibration_guess_parameters.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\calibrate.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\compressors.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\dummy_performance_data.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\example_calibration.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\fluids.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\heatexchangers.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\heatpumps.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\index.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_sources\refrigerants.rst.txt +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\ajax-loader.gif +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\basic.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\css\bootstrap-responsive.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\css\bootstrap-responsive.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\css\bootstrap.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\css\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\img\glyphicons-halflings-white.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\img\glyphicons-halflings.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\js\bootstrap.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-2.3.2\js\bootstrap.min.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap-theme.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap-theme.css.map +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap-theme.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap-theme.min.css.map +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap.css.map +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\css\bootstrap.min.css.map +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\fonts\glyphicons-halflings-regular.eot +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\fonts\glyphicons-halflings-regular.svg +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\fonts\glyphicons-halflings-regular.ttf +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\fonts\glyphicons-halflings-regular.woff +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\fonts\glyphicons-halflings-regular.woff2 +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\js\bootstrap.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\js\bootstrap.min.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-3.3.6\js\npm.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-sphinx.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-sphinx.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap-theme.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootstrap_custom.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\amelia\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\cerulean\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\cosmo\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\cyborg\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\flatly\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\img\glyphicons-halflings-white.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\img\glyphicons-halflings.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\journal\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\readable\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\simplex\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\slate\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\spacelab\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\spruce\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\superhero\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-2.3.2\united\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\cerulean\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\cosmo\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\custom\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\cyborg\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\darkly\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\flatly\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\fonts\glyphicons-halflings-regular.eot +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\fonts\glyphicons-halflings-regular.svg +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\fonts\glyphicons-halflings-regular.ttf +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\fonts\glyphicons-halflings-regular.woff +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\fonts\glyphicons-halflings-regular.woff2 +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\journal\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\lumen\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\paper\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\readable\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\sandstone\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\simplex\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\slate\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\spacelab\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\superhero\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\united\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\bootswatch-3.3.6\yeti\bootstrap.min.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\comment-bright.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\comment-close.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\comment.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\custom-sphinx.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\custom.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\doctools.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\down-pressed.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\down.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\file.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\jquery-3.1.0.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\jquery.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\js\jquery-1.11.0.min.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\js\jquery-fix.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\lbl-icon.ico +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\lbl-icon.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\lbl-icon.psd +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\lbl-logo.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\lbl-logo.psd +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\minus.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\plus.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\pygments.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\searchtools.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\sphinxdoc.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\underscore-1.3.1.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\underscore.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\up-pressed.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\up.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\_static\websupport.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\calibrate.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\compressors.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\dummy_performance_data.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\example_calibration.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\fluids.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\genindex.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\heatexchangers.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\heatpumps.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\index.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\objects.inv +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\py-modindex.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\refrigerants.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\search.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\build\html\searchindex.js +AixLib\Resources\src\fluid\heatpumps\calibration\doc\make.bat +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_figures\calibration_final_parameters.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_figures\calibration_guess_parameters.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\basic.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\bootstrap-theme.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\bootstrap.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\bootstrap_custom.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\custom-sphinx.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\custom.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\lbl-icon.ico +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\lbl-icon.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\lbl-icon.psd +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\lbl-logo.png +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\lbl-logo.psd +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\pygments.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_static\sphinxdoc.css +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_templates\layout.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_templates\navbar.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\_templates\sourcelink.html +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\calibrate.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\compressors.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\conf.py +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\dummy_performance_data.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\example_calibration.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\fluids.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\heatexchangers.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\heatpumps.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\index.rst +AixLib\Resources\src\fluid\heatpumps\calibration\doc\source\refrigerants.rst +AixLib\Resources\src\fluid\heatpumps\calibration\manufacturerData.txt AixLib\Resources\weatherdata\USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw AixLib\Resources\weatherdata\USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos AixLib\Resources\weatherdata\USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw @@ -1556,6 +2068,23 @@ AixLib\Utilities\Diagnostics\Validation\package.mo AixLib\Utilities\Diagnostics\Validation\package.order AixLib\Utilities\Diagnostics\package.mo AixLib\Utilities\Diagnostics\package.order +AixLib\Utilities\IO\Files\BaseClasses\FileWriter.mo +AixLib\Utilities\IO\Files\BaseClasses\FileWriterObject.mo +AixLib\Utilities\IO\Files\BaseClasses\package.mo +AixLib\Utilities\IO\Files\BaseClasses\package.order +AixLib\Utilities\IO\Files\CSVWriter.mo +AixLib\Utilities\IO\Files\CombiTimeTableWriter.mo +AixLib\Utilities\IO\Files\Examples\BaseClasses\PartialCSV.mo +AixLib\Utilities\IO\Files\Examples\BaseClasses\package.mo +AixLib\Utilities\IO\Files\Examples\BaseClasses\package.order +AixLib\Utilities\IO\Files\Examples\CSVReader.mo +AixLib\Utilities\IO\Files\Examples\CSVWriter.mo +AixLib\Utilities\IO\Files\Examples\package.mo +AixLib\Utilities\IO\Files\Examples\package.order +AixLib\Utilities\IO\Files\package.mo +AixLib\Utilities\IO\Files\package.order +AixLib\Utilities\IO\package.mo +AixLib\Utilities\IO\package.order AixLib\Utilities\Math\Average.mo AixLib\Utilities\Math\Bicubic.mo AixLib\Utilities\Math\Biquadratic.mo diff --git a/AixLib/Airflow/AirHandlingUnit/Examples/TestAHU.mo b/AixLib/Airflow/AirHandlingUnit/Examples/AHU.mo similarity index 52% rename from AixLib/Airflow/AirHandlingUnit/Examples/TestAHU.mo rename to AixLib/Airflow/AirHandlingUnit/Examples/AHU.mo index a66ef5ad35..2033549294 100644 --- a/AixLib/Airflow/AirHandlingUnit/Examples/TestAHU.mo +++ b/AixLib/Airflow/AirHandlingUnit/Examples/AHU.mo @@ -1,5 +1,5 @@ -within AixLib.Airflow.AirHandlingUnit.Examples; -model TestAHU +within AixLib.Airflow.AirHandlingUnit.Examples; +model AHU "Example to test all states of the AHU model - Play with the possible modes (boolean parameters for: heating, cooling, de-/humidification" extends Modelica.Icons.Example; @@ -13,11 +13,11 @@ model TestAHU annotation (Placement(transformation(extent={{-100,24},{-80,44}}))); Modelica.Blocks.Sources.Constant desiredT_sup(k=293) annotation (Placement(transformation(extent={{62,-26},{42,-6}}))); - AHU ahu( clockPeriodGeneric=30, + .AixLib.Airflow.AirHandlingUnit.AHU ahu( + clockPeriodGeneric=30, heating=true, cooling=true, - HRS=true) - annotation (Placement(transformation(extent={{-68,-18},{26,18}}))); + HRS=true) annotation (Placement(transformation(extent={{-68,-18},{26,18}}))); Modelica.Blocks.Sources.Constant phi_roomMin(k=0.47) annotation (Placement(transformation(extent={{68,-56},{48,-36}}))); Modelica.Blocks.Sources.Constant phi_roomMax(k=0.55) @@ -60,103 +60,75 @@ model TestAHU equation connect(desiredT_sup.y, ahu.T_supplyAir) annotation (Line( - points={{41,-16},{34,-16},{34,-4.5},{18.48,-4.5}}, + points={{41,-16},{34,-16},{34,-6.3},{18.48,-6.3}}, color={0,0,127}, smooth=Smooth.None)); connect(tempOutside.y, ahu.T_outdoorAir) annotation (Line( - points={{-79,-6},{-74,-6},{-74,-6.3},{-62.36,-6.3}}, + points={{-79,-6},{-74,-6},{-74,-7.2},{-62.36,-7.2}}, color={0,0,127}, smooth=Smooth.None)); connect(Vflow_in.y, ahu.Vflow_in) annotation (Line( - points={{-79,34},{-76,34},{-76,-3.6},{-66.12,-3.6}}, + points={{-79,34},{-76,34},{-76,-4.5},{-66.12,-4.5}}, color={0,0,127}, smooth=Smooth.None)); connect(phi_roomMin.y, ahu.phi_supplyAir[1]) annotation (Line( - points={{47,-46},{32,-46},{32,-8.1},{18.48,-8.1}}, + points={{47,-46},{32,-46},{32,-9.9},{18.48,-9.9}}, color={0,0,127}, smooth=Smooth.None)); connect(waterLoadOutside.y, ahu.X_outdoorAir) annotation (Line( - points={{-79,-40},{-72,-40},{-72,-10.8},{-62.36,-10.8}}, + points={{-79,-40},{-72,-40},{-72,-11.7},{-62.36,-11.7}}, color={0,0,127}, smooth=Smooth.None)); connect(phi_RoomExtractAir.y, ahu.phi_extractAir) annotation (Line( - points={{77,-14},{66,-14},{66,0},{30,0},{30,8.1},{18.48,8.1}}, + points={{77,-14},{66,-14},{66,0},{30,0},{30,5.4},{18.48,5.4}}, color={0,0,127}, smooth=Smooth.None)); connect(phi_roomMax.y, ahu.phi_supplyAir[2]) annotation (Line(points={{77,-46}, - {72,-46},{72,-66},{28,-66},{28,-9.9},{18.48,-9.9}}, color={0,0, + {72,-46},{72,-66},{28,-66},{28,-11.7},{18.48,-11.7}}, color={0,0, 127})); connect(ahu.T_extractAir, addToExtractTemp.y) annotation (Line(points={{18.48, - 12.6},{27.92,12.6},{27.92,18},{33.4,18}}, color={0,0,127})); + 9.9},{27.92,9.9},{27.92,18},{33.4,18}}, color={0,0,127})); connect(tempAddInRoom.y, addToExtractTemp.u1) annotation (Line(points={{77,30}, {66,30},{56,30},{56,21.6},{47.2,21.6}}, color={0,0,127})); connect(desiredT_sup.y, addToExtractTemp.u2) annotation (Line(points={{41,-16}, {38,-16},{38,6},{56,6},{56,14.4},{47.2,14.4}}, color={0,0,127})); - connect(ahu.QflowC, QFlowCool) annotation (Line(points={{-22.41,-14.85},{ - -22.41,-46.425},{-26,-46.425},{-26,-86}}, color={0,0,127})); - connect(ahu.QflowH, QFlowHeat) annotation (Line(points={{-1.73,-14.85},{-1.73, + connect(ahu.QflowC, QFlowCool) annotation (Line(points={{-26.17,-15.75},{-26.17, + -46.425},{-26,-46.425},{-26,-86}}, color={0,0,127})); + connect(ahu.QflowH, QFlowHeat) annotation (Line(points={{-7.37,-15.75},{-7.37, -47.425},{0,-47.425},{0,-86}}, color={0,0,127})); - connect(ahu.Pel, PEl) annotation (Line(points={{8.61,-14.85},{8.61,-47.425},{ - 26,-47.425},{26,-86}}, color={0,0,127})); + connect(ahu.Pel, PEl) annotation (Line(points={{2.03,-15.75},{2.03,-47.425},{26, + -47.425},{26,-86}}, color={0,0,127})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, -100},{100,100}}), graphics={ Text( - extent={{-88,84},{-50,58}}, + extent={{-60,80},{-22,54}}, lineColor={28,108,200}, fontSize=6, - textString="Heat Cool Dehu Hu HRS -1 1 1 1 1 -1 1 1 0 1 -1 1 0 1 1 -1 1 0 0 1 -1 0 0 0 1 -0 1 0 0 1 -0 0 0 0 1 -1 1 1 1 0 -1 1 1 0 0 -1 1 0 1 0 -1 1 0 0 0 -1 0 0 0 0 -0 1 0 0 0 -0 0 0 0 0 + textString="Heat Cool Dehu Hu HRS +1 1 1 1 1 +1 1 1 0 1 +1 1 0 1 1 +1 1 0 0 1 +1 0 0 0 1 +0 1 0 0 1 +0 0 0 0 1 +1 1 1 1 0 +1 1 1 0 0 +1 1 0 1 0 +1 1 0 0 0 +1 0 0 0 0 +0 1 0 0 0 +0 0 0 0 0 "), Text( - extent={{-88,100},{-44,90}}, + extent={{-60,96},{-16,86}}, lineColor={28,108,200}, textString="Use the following Table for investigation of all possible modes. -Check whether variable allCond is always 1."), - Text( - extent={{-20,76},{36,62}}, - lineColor={28,108,200}, - fontSize=4, - horizontalAlignment=TextAlignment.Left, - textString="createPlot(id=1, position={917, 10, 693, 691}, y={\"ahu.allCond\"}, range={0.0, 90000.0, 0.89, 1.11}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}}, markers={MarkerStyle.SmallSquare}); - -createPlot(id=2, position={60, 18, 727, 669}, y={\"ahu.startState.active\", \"ahu.deHuHRS_true.active\", \"ahu.deHuHRS_false.active\", - \"ahu.onlyHeatingHRS_true.active\", \"ahu.onlyHeatingHRS_false.active\"}, range={0.0, 90000.0, -0.05, 1.05}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, markers={MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, -MarkerStyle.SmallSquare, MarkerStyle.SmallSquare}); - -createPlot(id=3, position={821, 15, 744, 666}, y={\"ahu.onlyCoolingHRS_true.active\", \"ahu.onlyCoolingHRS_false.active\", -\"ahu.huPreHHRS_true.active\", \"ahu.huPreHHRS_false.active\", \"ahu.huCHRS_true.active\", - \"ahu.huCHRS_false.active\"}, range={0.0, 90000.0, -0.05, 1.05}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}, {162,29,33}}, markers={MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, -MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, MarkerStyle.SmallSquare}); - -createPlot(id=4, position={77, 62, 1429, 635}, y={\"ahu.QflowC\", \"ahu.QflowH\"}, range={0.0, 88000.0, -100000.0, 2100000.0}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}, {238,46,47}}); - -createPlot(id=5, position={50, 59, 1411, 632}, y={\"ahu.X_oda\", \"ahu.X_supMin\", \"ahu.X_supMax\"}, range={0.0, 88000.0, 0.0058000000000000005, 0.0102}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}, {238,46,47}, {0,140,72}}, markers={MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, MarkerStyle.SmallSquare}); - -createPlot(id=6, position={31, 19, 1416, 654}, y={\"ahu.T_6\", \"ahu.T_oda\", \"ahu.T_supplyAirOut\"}, range={0.0, 88000.0, 8.0, 30.0}, grid=true, filename=\"TestAHU.mat\", colors={{28,108,200}, {238,46,47}, {28,108,200}}, markers={MarkerStyle.SmallSquare, MarkerStyle.SmallSquare, MarkerStyle.None});"), - Text( - extent={{-20,102},{64,82}}, - lineColor={28,108,200}, - textString="Double Click the text below, copy everything and -paste it after the simulation in the command line -to display most interesting plots.", - horizontalAlignment=TextAlignment.Left)}), +Check whether variable allCond is always 1.")}), experiment( StopTime=86400, - Interval=60, - __Dymola_Algorithm="Lsodar"), - __Dymola_experimentSetupOutput(events=false), + Interval=60), + __Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Airflow/AirHandlingUnit/Examples/AHU.mos" + "Simulate and plot"), Documentation(info="
Simulation to check the behaviour of the simple Air Handling Unit models. Various possibilities for inputs are provided.
@@ -165,4 +137,4 @@ to display most interesting plots.",Occupation and Schedule is a percentage value between 0 and 1.
The zone parameter is needed to automatically calculate the air flow rate based on the occupation and room area.
")); -end TestAHU; +end AHU; diff --git a/AixLib/Airflow/AirHandlingUnit/Examples/package.mo b/AixLib/Airflow/AirHandlingUnit/Examples/package.mo index 3bc4a5a112..3fffdec610 100644 --- a/AixLib/Airflow/AirHandlingUnit/Examples/package.mo +++ b/AixLib/Airflow/AirHandlingUnit/Examples/package.mo @@ -1,4 +1,4 @@ -within AixLib.Airflow.AirHandlingUnit; +within AixLib.Airflow.AirHandlingUnit; package Examples "Contains examples for Air Handling Units" extends Modelica.Icons.ExamplesPackage; diff --git a/AixLib/Airflow/AirHandlingUnit/Examples/package.order b/AixLib/Airflow/AirHandlingUnit/Examples/package.order index a3c6f3a6b1..3378981f39 100644 --- a/AixLib/Airflow/AirHandlingUnit/Examples/package.order +++ b/AixLib/Airflow/AirHandlingUnit/Examples/package.order @@ -1 +1 @@ -TestAHU +AHU diff --git a/AixLib/Airflow/FacadeVentilationUnit/BaseClasses/SetPower.mo b/AixLib/Airflow/FacadeVentilationUnit/BaseClasses/SetPower.mo new file mode 100644 index 0000000000..8315fe4573 --- /dev/null +++ b/AixLib/Airflow/FacadeVentilationUnit/BaseClasses/SetPower.mo @@ -0,0 +1,126 @@ +within AixLib.Airflow.FacadeVentilationUnit.BaseClasses; +model SetPower + "This model defines a specific mass flow rate based on the input power + share" + + extends Modelica.Fluid.Interfaces.PartialTwoPort; + + parameter Modelica.SIunits.MassFlowRate m_flow_nominal=0.05 + "Nominal mass flow rate of fan"; + parameter Medium.AbsolutePressure p_start=Medium.p_default + "Start value of pressure"; + parameter Integer noUnits=1 "Number of identical FVU units"; + parameter Modelica.SIunits.PressureDifference dp_nominal=500 + "Initial pressure difference"; + parameter Medium.Temperature T_start=Medium.T_default + "Start value of temperature"; + + Modelica.Blocks.Tables.CombiTable1D volumeFlow(table=[0,1; 0.1,25; 0.2,40; + 0.3,60; 0.4,90; 0.5,100; 0.6,140; 0.7,175; 0.8,200; 0.9,225; 1,260]) + "Correlates the relative input signal and a volume flow rate" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,-56}))); + Modelica.Blocks.Interfaces.RealInput powerShare( + min=0, + max=1, + nominal=0.6) "Power share 0..1 for fan" annotation (Placement( + transformation( + origin={0,-100}, + extent={{-20,-20},{20,20}}, + rotation=90))); + + AixLib.Fluid.Movers.FlowControlled_m_flow fan( + redeclare package Medium = Medium, + addPowerToMedium=false, + m_flow_nominal=m_flow_nominal, + T_start=T_start, + m_flow(start=m_flow_nominal), + dp(start=dp_nominal), + dp_nominal=dp_nominal, + p_start=p_start, + riseTime=120, + nominalValuesDefineDefaultPressureCurve=true) + "Mass-flow-controlled mover setting mass flow rate from table" + annotation (Placement(transformation(extent= + {{-10,10},{10,-10}}))); + Modelica.Blocks.Math.Gain transforMassFlow(k=1.2/3600*noUnits, y(unit="kg/s")) + "Used to transform the volume flow rate in m3/h into a mass flow rate in kg/s" + annotation (Placement(transformation( + extent={{-6,-6},{6,6}}, + rotation=90, + origin={0,-28}))); +equation + + connect(port_a, fan.port_a) + annotation (Line(points={{-100,0},{-56,0},{-10,0}}, color={0,127,255})); + connect(fan.port_b, port_b) + annotation (Line(points={{10,0},{56,0},{100,0}}, color={0,127,255})); + connect(powerShare, volumeFlow.u[1]) annotation (Line(points={{0,-100},{0,-80}, + {-6.66134e-016,-80},{-6.66134e-016,-68}}, color={0,0,127})); + connect(transforMassFlow.u, volumeFlow.y[1]) annotation (Line(points={{-4.44089e-016, + -35.2},{-4.44089e-016,-46},{8.88178e-016,-46},{8.88178e-016,-45}}, + color={0,0,127})); + connect(transforMassFlow.y, fan.m_flow_in) annotation (Line(points={{ + 4.44089e-016,-21.4},{4.44089e-016,-24},{0,-24},{0,-12}}, color={0,0, + 127})); + annotation ( + choicesAllMatching=true, + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{ + 100,100}})), + Icon(graphics={ + Ellipse( + extent={{-4,68},{4,0}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-4,0},{4,-68}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{0,4},{30,-4}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-30,4},{0,-4}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Ellipse(extent={{-30,68},{30,-68}}, lineColor={0,0,0}), + Line( + points={{8,48},{58,48}}, + color={170,213,255}, + arrow={Arrow.None,Arrow.Filled}), + Line( + points={{0,0},{82,0}}, + color={170,213,255}, + arrow={Arrow.None,Arrow.Filled}), + Line( + points={{2,24},{72,24}}, + color={170,213,255}, + arrow={Arrow.None,Arrow.Filled}), + Line( + points={{2,-24},{72,-24}}, + color={170,213,255}, + arrow={Arrow.None,Arrow.Filled}), + Line( + points={{8,-48},{58,-48}}, + color={170,213,255}, + arrow={Arrow.None,Arrow.Filled})}), + Documentation(info=" +This model sets the mass flow rate of the air flow through a facade + ventilation unit based on the input value, which is the power share set + point of the fan.
+", revisions=" +Overview
+This is the base definition of the paramter record that can be used for the + +AixLib.Airflow.FacadeVentilationUnit.FacadeVentilationUnit.
+", revisions=" +This model demonstrates the usage of the facade ventilation unit connected +to the standard controller. The inputs are the room and the outdoor temperaure. +Those temperatures and the room temperature set point are sine waves with a +period of one day, which all have a different phase. The simulation result +depicted in the following figure shows the behavior of the two-point controller +that opens the heating valve fully for heating. For cooling, it closes the +heating valve and bypasses the heat recovery unit so that the supply air +temperature is equal to the outdoor temperature.
+ +")); +end FacadeVentilationUnit; diff --git a/AixLib/Airflow/FacadeVentilationUnit/Examples/package.mo b/AixLib/Airflow/FacadeVentilationUnit/Examples/package.mo new file mode 100644 index 0000000000..5b387fe51b --- /dev/null +++ b/AixLib/Airflow/FacadeVentilationUnit/Examples/package.mo @@ -0,0 +1,4 @@ +within AixLib.Airflow.FacadeVentilationUnit; +package Examples +extends Modelica.Icons.ExamplesPackage; +end Examples; diff --git a/AixLib/Airflow/FacadeVentilationUnit/Examples/package.order b/AixLib/Airflow/FacadeVentilationUnit/Examples/package.order new file mode 100644 index 0000000000..9ca962c8f9 --- /dev/null +++ b/AixLib/Airflow/FacadeVentilationUnit/Examples/package.order @@ -0,0 +1 @@ +FacadeVentilationUnit diff --git a/AixLib/Airflow/FacadeVentilationUnit/FacadeVentilationUnit.mo b/AixLib/Airflow/FacadeVentilationUnit/FacadeVentilationUnit.mo new file mode 100644 index 0000000000..d63b77641b --- /dev/null +++ b/AixLib/Airflow/FacadeVentilationUnit/FacadeVentilationUnit.mo @@ -0,0 +1,393 @@ +within AixLib.Airflow.FacadeVentilationUnit; +model FacadeVentilationUnit + "Facade Ventilation Unit (FVU) equipped with a recuperator" + + replaceable package Water = AixLib.Media.Water + "Water Model in the system"; + replaceable package Air = AixLib.Media.Air + "Air Model in the system"; + + parameter AixLib.Airflow.FacadeVentilationUnit.DataBase.FVUBaseRecord + fVUParam=AixLib.Airflow.FacadeVentilationUnit.DataBase.FVUBaseRecord() + "Record containing the characteristic parameters of the unit"; + + parameter Modelica.SIunits.ThermodynamicTemperature T_start=273.15 + 20 + "Initial temperature in unit"; + + AixLib.Airflow.FacadeVentilationUnit.BaseClasses.SetPower fanExhaustAir( + redeclare package Medium = Air, + noUnits=fVUParam.noUnits, + m_flow_nominal=fVUParam.m2_flow_nominal_heater, + T_start=T_start, + p_start=fVUParam.dp2_nominal_heater) + "The fan on the exhaust air side" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-118,26}))); + AixLib.Airflow.FacadeVentilationUnit.BaseClasses.SetPower fanSupplyAir( + redeclare package Medium = Air, + noUnits=fVUParam.noUnits, + m_flow_nominal=fVUParam.m2_flow_nominal_heater, + p_start=5*fVUParam.dp2_nominal_heater, + dp_nominal=5*fVUParam.dp2_nominal_heater) + "The fan on the supply air side" + annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + rotation=0, + origin={62,26}))); + Modelica.Fluid.Sensors.Temperature extractAirTemperature(redeclare package + Medium = Air) "Temperature of the extract air" + annotation (Placement(transformation(extent={{174,-58},{190,-46}}))); + AixLib.Fluid.HeatExchangers.ConstantEffectiveness heater( + redeclare package Medium2 = Air, + redeclare package Medium1 = Water, + m1_flow_nominal=fVUParam.m1_flow_nominal_heater, + m2_flow_nominal=fVUParam.m2_flow_nominal_heater, + dp1_nominal(displayUnit="Pa") = fVUParam.dp1_nominal_heater, + dp2_nominal(displayUnit="Pa") = fVUParam.dp2_nominal_heater) + "The heat exchanger used for heating" + annotation (Placement(transformation(extent={{116,22},{96,42}}))); + Modelica.Fluid.Interfaces.FluidPort_b exhaustAirConnector(redeclare package + Medium = Air) "Connector to the exhaust air sink" + annotation (Placement(transformation(extent={{-170,16},{-150,36}}))); + Modelica.Fluid.Interfaces.FluidPort_a freshAirConnector(redeclare package + Medium = Air) "Connector to the fresh air source" + annotation (Placement(transformation(extent={{-168,-78},{-148,-58}}))); + Modelica.Fluid.Interfaces.FluidPort_a extractAirConnector(redeclare package + Medium = Air) "Connector to the extract air source" + annotation (Placement(transformation(extent={{192,-78},{212,-58}}))); + Modelica.Fluid.Interfaces.FluidPort_b supplyAirConnector(redeclare package + Medium = Air) "Connector to the supply air sink" + annotation (Placement(transformation(extent={{192,16},{212,36}}))); + AixLib.Fluid.HeatExchangers.ConstantEffectiveness cooler( + redeclare package Medium2 = Air, + redeclare package Medium1 = Water, + dp1_nominal(displayUnit="Pa") = fVUParam.dp1_nominal_cooler, + dp2_nominal(displayUnit="Pa") = fVUParam.dp2_nominal_cooler, + m1_flow_nominal=fVUParam.m1_flow_nominal_cooler, + m2_flow_nominal=fVUParam.m2_flow_nominal_cooler) + "The heat exchanger used for cooling" + annotation (Placement(transformation(extent={{182,22},{162,42}}))); + Modelica.Fluid.Interfaces.FluidPort_b heaterReturnConnector(redeclare package + Medium = Water) "Connector to the heating water sink" + annotation (Placement(transformation(extent={{82,90},{102,110}}))); + Modelica.Fluid.Interfaces.FluidPort_a heaterFlowConnector(redeclare package + Medium = Water) "Connector to the heating water source" + annotation (Placement(transformation(extent={{112,90},{132,110}}))); + Modelica.Fluid.Interfaces.FluidPort_b coolerReturnConnector(redeclare package + Medium = Water) "Connector to the cooling water source" + annotation (Placement(transformation(extent={{152,90},{172,110}}))); + Modelica.Fluid.Interfaces.FluidPort_a coolerFlowConnector(redeclare package + Medium = Water) "Connector to the cooling water source" + annotation (Placement(transformation(extent={{182,90},{202,110}}))); + Modelica.Fluid.Sensors.Temperature freshAirTemperature(redeclare package + Medium = Air) "Temperature of the fresh air" annotation (Placement( + transformation( + extent={{-8,-6},{8,6}}, + rotation=180, + origin={-140,-82}))); + Modelica.Fluid.Sensors.Temperature exhaustAirTemperature(redeclare package + Medium = Air) "Temperature of the exhaust air" annotation (Placement( + transformation( + extent={{-8,-6},{8,6}}, + rotation=0, + origin={-134,44}))); + Modelica.Fluid.Sensors.Temperature coolerTemperature(redeclare package Medium = + Air) "Temperature of the supply air stream behind the cooler" + annotation (Placement(transformation( + extent={{-8,-6},{8,6}}, + rotation=180, + origin={188,2}))); + Modelica.Fluid.Sensors.Temperature heatRecoveryTemperature(redeclare package + Medium = Air) "Temperature behind the recuperator" + annotation (Placement(transformation(extent={{-28,-10},{-12,2}}))); + + Modelica.Blocks.Math.Add oppositeOpening(k1=-1) + "Provides the relative opening of the complementary damper of the + recuperator" annotation (Placement(transformation(extent={{-65,47},{-55,57}}))); + Modelica.Blocks.Sources.Constant one(k=1) "Output the Real value 1 " + annotation (Placement(transformation( + extent={{-5,-5},{5,5}}, + rotation=180, + origin={-61,27}))); + Modelica.Fluid.Sensors.Temperature mixAirTemperature(redeclare package Medium = + Air) "Temperature of the mixed circulation and fresh air streams" + annotation (Placement(transformation(extent={{32,42},{48,54}}))); + inner Modelica.Fluid.System system + annotation (Placement(transformation(extent={{180,-100},{200,-80}}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening damperCirculationAir( + redeclare package Medium = Air, + riseTime=fVUParam.damperRiseTimeLong, + m_flow_nominal=fVUParam.m_flow_nominal_damper, + dpValve_nominal=fVUParam.dp_nominal_damper) + "Damper that controls the air stream that is recirculated" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={30,-16}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening damperBypass( + redeclare package Medium = Air, + riseTime=fVUParam.damperRiseTimeLong, + m_flow_nominal=fVUParam.m_flow_nominal_damper, + dpValve_nominal=fVUParam.dp_nominal_damper) + "The second of two dampers that control the air flow through the + recuperator" annotation (Placement(transformation( + extent={{-9,-9},{9,9}}, + rotation=0, + origin={-27,36}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening damperHeatRecovery( + redeclare package Medium = Air, + riseTime=fVUParam.damperRiseTimeLong, + m_flow_nominal=fVUParam.m_flow_nominal_damper, + dpValve_nominal=fVUParam.dp_nominal_damper) + "The first of two dampers that control the air flow through the recuperator" + annotation (Placement(transformation( + extent={{-9,-9},{9,9}}, + rotation=0, + origin={-82,-68}))); + Modelica.Fluid.Sensors.Temperature heaterTemperature(redeclare package Medium = + Air) "Temperature of the supply air stream behind the heater" + annotation (Placement(transformation( + extent={{-8,-6},{8,6}}, + rotation=180, + origin={129,4}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening damperFreshAir( + redeclare package Medium = Air, + riseTime=fVUParam.damperRiseTimeShort, + m_flow_nominal=fVUParam.m_flow_nominal_damper, + dpValve_nominal=fVUParam.dp_nominal_damper) + "Can be used to disconnect the unit from fresh air source" + annotation (Placement(transformation( + extent={{-9,-9},{9,9}}, + rotation=0, + origin={-112,-68}))); + AixLib.Fluid.HeatExchangers.ConstantEffectiveness recuperator( + redeclare package Medium1 = Air, + redeclare package Medium2 = Air, + eps=0.6, + m1_flow_nominal=fVUParam.m2_flow_nominal_heater, + m2_flow_nominal=fVUParam.m2_flow_nominal_heater, + dp1_nominal=fVUParam.dp2_nominal_heater, + dp2_nominal=fVUParam.dp2_nominal_heater) + "The heat exchanger used for recovering heat or cold from extract air + stream" annotation (Placement(transformation(extent={{-44,-42},{-24,-22}}))); + Modelica.Fluid.Vessels.ClosedVolume volume( + nPorts=4, + use_portsData=false, + V=0.01, + redeclare package Medium = Air, + T_start=T_start) + "Volume where the circulation air and the fresh air stream mix" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={18,14}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening heatingValve( + redeclare package Medium = Water, + riseTime=fVUParam.damperRiseTimeLong, + dpValve_nominal=fVUParam.dp1_nominal_heater, + m_flow_nominal=fVUParam.m1_flow_nominal_heater) + "Valve controlling the heating water flow into the unit" + annotation (Placement(transformation( + extent={{-9,9},{9,-9}}, + rotation=90, + origin={122,60}))); + AixLib.Fluid.Actuators.Valves.TwoWayQuickOpening coolingValve( + redeclare package Medium = Water, + riseTime=fVUParam.damperRiseTimeLong, + dpValve_nominal=fVUParam.dp1_nominal_heater, + m_flow_nominal=fVUParam.m1_flow_nominal_heater) + "Valve controlling the cooling water flow into the unit" + annotation (Placement(transformation( + extent={{-9,9},{9,-9}}, + rotation=90, + origin={192,58}))); + AixLib.Controls.Interfaces.FVUControlBus fVUControlBus + "Bus with controller signals" + annotation (Placement(transformation(extent={{-29,72},{29,130}}))); +equation + + connect(cooler.port_b2, supplyAirConnector) annotation (Line( + points={{182,26},{202,26}}, + color={0,127,255}, + smooth=Smooth.None, + thickness=1)); + connect(extractAirTemperature.port, extractAirConnector) annotation (Line( + points={{182,-58},{182,-68},{202,-68}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(freshAirTemperature.port, freshAirConnector) annotation (Line( + points={{-140,-76},{-140,-68},{-158,-68}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(exhaustAirTemperature.port, fanExhaustAir.port_b) annotation (Line( + points={{-134,38},{-134,26},{-128,26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(cooler.port_b2, coolerTemperature.port) annotation (Line( + points={{182,26},{188,26},{188,8}}, + color={0,127,255}, + smooth=Smooth.None)); + + connect(oppositeOpening.u2, one.y) annotation (Line( + points={{-66,49},{-70,49},{-70,27},{-66.5,27}}, + color={0,0,127}, + smooth=Smooth.None)); + + connect(mixAirTemperature.port, fanSupplyAir.port_a) + annotation (Line(points={{40,42},{40,26},{52,26}}, color={0,127,255})); + connect(freshAirConnector, freshAirConnector) annotation (Line( + points={{-158,-68},{-158,-68}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(oppositeOpening.y, damperBypass.y) annotation (Line( + points={{-54.5,52},{-27,52},{-27,46.8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(extractAirConnector, extractAirConnector) annotation (Line( + points={{202,-68},{202,-68}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(heaterTemperature.port, heater.port_b2) annotation (Line( + points={{129,10},{130,10},{130,26},{116,26}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(damperFreshAir.port_b, damperHeatRecovery.port_a) + annotation (Line(points={{-103,-68},{-91,-68}}, color={0,127,255})); + connect(freshAirConnector, damperFreshAir.port_a) + annotation (Line(points={{-158,-68},{-121,-68}}, color={0,127,255})); + connect(damperFreshAir.port_b, damperBypass.port_a) annotation (Line(points={ + {-103,-68},{-100,-68},{-100,36},{-36,36}}, color={0,127,255})); + connect(fanSupplyAir.port_b, heater.port_a2) + annotation (Line(points={{72,26},{84,26},{96,26}}, color={0,127,255})); + connect(extractAirConnector, recuperator.port_a2) annotation (Line(points={{202, + -68},{104,-68},{-4,-68},{-4,-38},{-24,-38}}, color={0,127,255})); + connect(recuperator.port_b2, fanExhaustAir.port_a) annotation (Line(points={{ + -44,-38},{-44,-38},{-90,-38},{-90,26},{-108,26}}, color={0,127,255})); + connect(recuperator.port_b1, volume.ports[1]) annotation (Line(points={{-24,-26}, + {-6,-26},{-6,24},{21,24}}, color={0,127,255})); + connect(damperBypass.port_b, volume.ports[2]) + annotation (Line(points={{-18,36},{19,36},{19,24}}, color={0,127,255})); + connect(damperCirculationAir.port_b, volume.ports[3]) annotation (Line(points= + {{30,-6},{30,-6},{30,24},{17,24}}, color={0,127,255})); + connect(fanSupplyAir.port_a, volume.ports[4]) + annotation (Line(points={{52,26},{15,26},{15,24}}, color={0,127,255})); + connect(heatRecoveryTemperature.port, recuperator.port_b1) annotation (Line( + points={{-20,-10},{-20,-26},{-24,-26}}, color={0,127,255})); + connect(heater.port_b2, cooler.port_a2) + annotation (Line(points={{116,26},{140,26},{162,26}}, color={0,127,255})); + connect(heater.port_a1, heatingValve.port_a) + annotation (Line(points={{116,38},{122,38},{122,51}}, color={0,127,255})); + connect(heatingValve.port_b, heaterFlowConnector) annotation (Line(points={{122, + 69},{122,84.5},{122,100}}, color={0,127,255})); + connect(coolerReturnConnector, cooler.port_b1) + annotation (Line(points={{162,100},{162,38}}, color={0,127,255})); + connect(cooler.port_a1, coolingValve.port_a) + annotation (Line(points={{182,38},{192,38},{192,49}}, color={0,127,255})); + connect(coolingValve.port_b, coolerFlowConnector) + annotation (Line(points={{192,67},{192,67},{192,100}}, color={0,127,255})); + connect(heaterReturnConnector, heater.port_b1) annotation (Line(points={{92,100}, + {94,100},{94,38},{96,38}}, color={0,127,255})); + connect(extractAirConnector, damperCirculationAir.port_a) annotation (Line( + points={{202,-68},{114,-68},{30,-68},{30,-26}}, color={0,127,255})); + connect(damperCirculationAir.y, fVUControlBus.circulationDamperOpening) + annotation (Line(points={{18,-16},{12,-16},{0.145,-16},{0.145,101.145}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(fanSupplyAir.powerShare, fVUControlBus.fanSupplyAirPower) annotation ( + Line(points={{62,36},{62,62},{0.145,62},{0.145,101.145}}, color={0,0,127}), + Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(fanExhaustAir.powerShare, fVUControlBus.fanExhaustAirPower) + annotation (Line(points={{-118,36},{-118,62},{0.145,62},{0.145,101.145}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(damperFreshAir.y, fVUControlBus.freshAirDamperOpening) annotation ( + Line(points={{-112,-57.2},{-112,-57.2},{-112,66},{0.145,66},{0.145, + 101.145}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(damperHeatRecovery.y, fVUControlBus.hRCDamperOpening) annotation ( + Line(points={{-82,-57.2},{-82,-57.2},{-82,72},{0.145,72},{0.145,101.145}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(oppositeOpening.u1, fVUControlBus.hRCDamperOpening) annotation (Line( + points={{-66,55},{-68,55},{-68,72},{0.145,72},{0.145,101.145}}, color={0, + 0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(heatingValve.y, fVUControlBus.heatingValveOpening) annotation (Line( + points={{132.8,60},{140,60},{140,76},{0.145,76},{0.145,101.145}}, color= + {0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(coolingValve.y, fVUControlBus.coolingValveOpening) annotation (Line( + points={{202.8,58},{210,58},{210,76},{0.145,76},{0.145,101.145}}, color= + {0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(damperHeatRecovery.port_b, recuperator.port_a1) annotation (Line( + points={{-73,-68},{-58,-68},{-58,-26},{-44,-26}}, color={0,127,255})); + connect(fanExhaustAir.port_b, exhaustAirConnector) annotation (Line(points={{ + -128,26},{-144,26},{-160,26}}, color={0,127,255})); + connect(coolerTemperature.T, fVUControlBus.supplyTemperature) annotation ( + Line(points={{182.4,2},{172,2},{160,2},{160,-20},{80,-20},{80,84},{0.145, + 84},{0.145,101.145}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(mixAirTemperature.T, fVUControlBus.mixTemperature) annotation (Line( + points={{45.6,48},{52,48},{52,84},{0.145,84},{0.145,101.145}}, color={0, + 0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + annotation ( + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-160,-100},{ + 200,100}})), + Icon(coordinateSystem(extent={{-160,-100},{200,100}}, preserveAspectRatio= + false), graphics={Rectangle( + extent={{-160,100},{200,-100}}, + lineColor={0,0,255}, + fillPattern=FillPattern.Solid, + fillColor={0,0,255}), Text( + extent={{-120,56},{168,-52}}, + lineColor={255,0,0}, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + textString="FVU", + textStyle={TextStyle.Bold})}), + experiment(StopTime=86400, Interval=1), + __Dymola_experimentSetupOutput, + Documentation(info=" +This is a model for Facade Ventilation Unit (FVU), which can be used for heating, cooling and ventilation purposes. It is equipped with two speed-controlled fans, a recuperator and two air-water heat exchangers. The figure below shows a scheme of the unit.
+The portion of fresh air flowing through the recuperator is controlled by means of a bypass damper. The portion of extract air that is recirculated and mixed with the fresh air stream is controlled by means of a circulation damper. The mixed air stream is either heated or cooled in the air-water heat exchangers. The water flow in these heat exchangers is controlled by two-way-valves.
+All actuators receive normailized signals (0-1). The supply and exhaust air fans are table-based. A relative input signal is transformed into a mass-flow set point for a flow-controlled mover. If the exhaust air fan is not in operation, the entire air flow should be recirculated. Thus, the circulation damper should be fully opened. In that case, the fresh air flap should be closed so that no fresh air can enter the unit. The exhaust air fan has a minimum mass flow rate of 1 m³/h to make the model more stable.
+ +Baranski, M., Sangi, R., Fuetterer, J., Mueller, D. (2016). An Algorithm for Stepwise Exergy-based Model Predictive Control of Building HVAC Supply Chains. 29th international conference on Efficiency, Cost, Optimisation, Simulation and Environmental Impact of Energy Systems.
+", revisions=" +This package contains models for facade ventilation unit.
+", revisions=" +")); +end FacadeVentilationUnit; diff --git a/AixLib/Airflow/FacadeVentilationUnit/package.order b/AixLib/Airflow/FacadeVentilationUnit/package.order new file mode 100644 index 0000000000..0808813e66 --- /dev/null +++ b/AixLib/Airflow/FacadeVentilationUnit/package.order @@ -0,0 +1,4 @@ +FacadeVentilationUnit +DataBase +Examples +BaseClasses diff --git a/AixLib/Airflow/Multizone/BaseClasses/DoorDiscretized.mo b/AixLib/Airflow/Multizone/BaseClasses/DoorDiscretized.mo index 3a3402961f..5ef927b968 100644 --- a/AixLib/Airflow/Multizone/BaseClasses/DoorDiscretized.mo +++ b/AixLib/Airflow/Multizone/BaseClasses/DoorDiscretized.mo @@ -7,7 +7,8 @@ partial model DoorDiscretized parameter Modelica.SIunits.PressureDifference dp_turbulent(min=0) = 0.01 "Pressure difference where laminar and turbulent flow relation coincide. Recommended: 0.01"; - parameter Real CD=0.65 "|Orifice characteristics|Discharge coefficient"; + parameter Real CD=0.65 "Discharge coefficient" + annotation (Dialog(group="Orifice characteristics")); Modelica.SIunits.PressureDifference dpAB[nCom](each nominal=1) "Pressure difference between compartments"; @@ -18,6 +19,22 @@ partial model DoorDiscretized protected parameter Modelica.SIunits.Length dh=hOpe/nCom "Height of each compartment"; + + parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( + T=Medium.T_default, + p=Medium.p_default, + X=Medium.X_default); + + parameter Modelica.SIunits.Density rho_default=Medium.density(sta_default) + "Density, used to compute fluid volume"; + + parameter Real hAg[nCom](each unit="m2/s2")= + {Modelica.Constants.g_n*(hA - (i - 0.5)*dh) for i in 1:nCom} + "Product g*h_i for each compartment"; + + parameter Real hBg[nCom](each unit="m2/s2")= + {Modelica.Constants.g_n*(hB - (i - 0.5)*dh) for i in 1:nCom} + "Product g*h_i for each compartment"; Modelica.SIunits.AbsolutePressure pA[nCom](each nominal=101325) "Pressure in compartments of room A"; Modelica.SIunits.AbsolutePressure pB[nCom](each nominal=101325) @@ -29,36 +46,30 @@ protected "Volume flow rate through compartment from A to B if positive"; Modelica.SIunits.VolumeFlowRate dVBA_flow[nCom] "Volume flow rate through compartment from B to A if positive"; + Modelica.SIunits.VolumeFlowRate VZerCom_flow = VZer_flow/nCom + "Small flow rate for regularization"; Real m(min=0.5, max=1) "Flow exponent, m=0.5 for turbulent, m=1 for laminar"; Real kVal "Flow coefficient for each compartment, k = V_flow/ dp^m"; Modelica.SIunits.Area dA "Compartment area"; - - parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( - T=Medium.T_default, - p=Medium.p_default, - X=Medium.X_default); - parameter Modelica.SIunits.Density rho_default=Medium.density(sta_default) - "Density, used to compute fluid volume"; - + Real gaiFlo[nCom] "Gain to sum up the positive flows and set the negative to zero in a differentiable way"; equation dA = A/nCom; for i in 1:nCom loop // pressure drop in each compartment - pA[i] = port_a1.p + rho_a1_inflow*Modelica.Constants.g_n*(hA - (i - 0.5)*dh); - pB[i] = port_a2.p + rho_a2_inflow*Modelica.Constants.g_n*(hB - (i - 0.5)*dh); + pA[i] = port_a1.p + rho_a1_inflow*hAg[i]; + pB[i] = port_a2.p + rho_a2_inflow*hBg[i]; dpAB[i] = pA[i] - pB[i]; v[i] = dV_flow[i]/dA; // assignment of net volume flows - dVAB_flow[i] = dV_flow[i]* - AixLib.Utilities.Math.Functions.smoothHeaviside(x=dV_flow[i], delta= - VZer_flow/nCom) + VZer_flow/nCom; - dVBA_flow[i] = -dV_flow[i] + dVAB_flow[i] + 2*VZer_flow/nCom; + gaiFlo[i] = AixLib.Utilities.Math.Functions.smoothHeaviside(x=dV_flow[i], delta=VZerCom_flow); + dVAB_flow[i] = dV_flow[i] * gaiFlo[i]; + dVBA_flow[i] = -dV_flow[i] * (1-gaiFlo[i]); end for; // add positive and negative flows - VAB_flow = ones(nCom)*dVAB_flow; - VBA_flow = ones(nCom)*dVBA_flow; + VAB_flow = sum(dVAB_flow); + VBA_flow = sum(dVBA_flow); vTop = v[nCom]; vBot = v[1]; annotation ( @@ -102,6 +113,17 @@ using the model for a door that can be open or closed. revisions="This is an interface that defines parameters used for error control. @@ -19,17 +21,24 @@ on the exchanged mass, which can be defined as dm/dt = m_flow.
-By setting enforceErrorControlOnFlow = true
, such an equation is imposed
+By setting forceErrorControlOnFlow = true
, such an equation is imposed
by models that extend this class.
forceErrorControlOnFlow
to the Advanced tab.
+A
because
+
+AixLib.Airflow.Multizone.EffectiveAirLeakageArea
+uses the effective leakage area L
rather than A
.v=V_flow/A
as parameter A
has been removed.lWet
as this is only used to compute
+the Reynolds number, and the Reynolds number is not used by this model.
+Also removed the variable Re
for the Reynolds number.final allowFlowReversal=true
.
+See #877.
+@@ -27,11 +31,17 @@ for doors that can be open or closed as a function of an input signal. ", revisions="
diff --git a/AixLib/Airflow/Multizone/DoorDiscretizedOpen.mo b/AixLib/Airflow/Multizone/DoorDiscretizedOpen.mo
index 1ba85fafe0..b52475c86a 100644
--- a/AixLib/Airflow/Multizone/DoorDiscretizedOpen.mo
+++ b/AixLib/Airflow/Multizone/DoorDiscretizedOpen.mo
@@ -56,22 +56,24 @@ revisions="
December 14, 2012 by Michael Wetter:
Renamed protected parameters for consistency with the naming conventions.
sqrt(2/rho)
sometimes causes warnings from the solver,
- as it seems to try negative values for the density during iterative solutions.
+sqrt(2/rho)
sometimes causes warnings from the solver,
+as it seems to try negative values for the density during iterative solutions.
sqrt(2/rho)
sometimes causes warnings from the solver,
- as it seems to try negative values for the density during iterative solutions.
+sqrt(2/rho)
sometimes causes warnings from the solver,
+as it seems to try negative values for the density during iterative solutions.
This model describes the one-directional pressure driven -air flow through a crack-like opening. +air flow through a crack-like opening, using the equation +
++ V̇ = k Δpm, +
++where +V̇ is the volume flow rate, +k is a flow coefficient and +m is the flow exponent. +The flow coefficient is +
++k = L CD,Rat ΔpRat(0.5-m) (2/ρ0)0.5, +
++where +L is the effective air leakage area, +CD,Rat is the discharge coefficient at the reference condition, +ΔpRat is the pressure drop at the rating condition, and +ρ0 is the mass density at the medium default pressure, temperature and humidity.
-The opening is modeled as an orifice. The orifice area -is parameterized by processing the effective air leakage area, the discharge coefficient and pressure drop at a reference condition. -The effective air leakage area can be obtained, for example, +The effective air leakage area L can be obtained, for example, from the ASHRAE fundamentals (ASHRAE, 1997, p. 25.18). In the ASHRAE fundamentals, the effective air leakage area is -based on a reference pressure difference of 4 Pa and a discharge -coefficient of 1. +based on a reference pressure difference of ΔpRat = 4 Pa and a discharge +coefficient of CD,Rat = 1. A similar model is also used in the CONTAM software (Dols and Walton, 2002). Dols and Walton (2002) recommend to use for the flow exponent m=0.6 to m=0.7 if the flow exponent is not @@ -106,10 +129,26 @@ November, 2002. revisions="
lWet
as it is only used to compute
+the Reynolds number, and the Reynolds number is not used by this model.
+Also removed the variable Re
for the Reynolds number.A
and CD
+which are not used by this model.A
which was
-A=CD/CDRat * L * dpRat^(0.5-m))
rather than
-A=CDRat/CD * L * dpRat^(0.5-m))
.A=CD/CDRat * L * dpRat^(0.5-m)
rather than
+A=CDRat/CD * L * dpRat^(0.5-m)
.
-This example illustrates the use of the model that
-exchanges a prescribed air exchange rate between the
+This example illustrates the use of the models that
+exchange a prescribed flow rate between the
volumes that are attached to it.
-The constant block prescribes the air exchange rate to
+The block ACS
prescribes the air exchange rate to
5 air changes per hour.
-This amount of air flows from
+The instance zonFlo
takes as an input the air change per seconds,
+and the instance floExc
takes as inputs the mass flow rate.
+For both instances, the air flows from
rooA
to rooB
, and
from rooB
to rooA
.
Modelica.Fluid.System
to address issue
diff --git a/AixLib/Airflow/Multizone/MediumColumn.mo b/AixLib/Airflow/Multizone/MediumColumn.mo
index 928ae87eac..366910a706 100644
--- a/AixLib/Airflow/Multizone/MediumColumn.mo
+++ b/AixLib/Airflow/Multizone/MediumColumn.mo
@@ -1,7 +1,6 @@
within AixLib.Airflow.Multizone;
model MediumColumn
"Vertical shaft with no friction and no storage of heat and mass"
- import Modelica.Constants;
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
"Medium in the component" annotation (choicesAllMatching=true);
@@ -9,20 +8,16 @@ model MediumColumn
parameter Modelica.SIunits.Length h(min=0) = 3 "Height of shaft";
parameter AixLib.Airflow.Multizone.Types.densitySelection densitySelection
"Select how to pick density" annotation (Evaluate=true);
- 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 package Medium = Medium,
- m_flow(min=if allowFlowReversal then -Constants.inf else 0),
p(start=Medium.p_default))
"Fluid connector a (positive design flow direction is from port_a to port_b)"
annotation (Placement(transformation(extent={{-10,90},{10,110}}),
iconTransformation(extent={{-10,90},{10,110}})));
Modelica.Fluid.Interfaces.FluidPort_b port_b(
redeclare package Medium = Medium,
- m_flow(max=if allowFlowReversal then +Constants.inf else 0),
p(start=Medium.p_default))
"Fluid connector b (positive design flow direction is from port_a to port_b)"
annotation (Placement(transformation(extent={{10,-110},{-10,-90}}), iconTransformation(extent={{10,-110},{-10,-90}})));
@@ -63,19 +58,19 @@ equation
if (densitySelection == AixLib.Airflow.Multizone.Types.densitySelection.fromTop) then
Xi = inStream(port_a.Xi_outflow);
rho = AixLib.Utilities.Psychrometrics.Functions.density_pTX(
- p=port_a.p,
+ p=Medium.p_default,
T=Medium.temperature(Medium.setState_phX(port_a.p, inStream(port_a.h_outflow), Xi)),
X_w=if Medium.nXi == 0 then 0 else Xi[1]);
elseif (densitySelection == AixLib.Airflow.Multizone.Types.densitySelection.fromBottom) then
Xi = inStream(port_b.Xi_outflow);
rho = AixLib.Utilities.Psychrometrics.Functions.density_pTX(
- p=port_b.p,
+ p=Medium.p_default,
T=Medium.temperature(Medium.setState_phX(port_b.p, inStream(port_b.h_outflow), Xi)),
X_w=if Medium.nXi == 0 then 0 else Xi[1]);
else
Xi = actualStream(port_a.Xi_outflow);
rho = AixLib.Utilities.Psychrometrics.Functions.density_pTX(
- p=port_a.p,
+ p=Medium.p_default,
T=Medium.temperature(Medium.setState_phX(port_a.p, actualStream(port_a.h_outflow), Xi)),
X_w=if Medium.nXi == 0 then 0 else Xi[1]);
end if;
@@ -163,6 +158,7 @@ This model describes the pressure difference of a vertical medium
column. It can be used to model the pressure difference caused by
stack effect.
+
The model can be used with the following three configurations, which are
controlled by the setting of the parameter densitySelection
:
@@ -196,8 +192,9 @@ a column of air will change its density based on the flow direction.
In this model, the parameter h
must always be positive, and the port port_a
must be
at the top of the column.
-For a steady-state model, use +For a dynamic model, use AixLib.Airflow.Multizone.MediumColumnDynamic instead of this model.
@@ -205,6 +202,13 @@ AixLib.Airflow.Multizone.MediumColumnDynamic instead of this model. revisions="allowFlowReversal
+and changed default density computation such
+that it assumes a constant pressure.
+See #877.
+Modelica.Fluid.System
to address issue
#311.
port_?.p.nominal
to avoid a warning in OpenModelica because
alias sets have different nominal values.
densitySelection
.
+densitySelection
.
Set the parameter use_HeatTransfer=true
to expose
a heatPort
. This heatPort
can be used
@@ -173,6 +168,7 @@ to add or subtract heat from the volume. This allows, for example,
to use this model in conjunction with a model for heat transfer through
walls to model a solar chimney that stores heat.
For a steady-state model, use
@@ -184,21 +180,30 @@ at the top of the column.
",
revisions="
-
"));
diff --git a/AixLib/Airflow/Multizone/Orifice.mo b/AixLib/Airflow/Multizone/Orifice.mo
index f536474300..180f79b5c4 100644
--- a/AixLib/Airflow/Multizone/Orifice.mo
+++ b/AixLib/Airflow/Multizone/Orifice.mo
@@ -1,11 +1,17 @@
within AixLib.Airflow.Multizone;
model Orifice "Orifice"
- extends AixLib.Airflow.Multizone.BaseClasses.PowerLawResistance(m=0.5, k=CD*
- A*sqrt(2.0/rho_default));
+ extends AixLib.Airflow.Multizone.BaseClasses.PowerLawResistance(
+ m=0.5,
+ k=CD*A*sqrt(2.0/rho_default));
- parameter Real CD=0.65 "|Orifice characteristics|Discharge coefficient";
+ parameter Modelica.SIunits.Area A "Area of orifice"
+ annotation (Dialog(group="Orifice characteristics"));
+ parameter Real CD=0.65 "Discharge coefficient"
+ annotation (Dialog(group="Orifice characteristics"));
- annotation ( Icon(graphics={
+equation
+ v = V_flow/A;
+ annotation (Icon(graphics={
Rectangle(
extent={{-100,8},{100,-8}},
lineColor={0,0,255},
@@ -36,15 +42,30 @@ Documentation(info="
This model describes the mass flow rate and pressure difference relation
of an orifice in the form
+
+Removed declaration of allowFlowReversal
+and changed default density computation such
+that it assumes a constant pressure.
+See #877.
+
Removed assignment of port_?.p.nominal
to avoid a warning
in OpenModelica because
alias sets have different nominal values.
+
Changed model to use new base class
AixLib.Fluid.Interfaces.LumpedVolumeDeclarations.
- Added m_flow_nominal
, which is used if component is configured as steady-state.
+
+Added m_flow_nominal
, which is used if component is configured as steady-state.
- Released first version.
+
+Released first version.
- V_flow = k * dp^m, -+
+ V̇ = k Δpm, +
++where +V̇ is the volume flow rate, +k is a flow coefficient and +m is the flow exponent. +The flow coefficient is +
++k = CD A (2/ρ0)0.5, +
++where +CD is the discharge coefficient, +A is the cross section area and +ρ0 is the mass density at the medium default pressure, temperature and humidity. +
-where k
is a variable and
-m
a parameter. For turbulent flow, set m=1/2
and
-for laminar flow, set m=1
.
-Large openings are characterized by values close to 0.5
,
-while values near 0.65
have been found for small
+For turbulent flow, set m=1/2 and
+for laminar flow, set m=1.
+Large openings are characterized by values close to 0.5,
+while values near 0.65 have been found for small
crack-like openings (Dols and Walton, 2002).
lWet
as it is only used to compute
+the Reynolds number, and the Reynolds number is not used by this model.
+Also removed the variable Re
for the Reynolds number.useConstantDensity
to
useDefaultProperties
to use consistent names within this package.
diff --git a/AixLib/Airflow/Multizone/ZonalFlow_m_flow.mo b/AixLib/Airflow/Multizone/ZonalFlow_m_flow.mo
index 2b2bee0774..c462e821c3 100644
--- a/AixLib/Airflow/Multizone/ZonalFlow_m_flow.mo
+++ b/AixLib/Airflow/Multizone/ZonalFlow_m_flow.mo
@@ -1,9 +1,9 @@
within AixLib.Airflow.Multizone;
model ZonalFlow_m_flow "Zonal flow with input air change per second"
extends AixLib.Airflow.Multizone.BaseClasses.ZonalFlow;
- Modelica.Blocks.Interfaces.RealInput mAB_flow "Mass flow rate from A to B"
+ Modelica.Blocks.Interfaces.RealInput mAB_flow "Mass flow rate from A to B, positive if flow from port_a1 to port_b1"
annotation (Placement(transformation(extent={{-120,90},{-100,110}})));
- Modelica.Blocks.Interfaces.RealInput mBA_flow "Mass flow rate from B to A"
+ Modelica.Blocks.Interfaces.RealInput mBA_flow "Mass flow rate from B to A, positive if flow from port_a2 to port_b2"
annotation (Placement(transformation(extent={{120,-110},{100,-90}})));
equation
@@ -16,7 +16,9 @@ Documentation(info="
This model computes the air exchange between volumes.
-Input is the mass flow rate from A to B and from B to A.
+Input is the mass flow rate from
+port_a1
to port_b1
and from
+port_a2
to port_b2
.
This example shows the ground temperature at the site of the Institute +for Energy Efficient Buildings and Indoor Climate at RWTH Aachen University's +E.ON Energy Research Center (Mathieustr. 10, 52074 Aachen).
+ +The values are derived from TRY weather data. With free +registration, the +Federal Institute for Research on Building, Urban Affairs and Spatial Development +and the German weather service Deutscher Wetterdienst +provide local test reference year weather files at +https://kunden.dwd.de/obt/.
+ +The values used in this example were derived from a TRY file using the Python code +available at this Gist.
+ +", revisions=" +Example to test and tune Kusuda ground temperature model with the weather model from the Modelica Buildings Library.
-The outputs T, Tamp and Tmean in the top of the model can be used to determine the parameters +
The outputs T, Tamp and Tmean in the top of the model can be used to determine the parameters tshift (day of the coldest air temperature in the year), Tmean (average air temperature in the year) and Tamp (amplitude of the air temperature) for the Kusuda ground temperature model.
diff --git a/AixLib/BoundaryConditions/GroundTemperature/Examples/package.order b/AixLib/BoundaryConditions/GroundTemperature/Examples/package.order index d03a54e377..e24be3313c 100644 --- a/AixLib/BoundaryConditions/GroundTemperature/Examples/package.order +++ b/AixLib/BoundaryConditions/GroundTemperature/Examples/package.order @@ -1 +1,2 @@ +ExampleAachen ExampleSanFran diff --git a/AixLib/BoundaryConditions/GroundTemperature/GroundTemperatureKusuda.mo b/AixLib/BoundaryConditions/GroundTemperature/GroundTemperatureKusuda.mo index cc597eb9bf..301833cf52 100644 --- a/AixLib/BoundaryConditions/GroundTemperature/GroundTemperatureKusuda.mo +++ b/AixLib/BoundaryConditions/GroundTemperature/GroundTemperatureKusuda.mo @@ -2,7 +2,8 @@ within AixLib.BoundaryConditions.GroundTemperature; model GroundTemperatureKusuda "Model for undisturbed ground temperature" parameter Modelica.SIunits.Temperature T_mean "Average air temperature over the year"; - parameter Modelica.SIunits.TemperatureDifference T_amp "Difference between max and min air temperature"; + parameter Modelica.SIunits.TemperatureDifference T_amp + "Amplitude of surface temperature [(maximum air temperature - minimum air temperature)/2]"; parameter Modelica.SIunits.Distance D "Depth of ground temperature"; parameter Modelica.SIunits.ThermalDiffusivity alpha=0.04 "Thermal diffusivity of the ground. Declare in m2/day!"; parameter Modelica.SIunits.Time t_shift "Time of the year with minimum air temperature. Declare in days!"; @@ -51,6 +52,10 @@ equation coordinateSystem(preserveAspectRatio=false)), Documentation(revisions="The validation was done by comparing simulation results (San Francisco example) with the -findings of the first given reference below (Florides and Kalogirou,2005).
+findings of the first given reference below (Florides and Kalogirou,2005). +The +Potsdam Institute for Climate Impact Research +provides measurement data for a German site, which can be used for comparison.
+The model implements the equation given above and supplies the undisturbed ground temperature via diff --git a/AixLib/BoundaryConditions/SkyTemperature/BlackBody.mo b/AixLib/BoundaryConditions/SkyTemperature/BlackBody.mo index 842da0b024..b3924bfeb3 100644 --- a/AixLib/BoundaryConditions/SkyTemperature/BlackBody.mo +++ b/AixLib/BoundaryConditions/SkyTemperature/BlackBody.mo @@ -1,9 +1,9 @@ within AixLib.BoundaryConditions.SkyTemperature; block BlackBody "Calculate black body sky temperature" extends Modelica.Blocks.Icons.Block; - import AixLib.BoundaryConditions.Types.SkyTemperatureCalculation; + parameter AixLib.BoundaryConditions.Types.SkyTemperatureCalculation calTSky= - SkyTemperatureCalculation.TemperaturesAndSkyCover + AixLib.BoundaryConditions.Types.SkyTemperatureCalculation.TemperaturesAndSkyCover "Computation of black-body sky temperature" annotation(choicesAllMatching=true, Evaluate=true); @@ -60,6 +60,11 @@ Otherwise, it uses dry buld temperature, dew point temperature and opaque sky co ", revisions="
import
statement.nOpa
for correct display of units
in weaBus
and input radHorIR
to HHorIR
@@ -124,7 +129,5 @@ First implementation.
Text(
extent={{-88,-24},{-64,-36}},
lineColor={0,0,127},
- textString="nOpa")}),
- Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
- 100,100}})));
+ textString="nOpa")}));
end BlackBody;
diff --git a/AixLib/BoundaryConditions/SkyTemperature/Examples/BlackBody.mo b/AixLib/BoundaryConditions/SkyTemperature/Examples/BlackBody.mo
index 597008ef85..ae392e15e8 100644
--- a/AixLib/BoundaryConditions/SkyTemperature/Examples/BlackBody.mo
+++ b/AixLib/BoundaryConditions/SkyTemperature/Examples/BlackBody.mo
@@ -3,7 +3,7 @@ model BlackBody "Test model for black body sky temperature"
extends Modelica.Icons.Example;
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
annotation (Placement(transformation(extent={{-40,0},{-20,20}})));
AixLib.BoundaryConditions.SkyTemperature.BlackBody TBlaSky
"Black body sky temperature computed from temperature and sky cover"
@@ -94,7 +94,5 @@ First implementation.
"),
experiment(Tolerance=1e-6, StartTime=0, StopTime=86400),
__Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/BoundaryConditions/SkyTemperature/Examples/BlackBody.mos"
- "Simulate and plot"),
- Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,
- 100}})));
+ "Simulate and plot"));
end BlackBody;
diff --git a/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/AltitudeAngle.mo b/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/AltitudeAngle.mo
index 9289a407b9..b16fc95c0c 100644
--- a/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/AltitudeAngle.mo
+++ b/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/AltitudeAngle.mo
@@ -11,7 +11,7 @@ annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
annotation (Placement(transformation(extent={{100,-10},{120,10}})));
equation
alt = (Modelica.Constants.pi/2) - zen;
- annotation (Icon(graphics={Bitmap(extent={{-92,92},{92,-92}}, fileName=
+ annotation (Icon(graphics={Bitmap(extent={{-90,-90},{90,90}}, fileName=
"modelica://AixLib/Resources/Images/BoundaryConditions/SolarGeometry/BaseClasses/AltitudeAngle.png")}),
defaultComponentName="altAng", Documentation(info="
diff --git a/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/Declination.mo b/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/Declination.mo index 5663a893ab..eede5e3a2d 100644 --- a/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/Declination.mo +++ b/AixLib/BoundaryConditions/SolarGeometry/BaseClasses/Declination.mo @@ -62,9 +62,10 @@ First implementation.
displayUnit
.displayUnit
.spliceFunction
with regStep
.
This is for
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/DiffusePerez.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/DiffusePerez.mo
index dc933dc3b9..add7b797c5 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/DiffusePerez.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/DiffusePerez.mo
@@ -19,12 +19,12 @@ block DiffusePerez
Modelica.Blocks.Interfaces.RealInput zen(
quantity="Angle",
unit="rad",
- displayUnit="degree") "Zenith angle of the sun beam"
+ displayUnit="deg") "Zenith angle of the sun beam"
annotation (Placement(transformation(extent={{-140,-60},{-100,-20}})));
Modelica.Blocks.Interfaces.RealInput incAng(
quantity="Angle",
unit="rad",
- displayUnit="degree") "Solar incidence angle on the surface"
+ displayUnit="deg") "Solar incidence angle on the surface"
annotation (Placement(transformation(extent={{-140,-90},{-100,-50}})));
Modelica.Blocks.Interfaces.RealOutput HGroDifTil(final quantity=
@@ -80,6 +80,12 @@ Solar Energy, 44(5):271-289.
", revisions="
displayUnit
.displayUnit
.algorithm
section into
equation
section for easier differentiability.
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/BrighteningCoefficient.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/BrighteningCoefficient.mo
index 39e078794e..aa8d4aa780 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/BrighteningCoefficient.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/BrighteningCoefficient.mo
@@ -13,7 +13,7 @@ model BrighteningCoefficient "Test model for brightening coeffcients"
AixLib.BoundaryConditions.SolarIrradiation.BaseClasses.SkyBrightness
skyBri annotation (Placement(transformation(extent={{40,-40},{60,-20}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
annotation (Placement(transformation(extent={{-90,60},{-70,80}})));
AixLib.BoundaryConditions.WeatherData.Bus weaBus annotation (Placement(
transformation(extent={{-60,60},{-40,80}}),
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/DiffuseIsotropic.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/DiffuseIsotropic.mo
index 4d97669a36..577b699004 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/DiffuseIsotropic.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/DiffuseIsotropic.mo
@@ -6,7 +6,7 @@ model DiffuseIsotropic
HDifTilIso(til=1.5707963267949)
annotation (Placement(transformation(extent={{40,0},{60,20}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
annotation (Placement(transformation(extent={{-60,0},{-40,20}})));
AixLib.BoundaryConditions.WeatherData.Bus weaBus
annotation (Placement(transformation(extent={{-11,-1},{9,21}})));
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/RelativeAirMass.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/RelativeAirMass.mo
index 30aa8f9067..9b86f533f2 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/RelativeAirMass.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/RelativeAirMass.mo
@@ -7,7 +7,7 @@ model RelativeAirMass "Test model for relative air mass"
0.34906585039887)
annotation (Placement(transformation(extent={{-20,0},{0,20}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
annotation (Placement(transformation(extent={{-60,0},{-40,20}})));
equation
connect(zen.y, relAirMas.zen) annotation (Line(
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyBrightness.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyBrightness.mo
index 27cd6dea64..3ba0df955b 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyBrightness.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyBrightness.mo
@@ -11,7 +11,7 @@ model SkyBrightness "Test model for sky brightness"
"Sky brightness"
annotation (Placement(transformation(extent={{60,-16},{80,4}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
"Weather data"
annotation (Placement(transformation(extent={{-80,-20},{-60,0}})));
AixLib.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyClearness.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyClearness.mo
index 9ff6a50eb3..a833b95a83 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyClearness.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/Examples/SkyClearness.mo
@@ -9,7 +9,7 @@ model SkyClearness "Test model for sky clearness"
annotation (Placement(transformation(extent={{40,0},{60,20}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
AixLib.BoundaryConditions.WeatherData.Bus weaBus
annotation (Placement(transformation(extent={{-2,20},{18,40}})));
diff --git a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/RelativeAirMass.mo b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/RelativeAirMass.mo
index c74bc6a491..be03afcf61 100644
--- a/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/RelativeAirMass.mo
+++ b/AixLib/BoundaryConditions/SolarIrradiation/BaseClasses/RelativeAirMass.mo
@@ -4,7 +4,7 @@ block RelativeAirMass "Relative air mass"
Modelica.Blocks.Interfaces.RealInput zen(
quantity="Angle",
unit="rad",
- displayUnit="degree") "Zenith angle of the sun beam"
+ displayUnit="deg") "Zenith angle of the sun beam"
annotation (Placement(transformation(extent={{-140,-20},{-100,20}})));
Modelica.Blocks.Interfaces.RealOutput relAirMas "Relative air mass"
annotation (Placement(transformation(extent={{100,-10},{120,10}})));
@@ -31,6 +31,12 @@ Emailed by R. Perez to F.C. Winkelmann on May 21, 1999.displayUnit
.__Dymola_loadSelector
by loadSelector
+Replace Dymola specific annotation by loadSelector
for MSL compliancy as reported by @tbeu at
RWTH-EBC/AixLib#107
__Dymola_loadSelector
by loadSelector
+Replace Dymola specific annotation by loadSelector
for MSL compliancy as reported by @tbeu at
RWTH-EBC/AixLib#107
__Dymola_loadSelector
by loadSelector
+Replace Dymola specific annotation by loadSelector
for MSL compliancy as reported by @tbeu at
RWTH-EBC/AixLib#107
__Dymola_loadSelector
by loadSelector
+Replace Dymola specific annotation by loadSelector
for MSL compliancy as reported by @tbeu at
RWTH-EBC/AixLib#107
Block to output the latitude of the location. @@ -481,9 +475,6 @@ First implementation. extent={{-81,32},{84,-24}}, lineColor={0,0,0}, textString="Longitude")}), - Diagram(coordinateSystem( - preserveAspectRatio=false, - extent={{-100,-100},{100,100}})), Documentation(info="
Block to output the longitude of the location. @@ -1564,6 +1555,19 @@ Technical Report, NREL/TP-581-43156, revised May 2008. ", revisions="
getAbsolutePath
, as this causes in Dymola 2018FD01
+the error
+\"A call of loadResource with a non-literal string remains in the generated code; it will not work for an URI.\"
+when exporting
+AixLib.Fluid.FMI.ExportContainers.Examples.FMUs.ThermalZone
+as an FMU. Instead, if the weather file is specified as a Modelica, URI, syntax such as
+Modelica.Utilities.Files.loadResource(\"modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos\")
+should be used.__Dymola_loadSelector
by loadSelector
+Replace Dymola specific annotation by loadSelector
for MSL compliancy as reported by @tbeu at
RWTH-EBC/AixLib#107
The SimpleNLayer model represents a simple wall, consisting of n different layers.
The WindowSimple model represents a window described by the thermal transmission coefficient and the coefficient of solar energy transmission.
AixLib.Building.Components.Examples.WindowsDoors.WindowSimple
- ", revisions = " + ", revisions="Example for setting up a simulation for a one family dwelling.
Model for a complete model with building envelope and an energy system based on ideal heaters.
- ", revisions = " -Package with complete models with building envelopes and energy systems.
-Three models are available:
-Model for the envelope of the ground floor.
+Ground temperature
+The ground temperature can be coupled to any desired prescriped temperature. Anyway, suitable ground temperatures depending on locations in Germany are listed as Θ'_m,e in the comprehensive table 1 in "Beiblatt 1" in the norm DIN EN 12831.
+Or a ground temperature can be chosen according to a TRY region, which is listed below: if ...
TRY_Region == 1 then 282.15 K
TRY_Region == 2 then 281.55 K
TRY_Region == 3 then 281.65 K
TRY_Region == 4 then 282.65 K
TRY_Region == 5 then 281.25 K
TRY_Region == 6 then 279.95 K
TRY_Region == 7 then 281.95 K
TRY_Region == 8 then 279.95 K
TRY_Region == 9 then 281.05 K
TRY_Region == 10 then 276.15 K
TRY_Region == 11 then 279.45 K
TRY_Region == 12 then 283.35 K
TRY_Region == 13 then 281.05 K
TRY_Region == 14 then 281.05 K
TRY_Region == 15 then 279.95 K
")); end GroundFloorBuildingEnvelope; diff --git a/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/UpperFloorBuildingEnvelope.mo b/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/UpperFloorBuildingEnvelope.mo index 80c8eed5aa..a39d45dbb3 100644 --- a/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/UpperFloorBuildingEnvelope.mo +++ b/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/UpperFloorBuildingEnvelope.mo @@ -1,155 +1,575 @@ -within AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope; - - +within AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope; model UpperFloorBuildingEnvelope ///////// construction parameters - parameter Integer TMC = 1 "Thermal Mass Class" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "Heavy", choice = 2 "Medium", choice = 3 "Light", radioButtons = true)); - parameter Integer TIR = 1 "Thermal Insulation Regulation" annotation(Dialog(groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/Upperfloor_5Rooms.png", group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 - "EnEV_2009", choice = 2 - "EnEV_2002", choice = 3 - "WSchV_1995", choice = 4 - "WSchV_1984", radioButtons = true)); - parameter Boolean withFloorHeating = false - "If true, that floor has different connectors" annotation(Dialog(group = "Construction parameters"), choices(checkBox = true)); + parameter Integer TMC=1 "Thermal Mass Class" annotation (Dialog( + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "Heavy", + choice=2 "Medium", + choice=3 "Light", + radioButtons=true)); + parameter Integer TIR=1 "Thermal Insulation Regulation" annotation (Dialog( + groupImage= + "modelica://AixLib/Resources/Images/Building/HighOrder/Upperfloor_5Rooms.png", + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "EnEV_2009", + choice=2 "EnEV_2002", + choice=3 "WSchV_1995", + choice=4 "WSchV_1984", + radioButtons=true)); + + parameter Boolean withFloorHeating=false + "If true, that floor has different connectors" annotation (Dialog(group= + "Construction parameters"), choices(checkBox=true)); //////////room geometry - parameter Modelica.SIunits.Length room_width_long = if TIR == 1 then 3.86 else 3.97 "w1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_short = 2.28 "w2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_long = 2.60 "h1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_short = 1 "h2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length roof_width = 2.21 "wRO" annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length length5 = if TIR == 1 then 3.23 else 3.34 "l5 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length length6 = 2.44 "l6 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length length7 = 1.33 "l7 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length length8 = if TIR == 1 then 3.23 else 3.34 "l8 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length thickness_IWsimple = 0.145 - "thickness IWsimple " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_width_long=if TIR == 1 then 3.86 else + 3.97 "w1 " annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_short=2.28 "w2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_long=2.60 "h1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_short=1 "h2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length roof_width=2.21 "wRO" + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length length5=if TIR == 1 then 3.23 else 3.34 + "l5 " annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length length6=2.44 "l6 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length length7=1.33 "l7 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length length8=if TIR == 1 then 3.23 else 3.34 + "l8 " annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length thickness_IWsimple=0.145 + "thickness IWsimple " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); // Outer walls properties - parameter Real solar_absorptance_OW = 0.6 "Solar absoptance outer walls " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Real solar_absorptance_RO = 0.1 "Solar absoptance roof " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); + parameter Real solar_absorptance_OW=0.6 "Solar absoptance outer walls " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Real solar_absorptance_RO=0.1 "Solar absoptance roof " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); //Windows and Doors - parameter Modelica.SIunits.Area windowarea_62 = 1.73 " Area Window62" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); - parameter Modelica.SIunits.Area windowarea_63 = 1.73 " Area Window63 " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true)); - parameter Modelica.SIunits.Area windowarea_72 = 1.73 " Area Window72" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); - parameter Modelica.SIunits.Area windowarea_73 = 1.73 " Area Window73 " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true)); - parameter Modelica.SIunits.Area windowarea_92 = 1.73 " Area Window51" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true)); - parameter Modelica.SIunits.Area windowarea_102 = 1.73 " Area Window102" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, joinNext = true)); - parameter Modelica.SIunits.Area windowarea_103 = 1.73 " Area Window103 " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true)); - parameter Real AirExchangeCorridor = 2 "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); + parameter Modelica.SIunits.Area windowarea_62=1.73 " Area Window62" + annotation (Dialog( + group="Windows and Doors", + descriptionLabel=true, + joinNext=true)); + parameter Modelica.SIunits.Area windowarea_63=1.73 " Area Window63 " + annotation (Dialog(group="Windows and Doors", descriptionLabel=true)); + parameter Modelica.SIunits.Area windowarea_72=1.73 " Area Window72" + annotation (Dialog( + group="Windows and Doors", + descriptionLabel=true, + joinNext=true)); + parameter Modelica.SIunits.Area windowarea_73=1.73 " Area Window73 " + annotation (Dialog(group="Windows and Doors", descriptionLabel=true)); + parameter Modelica.SIunits.Area windowarea_92=1.73 " Area Window51" + annotation (Dialog(group="Windows and Doors", descriptionLabel=true)); + parameter Modelica.SIunits.Area windowarea_102=1.73 " Area Window102" + annotation (Dialog( + group="Windows and Doors", + descriptionLabel=true, + joinNext=true)); + parameter Modelica.SIunits.Area windowarea_103=1.73 " Area Window103 " + annotation (Dialog(group="Windows and Doors", descriptionLabel=true)); + parameter Real AirExchangeCorridor=2 "Air exchange corridors in 1/h " + annotation (Dialog(group="Air Exchange Corridors", descriptionLabel=true)); + // Sunblind + parameter Boolean use_sunblind = false + "Will sunblind become active automatically?" + annotation(Dialog(group = "Sunblind")); + parameter Real ratioSunblind(min=0.0, max=1.0) = 0.8 + "Sunblind factor" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Irradiance solIrrThreshold(min=0.0) = 350 + "Threshold for global solar irradiation on this surface to enable sunblinding (see also TOutAirLimit)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Temperature TOutAirLimit = 293.15 + "Temperature at which sunblind closes (see also solIrrThreshold)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); // Dynamic Ventilation - parameter Boolean withDynamicVentilation = true "Dynamic ventilation" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 - "Outside temperature at which the heating activates" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Real Max_VR = 200 "Maximal ventilation rate" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 - "Difference to set temperature" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset_Bedroom = 295.15 "Tset_bedroom" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, joinNext = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset_Children1 = 295.15 - "Tset_children1" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset_Bath = 297.15 "Tset_Bath" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, joinNext = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset_Children2 = 295.15 - "Tset_children2" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - Utilities.Interfaces.SolarRad_in RoofS annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, 44}))); - Utilities.Interfaces.SolarRad_in RoofN annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, 76}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bedroom annotation(Placement(transformation(extent = {{-100, -120}, {-80, -100}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children1 annotation(Placement(transformation(extent = {{-60, -120}, {-40, -100}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Corridor annotation(Placement(transformation(extent = {{-20, -120}, {0, -100}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bath annotation(Placement(transformation(extent = {{20, -120}, {40, -100}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children2 annotation(Placement(transformation(extent = {{60, -120}, {80, -100}}))); - Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Bedroom(TMC = TMC, TIR = TIR, solar_absorptance_OW = solar_absorptance_OW, withWindow2 = true, room_length = length5 + length6 + thickness_IWsimple, room_lengthb = length6, room_width_long = room_width_long, room_width_short = room_width_short, room_height_long = room_height_long, room_height_short = room_height_short, roof_width = roof_width, solar_absorptance_RO = solar_absorptance_RO, windowarea_OW2 = windowarea_62, withWindow3 = true, windowarea_RO = windowarea_63, withDoor2 = false, withFloorHeating = withFloorHeating, T0_air = 295.11, T0_OW1 = 295.15, T0_OW2 = 295.15, T0_IW1a = 295.15, T0_IW1b = 295.15, T0_IW2 = 295.15, T0_CE = 295.1, T0_RO = 295.15, T0_FL = 295.12, withDynamicVentilation = withDynamicVentilation, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset_Bedroom) annotation(Placement(transformation(extent = {{-82, 14}, {-42, 78}}))); - Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Children1(TMC = TMC, TIR = TIR, solar_absorptance_OW = solar_absorptance_OW, withWindow2 = true, room_length = length5, room_width_long = room_width_long, room_width_short = room_width_short, room_height_long = room_height_long, room_height_short = room_height_short, roof_width = roof_width, solar_absorptance_RO = solar_absorptance_RO, windowarea_OW2 = windowarea_72, withWindow3 = true, windowarea_RO = windowarea_73, withDoor2 = false, withFloorHeating = withFloorHeating, T0_air = 295.11, T0_OW1 = 295.15, T0_OW2 = 295.15, T0_IW1 = 295.15, T0_IW2 = 295.15, T0_CE = 295.1, T0_RO = 295.15, T0_FL = 295.12, withDynamicVentilation = withDynamicVentilation, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset_Children1) annotation(Placement(transformation(extent = {{82, 28}, {44, 76}}))); - Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Bath(TMC = TMC, TIR = TIR, solar_absorptance_OW = solar_absorptance_OW, room_length = length8, room_width_long = room_width_long, room_width_short = room_width_short, room_height_long = room_height_long, room_height_short = room_height_short, roof_width = roof_width, solar_absorptance_RO = solar_absorptance_RO, windowarea_OW2 = windowarea_92, withDoor2 = false, door_width_OD2 = 0, door_height_OD2 = 0, withWindow2 = true, withWindow3 = false, withFloorHeating = withFloorHeating, T0_air = 297.11, T0_OW1 = 297.15, T0_OW2 = 297.15, T0_IW1 = 297.15, T0_IW2 = 297.15, T0_CE = 297.1, T0_RO = 297.15, T0_FL = 297.12, withDynamicVentilation = withDynamicVentilation, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset_Bath) annotation(Placement(transformation(extent = {{84, -36}, {46, -84}}))); - Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Children2(TMC = TMC, TIR = TIR, solar_absorptance_OW = solar_absorptance_OW, withWindow2 = true, room_length = length7 + length8 + thickness_IWsimple, room_width_long = room_width_long, room_width_short = room_width_short, room_height_long = room_height_long, room_height_short = room_height_short, roof_width = roof_width, solar_absorptance_RO = solar_absorptance_RO, windowarea_OW2 = windowarea_102, withWindow3 = true, windowarea_RO = windowarea_103, room_lengthb = length7, withDoor2 = false, withFloorHeating = withFloorHeating, T0_air = 295.11, T0_OW1 = 295.15, T0_OW2 = 295.15, T0_IW1a = 295.15, T0_IW1b = 295.15, T0_IW2 = 295.15, T0_CE = 295.1, T0_RO = 295.15, T0_FL = 295.12, withDynamicVentilation = withDynamicVentilation, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset_Children2) annotation(Placement(transformation(extent = {{-84, -20}, {-44, -84}}))); - Rooms.OFD.Ow1IwL2IwS1Lf1At1Ro1 Corridor(TMC = TMC, TIR = TIR, solar_absorptance_OW = solar_absorptance_OW, room_length = length6 + length7 + thickness_IWsimple, room_lengthb = length7, room_width_long = room_width_long, room_width_short = room_width_short, room_height_long = room_height_long, room_height_short = room_height_short, roof_width = roof_width, solar_absorptance_RO = solar_absorptance_RO, withWindow3 = false, withFloorHeating = withFloorHeating, T0_air = 291.11, T0_OW1 = 291.15, T0_IW1 = 291.15, T0_IW2a = 291.15, T0_IW2b = 291.15, T0_IW3 = 291.15, T0_CE = 291.1, T0_RO = 291.15, T0_FL = 291.12) annotation(Placement(transformation(extent = {{82, -28}, {42, 10}}))); - Utilities.Interfaces.SolarRad_in North annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, 6}))); - Utilities.Interfaces.SolarRad_in East annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, -24}))); - Utilities.Interfaces.SolarRad_in South annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, -54}))); - Utilities.Interfaces.SolarRad_in West annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {110, -84}))); - Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation(Placement(transformation(extent = {{-130, 10}, {-100, 40}}))); - Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] annotation(Placement(transformation(extent = {{-130, -26}, {-100, 4}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside annotation(Placement(transformation(extent = {{-116, 66}, {-100, 82}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bedroom annotation(Placement(transformation(extent = {{-98, 100}, {-82, 118}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children1 annotation(Placement(transformation(extent = {{-58, 100}, {-40, 118}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Corridor annotation(Placement(transformation(extent = {{-20, 100}, {-2, 118}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bath annotation(Placement(transformation(extent = {{20, 100}, {38, 118}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children2 annotation(Placement(transformation(extent = {{60, 100}, {78, 118}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor annotation(Placement(transformation(extent = {{100, -120}, {120, -100}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBedroom annotation(Placement(transformation(extent = {{-26, 54}, {-14, 66}}))); - Utilities.Interfaces.Star StarBedroom annotation(Placement(transformation(extent = {{-28, 32}, {-12, 48}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren1 annotation(Placement(transformation(extent = {{14, 54}, {26, 66}}))); - Utilities.Interfaces.Star StarChildren1 annotation(Placement(transformation(extent = {{12, 32}, {28, 48}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBath annotation(Placement(transformation(extent = {{14, -46}, {26, -34}}))); - Utilities.Interfaces.Star StarBath annotation(Placement(transformation(extent = {{12, -68}, {28, -52}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren2 annotation(Placement(transformation(extent = {{-26, -46}, {-14, -34}}))); - Utilities.Interfaces.Star StarChildren2 annotation(Placement(transformation(extent = {{-28, -68}, {-12, -52}}))); - Modelica.Blocks.Sources.Constant AirExchangePort_doorSt(k = 0) "Storage" annotation(Placement(transformation(extent = {{-116, -68}, {-100, -52}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermFloor[4] if withFloorHeating annotation(Placement(transformation(extent = {{-6, -6}, {6, 6}}), iconTransformation(extent = {{-4, -2}, {10, 8}}))); + parameter Boolean withDynamicVentilation=true "Dynamic ventilation" + annotation (Dialog(group="Dynamic ventilation", descriptionLabel=true), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit=253.15 + "Outside temperature at which the heating activates" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Real Max_VR=200 "Maximal ventilation rate" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset=3 + "Difference to set temperature" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset_Bedroom=295.15 "Tset_bedroom" + annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + joinNext=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset_Children1=295.15 "Tset_children1" + annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset_Bath=297.15 "Tset_Bath" + annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + joinNext=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset_Children2=295.15 "Tset_children2" + annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + Utilities.Interfaces.SolarRad_in RoofS annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,44}))); + Utilities.Interfaces.SolarRad_in RoofN annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,76}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bedroom + annotation (Placement(transformation(extent={{-66,-120},{-46,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children1 + annotation (Placement(transformation(extent={{-42,-120},{-22,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Corridor + annotation (Placement(transformation(extent={{-10,-120},{10,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Bath + annotation (Placement(transformation(extent={{20,-120},{40,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor_Children2 + annotation (Placement(transformation(extent={{60,-120},{80,-100}}))); + Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Bedroom( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length5 + length6 + thickness_IWsimple, + room_lengthb=length6, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_62, + withWindow3=true, + windowarea_RO=windowarea_63, + withDoor2=false, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset_Bedroom, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) + annotation (Placement(transformation(extent={{-82,14},{-42,78}}))); + Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Children1( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length5, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_72, + withWindow3=true, + windowarea_RO=windowarea_73, + withDoor2=false, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset_Children1, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) + annotation (Placement(transformation(extent={{82,28},{44,76}}))); + Rooms.OFD.Ow2IwL1IwS1Lf1At1Ro1 Bath( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + room_length=length8, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_92, + withDoor2=false, + door_width_OD2=0, + door_height_OD2=0, + withWindow2=true, + withWindow3=false, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset_Bath, + withFloorHeating=withFloorHeating, + T0_air=297.11, + T0_OW1=297.15, + T0_OW2=297.15, + T0_IW1=297.15, + T0_IW2=297.15, + T0_CE=297.1, + T0_RO=297.15, + T0_FL=297.12) + annotation (Placement(transformation(extent={{84,-36},{46,-84}}))); + Rooms.OFD.Ow2IwL2IwS1Lf1At1Ro1 Children2( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + withWindow2=true, + room_length=length7 + length8 + thickness_IWsimple, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + windowarea_OW2=windowarea_102, + withWindow3=true, + windowarea_RO=windowarea_103, + room_lengthb=length7, + withDoor2=false, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset_Children2, + withFloorHeating=withFloorHeating, + T0_air=295.11, + T0_OW1=295.15, + T0_OW2=295.15, + T0_IW1a=295.15, + T0_IW1b=295.15, + T0_IW2=295.15, + T0_CE=295.1, + T0_RO=295.15, + T0_FL=295.12) + annotation (Placement(transformation(extent={{-84,-20},{-44,-84}}))); + Rooms.OFD.Ow1IwL2IwS1Lf1At1Ro1 Corridor( + TMC=TMC, + TIR=TIR, + solar_absorptance_OW=solar_absorptance_OW, + room_length=length6 + length7 + thickness_IWsimple, + room_lengthb=length7, + room_width_long=room_width_long, + room_width_short=room_width_short, + room_height_long=room_height_long, + room_height_short=room_height_short, + roof_width=roof_width, + solar_absorptance_RO=solar_absorptance_RO, + withWindow3=false, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withFloorHeating=withFloorHeating, + T0_air=291.11, + T0_OW1=291.15, + T0_IW1=291.15, + T0_IW2a=291.15, + T0_IW2b=291.15, + T0_IW3=291.15, + T0_CE=291.1, + T0_RO=291.15, + T0_FL=291.12) + annotation (Placement(transformation(extent={{82,-28},{42,10}}))); + Utilities.Interfaces.SolarRad_in North annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,6}))); + Utilities.Interfaces.SolarRad_in East annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-24}))); + Utilities.Interfaces.SolarRad_in South annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-54}))); + Utilities.Interfaces.SolarRad_in West annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={110,-84}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-130,10},{-100,40}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] + "1(5): Bedroom_UF, 2 (6): Child1_UF, 3(7): Bath_UF, 4(8): Child2_UF" + annotation (Placement(transformation(extent={{-130,-26},{-100,4}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-116,66},{-100,82}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bedroom + annotation (Placement(transformation(extent={{-98,100},{-82,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children1 + annotation (Placement(transformation(extent={{-58,100},{-40,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Corridor + annotation (Placement(transformation(extent={{-20,100},{-2,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Bath + annotation (Placement(transformation(extent={{20,100},{38,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling_Children2 + annotation (Placement(transformation(extent={{60,100},{78,118}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCorridor + annotation (Placement(transformation(extent={{100,-120},{120,-100}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBedroom + annotation (Placement(transformation(extent={{-26,54},{-14,66}}))); + Utilities.Interfaces.Star StarBedroom + annotation (Placement(transformation(extent={{-28,32},{-12,48}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren1 + annotation (Placement(transformation(extent={{14,54},{26,66}}))); + Utilities.Interfaces.Star StarChildren1 + annotation (Placement(transformation(extent={{12,32},{28,48}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermBath + annotation (Placement(transformation(extent={{14,-46},{26,-34}}))); + Utilities.Interfaces.Star StarBath + annotation (Placement(transformation(extent={{12,-68},{28,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a ThermChildren2 + annotation (Placement(transformation(extent={{-26,-46},{-14,-34}}))); + Utilities.Interfaces.Star StarChildren2 + annotation (Placement(transformation(extent={{-28,-68},{-12,-52}}))); + Modelica.Blocks.Sources.Constant AirExchangePort_doorSt(k=0) "Storage" + annotation (Placement(transformation(extent={{-116,-68},{-100,-52}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloorHeatingDownHeatFlow[4] if + withFloorHeating + "1(6): Bedroom_UF, 2(7): Child1_UF, 3(8): Bath_UF, 4(9): Child2_UF" + annotation (Placement(transformation(extent={{-102,-102},{-90,-90}}), + iconTransformation(extent={{-100,-100},{-86,-90}}))); equation - if withFloorHeating then - connect(Bedroom.thermFloor1, ThermFloor[1]) annotation(Line(points = {{-66.4, 38.32}, {-90, 38.32}, {-90, -4.5}, {0, -4.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Children1.thermFloor1, ThermFloor[2]) annotation(Line(points = {{67.18, 46.24}, {90, 46.24}, {90, 20}, {0, 20}, {0, -1.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Bath.thermRoom, ThermFloor[3]) annotation(Line(points = {{68.8, -64.8}, {90, -64.8}, {90, 20}, {0, 20}, {0, 1.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Children2.thermRoom, ThermFloor[4]) annotation(Line(points = {{-68, -58.4}, {-90, -58.4}, {-90, -4}, {0, -4}, {0, 4.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - end if; - connect(Bedroom.SolarRadiationPort_OW2, West) annotation(Line(points = {{-53.1, 78.32}, {-53.1, 86}, {90, 86}, {90, -84}, {110, -84}}, color = {255, 128, 0})); - connect(Children1.SolarRadiationPort_OW2, West) annotation(Line(points = {{54.545, 76.24}, {54.545, 86}, {90, 86}, {90, -84}, {110, -84}}, color = {255, 128, 0})); - connect(Children1.SolarRadiationPort_OW1, North) annotation(Line(points = {{81.905, 59.2}, {90, 59.2}, {90, 6}, {110, 6}}, color = {255, 128, 0})); - connect(Corridor.SolarRadiationPort_OW1, North) annotation(Line(points = {{81.9, -3.3}, {90, -3.3}, {90, 6}, {110, 6}}, color = {255, 128, 0})); - connect(Bath.SolarRadiationPort_OW1, North) annotation(Line(points = {{83.905, -67.2}, {90, -67.2}, {90, 6}, {110, 6}}, color = {255, 128, 0})); - connect(Bath.SolarRadiationPort_OW2, East) annotation(Line(points = {{56.545, -84.24}, {56.545, -92}, {-90, -92}, {-90, 86}, {90, 86}, {90, -24}, {110, -24}}, color = {255, 128, 0})); - connect(Children2.SolarRadiationPort_OW2, East) annotation(Line(points = {{-55.1, -84.32}, {-55.1, -92}, {-90, -92}, {-90, 86}, {90, 86}, {90, -24}, {110, -24}}, color = {255, 128, 0})); - connect(Children2.SolarRadiationPort_OW1, South) annotation(Line(points = {{-83.9, -61.6}, {-90, -61.6}, {-90, 86}, {90, 86}, {90, -54}, {110, -54}}, color = {255, 128, 0})); - connect(Bedroom.SolarRadiationPort_OW1, South) annotation(Line(points = {{-81.9, 55.6}, {-90, 55.6}, {-90, 86}, {90, 86}, {90, -54}, {110, -54}}, color = {255, 128, 0})); - connect(Bedroom.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-81.9, 30}, {-90, 30}, {-90, 25}, {-115, 25}}, color = {0, 0, 127})); - connect(Children2.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-83.9, -36}, {-90, -36}, {-90, 25}, {-115, 25}}, color = {0, 0, 127})); - connect(Bath.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{83.905, -50.4}, {90, -50.4}, {90, -92}, {-90, -92}, {-90, 25}, {-115, 25}}, color = {0, 0, 127})); - connect(Corridor.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{81.9, -18.5}, {90, -18.5}, {90, -92}, {-90, -92}, {-90, 25}, {-115, 25}}, color = {0, 0, 127})); - connect(Children1.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{81.905, 42.4}, {90, 42.4}, {90, -92}, {-90, -92}, {-90, 25}, {-115, 25}}, color = {0, 0, 127})); - connect(Bedroom.thermOutside, thermOutside) annotation(Line(points = {{-80, 74.8}, {-90, 74.8}, {-90, 74}, {-108, 74}}, color = {191, 0, 0})); - connect(Children2.thermOutside, thermOutside) annotation(Line(points = {{-82, -80.8}, {-90, -80.8}, {-90, 74}, {-108, 74}}, color = {191, 0, 0})); - connect(Bath.thermOutside, thermOutside) annotation(Line(points = {{82.1, -81.6}, {82.1, -92}, {-90, -92}, {-90, 74}, {-108, 74}}, color = {191, 0, 0})); - connect(Corridor.thermOutside, thermOutside) annotation(Line(points = {{80, 8.1}, {86, 8.1}, {86, 8}, {90, 8}, {90, -92}, {-90, -92}, {-90, 74}, {-108, 74}}, color = {191, 0, 0})); - connect(Children1.thermOutside, thermOutside) annotation(Line(points = {{80.1, 73.6}, {90, 73.6}, {90, 86}, {-90, 86}, {-90, 74}, {-108, 74}}, color = {191, 0, 0})); - connect(Bedroom.thermCeiling, thermCeiling_Bedroom) annotation(Line(points = {{-44, 62}, {-32, 62}, {-32, 86}, {-90, 86}, {-90, 109}}, color = {191, 0, 0})); - connect(Children1.thermCeiling, thermCeiling_Children1) annotation(Line(points = {{45.9, 68.8}, {36, 68.8}, {36, 86}, {-50, 86}, {-50, 110}, {-49, 109}}, color = {191, 0, 0})); - connect(Corridor.thermCeiling, thermCeiling_Corridor) annotation(Line(points = {{44, 0.5}, {36, 0.5}, {36, 86}, {-12, 86}, {-12, 110}, {-11, 109}}, color = {191, 0, 0})); - connect(Bath.thermCeiling, thermCeiling_Bath) annotation(Line(points = {{47.9, -76.8}, {36, -76.8}, {36, -92}, {90, -92}, {90, 86}, {29, 86}, {29, 109}}, color = {191, 0, 0})); - connect(Children2.thermCeiling, thermCeiling_Children2) annotation(Line(points = {{-46, -68}, {-34, -68}, {-34, -92}, {90, -92}, {90, 86}, {69, 86}, {69, 109}}, color = {191, 0, 0})); - connect(Children2.thermInsideWall1a, Bath.thermInsideWall1) annotation(Line(points = {{-46, -55.2}, {-46, -56}, {-34, -56}, {-34, -92}, {36, -92}, {36, -62}, {47.9, -62}, {47.9, -62.4}}, color = {191, 0, 0})); - connect(Children2.thermInsideWall1b, Corridor.thermInsideWall2b) annotation(Line(points = {{-46, -42.4}, {-34, -42.4}, {-34, -92}, {36, -92}, {36, -14}, {44, -14}, {44, -14.7}}, color = {191, 0, 0})); - connect(Children2.thermInsideWall2, Bedroom.thermInsideWall2) annotation(Line(points = {{-58, -23.2}, {-58, -14}, {-90, -14}, {-90, 6}, {-56, 6}, {-56, 17.2}}, color = {191, 0, 0})); - connect(Corridor.thermInsideWall3, Bath.thermInsideWall2) annotation(Line(points = {{56, -26.1}, {56, -32}, {59.3, -32}, {59.3, -38.4}}, color = {191, 0, 0})); - connect(Children1.thermInsideWall2, Corridor.thermInsideWall1) annotation(Line(points = {{57.3, 30.4}, {57.3, 18}, {64, 18}, {64, 8.1}}, color = {191, 0, 0})); - connect(Bedroom.SolarRadiationPort_Roof, RoofS) annotation(Line(points = {{-47.2, 78}, {-48, 78}, {-48, 86}, {90, 86}, {90, 44}, {110, 44}}, color = {255, 128, 0})); - connect(Children1.SolarRadiationPort_Roof, RoofN) annotation(Line(points = {{48.94, 76}, {48.94, 86}, {90, 86}, {90, 76}, {110, 76}}, color = {255, 128, 0})); - connect(Corridor.SolarRadiationPort_Roof, RoofN) annotation(Line(points = {{47.2, 10}, {48, 10}, {48, 18}, {90, 18}, {90, 76}, {110, 76}}, color = {255, 128, 0})); - connect(Bath.SolarRadiationPort_Roof, RoofN) annotation(Line(points = {{50.94, -84}, {50, -84}, {50, -92}, {90, -92}, {90, 76}, {110, 76}}, color = {255, 128, 0})); - connect(Bedroom.thermFloor, thermFloor_Bedroom) annotation(Line(points = {{-68, 17.2}, {-68, 6}, {-90, 6}, {-90, -110}}, color = {191, 0, 0})); - connect(Children1.thermFloor, thermFloor_Children1) annotation(Line(points = {{68.7, 30.4}, {68, 26}, {68, 20}, {90, 20}, {90, -92}, {-50, -92}, {-50, -110}}, color = {191, 0, 0})); - connect(Corridor.thermFloor, thermFloor_Corridor) annotation(Line(points = {{68, -26.1}, {68, -32}, {90, -32}, {90, -92}, {-10, -92}, {-10, -110}}, color = {191, 0, 0})); - connect(Bath.thermFloor, thermFloor_Bath) annotation(Line(points = {{70.7, -38.4}, {70.7, -32}, {90, -32}, {90, -92}, {30, -92}, {30, -110}}, color = {191, 0, 0})); - connect(Children2.thermFloor, thermFloor_Children2) annotation(Line(points = {{-70, -23.2}, {-70, -14}, {-90, -14}, {-90, -92}, {70, -92}, {70, -110}}, color = {191, 0, 0})); - connect(Corridor.thermRoom, thermCorridor) annotation(Line(points = {{66, -5.2}, {66, -14}, {90, -14}, {90, -110}, {110, -110}}, color = {191, 0, 0})); - connect(Bedroom.AirExchangePort, AirExchangePort[1]) annotation(Line(points = {{-67.3, 76.88}, {-67.3, 86}, {-90, 86}, {-90, -22.25}, {-115, -22.25}}, color = {0, 0, 127})); - connect(Children1.AirExchangePort, AirExchangePort[2]) annotation(Line(points = {{66.895, 75.64}, {66.895, 86}, {-90, 86}, {-90, -14.75}, {-115, -14.75}}, color = {0, 0, 127})); - connect(Bath.AirExchangePort, AirExchangePort[3]) annotation(Line(points = {{68.895, -83.64}, {68.895, -92}, {-90, -92}, {-90, -7.25}, {-115, -7.25}}, color = {0, 0, 127})); - connect(Children2.AirExchangePort, AirExchangePort[4]) annotation(Line(points = {{-69.3, -82.88}, {-69.3, -92}, {-90, -92}, {-90, 0.25}, {-115, 0.25}}, color = {0, 0, 127})); - connect(Children1.starRoom, StarChildren1) annotation(Line(points = {{59.2, 56.8}, {59.2, 46}, {36, 46}, {36, 40}, {20, 40}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(Children1.thermRoom, ThermChildren1) annotation(Line(points = {{66.8, 56.8}, {66.8, 46}, {36, 46}, {36, 60}, {20, 60}}, color = {191, 0, 0})); - connect(Bedroom.thermInsideWall1a, Children1.thermInsideWall1) annotation(Line(points = {{-44, 49.2}, {-32, 49.2}, {-32, 86}, {36, 86}, {36, 54.4}, {45.9, 54.4}}, color = {191, 0, 0})); - connect(Bedroom.thermRoom, ThermBedroom) annotation(Line(points = {{-66, 52.4}, {-66, 28}, {-32, 28}, {-32, 60}, {-20, 60}}, color = {191, 0, 0})); - connect(Bedroom.starRoom, StarBedroom) annotation(Line(points = {{-58, 52.4}, {-58, 28}, {-32, 28}, {-32, 40}, {-20, 40}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(Bedroom.thermInsideWall1b, Corridor.thermInsideWall2a) annotation(Line(points = {{-44, 36.4}, {-32, 36.4}, {-32, 86}, {36, 86}, {36, -7.1}, {44, -7.1}}, color = {191, 0, 0})); - connect(Children2.starRoom, StarChildren2) annotation(Line(points = {{-60, -58.4}, {-60, -34}, {-34, -34}, {-34, -60}, {-20, -60}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(Children2.thermRoom, ThermChildren2) annotation(Line(points = {{-68, -58.4}, {-68, -34}, {-34, -34}, {-34, -40}, {-20, -40}}, color = {191, 0, 0})); - connect(Bath.starRoom, StarBath) annotation(Line(points = {{61.2, -64.8}, {61.2, -52}, {36, -52}, {36, -60}, {20, -60}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(Bath.thermRoom, ThermBath) annotation(Line(points = {{68.8, -64.8}, {68.8, -52}, {36, -52}, {36, -40}, {20, -40}}, color = {191, 0, 0})); - connect(Children2.SolarRadiationPort_Roof, RoofS) annotation(Line(points = {{-49.2, -84}, {-50, -84}, {-50, -92}, {90, -92}, {90, 44}, {110, 44}}, color = {255, 128, 0})); - connect(Corridor.AirExchangePort, AirExchangePort_doorSt.y) annotation(Line(points = {{82, -10.71}, {90, -10.71}, {90, -92}, {-90, -92}, {-90, -60}, {-99.2, -60}}, color = {0, 0, 127})); - connect(Bedroom.thermFloor1, ThermFloor[1]) annotation(Line(points = {{-66.4, 38.32}, {-90, 38.32}, {-90, -4.5}, {0, -4.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Children1.thermFloor1, ThermFloor[2]) annotation(Line(points = {{67.18, 46.24}, {90, 46.24}, {90, 20}, {0, 20}, {0, -1.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Bath.thermRoom, ThermFloor[3]) annotation(Line(points = {{68.8, -64.8}, {90, -64.8}, {90, 20}, {0, 20}, {0, 1.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(Children2.thermRoom, ThermFloor[4]) annotation(Line(points = {{-68, -58.4}, {-90, -58.4}, {-90, -4}, {0, -4}, {0, 4.5}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - annotation(Icon(coordinateSystem(preserveAspectRatio = false, extent = {{-100, -100}, {100, 100}}), graphics={ Bitmap(extent = {{-96, 90}, {100, -106}}, fileName = "modelica://AixLib/Resources/Images/Building/HighOrder/Upperfloor_icon.png"), Text(extent = {{-56, 74}, {-4, 60}}, lineColor = {0, 0, 0}, textString = "Bedroom"), Text(extent = {{16, 76}, {62, 66}}, lineColor = {0, 0, 0}, textString = "Children1"), Text(extent = {{22, 28}, {64, 14}}, lineColor = {0, 0, 0}, textString = "Corridor"), Text(extent = {{22, -42}, {58, -56}}, lineColor = {0, 0, 0}, textString = "Bath"), Text(extent = {{-62, -2}, {-6, -16}}, lineColor = {0, 0, 0}, textString = "Children2")}), Documentation(revisions = " + connect(Bedroom.SolarRadiationPort_OW2, West) annotation (Line(points={{-53.1, + 78.32},{-53.1,86},{90,86},{90,-84},{110,-84}}, color={255,128,0})); + connect(Children1.SolarRadiationPort_OW2, West) annotation (Line(points={{ + 54.545,76.24},{54.545,86},{90,86},{90,-84},{110,-84}}, color={255,128, + 0})); + connect(Children1.SolarRadiationPort_OW1, North) annotation (Line(points={{ + 81.905,59.2},{90,59.2},{90,6},{110,6}}, color={255,128,0})); + connect(Corridor.SolarRadiationPort_OW1, North) annotation (Line(points={{ + 81.9,-3.3},{90,-3.3},{90,6},{110,6}}, color={255,128,0})); + connect(Bath.SolarRadiationPort_OW1, North) annotation (Line(points={{83.905, + -67.2},{90,-67.2},{90,6},{110,6}}, color={255,128,0})); + connect(Bath.SolarRadiationPort_OW2, East) annotation (Line(points={{56.545,-84.24}, + {56.545,-92},{-90,-92},{-90,86},{90,86},{90,-24},{110,-24}}, color={ + 255,128,0})); + connect(Children2.SolarRadiationPort_OW2, East) annotation (Line(points={{-55.1, + -84.32},{-55.1,-92},{-90,-92},{-90,86},{90,86},{90,-24},{110,-24}}, + color={255,128,0})); + connect(Children2.SolarRadiationPort_OW1, South) annotation (Line(points={{-83.9, + -61.6},{-90,-61.6},{-90,86},{90,86},{90,-54},{110,-54}}, color={255, + 128,0})); + connect(Bedroom.SolarRadiationPort_OW1, South) annotation (Line(points={{-81.9, + 55.6},{-90,55.6},{-90,86},{90,86},{90,-54},{110,-54}}, color={255,128, + 0})); + connect(Bedroom.WindSpeedPort, WindSpeedPort) annotation (Line(points={{-81.9, + 30},{-90,30},{-90,25},{-115,25}}, color={0,0,127})); + connect(Children2.WindSpeedPort, WindSpeedPort) annotation (Line(points={{-83.9, + -36},{-90,-36},{-90,25},{-115,25}}, color={0,0,127})); + connect(Bath.WindSpeedPort, WindSpeedPort) annotation (Line(points={{83.905,-50.4}, + {90,-50.4},{90,-92},{-90,-92},{-90,25},{-115,25}}, color={0,0,127})); + connect(Corridor.WindSpeedPort, WindSpeedPort) annotation (Line(points={{81.9, + -18.5},{90,-18.5},{90,-92},{-90,-92},{-90,25},{-115,25}}, color={0,0, + 127})); + connect(Children1.WindSpeedPort, WindSpeedPort) annotation (Line(points={{ + 81.905,42.4},{90,42.4},{90,-92},{-90,-92},{-90,25},{-115,25}}, color= + {0,0,127})); + connect(Bedroom.thermOutside, thermOutside) annotation (Line(points={{-80, + 74.8},{-90,74.8},{-90,74},{-108,74}}, color={191,0,0})); + connect(Children2.thermOutside, thermOutside) annotation (Line(points={{-82,-80.8}, + {-90,-80.8},{-90,74},{-108,74}}, color={191,0,0})); + connect(Bath.thermOutside, thermOutside) annotation (Line(points={{82.1,-81.6}, + {82.1,-92},{-90,-92},{-90,74},{-108,74}}, color={191,0,0})); + connect(Corridor.thermOutside, thermOutside) annotation (Line(points={{80,8.1}, + {86,8.1},{86,8},{90,8},{90,-92},{-90,-92},{-90,74},{-108,74}}, color= + {191,0,0})); + connect(Children1.thermOutside, thermOutside) annotation (Line(points={{80.1, + 73.6},{90,73.6},{90,86},{-90,86},{-90,74},{-108,74}}, color={191,0,0})); + connect(Bedroom.thermCeiling, thermCeiling_Bedroom) annotation (Line(points={ + {-44,62},{-32,62},{-32,86},{-90,86},{-90,109}}, color={191,0,0})); + connect(Children1.thermCeiling, thermCeiling_Children1) annotation (Line( + points={{45.9,68.8},{36,68.8},{36,86},{-50,86},{-50,110},{-49,109}}, + color={191,0,0})); + connect(Corridor.thermCeiling, thermCeiling_Corridor) annotation (Line(points= + {{44,0.5},{36,0.5},{36,86},{-12,86},{-12,110},{-11,109}}, color={191,0, + 0})); + connect(Bath.thermCeiling, thermCeiling_Bath) annotation (Line(points={{47.9, + -76.8},{36,-76.8},{36,-92},{90,-92},{90,86},{29,86},{29,109}}, color= + {191,0,0})); + connect(Children2.thermCeiling, thermCeiling_Children2) annotation (Line( + points={{-46,-68},{-34,-68},{-34,-92},{90,-92},{90,86},{69,86},{69,109}}, + color={191,0,0})); + connect(Children2.thermInsideWall1a, Bath.thermInsideWall1) annotation (Line( + points={{-46,-55.2},{-46,-56},{-34,-56},{-34,-92},{36,-92},{36,-62},{ + 47.9,-62},{47.9,-62.4}}, color={191,0,0})); + connect(Children2.thermInsideWall1b, Corridor.thermInsideWall2b) annotation ( + Line(points={{-46,-42.4},{-34,-42.4},{-34,-92},{36,-92},{36,-14},{44,-14}, + {44,-14.7}}, color={191,0,0})); + connect(Children2.thermInsideWall2, Bedroom.thermInsideWall2) annotation ( + Line(points={{-58,-23.2},{-58,-14},{-90,-14},{-90,6},{-56,6},{-56,17.2}}, + color={191,0,0})); + connect(Corridor.thermInsideWall3, Bath.thermInsideWall2) annotation (Line( + points={{56,-26.1},{56,-32},{59.3,-32},{59.3,-38.4}}, color={191,0,0})); + connect(Children1.thermInsideWall2, Corridor.thermInsideWall1) annotation ( + Line(points={{57.3,30.4},{57.3,18},{64,18},{64,8.1}}, color={191,0,0})); + connect(Bedroom.SolarRadiationPort_Roof, RoofS) annotation (Line(points={{-47.2, + 78},{-48,78},{-48,86},{90,86},{90,44},{110,44}}, color={255,128,0})); + connect(Children1.SolarRadiationPort_Roof, RoofN) annotation (Line(points={{ + 48.94,76},{48.94,86},{90,86},{90,76},{110,76}}, color={255,128,0})); + connect(Corridor.SolarRadiationPort_Roof, RoofN) annotation (Line(points={{ + 47.2,10},{48,10},{48,18},{90,18},{90,76},{110,76}}, color={255,128,0})); + connect(Bath.SolarRadiationPort_Roof, RoofN) annotation (Line(points={{50.94, + -84},{50,-84},{50,-92},{90,-92},{90,76},{110,76}}, color={255,128,0})); + connect(Bedroom.thermFloor, thermFloor_Bedroom) annotation (Line(points={{-63.2, + 15.92},{-63.2,6},{-90,6},{-90,-92},{-56,-92},{-56,-94},{-56,-94},{-56, + -110},{-56,-110}}, color={191,0,0})); + connect(Children1.thermFloor, thermFloor_Children1) annotation (Line(points={ + {64.14,29.44},{64.14,20},{90,20},{90,-92},{-32,-92},{-32,-110}}, + color={191,0,0})); + connect(Corridor.thermFloor, thermFloor_Corridor) annotation (Line(points={{ + 63.2,-26.86},{63.2,-32},{90,-32},{90,-92},{0,-92},{0,-110}}, color={ + 191,0,0})); + connect(Bath.thermFloor, thermFloor_Bath) annotation (Line(points={{66.14,-37.44}, + {66.14,-32},{90,-32},{90,-92},{30,-92},{30,-110}}, color={191,0,0})); + connect(Children2.thermFloor, thermFloor_Children2) annotation (Line(points={ + {-65.2,-21.92},{-65.2,-14},{-90,-14},{-90,-92},{70,-92},{70,-110}}, + color={191,0,0})); + connect(Corridor.thermRoom, thermCorridor) annotation (Line(points={{66,-5.2}, + {66,-14},{90,-14},{90,-110},{110,-110}}, color={191,0,0})); + connect(Bedroom.AirExchangePort, AirExchangePort[1]) annotation (Line(points= + {{-67.3,76.88},{-67.3,86},{-90,86},{-90,-22.25},{-115,-22.25}}, color= + {0,0,127})); + connect(Children1.AirExchangePort, AirExchangePort[2]) annotation (Line( + points={{66.895,75.64},{66.895,86},{-90,86},{-90,-14.75},{-115,-14.75}}, + color={0,0,127})); + connect(Bath.AirExchangePort, AirExchangePort[3]) annotation (Line(points={{ + 68.895,-83.64},{68.895,-92},{-90,-92},{-90,-7.25},{-115,-7.25}}, + color={0,0,127})); + connect(Children2.AirExchangePort, AirExchangePort[4]) annotation (Line( + points={{-69.3,-82.88},{-69.3,-92},{-90,-92},{-90,0.25},{-115,0.25}}, + color={0,0,127})); + connect(Children1.starRoom, StarChildren1) annotation (Line( + points={{59.2,56.8},{59.2,46},{36,46},{36,40},{20,40}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(Children1.thermRoom, ThermChildren1) annotation (Line(points={{66.8, + 56.8},{66.8,46},{36,46},{36,60},{20,60}}, color={191,0,0})); + connect(Bedroom.thermInsideWall1a, Children1.thermInsideWall1) annotation ( + Line(points={{-44,49.2},{-32,49.2},{-32,86},{36,86},{36,54.4},{45.9,54.4}}, + color={191,0,0})); + connect(Bedroom.thermRoom, ThermBedroom) annotation (Line(points={{-66,52.4}, + {-66,28},{-32,28},{-32,60},{-20,60}}, color={191,0,0})); + connect(Bedroom.starRoom, StarBedroom) annotation (Line( + points={{-58,52.4},{-58,28},{-32,28},{-32,40},{-20,40}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(Bedroom.thermInsideWall1b, Corridor.thermInsideWall2a) annotation ( + Line(points={{-44,36.4},{-32,36.4},{-32,86},{36,86},{36,-7.1},{44,-7.1}}, + color={191,0,0})); + connect(Children2.starRoom, StarChildren2) annotation (Line( + points={{-60,-58.4},{-60,-34},{-34,-34},{-34,-60},{-20,-60}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(Children2.thermRoom, ThermChildren2) annotation (Line(points={{-68,-58.4}, + {-68,-34},{-34,-34},{-34,-40},{-20,-40}}, color={191,0,0})); + connect(Bath.starRoom, StarBath) annotation (Line( + points={{61.2,-64.8},{61.2,-52},{36,-52},{36,-60},{20,-60}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(Bath.thermRoom, ThermBath) annotation (Line(points={{68.8,-64.8},{ + 68.8,-52},{36,-52},{36,-40},{20,-40}}, color={191,0,0})); + connect(Children2.SolarRadiationPort_Roof, RoofS) annotation (Line(points={{-49.2, + -84},{-50,-84},{-50,-92},{90,-92},{90,44},{110,44}}, color={255,128,0})); + connect(Corridor.AirExchangePort, AirExchangePort_doorSt.y) annotation (Line( + points={{82,-10.71},{90,-10.71},{90,-92},{-90,-92},{-90,-60},{-99.2,-60}}, + color={0,0,127})); + connect(Bedroom.thermFloorHeatingDownHeatFlow, thermFloorHeatingDownHeatFlow[ + 1]) annotation (Line( + points={{-71.2,19.76},{-71.2,-2},{-88,-2},{-88,-100.5},{-96,-100.5}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(Children1.thermFloorHeatingDownHeatFlow, + thermFloorHeatingDownHeatFlow[2]) annotation (Line( + points={{71.74,32.32},{71.74,22},{-4,22},{-4,-2},{-88,-2},{-88,-97.5},{-96, + -97.5}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(Bath.thermFloorHeatingDownHeatFlow, thermFloorHeatingDownHeatFlow[3]) + annotation (Line( + points={{73.74,-40.32},{73.74,-30},{-4,-30},{-4,-2},{-88,-2},{-88,-94.5}, + {-96,-94.5}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(Children2.thermFloorHeatingDownHeatFlow, + thermFloorHeatingDownHeatFlow[4]) annotation (Line( + points={{-73.2,-25.76},{-73.2,-2},{-88,-2},{-88,-91.5},{-96,-91.5}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={ + Bitmap(extent={{-100,-100},{100,100}}, fileName= + "modelica://AixLib/Resources/Images/Building/HighOrder/Upperfloor_icon.png"), + Text( + extent={{-56,74},{-4,60}}, + lineColor={0,0,0}, + textString="Bedroom"), + Text( + extent={{16,76},{62,66}}, + lineColor={0,0,0}, + textString="Children1"), + Text( + extent={{22,28},{64,14}}, + lineColor={0,0,0}, + textString="Corridor"), + Text( + extent={{22,-42},{58,-56}}, + lineColor={0,0,0}, + textString="Bath"), + Text( + extent={{-62,-2},{-6,-16}}, + lineColor={0,0,0}, + textString="Children2")}), Documentation(revisions="Model for the envelope of the upper floor.
")); diff --git a/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/WholeHouseBuildingEnvelope.mo b/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/WholeHouseBuildingEnvelope.mo index 2c4110d09f..4db6a802af 100644 --- a/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/WholeHouseBuildingEnvelope.mo +++ b/AixLib/Building/HighOrder/House/OFD_MiddleInnerLoadWall/BuildingEnvelope/WholeHouseBuildingEnvelope.mo @@ -1,96 +1,346 @@ -within AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope; - - +within AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope; model WholeHouseBuildingEnvelope - import AixLib; ///////// construction parameters - parameter Integer TMC = 1 "Thermal Mass Class" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "Heavy", choice = 2 "Medium", choice = 3 "Light", radioButtons = true)); - parameter Integer TIR = 1 "Thermal Insulation Regulation" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 - "EnEV_2009", choice = 2 - "EnEV_2002", choice = 3 - "WSchV_1995", choice = 4 - "WSchV_1984", radioButtons = true)); - parameter Integer TRY = 1 "Region according to TRY" annotation(Dialog(groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/Grundriss.png", group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "TRY01", choice = 2 "TRY02", choice = 3 "TRY03", choice = 4 "TRY04", choice = 5 "TRY05", choice = 6 "TRY06", choice = 7 "TRY07", choice = 8 "TRY08", choice = 9 "TRY09", choice = 10 "TRY10", choice = 11 "TRY11", choice = 12 "TRY12", choice = 13 "TRY13", choice = 14 "TRY14", choice = 15 "TRY15", radioButtons = true)); - parameter Boolean withFloorHeating = false - "If true, that floor has different connectors" annotation(Dialog(group = "Construction parameters"), choices(checkBox = true)); - replaceable package Medium = Modelica.Media.Water.ConstantPropertyLiquidWater - "Medium in the system" annotation(Dialog(tab = "Hydraulics", group = "Medium"), choicesAllMatching = true); - parameter Real AirExchangeCorridor = 2 "Air exchange corridors in 1/h " annotation(Dialog(group = "Air Exchange Corridors", descriptionLabel = true)); - parameter Real AirExchangeAttic = 0 "Air exchange attic in 1/h " annotation(Dialog(group = "Air Exchange Attic", descriptionLabel = true)); - // Dynamic Ventilation - parameter Boolean withDynamicVentilation = true "Dynamic ventilation" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature HeatingLimit = 253.15 - "Outside temperature at which the heating activates" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Real Max_VR = 200 "Maximal ventilation rate" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 3 - "Difference to set temperature" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - GroundFloorBuildingEnvelope groundFloor_Building(TMC = TMC, TIR = TIR, withDynamicVentilation = withDynamicVentilation, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, withFloorHeating = withFloorHeating, - TRY=TRY) annotation(Placement(transformation(extent = {{-26, -94}, {22, -42}}))); - AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope.UpperFloorBuildingEnvelope upperFloor_Building(TMC = TMC, TIR = TIR, HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, withDynamicVentilation = withDynamicVentilation, withFloorHeating = withFloorHeating) annotation(Placement(transformation(extent = {{-26, -22}, {20, 30}}))); - Rooms.OFD.Attic_Ro2Lf5 attic_2Ro_5Rooms(length = 10.64, room1_length = 5.875, room2_length = 3.215, room3_length = 3.92, room4_length = 3.215, room5_length = 4.62, room1_width = 3.84, room2_width = 3.84, room3_width = 3.84, room4_width = 3.84, room5_width = 3.84, roof_width1 = 3.36, roof_width2 = 3.36, solar_absorptance_RO = 0.1, width = 4.75, TMC = TMC, TIR = TIR, alfa = 1.5707963267949) annotation(Placement(transformation(extent = {{-26, 46}, {20, 86}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside annotation(Placement(transformation(extent = {{-100, 80}, {-80, 100}}))); - Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation(Placement(transformation(extent = {{-120, 26}, {-80, 66}}), iconTransformation(extent = {{-108, 38}, {-80, 66}}))); - Modelica.Blocks.Interfaces.RealInput AirExchangePort[4] annotation(Placement(transformation(extent = {{-120, -16}, {-80, 24}}), iconTransformation(extent = {{-108, -4}, {-80, 24}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofS annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, 58}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofN annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, 90}))); - Utilities.Interfaces.SolarRad_in North annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, 18}))); - Utilities.Interfaces.SolarRad_in East annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, -18}))); - Utilities.Interfaces.SolarRad_in South annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, -56}))); - Utilities.Interfaces.SolarRad_in West annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 180, origin = {90, -90}))); - AixLib.Building.Components.DryAir.VarAirExchange varAirExchange(V = upperFloor_Building.Corridor.airload.V) annotation(Placement(transformation(extent = {{-6, -6}, {6, 6}}, rotation = 270, origin = {36, -32}))); - Modelica.Blocks.Sources.Constant AirExchangeCorridor_Source(k = AirExchangeCorridor) annotation(Placement(transformation(extent = {{22, -34}, {26, -30}}))); - Modelica.Blocks.Sources.Constant AirExchangeAttic_Source(k = AirExchangeAttic) annotation(Placement(transformation(extent = {{-60, 70}, {-52, 78}}))); + parameter Integer TMC=1 "Thermal Mass Class" annotation (Dialog( + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "Heavy", + choice=2 "Medium", + choice=3 "Light", + radioButtons=true)); + parameter Integer TIR=1 "Thermal Insulation Regulation" annotation (Dialog( + groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/Grundriss.png", + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "EnEV_2009", + choice=2 "EnEV_2002", + choice=3 "WSchV_1995", + choice=4 "WSchV_1984", + radioButtons=true)); + parameter Boolean withFloorHeating=false + "If true, that floor has different connectors" annotation (Dialog(group= + "Construction parameters"), choices(checkBox=true)); + parameter Real AirExchangeCorridor=2 "Air exchange corridors in 1/h " + annotation (Dialog(group="Air Exchange Corridors", descriptionLabel=true)); + parameter Real AirExchangeAttic=0 "Air exchange attic in 1/h " + annotation (Dialog(group="Air Exchange Attic", descriptionLabel=true)); + ///////// Sunblind + parameter Boolean use_sunblind = false + "Will sunblind become active automatically?" + annotation(Dialog(group = "Sunblind")); + parameter Real ratioSunblind(min=0.0, max=1.0) = 0.8 + "Sunblind factor" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Irradiance solIrrThreshold(min=0.0) = 350 + "Threshold for global solar irradiation on this surface to enable sunblinding (see also TOutAirLimit)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Temperature TOutAirLimit = 293.15 + "Temperature at which sunblind closes (see also solIrrThreshold)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + ///////// Dynamic Ventilation + parameter Boolean withDynamicVentilation=false "Dynamic ventilation" + annotation (Dialog(group="Dynamic ventilation", descriptionLabel=true), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit=253.15 + "Outside temperature at which the heating activates" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Real Max_VR=200 "Maximal ventilation rate" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset=3 + "Difference to set temperature" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope.GroundFloorBuildingEnvelope groundFloor_Building( + TMC=TMC, + TIR=TIR, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDynamicVentilation=withDynamicVentilation, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + withFloorHeating=withFloorHeating) + annotation (Placement(transformation(extent={{-26,-94},{22,-42}}))); + AixLib.Building.HighOrder.House.OFD_MiddleInnerLoadWall.BuildingEnvelope.UpperFloorBuildingEnvelope + upperFloor_Building( + TMC=TMC, + TIR=TIR, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + withDynamicVentilation=withDynamicVentilation, + withFloorHeating=withFloorHeating) + annotation (Placement(transformation(extent={{-26,-22},{20,30}}))); + AixLib.Building.HighOrder.Rooms.OFD.Attic_Ro2Lf5 attic_2Ro_5Rooms( + length=10.64, + room1_length=5.875, + room2_length=3.215, + room3_length=3.92, + room4_length=3.215, + room5_length=4.62, + roof_width1=3.36, + roof_width2=3.36, + solar_absorptance_RO=0.1, + width=4.75, + TMC=TMC, + TIR=TIR, + final use_sunblind=use_sunblind, + final ratioSunblind=ratioSunblind, + final solIrrThreshold=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + room1_width=2.28, + room2_width=2.28, + room3_width=2.28, + room4_width=2.28, + room5_width=2.28, + alfa=1.5707963267949) + annotation (Placement(transformation(extent={{-26,46},{20,86}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation (Placement( + transformation(extent={{-120,26},{-80,66}}), iconTransformation(extent= + {{-108,38},{-80,66}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort[8] + "1: LivingRoom_GF, 2: Hobby_GF, 3: WC_Storage_GF, 4: Kitchen_GF, 5: Bedroom_UF, 6: Child1_UF, 7: Bath_UF, 8: Child2_UF" + annotation (Placement(transformation(extent={{-120,-16},{-80,24}}), + iconTransformation(extent={{-108,-4},{-80,24}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofS annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,58}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_RoofN annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,90}))); + Utilities.Interfaces.SolarRad_in North annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,18}))); + Utilities.Interfaces.SolarRad_in East annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-18}))); + Utilities.Interfaces.SolarRad_in South annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-56}))); + Utilities.Interfaces.SolarRad_in West annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={90,-90}))); + AixLib.Building.Components.DryAir.VarAirExchange varAirExchange(V= + upperFloor_Building.Corridor.airload.V) annotation (Placement( + transformation( + extent={{-6,-6},{6,6}}, + rotation=270, + origin={36,-32}))); + Modelica.Blocks.Sources.Constant AirExchangeCorridor_Source(k= + AirExchangeCorridor) + annotation (Placement(transformation(extent={{22,-34},{26,-30}}))); + Modelica.Blocks.Sources.Constant AirExchangeAttic_Source(k=AirExchangeAttic) + annotation (Placement(transformation(extent={{-60,70},{-52,78}}))); + AixLib.Utilities.Interfaces.Adaptors.HeatStarToComb heatStarToCombHeaters[9] + annotation (Placement(transformation(extent={{-68,-26},{-48,-10}}))); + AixLib.Utilities.Interfaces.HeatStarComb heatingToRooms[9] + "1: LivingRoom_GF, 2: Hobby_GF, 3: Corridor_GF, 4: WC_Storage_GF, 5: Kitchen_GF, 6: Bedroom_UF, 7: Child1_UF, 8: Bath_UF, 9: Child2_UF" + annotation (Placement(transformation(extent={{-100,-46},{-80,-26}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + thermFloorHeatingDownHeatFlow[9] if withFloorHeating + "Thermal connector for heat flow of floor heating going downwards through the floors/ceilings; 1: LivingRoom_GF, 2: Hobby_GF, 3: Corridor_GF, 4: WC_Storage_GF, 5: Kitchen_GF, 6: Bedroom_UF, 7: Child1_UF, 8: Bath_UF, 9: Child2_UF" + annotation (Placement(transformation(extent={{-104,-104},{-88,-88}}), + iconTransformation(extent={{-76,-70},{-62,-60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a groundTemp[5] + "HeatPorts to force ground temperature(s) for the ground floor." + annotation (Placement(transformation(extent={{16,-108},{36,-88}}), + iconTransformation(extent={{-10,-70},{10,-50}}))); equation - connect(groundFloor_Building.thermCeiling_Livingroom, upperFloor_Building.thermFloor_Bedroom) annotation(Line(points = {{-24.08, -39.66}, {-24.08, -32.83}, {-23.7, -32.83}, {-23.7, -24.6}}, color = {191, 0, 0})); - connect(groundFloor_Building.thermCeiling_Hobby, upperFloor_Building.thermFloor_Children1) annotation(Line(points = {{-13.76, -39.66}, {-13.76, -32.83}, {-14.5, -32.83}, {-14.5, -24.6}}, color = {191, 0, 0})); - connect(groundFloor_Building.thermCeiling_Corridor, upperFloor_Building.thermFloor_Corridor) annotation(Line(points = {{-4.64, -39.66}, {-4.64, -32.83}, {-5.3, -32.83}, {-5.3, -24.6}}, color = {191, 0, 0})); - connect(groundFloor_Building.thermCeiling_WCStorage, upperFloor_Building.thermFloor_Bath) annotation(Line(points = {{4.96, -39.66}, {4.96, -32.83}, {3.9, -32.83}, {3.9, -24.6}}, color = {191, 0, 0})); - connect(groundFloor_Building.thermCeiling_Kitchen, upperFloor_Building.thermFloor_Children2) annotation(Line(points = {{15.04, -39.66}, {15.04, -32.83}, {13.1, -32.83}, {13.1, -24.6}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermOutside, thermOutside) annotation(Line(points = {{-27.84, 23.24}, {-74, 23.24}, {-74, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(attic_2Ro_5Rooms.thermOutside, thermOutside) annotation(Line(points = {{-23.7, 84}, {-74, 84}, {-74, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(groundFloor_Building.thermOutside, thermOutside) annotation(Line(points = {{-27.92, -48.76}, {-74, -48.76}, {-74, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCeiling_Bedroom, attic_2Ro_5Rooms.thermRoom1) annotation(Line(points = {{-23.7, 32.34}, {-23.7, 48}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCeiling_Children1, attic_2Ro_5Rooms.thermRoom2) annotation(Line(points = {{-14.27, 32.34}, {-14.27, 40.17}, {-14.5, 40.17}, {-14.5, 48}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCeiling_Corridor, attic_2Ro_5Rooms.thermRoom3) annotation(Line(points = {{-5.53, 32.34}, {-5.53, 40.17}, {-5.3, 40.17}, {-5.3, 48}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCeiling_Bath, attic_2Ro_5Rooms.thermRoom4) annotation(Line(points = {{3.67, 32.34}, {3.67, 40.17}, {3.9, 40.17}, {3.9, 48}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCeiling_Children2, attic_2Ro_5Rooms.thermRoom5) annotation(Line(points = {{12.87, 32.34}, {12.87, 39.17}, {13.1, 39.17}, {13.1, 48}}, color = {191, 0, 0})); - connect(attic_2Ro_5Rooms.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-25.885, 66}, {-74, 66}, {-74, 46}, {-100, 46}}, color = {0, 0, 127})); - connect(upperFloor_Building.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-29.45, 10.5}, {-32, 12}, {-74, 12}, {-74, 46}, {-100, 46}}, color = {0, 0, 127})); - connect(groundFloor_Building.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-29.6, -60.98}, {-74, -60.98}, {-74, 46}, {-100, 46}}, color = {0, 0, 127})); - connect(upperFloor_Building.North, North) annotation(Line(points = {{22.3, 5.56}, {60, 5.56}, {60, 18}, {90, 18}}, color = {255, 128, 0})); - connect(groundFloor_Building.North, North) annotation(Line(points = {{24.4, -45.12}, {60, -45.12}, {60, 18}, {90, 18}}, color = {255, 128, 0})); - connect(upperFloor_Building.East, East) annotation(Line(points = {{22.3, -2.24}, {60, -2.24}, {60, -18}, {90, -18}}, color = {255, 128, 0})); - connect(groundFloor_Building.East, East) annotation(Line(points = {{24.4, -52.4}, {60, -52.4}, {60, -18}, {90, -18}}, color = {255, 128, 0})); - connect(upperFloor_Building.South, South) annotation(Line(points = {{22.3, -10.04}, {60, -10.04}, {60, -56}, {90, -56}}, color = {255, 128, 0})); - connect(groundFloor_Building.South, South) annotation(Line(points = {{24.4, -61.24}, {60, -61.24}, {60, -56}, {90, -56}}, color = {255, 128, 0})); - connect(upperFloor_Building.West, West) annotation(Line(points = {{22.3, -17.84}, {60, -17.84}, {60, -90}, {90, -90}}, color = {255, 128, 0})); - connect(groundFloor_Building.West, West) annotation(Line(points = {{24.4, -72.16}, {60, -72.16}, {60, -90}, {90, -90}}, color = {255, 128, 0})); - connect(upperFloor_Building.RoofS, SolarRadiationPort_RoofS) annotation(Line(points = {{22.3, 15.44}, {60, 15.44}, {60, 58}, {90, 58}}, color = {255, 128, 0})); - connect(upperFloor_Building.RoofN, SolarRadiationPort_RoofN) annotation(Line(points = {{22.3, 23.76}, {60, 23.76}, {60, 90}, {90, 90}}, color = {255, 128, 0})); - connect(groundFloor_Building.thermCorridor, varAirExchange.port_b) annotation(Line(points = {{24.4, -39.4}, {36, -39.4}, {36, -38}}, color = {191, 0, 0})); - connect(upperFloor_Building.thermCorridor, varAirExchange.port_a) annotation(Line(points = {{22.3, -24.6}, {36, -24.6}, {36, -26}}, color = {191, 0, 0})); - connect(AirExchangeCorridor_Source.y, varAirExchange.InPort1) annotation(Line(points = {{26.2, -32}, {28, -32}, {28, -24}, {32.16, -24}, {32.16, -26.6}}, color = {0, 0, 127})); - connect(groundFloor_Building.AirExchangePort, AirExchangePort) annotation(Line(points = {{-29.6, -68.78}, {-74, -68.78}, {-74, 4}, {-100, 4}}, color = {0, 0, 127})); - connect(upperFloor_Building.AirExchangePort, AirExchangePort) annotation(Line(points = {{-29.45, 1.14}, {-74, 1.14}, {-74, 4}, {-100, 4}}, color = {0, 0, 127})); - connect(AirExchangeAttic_Source.y, attic_2Ro_5Rooms.AirExchangePort) annotation(Line(points = {{-51.6, 74}, {-26, 74}}, color = {0, 0, 127})); - connect(attic_2Ro_5Rooms.SolarRadiationPort_RO1, SolarRadiationPort_RoofS) annotation(Line(points = {{-14.5, 84}, {-14, 88}, {-14, 90}, {60, 90}, {60, 58}, {90, 58}}, color = {255, 128, 0})); - connect(attic_2Ro_5Rooms.SolarRadiationPort_RO2, SolarRadiationPort_RoofN) annotation(Line(points = {{8.5, 84}, {10, 84}, {10, 90}, {90, 90}}, color = {255, 128, 0})); - connect(attic_2Ro_5Rooms.SolarRadiationPort_OW2, West) annotation (Line( - points={{22.3,62.4},{60,62.4},{60,-90},{90,-90}}, - color={255,128,0})); - connect(attic_2Ro_5Rooms.SolarRadiationPort_OW1, East) annotation (Line( - points={{-27.38,62},{-74,62},{-74,90},{60,90},{60,-18},{90,-18}}, - color={255,128,0})); - annotation(Icon(graphics={ Bitmap(extent = {{-78, 74}, {72, -68}}, fileName = "modelica://AixLib/Resources/Images/Building/HighOrder/Grundriss.PNG")}), Documentation(info = " + connect(groundFloor_Building.thermCeiling_Livingroom, upperFloor_Building.thermFloor_Bedroom) + annotation (Line(points={{-24.08,-39.66},{-24.08,-32.83},{-15.88,-32.83},{-15.88, + -24.6}}, color={191,0,0})); + connect(groundFloor_Building.thermCeiling_Hobby, upperFloor_Building.thermFloor_Children1) + annotation (Line(points={{-13.76,-39.66},{-13.76,-32.83},{-10.36,-32.83},{-10.36, + -24.6}}, color={191,0,0})); + connect(groundFloor_Building.thermCeiling_Corridor, upperFloor_Building.thermFloor_Corridor) + annotation (Line(points={{-4.64,-39.66},{-4.64,-32.83},{-3,-32.83},{-3,-24.6}}, + color={191,0,0})); + connect(groundFloor_Building.thermCeiling_WCStorage, upperFloor_Building.thermFloor_Bath) + annotation (Line(points={{4.96,-39.66},{4.96,-32.83},{3.9,-32.83},{3.9,-24.6}}, + color={191,0,0})); + connect(groundFloor_Building.thermCeiling_Kitchen, upperFloor_Building.thermFloor_Children2) + annotation (Line(points={{15.04,-39.66},{15.04,-32.83},{13.1,-32.83},{13.1, + -24.6}}, color={191,0,0})); + connect(upperFloor_Building.thermOutside, thermOutside) annotation (Line( + points={{-27.84,23.24},{-74,23.24},{-74,90},{-90,90}}, color={191,0,0})); + connect(attic_2Ro_5Rooms.thermOutside, thermOutside) annotation (Line(points= + {{-23.7,84},{-74,84},{-74,90},{-90,90}}, color={191,0,0})); + connect(groundFloor_Building.thermOutside, thermOutside) annotation (Line( + points={{-27.92,-48.76},{-74,-48.76},{-74,90},{-90,90}}, color={191,0,0})); + connect(upperFloor_Building.thermCeiling_Bedroom, attic_2Ro_5Rooms.thermRoom1) + annotation (Line(points={{-23.7,32.34},{-23.7,48}}, color={191,0,0})); + connect(upperFloor_Building.thermCeiling_Children1, attic_2Ro_5Rooms.thermRoom2) + annotation (Line(points={{-14.27,32.34},{-14.27,40.17},{-14.5,40.17},{-14.5, + 48}}, color={191,0,0})); + connect(upperFloor_Building.thermCeiling_Corridor, attic_2Ro_5Rooms.thermRoom3) + annotation (Line(points={{-5.53,32.34},{-5.53,40.17},{-5.3,40.17},{-5.3,48}}, + color={191,0,0})); + connect(upperFloor_Building.thermCeiling_Bath, attic_2Ro_5Rooms.thermRoom4) + annotation (Line(points={{3.67,32.34},{3.67,40.17},{3.9,40.17},{3.9,48}}, + color={191,0,0})); + connect(upperFloor_Building.thermCeiling_Children2, attic_2Ro_5Rooms.thermRoom5) + annotation (Line(points={{12.87,32.34},{12.87,39.17},{13.1,39.17},{13.1,48}}, + color={191,0,0})); + connect(attic_2Ro_5Rooms.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-25.885,66},{-74,66},{-74,46},{-100,46}}, color={0,0,127})); + connect(upperFloor_Building.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.45,10.5},{-32,12},{-74,12},{-74,46},{-100,46}}, color={0,0, + 127})); + connect(groundFloor_Building.WindSpeedPort, WindSpeedPort) annotation (Line( + points={{-29.6,-60.98},{-74,-60.98},{-74,46},{-100,46}}, color={0,0,127})); + connect(upperFloor_Building.North, North) annotation (Line(points={{22.3,5.56}, + {60,5.56},{60,18},{90,18}}, color={255,128,0})); + connect(groundFloor_Building.North, North) annotation (Line(points={{24.4,-45.12}, + {60,-45.12},{60,18},{90,18}}, color={255,128,0})); + connect(upperFloor_Building.East, East) annotation (Line(points={{22.3,-2.24}, + {60,-2.24},{60,-18},{90,-18}}, color={255,128,0})); + connect(groundFloor_Building.East, East) annotation (Line(points={{24.4,-52.4}, + {60,-52.4},{60,-18},{90,-18}}, color={255,128,0})); + connect(upperFloor_Building.South, South) annotation (Line(points={{22.3,-10.04}, + {60,-10.04},{60,-56},{90,-56}}, color={255,128,0})); + connect(groundFloor_Building.South, South) annotation (Line(points={{24.4,-61.24}, + {60,-61.24},{60,-56},{90,-56}}, color={255,128,0})); + connect(upperFloor_Building.West, West) annotation (Line(points={{22.3,-17.84}, + {60,-17.84},{60,-90},{90,-90}}, color={255,128,0})); + connect(groundFloor_Building.West, West) annotation (Line(points={{24.4,-72.16}, + {60,-72.16},{60,-90},{90,-90}}, color={255,128,0})); + connect(upperFloor_Building.RoofS, SolarRadiationPort_RoofS) annotation (Line( + points={{22.3,15.44},{60,15.44},{60,58},{90,58}}, color={255,128,0})); + connect(upperFloor_Building.RoofN, SolarRadiationPort_RoofN) annotation (Line( + points={{22.3,23.76},{60,23.76},{60,90},{90,90}}, color={255,128,0})); + connect(groundFloor_Building.thermCorridor, varAirExchange.port_b) + annotation (Line(points={{24.4,-39.4},{36,-39.4},{36,-38}}, color={191,0,0})); + connect(upperFloor_Building.thermCorridor, varAirExchange.port_a) annotation ( + Line(points={{22.3,-24.6},{36,-24.6},{36,-26}}, color={191,0,0})); + connect(AirExchangeCorridor_Source.y, varAirExchange.InPort1) annotation ( + Line(points={{26.2,-32},{28,-32},{28,-24},{32.16,-24},{32.16,-26.6}}, + color={0,0,127})); + connect(groundFloor_Building.AirExchangePort[1:4], AirExchangePort[1:4]) + annotation (Line(points={{-29.6,-65.855},{-74,-65.855},{-74,1.5},{-100,1.5}}, + color={0,0,127})); + connect(upperFloor_Building.AirExchangePort[1:4], AirExchangePort[5:8]) + annotation (Line(points={{-29.45,4.065},{-74,4.065},{-74,21.5},{-100,21.5}}, + color={0,0,127})); + connect(AirExchangeAttic_Source.y, attic_2Ro_5Rooms.AirExchangePort) + annotation (Line(points={{-51.6,74},{-26,74}}, color={0,0,127})); + connect(attic_2Ro_5Rooms.SolarRadiationPort_RO1, SolarRadiationPort_RoofS) + annotation (Line(points={{-14.5,84},{-14.5,90},{60,90},{60,58},{90,58}}, + color={255,128,0})); + connect(attic_2Ro_5Rooms.SolarRadiationPort_RO2, SolarRadiationPort_RoofN) + annotation (Line(points={{8.5,84},{10,84},{10,90},{90,90}}, color={255,128, + 0})); + connect(heatStarToCombHeaters.thermStarComb, heatingToRooms) annotation (Line( + points={{-67.4,-18.1},{-90,-18.1},{-90,-36}}, color={191,0,0})); + connect(heatStarToCombHeaters[1].therm, groundFloor_Building.ThermLivingroom) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-52.14},{-7.04,-52.14}}, + color={191,0,0})); + connect(heatStarToCombHeaters[1].star, groundFloor_Building.StarLivingroom) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,-57.6},{-6.8,-57.6}}, + color={95,95,95})); + connect(heatStarToCombHeaters[2].therm, groundFloor_Building.ThermHobby) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-52},{2,-52},{2,-52}, + {2,-52.4},{2.8,-52.4}}, color={191,0,0})); + connect(heatStarToCombHeaters[2].star, groundFloor_Building.StarHobby) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,-57.6},{2.8,-57.6}}, + color={95,95,95})); + connect(heatStarToCombHeaters[3].therm, groundFloor_Building.ThermCorridor) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-66.96},{1.36,-66.96}}, + color={191,0,0})); + connect(heatStarToCombHeaters[3].star, groundFloor_Building.StarCorridor) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,-72.16},{1.36,-72.16}}, + color={95,95,95})); + connect(heatStarToCombHeaters[4].therm, groundFloor_Building.ThermWC_Storage) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-81},{3.28,-81}}, + color={191,0,0})); + connect(heatStarToCombHeaters[4].star, groundFloor_Building.StarWC_Storage) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,-86.2},{3.28,-86.2}}, + color={95,95,95})); + connect(heatStarToCombHeaters[5].therm, groundFloor_Building.ThermKitchen) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-81},{-6.32,-81}}, + color={191,0,0})); + connect(heatStarToCombHeaters[5].star, groundFloor_Building.StarKitchen) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,-86.2},{-6.32,-86.2}}, + color={95,95,95})); + connect(heatStarToCombHeaters[6].therm, upperFloor_Building.ThermBedroom) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,19.6},{-7.6,19.6}}, + color={191,0,0})); + connect(heatStarToCombHeaters[6].star, upperFloor_Building.StarBedroom) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,14.4},{-7.6,14.4}}, + color={95,95,95})); + connect(heatStarToCombHeaters[7].therm, upperFloor_Building.ThermChildren1) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,19.6},{1.6,19.6}}, + color={191,0,0})); + connect(heatStarToCombHeaters[7].star, upperFloor_Building.StarChildren1) + annotation (Line(points={{-47.6,-12.2},{-38,-12.2},{-38,14.4},{1.6,14.4}}, + color={95,95,95})); + connect(heatStarToCombHeaters[8].therm, upperFloor_Building.ThermBath) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-6.4},{1.6,-6.4}}, + color={191,0,0})); + connect(heatStarToCombHeaters[8].star, upperFloor_Building.StarBath) + annotation (Line(points={{-47.6,-12.2},{1.6,-12.2},{1.6,-11.6}}, color={95, + 95,95})); + connect(heatStarToCombHeaters[9].therm, upperFloor_Building.ThermChildren2) + annotation (Line(points={{-47.9,-23.1},{-44,-23.1},{-44,-6.4},{-7.6,-6.4}}, + color={191,0,0})); + connect(heatStarToCombHeaters[9].star, upperFloor_Building.StarChildren2) + annotation (Line(points={{-47.6,-12.2},{-8,-12.2},{-8,-12},{-8,-12},{-8,-12}, + {-8,-12},{-8,-11.6},{-7.6,-11.6}}, color={95,95,95})); + + connect(thermFloorHeatingDownHeatFlow[1:5], groundFloor_Building.thermFloorHeatingDownHeatFlow[ + 1:5]) annotation (Line( + points={{-96,-96},{-22.976,-96},{-22.976,-92.7}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(thermFloorHeatingDownHeatFlow[6:9], upperFloor_Building.thermFloorHeatingDownHeatFlow[ + 1:4]) annotation (Line( + points={{-96,-88.8889},{-36,-88.8889},{-36,-20.7},{-23.1825,-20.7}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(groundFloor_Building.groundTemp, groundTemp) annotation (Line(points= + {{-2,-94},{-2,-99},{26,-99},{26,-98}}, color={191,0,0})); + connect(East, attic_2Ro_5Rooms.SolarRadiationPort_OW1) annotation (Line( + points={{90,-18},{60,-18},{60,90},{-74,90},{-74,62},{-27.38,62}}, color= + {255,128,0})); + connect(West, attic_2Ro_5Rooms.SolarRadiationPort_OW2) annotation (Line( + points={{90,-90},{60,-90},{60,62.4},{22.3,62.4}}, color={255,128,0})); + annotation (Icon(graphics={Bitmap(extent={{-78,74},{72,-68}}, fileName= + "modelica://AixLib/Resources/Images/Building/HighOrder/Grundriss.PNG")}), + Documentation(info="Model for the envelope of the whole one family dwelling.
- ", revisions=" +Ground temperature
+The ground temperature can be coupled to any desired prescriped temperature. Anyway, suitable ground temperatures depending on locations in Germany are listed as Θ'_m,e in the comprehensive table 1 in "Beiblatt 1" in the norm DIN EN 12831.
+Or a ground temperature can be chosen according to a TRY region, which is listed below: if ...
TRY_Region == 1 then 282.15 K
TRY_Region == 2 then 281.55 K
TRY_Region == 3 then 281.65 K
TRY_Region == 4 then 282.65 K
TRY_Region == 5 then 281.25 K
TRY_Region == 6 then 279.95 K
TRY_Region == 7 then 281.95 K
TRY_Region == 8 then 279.95 K
TRY_Region == 9 then 281.05 K
TRY_Region == 10 then 276.15 K
TRY_Region == 11 then 279.45 K
TRY_Region == 12 then 283.35 K
TRY_Region == 13 then 281.05 K
TRY_Region == 14 then 281.05 K
TRY_Region == 15 then 279.95 K
+", revisions="Model for an attic with 2 saddle roofs and a floor toward 5 rooms on the lower floor, with all other walls towards the outside.
Model for a room with 1 outer wall, 2 inner walls load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.
-The following figure presents the room's layout:
- - ")); + ", info=" +Overview
+Model for a room with 1 outer wall, 2 inner walls load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.
+Concept
+The following figure presents the room's layout:
++
Ground temperature
+The ground temperature can be coupled to any desired prescriped temperature. Anyway, suitable ground temperatures depending on locations in Germany are listed as Θ'_m,e in the comprehensive table 1 in "Beiblatt 1" in the norm DIN EN 12831.
+Or a ground temperature can be chosen according to a TRY region, which is listed below: if ...
TRY_Region == 1 then 282.15 K
TRY_Region == 2 then 281.55 K
TRY_Region == 3 then 281.65 K
TRY_Region == 4 then 282.65 K
TRY_Region == 5 then 281.25 K
TRY_Region == 6 then 279.95 K
TRY_Region == 7 then 281.95 K
TRY_Region == 8 then 279.95 K
TRY_Region == 9 then 281.05 K
TRY_Region == 10 then 276.15 K
TRY_Region == 11 then 279.45 K
TRY_Region == 12 then 283.35 K
TRY_Region == 13 then 281.05 K
TRY_Region == 14 then 281.05 K
TRY_Region == 15 then 279.95 K
+")); end Ow1IwL2IwS1Gr1Uf1; diff --git a/AixLib/Building/HighOrder/Rooms/OFD/Ow1IwL2IwS1Lf1At1Ro1.mo b/AixLib/Building/HighOrder/Rooms/OFD/Ow1IwL2IwS1Lf1At1Ro1.mo index 4c7efb2a26..cb00132936 100644 --- a/AixLib/Building/HighOrder/Rooms/OFD/Ow1IwL2IwS1Lf1At1Ro1.mo +++ b/AixLib/Building/HighOrder/Rooms/OFD/Ow1IwL2IwS1Lf1At1Ro1.mo @@ -1,178 +1,616 @@ -within AixLib.Building.HighOrder.Rooms.OFD; +within AixLib.Building.HighOrder.Rooms.OFD; model Ow1IwL2IwS1Lf1At1Ro1 "1 outer wall, 2 inner walls load, 2 inner walls simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" import AixLib; ///////// construction parameters - parameter Integer TMC = 1 "Thermal Mass Class" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "Heavy", choice = 2 "Medium", choice = 3 "Light", radioButtons = true)); - parameter Integer TIR = 1 "Thermal Insulation Regulation" annotation(Dialog(groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/OW1_2IWl_2IWs_1Pa_1At1Ro.png", group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 - "EnEV_2009", choice = 2 - "EnEV_2002", choice = 3 - "WSchV_1995", choice = 4 - "WSchV_1984", radioButtons = true)); - parameter Boolean withFloorHeating = false - "If true, that floor has different connectors" annotation(Dialog(group = "Construction parameters"), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature T0_air = 295.11 "Air" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_OW1 = 295.15 "OW1" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW1 = 295.15 "IW1" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW2a = 295.15 "IW2a" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW2b = 295.15 "IW2b" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW3 = 295.15 "IW3" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_CE = 295.10 "Ceiling" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_RO = 295.15 "Roof" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_FL = 295.12 "Floor" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); + parameter Integer TMC=1 "Thermal Mass Class" annotation (Dialog( + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "Heavy", + choice=2 "Medium", + choice=3 "Light", + radioButtons=true)); + parameter Integer TIR=1 "Thermal Insulation Regulation" annotation (Dialog( + groupImage= + "modelica://AixLib/Resources/Images/Building/HighOrder/OW1_2IWl_2IWs_1Pa_1At1Ro.png", + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "EnEV_2009", + choice=2 "EnEV_2002", + choice=3 "WSchV_1995", + choice=4 "WSchV_1984", + radioButtons=true)); + + parameter Boolean withFloorHeating=false + "If true, that floor has different connectors" annotation (Dialog(group= + "Construction parameters"), choices(checkBox=true)); + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW2a=295.15 "IW2a" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW2b=295.15 "IW2b" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW3=295.15 "IW3" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); //////////room geometry - parameter Modelica.SIunits.Length room_length = 2 "length " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_lengthb = 2 "length_b " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_long = 2 "w1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_short = 2 "w2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_long = 2 "h1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_short = 2 "h2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation(Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_length=2 "length " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_lengthb=2 "length_b " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length roof_width=2 "wRO" + annotation (Dialog(group="Dimensions", descriptionLabel=true)); // Outer walls properties - parameter Real solar_absorptance_OW = 0.25 "Solar absoptance outer walls " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Real solar_absorptance_RO = 0.25 "Solar absoptance roof " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Integer ModelConvOW = 1 "Heat Convection Model" annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 - "DIN 6946", choice = 2 - "ASHRAE Fundamentals", choice = 3 - "Custom alpha", radioButtons = true)); + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Integer ModelConvOW=1 "Heat Convection Model" annotation (Dialog( + group="Outer wall properties", + compact=true, + descriptionLabel=true), choices( + choice=1 "DIN 6946", + choice=2 "ASHRAE Fundamentals", + choice=3 "Custom alpha", + radioButtons=true)); // Windows and Doors - parameter Boolean withWindow3 = true "Window 3 " annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Area windowarea_RO = 0 "Window area" annotation(Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = if withWindow3 then true else false)); + parameter Boolean withWindow3=true "Window 3 " annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation ( + Dialog( + group="Windows and Doors", + naturalWidth=10, + descriptionLabel=true, + enable=if withWindow3 then true else false)); + // Sunblind + parameter Boolean use_sunblind = false + "Will sunblind become active automatically?" + annotation(Dialog(group = "Sunblind")); + parameter Real ratioSunblind(min=0.0, max=1.0) = 0.8 + "Sunblind factor" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Temperature TOutAirLimit = 293.15 + "Temperature at which sunblind closes (see also solIrrThreshold)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Irradiance solIrrThreshold(min=0.0) = 350 + "Threshold for global solar irradiation on this surface to enable sunblinding (see also TOutAirLimit)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); // Dynamic Ventilation - parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 - "Outside temperature at which the heating activates" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Real Max_VR = 10 "Maximal ventilation rate" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 - "Difference to set temperature" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Boolean withDynamicVentilation=false "Dynamic ventilation" + annotation (Dialog(group="Dynamic ventilation", descriptionLabel=true), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit=288.15 + "Outside temperature at which the heating activates" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Real Max_VR=10 "Maximal ventilation rate" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset=2 + "Difference to set temperature" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset=295.15 "Tset" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); // Infiltration rate - AixLib.Building.Components.Walls.Wall outside_wall1(solar_absorptance = solar_absorptance_OW, T0 = T0_OW1, wall_length = room_length, wall_height = room_height_short, withWindow = false, windowarea = 0, withDoor = false, door_height = 0, door_width = 0, WallType = Type_OW) annotation(Placement(transformation(extent = {{-64, -24}, {-54, 34}}))); - AixLib.Building.Components.Walls.Wall inner_wall1(T0 = T0_IW1, outside = false, WallType = Type_IWsimple, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {-14, 58}, extent = {{-3.99997, -22}, {3.99999, 22}}, rotation = 270))); - AixLib.Building.Components.Walls.Wall inside_wall2a(T0 = T0_IW2a, outside = false, WallType = Type_IWload, wall_length = room_length - room_lengthb, wall_height = room_height_long, withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {61, 19}, extent = {{-3, -15}, {3, 15}}, rotation = 180))); - AixLib.Building.Components.Walls.Wall inside_wall3(T0 = T0_IW3, outside = false, WallType = Type_IWsimple, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {20, -60}, extent = {{-4, -24}, {4, 24}}, rotation = 90))); - AixLib.Building.Components.DryAir.Airload airload(V = room_V, T(start = T0_air)) annotation(Placement(transformation(extent = {{0, -20}, {20, 0}}))); - AixLib.Building.Components.Walls.Wall Ceiling(T0 = T0_CE, outside = false, WallType = Type_CE, wall_length = room_length, wall_height = room_width_short, withWindow = false, withDoor = false, ISOrientation = 3) annotation(Placement(transformation(origin = {28, 60}, extent = {{1.99999, -10}, {-1.99998, 10}}, rotation = 90))); - AixLib.Building.Components.Walls.Wall floor(T0 = T0_FL, outside = false, WallType = Type_FL, wall_length = room_length, wall_height = room_width_long, withWindow = false, withDoor = false, ISOrientation = 2) if withFloorHeating == false annotation(Placement(transformation(origin = {-24, -60}, extent = {{-1.99999, -10}, {1.99999, 10}}, rotation = 90))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall3 annotation(Placement(transformation(extent = {{20, -100}, {40, -80}}), iconTransformation(extent = {{20, -100}, {40, -80}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2a annotation(Placement(transformation(extent = {{80, 0}, {100, 20}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside annotation(Placement(transformation(extent = {{-100, 80}, {-80, 100}}))); - Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation(Placement(transformation(extent = {{-109.5, -60}, {-89.5, -40}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation(Placement(transformation(extent = {{-109.5, 20}, {-89.5, 40}}))); - Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation(Placement(transformation(origin = {-100, -9}, extent = {{-10, -10}, {10, 10}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling annotation(Placement(transformation(extent = {{80, 40}, {100, 60}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation(Placement(transformation(extent = {{-30, 10}, {-10, 30}}), iconTransformation(extent = {{-30, 10}, {-10, 30}}))); - Utilities.Interfaces.Star starRoom annotation(Placement(transformation(extent = {{10, 10}, {30, 30}}), iconTransformation(extent = {{10, 10}, {30, 30}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation(Placement(transformation(extent = {{-40, -100}, {-20, -80}}), iconTransformation(extent = {{-40, -100}, {-20, -80}}))); - AixLib.Building.Components.Walls.Wall roof(T0 = T0_RO, solar_absorptance = solar_absorptance_RO, wall_length = room_length, withDoor = false, door_height = 0, door_width = 0, wall_height = roof_width, withWindow = withWindow3, windowarea = windowarea_RO, WallType = Type_RO, WindowType = Type_Win, ISOrientation = 1) annotation(Placement(transformation(origin = {58, 59}, extent = {{-2.99997, -16}, {2.99999, 16}}, rotation = 270))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {74, 100}))); - AixLib.Building.Components.Walls.Wall inside_wall2b(T0 = T0_IW2b, outside = false, WallType = Type_IWload, wall_length = room_lengthb, wall_height = room_height_long, withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {61, -20}, extent = {{-2.99998, -16}, {2.99998, 16}}, rotation = 180))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2b annotation(Placement(transformation(extent = {{80, -40}, {100, -20}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 annotation(Placement(transformation(extent = {{-20, 80}, {0, 100}}), iconTransformation(extent = {{-20, 80}, {0, 100}}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair annotation(Placement(transformation(extent = {{24, -20}, {38, -6}}))); - AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate(room_V = room_V, n50 = n50, e = e, eps = eps) annotation(Placement(transformation(extent = {{-72, 52}, {-54, 60}}))); - AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation(HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset) if withDynamicVentilation annotation(Placement(transformation(extent = {{-70, -66}, {-46, -54}}))); - Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation(Placement(transformation(extent = {{-10, 8}, {10, -8}}, rotation = 90, origin = {-20, -26}))); - AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V = room_V) annotation(Placement(transformation(extent = {{-68, -50}, {-48, -30}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if withFloorHeating - "thermal connector for floor heating" annotation(Placement(transformation(extent = {{-8, -58}, {2, -48}}), iconTransformation(extent = {{-32, -34}, {-12, -14}}))); - AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH(l = room_length, n = Type_FL.n, d = Type_FL.d, rho = Type_FL.rho, lambda = Type_FL.lambda, c = Type_FL.c, T0 = T0_FL, h = room_width_long) if withFloorHeating - "floor component if using Floor heating" annotation(Placement(transformation(origin = {-6, -67}, extent = {{-3.00007, 16}, {3, -16}}, rotation = 90))); + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) + annotation (Placement(transformation(extent={{-64,-12},{-54,46}}))); + AixLib.Building.Components.Walls.Wall inner_wall1( + T0=T0_IW1, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={-14,58}, + extent={{-3.99997,-22},{3.99999,22}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall2a( + T0=T0_IW2a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={61,19}, + extent={{-3,-15},{3,15}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall3( + T0=T0_IW3, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={20,-60}, + extent={{-4,-24},{4,24}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start=T0_air)) + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={28,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation (Placement( + transformation( + origin={-24,-60}, + extent={{-1.99999,-10},{1.99999,10}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall3 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}), + iconTransformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2a + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-60},{-89.5,-40}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 + annotation (Placement(transformation(extent={{-109.5,20},{-89.5,40}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation (Placement( + transformation(origin={-100,-9}, extent={{-10,-10},{10,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), iconTransformation( + extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement(transformation( + extent={{10,10},{30,30}}), iconTransformation(extent={{10,10},{30,30}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation ( + Placement(transformation(extent={{-16,-104},{4,-84}}), iconTransformation( + extent={{-16,-104},{4,-84}}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + ISOrientation=1) annotation (Placement(transformation( + origin={58,59}, + extent={{-2.99997,-16},{2.99999,16}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + AixLib.Building.Components.Walls.Wall inside_wall2b( + T0=T0_IW2b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={61,-20}, + extent={{-2.99998,-16},{2.99998,16}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2b + annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{-20,80},{0,100}}), + iconTransformation(extent={{-20,80},{0,100}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,52},{-54,60}}))); + AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation + annotation (Placement(transformation(extent={{-70,-54},{-46,-42}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation ( + Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V=room_V) + annotation (Placement(transformation(extent={{-68,-38},{-48,-18}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + thermFloorHeatingDownHeatFlow if withFloorHeating + "Thermal connector for heat flow of floor heating going downwards through the wall/floor/ceiling" + annotation (Placement(transformation(extent={{-84,-86},{-70,-72}}), + iconTransformation(extent={{-56,-92},{-36,-72}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + A=room_width_long*room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-30,-85}, + extent={{3.00007,16},{-3,-16}}, + rotation=90))); protected - parameter Real n50(unit = "h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR == 3 then 4 else 6 - "Air exchange rate at 50 Pa pressure difference" annotation(Dialog(tab = "Infiltration")); - parameter Real e = 0.02 "Coefficient of windshield" annotation(Dialog(tab = "Infiltration")); - parameter Real eps = 1.0 "Coefficient of height" annotation(Dialog(tab = "Infiltration")); + parameter Real n50(unit="h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR + == 3 then 4 else 6 "Air exchange rate at 50 Pa pressure difference" + annotation (Dialog(tab="Infiltration")); + parameter Real e=0.02 "Coefficient of windshield" + annotation (Dialog(tab="Infiltration")); + parameter Real eps=1.0 "Coefficient of height" + annotation (Dialog(tab="Infiltration")); // Outer wall type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR == 1 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() + else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() + else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() + else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); //Inner wall Types - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() annotation(Dialog(tab = "Types")); - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple=if TIR + == 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() + else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else + if TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() + else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else + if TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if + TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if TIR == + 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() + else AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if + TIR == 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() + else AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if + TIR == 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() + else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else + if TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else if TMC + == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() + else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); // Floor to lower floor type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL = if TIR == 1 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() else if TIR == 2 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() else if TIR == 3 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() else AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() else if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() else AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL= + if withFloorHeating==true then AixLib.DataBase.Walls.Dummys.FloorForFloorHeating2Layers() + else if TIR == 1 + then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); // Ceiling to attic type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() else AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); // Saddle roof type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); //Window type - parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple Type_Win = if TIR == 1 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR == 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else if TIR == 3 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() annotation(Dialog(tab = "Types")); - parameter Modelica.SIunits.Volume room_V = room_length * room_width_long * room_height_long - room_length * (room_width_long - room_width_short) * (room_height_long - room_height_short) * 0.5; + parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR + == 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() + else if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long* + room_height_long - room_length*(room_width_long - room_width_short)*( + room_height_long - room_height_short)*0.5; equation - // Connect equations for dynamic ventilation - if withDynamicVentilation then - connect(thermOutside, dynamicVentilation.port_outside); - connect(dynamicVentilation.port_inside, airload.port); - end if; - //Connect floor for cases with or without floor heating - if withFloorHeating then - connect(floor_FH.port_b, thermFloor1) annotation(Line(points={{-7.6,-64.3}, - {-7.6,-53},{-3,-53}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(thermFloor, floor_FH.port_a) annotation(Line(points={{-30,-90},{ - -7.6,-90},{-7.6,-69.7001}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - else - connect(floor.port_outside, thermFloor) annotation(Line(points={{-24,-62.1}, - {-24,-74.5},{-30,-74.5},{-30,-90}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{-24,-58}, - {-24,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - end if; - connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation(Line(points={{-64.25, - 26.2667},{-80,26.2667},{-80,-50},{-99.5,-50}}, color = {0, 0, 127})); - connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) annotation(Line(points={{-65.5, - 31.5833},{-80,31.5833},{-80,30},{-99.5,30}}, color = {0, 0, 0})); - connect(inside_wall3.port_outside, thermInsideWall3) annotation(Line(points = {{20, -64.2}, {20, -74}, {30, -74}, {30, -90}}, color = {191, 0, 0})); - connect(thermInsideWall3, thermInsideWall3) annotation(Line(points = {{30, -90}, {30, -90}}, color = {191, 0, 0})); - connect(Ceiling.port_outside, thermCeiling) annotation(Line(points={{28,62.1}, - {28,72},{92,72},{92,50},{90,50}}, color = {191, 0, 0})); - connect(inside_wall2b.port_outside, thermInsideWall2b) annotation(Line(points={{64.15, - -20},{90,-20},{90,-30}}, color = {191, 0, 0})); - connect(inside_wall2a.port_outside, thermInsideWall2a) annotation(Line(points = {{64.15, 19}, {84, 19}, {84, 20}, {90, 20}, {90, 10}}, color = {191, 0, 0})); - connect(inner_wall1.port_outside, thermInsideWall1) annotation(Line(points={{-14, - 62.2},{-14,90},{-10,90}}, color = {191, 0, 0})); - connect(thermOutside, thermOutside) annotation(Line(points = {{-90, 90}, {-90, 84}, {-90, 84}, {-90, 90}}, color = {191, 0, 0})); - connect(airload.port, Tair.port) annotation(Line(points = {{1, -12}, {-6, -12}, {-6, -40}, {24, -40}, {24, -13}}, color = {191, 0, 0})); - connect(infiltrationRate.port_a, thermOutside) annotation(Line(points = {{-72, 56}, {-72, 56}, {-80, 56}, {-80, 82}, {-90, 82}, {-90, 90}}, color = {191, 0, 0})); - connect(outside_wall1.port_outside, thermOutside) annotation(Line(points = {{-64.25, 5}, {-80, 5}, {-80, 82}, {-90, 82}, {-90, 90}}, color = {191, 0, 0})); - connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation(Line(points={{72.6667, - 62.9},{72.6667,72},{74,72},{74,100}}, color = {255, 128, 0})); - connect(roof.port_outside, thermOutside) annotation(Line(points={{58,62.15},{ - 58,72},{-80,72},{-80,82},{-90,82},{-90,90}}, color = {191, 0, 0})); - connect(inside_wall2b.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{58,-20}, - {40,-20},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(inside_wall2a.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{58, 19}, {40, 19}, {40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{58,56}, - {58,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{28,58}, - {28,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(inner_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{-14,54}, - {-14,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(infiltrationRate.port_b, airload.port) annotation(Line(points = {{-54, 56}, {-40, 56}, {-40, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{-54, 5}, {-40, 5}, {-40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(inside_wall3.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{20, -56}, {20, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(starRoom, thermStar_Demux.star) annotation(Line(points = {{20, 20}, {20, 4}, {-14.2, 4}, {-14.2, -15.6}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(thermRoom, thermStar_Demux.therm) annotation(Line(points = {{-20, 20}, {-20, 3}, {-25.1, 3}, {-25.1, -15.9}}, color = {191, 0, 0})); - connect(thermStar_Demux.therm, airload.port) annotation(Line(points = {{-25.1, -15.9}, {-25.1, -12}, {1, -12}}, color = {191, 0, 0})); - connect(NaturalVentilation.InPort1, AirExchangePort) annotation(Line(points = {{-67, -46.4}, {-80, -46.4}, {-80, -9}, {-100, -9}}, color = {0, 0, 127})); - connect(NaturalVentilation.port_a, thermOutside) annotation(Line(points = {{-68, -40}, {-80, -40}, {-80, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(NaturalVentilation.port_b, airload.port) annotation(Line(points = {{-48, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(roof.WindSpeedPort, WindSpeedPort) annotation(Line(points={{69.7333, - 62.15},{69.7333,72},{-80,72},{-80,-50},{-99.5,-50}}, color = {0, 0, 127})); - annotation(Icon(graphics={ Rectangle(extent = {{-80, 80}, {80, 68}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{80, 60}, {68, -68}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-60, 68}, {68, -68}}, lineColor = {0, 0, 0}, fillColor = {47, 102, 173}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-80, 68}, {-60, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-60, -68}, {80, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-80, 50}, {-60, 0}}, lineColor = {0, 0, 0}, fillColor = {170, 213, 255}, - fillPattern = FillPattern.Solid, visible = withWindow3), Rectangle(extent = {{80, 68}, {68, 12}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, - fillPattern = FillPattern.Solid), Text(extent = {{-25, 6}, {25, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "Win3", origin = {-70, 25}, rotation = 90, visible = withWindow3), Line(points = {{38, 54}, {68, 54}}, color = {255, 255, 255}), Text(extent = {{-56, 60}, {62, 48}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "width"), Line(points = {{-46, 68}, {-46, 38}}, color = {255, 255, 255}), Line(points = {{-60, 54}, {-30, 54}}, color = {255, 255, 255}), Text(extent = {{-126, 6}, {0, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, origin = {-46, 64}, rotation = 90, textString = "length"), Line(points = {{-46, -42}, {-46, -68}}, color = {255, 255, 255}), Line(points = {{68, 12}, {54, 12}}, color = {255, 255, 255}), Text(extent = {{53, 6}, {-53, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, origin = {58, -27}, rotation = 90, textString = "length_b"), Line(points = {{58, -58}, {58, -68}}, color = {255, 255, 255}), Line(points = {{58, 12}, {58, 2}}, color = {255, 255, 255})}), Documentation(revisions = " + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line(points={{-64.25, + 38.2667},{-80,38.2667},{-80,-50},{-99.5,-50}}, color={0,0,127})); + connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) annotation ( + Line(points={{-65.5,43.5833},{-80,43.5833},{-80,30},{-99.5,30}}, color={0, + 0,0})); + connect(inside_wall3.port_outside, thermInsideWall3) annotation (Line(points= + {{20,-64.2},{20,-74},{30,-74},{30,-90}}, color={191,0,0})); + connect(thermInsideWall3, thermInsideWall3) + annotation (Line(points={{30,-90},{30,-90}}, color={191,0,0})); + connect(Ceiling.port_outside, thermCeiling) annotation (Line(points={{28,62.1}, + {28,72},{92,72},{92,50},{90,50}}, color={191,0,0})); + connect(inside_wall2b.port_outside, thermInsideWall2b) + annotation (Line(points={{64.15,-20},{90,-20},{90,-30}}, color={191,0,0})); + connect(inside_wall2a.port_outside, thermInsideWall2a) annotation (Line( + points={{64.15,19},{84,19},{84,20},{90,20},{90,10}}, color={191,0,0})); + connect(inner_wall1.port_outside, thermInsideWall1) + annotation (Line(points={{-14,62.2},{-14,90},{-10,90}}, color={191,0,0})); + connect(thermOutside, thermOutside) annotation (Line(points={{-90,90},{-90,84}, + {-90,84},{-90,90}}, color={191,0,0})); + connect(airload.port, Tair.port) annotation (Line(points={{1,-12},{-6,-12},{-6, + -40},{24,-40},{24,-13}}, color={191,0,0})); + connect(infiltrationRate.port_a, thermOutside) annotation (Line(points={{-72, + 56},{-72,56},{-80,56},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(outside_wall1.port_outside, thermOutside) annotation (Line(points={{-64.25, + 17},{-80,17},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{72.6667,62.9},{72.6667,72},{74,72},{74,100}}, color={255,128,0})); + connect(roof.port_outside, thermOutside) annotation (Line(points={{58,62.15}, + {58,72},{-80,72},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(inside_wall2b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{58,-20},{40,-20},{40,-40},{-20.1,-40},{-20.1, + -35.4}}, color={191,0,0})); + connect(inside_wall2a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{58,19},{40,19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation ( + Line(points={{58,56},{58,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{28,58},{28,40},{40,40},{40,-40},{-20.1,-40},{ + -20.1,-35.4}}, color={191,0,0})); + connect(inner_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-14,54},{-14,40},{40,40},{40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0})); + connect(infiltrationRate.port_b, airload.port) annotation (Line(points={{-54, + 56},{-40,56},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-54,17},{-40,17},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(inside_wall3.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{20,-56},{20,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(thermRoom, thermStar_Demux.therm) annotation (Line(points={{-20,20},{ + -20,3},{-25.1,3},{-25.1,-15.9}}, color={191,0,0})); + connect(thermStar_Demux.therm, airload.port) annotation (Line(points={{-25.1, + -15.9},{-25.1,-12},{1,-12}}, color={191,0,0})); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line(points= + {{-67,-34.4},{-80,-34.4},{-80,-9},{-100,-9}}, color={0,0,127})); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line(points={{-68, + -28},{-80,-28},{-80,90},{-90,90}}, color={191,0,0})); + connect(NaturalVentilation.port_b, airload.port) annotation (Line(points={{-48, + -28},{-40,-28},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line(points={{69.7333, + 62.15},{69.7333,72},{-80,72},{-80,-50},{-99.5,-50}}, color={0,0,127})); + connect(thermFloorHeatingDownHeatFlow, floor_FH.port_a) annotation (Line( + points={{-77,-79},{-77,-80},{-30,-80},{-30,-81.9999}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor_FH.port_b, thermFloor) annotation (Line( + points={{-30,-88},{-30,-94},{-6,-94}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(thermFloor, floor.port_outside) annotation (Line( + points={{-6,-94},{-8,-94},{-8,-66},{-22,-66},{-22,-62.1},{-24,-62.1}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-24,-58},{-24,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_outside, thermOutside) annotation (Line( + points={{-69.52,-48.6},{-78,-48.6},{-78,92},{-84,92},{-84,90},{-90,90}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_inside, airload.port) annotation (Line( + points={{-46.72,-48.6},{-2,-48.6},{-2,-46},{-2,-46},{-2,-12},{1,-12}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + annotation (Icon(graphics={ + Rectangle( + extent={{-80,80},{80,68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{80,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,68},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,68},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-60,0}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow3), + Rectangle( + extent={{80,68},{68,12}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,25}, + rotation=90, + visible=withWindow3), + Line(points={{38,54},{68,54}}, color={255,255,255}), + Text( + extent={{-56,60},{62,48}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line(points={{-46,68},{-46,38}}, color={255,255,255}), + Line(points={{-60,54},{-30,54}}, color={255,255,255}), + Text( + extent={{-126,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,64}, + rotation=90, + textString="length"), + Line(points={{-46,-42},{-46,-68}}, color={255,255,255}), + Line(points={{68,12},{54,12}}, color={255,255,255}), + Text( + extent={{53,6},{-53,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-27}, + rotation=90, + textString="length_b"), + Line(points={{58,-58},{58,-68}}, color={255,255,255}), + Line(points={{58,12},{58,2}}, color={255,255,255})}), Documentation( + revisions="Model for a room with 1 outer wall, 2 inner walls load, 2 inner walls simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.
Model for a room with 2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.
The following figure presents the room's layout:
- ")); +Ground temperature
+The ground temperature can be coupled to any desired prescriped temperature. Anyway, suitable ground temperatures depending on locations in Germany are listed as Θ'_m,e in the comprehensive table 1 in "Beiblatt 1" in the norm DIN EN 12831.
+Or a ground temperature can be chosen according to a TRY region, which is listed below: if ...
TRY_Region == 1 then 282.15 K
TRY_Region == 2 then 281.55 K
TRY_Region == 3 then 281.65 K
TRY_Region == 4 then 282.65 K
TRY_Region == 5 then 281.25 K
TRY_Region == 6 then 279.95 K
TRY_Region == 7 then 281.95 K
TRY_Region == 8 then 279.95 K
TRY_Region == 9 then 281.05 K
TRY_Region == 10 then 276.15 K
TRY_Region == 11 then 279.45 K
TRY_Region == 12 then 283.35 K
TRY_Region == 13 then 281.05 K
TRY_Region == 14 then 281.05 K
TRY_Region == 15 then 279.95 K
+")); end Ow2IwL1IwS1Gr1Uf1; diff --git a/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL1IwS1Lf1At1Ro1.mo b/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL1IwS1Lf1At1Ro1.mo index d2ba17d965..4666380619 100644 --- a/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL1IwS1Lf1At1Ro1.mo +++ b/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL1IwS1Lf1At1Ro1.mo @@ -1,187 +1,654 @@ -within AixLib.Building.HighOrder.Rooms.OFD; +within AixLib.Building.HighOrder.Rooms.OFD; model Ow2IwL1IwS1Lf1At1Ro1 "2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" import AixLib; ///////// construction parameters - parameter Integer TMC = 1 "Thermal Mass Class" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "Heavy", choice = 2 "Medium", choice = 3 "Light", radioButtons = true)); - parameter Integer TIR = 1 "Thermal Insulation Regulation" annotation(Dialog(groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/OW2_1IWl_1IWs_1Pa_1At1Ro.png", group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 - "EnEV_2009", choice = 2 - "EnEV_2002", choice = 3 - "WSchV_1995", choice = 4 - "WSchV_1984", radioButtons = true)); - parameter Boolean withFloorHeating = false - "If true, that floor has different connectors" annotation(Dialog(group = "Construction parameters"), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature T0_air = 295.11 "Air" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_OW1 = 295.15 "OW1" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_OW2 = 295.15 "OW2" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW1 = 295.15 "IW1" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW2 = 295.15 "IW2" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_CE = 295.10 "Ceiling" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_RO = 295.15 "Roof" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_FL = 295.12 "Floor" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); + parameter Integer TMC=1 "Thermal Mass Class" annotation (Dialog( + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "Heavy", + choice=2 "Medium", + choice=3 "Light", + radioButtons=true)); + parameter Integer TIR=1 "Thermal Insulation Regulation" annotation (Dialog( + groupImage="modelica://AixLib/Resources/Images/Building/HighOrder/OW2_1IWl_1IWs_1Pa_1At1Ro.png", + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "EnEV_2009", + choice=2 "EnEV_2002", + choice=3 "WSchV_1995", + choice=4 "WSchV_1984", + radioButtons=true)); + + parameter Boolean withFloorHeating=false + "If true, that floor has different connectors" annotation (Dialog(group="Construction parameters"), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW1=295.15 "IW1" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); //////////room geometry - parameter Modelica.SIunits.Length room_length = 2 "length " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_long = 2 "w1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_short = 2 "w2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_long = 2 "h1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_short = 2 "h2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation(Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_length=2 "length " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length roof_width=2 "wRO" + annotation (Dialog(group="Dimensions", descriptionLabel=true)); // Outer walls properties - parameter Real solar_absorptance_OW = 0.25 "Solar absoptance outer walls " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Real solar_absorptance_RO = 0.25 "Solar absoptance roof " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Integer ModelConvOW = 1 "Heat Convection Model" annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 - "DIN 6946", choice = 2 - "ASHRAE Fundamentals", choice = 3 - "Custom alpha", radioButtons = true)); + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Integer ModelConvOW=1 "Heat Convection Model" annotation (Dialog( + group="Outer wall properties", + compact=true, + descriptionLabel=true), choices( + choice=1 "DIN 6946", + choice=2 "ASHRAE Fundamentals", + choice=3 "Custom alpha", + radioButtons=true)); // Windows and Doors - parameter Boolean withWindow2 = true "Window 2" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Area windowarea_OW2 = 0 "Window area " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow2)); - parameter Boolean withWindow3 = true "Window 3 " annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Area windowarea_RO = 0 "Window area" annotation(Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow3)); - parameter Boolean withDoor2 = true "Door 2" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Length door_width_OD2 = 0 "width " annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); - parameter Modelica.SIunits.Length door_height_OD2 = 0 "height " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + parameter Boolean withWindow2=true "Window 2" annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area " annotation ( + Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withWindow2)); + parameter Boolean withWindow3=true "Window 3 " annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation ( + Dialog( + group="Windows and Doors", + naturalWidth=10, + descriptionLabel=true, + enable=withWindow3)); + parameter Boolean withDoor2=true "Door 2" annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation ( + Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true, + enable=withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation ( + Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withDoor2)); + // Sunblind + parameter Boolean use_sunblind = false + "Will sunblind become active automatically?" + annotation(Dialog(group = "Sunblind")); + parameter Real ratioSunblind(min=0.0, max=1.0) = 0.8 + "Sunblind factor" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Irradiance solIrrThreshold(min=0.0) = 350 + "Threshold for global solar irradiation on this surface to enable sunblinding (see also TOutAirLimit)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Temperature TOutAirLimit = 293.15 + "Temperature at which sunblind closes (see also solIrrThreshold)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); // Dynamic Ventilation - parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 - "Outside temperature at which the heating activates" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Real Max_VR = 10 "Maximal ventilation rate" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 - "Difference to set temperature" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Boolean withDynamicVentilation=false "Dynamic ventilation" + annotation (Dialog(group="Dynamic ventilation", descriptionLabel=true), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit=288.15 + "Outside temperature at which the heating activates" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Real Max_VR=10 "Maximal ventilation rate" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset=2 + "Difference to set temperature" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset=295.15 "Tset" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); //Door properties - AixLib.Building.Components.Walls.Wall outside_wall1(solar_absorptance = solar_absorptance_OW, T0 = T0_OW1, wall_length = room_length, wall_height = room_height_short, withWindow = false, windowarea = 0, withDoor = false, door_height = 0, door_width = 0, WallType = Type_OW) annotation(Placement(transformation(extent = {{-64, -26}, {-54, 32}}))); - AixLib.Building.Components.Walls.Wall outside_wall2(solar_absorptance = solar_absorptance_OW, windowarea = windowarea_OW2, T0 = T0_OW2, door_height = door_height_OD2, door_width = door_width_OD2, withWindow = withWindow2, withDoor = withDoor2, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), WindowType = Type_Win, WallType = Type_OW, ISOrientation = 1, U_door = U_door_OD2, eps_door = eps_door_OD2) annotation(Placement(transformation(origin = {-29, 59}, extent = {{-5.00001, -29}, {5.00001, 29}}, rotation = 270))); - AixLib.Building.Components.Walls.Wall inside_wall1(T0 = T0_IW1, outside = false, WallType = Type_IWload, wall_length = room_length, wall_height = room_height_long, withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {61, 4.00001}, extent = {{-4.99999, -30}, {5, 30}}, rotation = 180))); - AixLib.Building.Components.Walls.Wall inside_wall2(T0 = T0_IW2, outside = false, WallType = Type_IWsimple, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {32, -59}, extent = {{-4.99998, -28}, {4.99998, 28}}, rotation = 90))); - AixLib.Building.Components.DryAir.Airload airload(V = room_V, T(start = T0_air)) annotation(Placement(transformation(extent = {{0, -20}, {20, 0}}))); - AixLib.Building.Components.Walls.Wall Ceiling(T0 = T0_CE, outside = false, WallType = Type_CE, wall_length = room_length, wall_height = room_width_short, withWindow = false, withDoor = false, ISOrientation = 3) annotation(Placement(transformation(origin = {22, 60}, extent = {{1.99999, -10}, {-1.99998, 10}}, rotation = 90))); - AixLib.Building.Components.Walls.Wall floor(T0 = T0_FL, outside = false, WallType = Type_FL, wall_length = room_length, wall_height = room_width_long, withWindow = false, withDoor = false, ISOrientation = 2) if withFloorHeating == false annotation(Placement(transformation(origin = {-27, -60}, extent = {{-2.00002, -11}, {2.00001, 11}}, rotation = 90))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 annotation(Placement(transformation(extent = {{20, -100}, {40, -80}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 annotation(Placement(transformation(extent = {{80, 0}, {100, 20}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside annotation(Placement(transformation(extent = {{-100, 80}, {-80, 100}}))); - Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation(Placement(transformation(extent = {{-109.5, -50}, {-89.5, -30}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation(Placement(transformation(extent = {{-109.5, 20}, {-89.5, 40}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation(Placement(transformation(origin = {44.5, 101}, extent = {{-10, -10}, {10, 10}}, rotation = 270))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling annotation(Placement(transformation(extent = {{80, 60}, {100, 80}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation(Placement(transformation(extent = {{-30, 10}, {-10, 30}}), iconTransformation(extent = {{-30, 10}, {-10, 30}}))); - Utilities.Interfaces.Star starRoom annotation(Placement(transformation(extent = {{10, 10}, {30, 30}}), iconTransformation(extent = {{10, 10}, {30, 30}}))); - Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation(Placement(transformation(extent = {{-13, -13}, {13, 13}}, rotation = 270, origin = {-20, 100}), iconTransformation(extent = {{-10.5, -10.5}, {10.5, 10.5}}, rotation = 270, origin = {-20.5, 98.5}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation(Placement(transformation(extent = {{-40, -100}, {-20, -80}}))); - AixLib.Building.Components.Walls.Wall roof(T0 = T0_RO, solar_absorptance = solar_absorptance_RO, wall_length = room_length, withDoor = false, door_height = 0, door_width = 0, wall_height = roof_width, withWindow = withWindow3, windowarea = windowarea_RO, WallType = Type_RO, WindowType = Type_Win) annotation(Placement(transformation(origin = {55, 59}, extent = {{-2.99995, -17}, {2.99997, 17}}, rotation = 270))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {74, 100}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair annotation(Placement(transformation(extent = {{24, -20}, {38, -6}}))); - AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate(room_V = room_V, n50 = n50, e = e, eps = eps) annotation(Placement(transformation(extent = {{-72, 36}, {-54, 44}}))); - AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation(HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset) if withDynamicVentilation annotation(Placement(transformation(extent = {{-70, -68}, {-46, -56}}))); - Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation(Placement(transformation(extent = {{-10, 8}, {10, -8}}, rotation = 90, origin = {-20, -26}))); - AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V = room_V) annotation(Placement(transformation(extent = {{-68, -50}, {-48, -30}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if withFloorHeating - "thermal connector for floor heating" annotation(Placement(transformation(extent = {{-8, -58}, {2, -48}}), iconTransformation(extent = {{-32, -34}, {-12, -14}}))); - AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH(l = room_length, n = Type_FL.n, d = Type_FL.d, rho = Type_FL.rho, lambda = Type_FL.lambda, c = Type_FL.c, T0 = T0_FL, h = room_width_long) if withFloorHeating - "floor component if using Floor heating" annotation(Placement(transformation(origin = {-6, -67}, extent = {{-3.00007, 16}, {3, -16}}, rotation = 90))); + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) + annotation (Placement(transformation(extent={{-66,-20},{-56,38}}))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + withWindow=withWindow2, + withDoor=withDoor2, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + WindowType=Type_Win, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + WallType=Type_OW, + ISOrientation=1, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={-29,59}, + extent={{-5.00001,-29},{5.00001,29}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1( + T0=T0_IW1, + outside=false, + WallType=Type_IWload, + wall_length=room_length, + wall_height=room_height_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={61,4.00001}, + extent={{-4.99999,-30},{5,30}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={32,-59}, + extent={{-4.99998,-28},{4.99998,28}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start=T0_air)) + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={22,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation (Placement( + transformation( + origin={-27,-60}, + extent={{-2.00002,-11},{2.00001,11}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1 + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-50},{-89.5,-30}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 + annotation (Placement(transformation(extent={{-109.5,20},{-89.5,40}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation (Placement( + transformation( + origin={44.5,101}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,60},{100,80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), iconTransformation( + extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement(transformation( + extent={{10,10},{30,30}}), iconTransformation(extent={{10,10},{30,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation (Placement( + transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-20,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-20.5,98.5}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win) annotation (Placement(transformation( + origin={55,59}, + extent={{-2.99995,-17},{2.99997,17}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{24,-20},{38,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-74,42},{-56,50}}))); + AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation + annotation (Placement(transformation(extent={{-72,-58},{-48,-46}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation ( + Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V=room_V) + annotation (Placement(transformation(extent={{-70,-42},{-50,-22}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + A=room_width_long*room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-30,-85}, + extent={{3.00007,16},{-3,-16}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation ( + Placement(transformation(extent={{-16,-104},{4,-84}}), iconTransformation( + extent={{-16,-104},{4,-84}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + thermFloorHeatingDownHeatFlow if withFloorHeating + "Thermal connector for heat flow of floor heating going downwards through the wall/floor/ceiling" + annotation (Placement(transformation(extent={{-84,-86},{-70,-72}}), + iconTransformation(extent={{-56,-92},{-36,-72}}))); protected - parameter Real U_door_OD2 = if TIR == 1 then 1.8 else 2.9 "U-value" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); - parameter Real eps_door_OD2 = 0.95 "eps" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=if TIR == 1 then 1.8 else 2.9 "U-value" annotation ( + Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true, + enable=withDoor2)); + parameter Real eps_door_OD2=0.95 "eps" annotation (Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withDoor2)); // Infiltration rate - parameter Real n50(unit = "h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR == 3 then 4 else 6 - "Air exchange rate at 50 Pa pressure difference" annotation(Dialog(tab = "Infiltration")); - parameter Real e = 0.03 "Coefficient of windshield" annotation(Dialog(tab = "Infiltration")); - parameter Real eps = 1.0 "Coefficient of height" annotation(Dialog(tab = "Infiltration")); + parameter Real n50(unit="h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR == + 3 then 4 else 6 "Air exchange rate at 50 Pa pressure difference" + annotation (Dialog(tab="Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" + annotation (Dialog(tab="Infiltration")); + parameter Real eps=1.0 "Coefficient of height" + annotation (Dialog(tab="Infiltration")); // Outer wall type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR == 1 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() + else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() + else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() + else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == 1 + then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC == 2 + then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); //Inner wall Types - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() annotation(Dialog(tab = "Types")); - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple=if TIR == + 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if + TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if TIR == 1 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); // Floor to lower floor type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL = if TIR == 1 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() else if TIR == 2 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() else if TIR == 3 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() else AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() else if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() else AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL= + if withFloorHeating==true then AixLib.DataBase.Walls.Dummys.FloorForFloorHeating2Layers() + else if TIR == 1 + then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); // Ceiling to attic type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() else AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE=if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); // Saddle roof type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); //Window type - parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple Type_Win = if TIR == 1 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR == 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else if TIR == 3 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() annotation(Dialog(tab = "Types")); - parameter Modelica.SIunits.Volume room_V = room_length * room_width_long * room_height_long - room_length * (room_width_long - room_width_short) * (room_height_long - room_height_short) * 0.5; + parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR == + 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long* + room_height_long - room_length*(room_width_long - room_width_short)*( + room_height_long - room_height_short)*0.5; equation - // Connect equations for dynamic ventilation - if withDynamicVentilation then - connect(thermOutside, dynamicVentilation.port_outside); - connect(dynamicVentilation.port_inside, airload.port); - end if; - //Connect floor for cases with or without floor heating - if withFloorHeating then - else - connect(floor.port_outside, thermFloor) annotation(Line(points={{-27,-62.1}, - {-27,-82},{-30,-82},{-30,-90}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{-27,-58}, - {-27,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - end if; - connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation(Line(points={{-64.25, - 24.2667},{-80,24.2667},{-80,-40},{-99.5,-40}}, color = {0, 0, 127})); - connect(inside_wall2.port_outside, thermInsideWall2) annotation(Line(points={{32, - -64.25},{32,-72},{30,-72},{30,-90}}, color = {191, 0, 0})); - connect(thermInsideWall2, thermInsideWall2) annotation(Line(points = {{30, -90}, {30, -90}}, color = {191, 0, 0})); - connect(inside_wall1.port_outside, thermInsideWall1) annotation(Line(points={{66.25, - 4.00001},{90,4.00001},{90,10}}, color = {191, 0, 0})); - connect(Ceiling.port_outside, thermCeiling) annotation(Line(points={{22,62.1}, - {22,70},{90,70}}, color = {191, 0, 0})); - connect(outside_wall2.WindSpeedPort, WindSpeedPort) annotation(Line(points={{ - -7.73333,64.25},{-7.73333,68},{-7.73333,70},{-80,70},{-80,-40},{-99.5, - -40}}, color = {0, 0, 127})); - connect(airload.port, Tair.port) annotation(Line(points = {{1, -12}, {-6, -12}, {-6, -40}, {24, -40}, {24, -13}}, color = {191, 0, 0})); - connect(thermOutside, infiltrationRate.port_a) annotation(Line(points = {{-90, 90}, {-90, 80}, {-80, 80}, {-80, 40}, {-72, 40}, {-72, 40}}, color = {191, 0, 0})); - connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) annotation(Line(points={{-99.5, - 30},{-65.5,30},{-65.5,29.5833}}, color = {255, 128, 0})); - connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) annotation(Line(points={{ - -2.41667,65.5},{-2.41667,70},{44.5,70},{44.5,92},{44.5,101}}, color = {255, 128, 0})); - connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation(Line(points={{70.5833, - 62.8999},{70.5833,70},{74,70},{74,100}}, color = {255, 128, 0})); - connect(roof.port_outside, thermOutside) annotation(Line(points={{55,62.1499}, - {55,70},{-80,70},{-80,80},{-90,80},{-90,90}}, color = {191, 0, 0})); - connect(outside_wall1.port_outside, thermOutside) annotation(Line(points = {{-64.25, 3}, {-70, 2}, {-80, 2}, {-80, 80}, {-90, 80}, {-90, 90}}, color = {191, 0, 0})); - connect(outside_wall2.port_outside, thermOutside) annotation(Line(points={{-29, - 64.25},{-29,70},{-80,70},{-80,80},{-90,80},{-90,90}}, color = {191, 0, 0})); - connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{-54, 3}, {-40, 3}, {-40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{-29,54}, - {-29,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{22,58}, - {22,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{55,56}, - {55,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(starRoom, thermStar_Demux.star) annotation(Line(points = {{20, 20}, {20, 4}, {-14.2, 4}, {-14.2, -15.6}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(thermStar_Demux.therm, thermRoom) annotation(Line(points = {{-25.1, -15.9}, {-25.1, 6}, {-20, 6}, {-20, 20}}, color = {191, 0, 0})); - connect(thermStar_Demux.therm, airload.port) annotation(Line(points = {{-25.1, -15.9}, {-25.1, -12}, {1, -12}}, color = {191, 0, 0})); - connect(inside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{56, 4.00001}, {40, 4.00001}, {40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{32,-54}, - {32,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(infiltrationRate.port_b, airload.port) annotation(Line(points = {{-54, 40}, {-40, 40}, {-40, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(NaturalVentilation.InPort1, AirExchangePort) annotation(Line(points = {{-67, -46.4}, {-80, -46.4}, {-80, 70}, {-20, 70}, {-20, 100}}, color = {0, 0, 127})); - connect(NaturalVentilation.port_a, thermOutside) annotation(Line(points = {{-68, -40}, {-80, -40}, {-80, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(NaturalVentilation.port_b, airload.port) annotation(Line(points = {{-48, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(roof.WindSpeedPort, WindSpeedPort) annotation(Line(points={{67.4667, - 62.1499},{67.4667,70},{-80,70},{-80,-40},{-99.5,-40}}, color = {0, 0, 127})); - connect(floor_FH.port_b, thermFloor1) annotation(Line(points={{-7.6,-64.3},{ - -7.6,-53},{-3,-53}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(floor_FH.port_a, thermFloor) annotation(Line(points={{-7.6,-69.7001}, - {-7.6,-90},{-30,-90}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - annotation(Icon(graphics={ Rectangle(extent = {{-80, 80}, {80, 60}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{0, 80}, {-50, 60}}, lineColor = {0, 0, 0}, fillColor = {170, 213, 255}, - fillPattern = FillPattern.Solid, visible = withWindow2), Rectangle(extent = {{6, 64}, {-6, -64}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid, origin = {74, -4}), Rectangle(extent = {{-60, 60}, {68, -68}}, lineColor = {0, 0, 0}, fillColor = {47, 102, 173}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-80, 60}, {-60, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-60, -68}, {80, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{20, 80}, {40, 60}}, lineColor = {0, 0, 0}, fillColor = {127, 127, 0}, - fillPattern = FillPattern.Solid, visible = withDoor2), Text(extent = {{20, 74}, {40, 66}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "D2", visible = withDoor2), Text(extent = {{-50, 76}, {0, 64}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "Win2", visible = withWindow2), Text(extent = {{-56, 52}, {64, 40}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "width"), Line(points = {{38, 46}, {68, 46}}, color = {255, 255, 255}), Line(points = {{-60, 46}, {-30, 46}}, color = {255, 255, 255}), Text(extent = {{-120, 6}, {0, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, origin = {-46, 56}, rotation = 90, textString = "length"), Line(points = {{-46, 60}, {-46, 30}}, color = {255, 255, 255}), Line(points = {{-46, -42}, {-46, -68}}, color = {255, 255, 255}), Rectangle(extent = {{-80, 30}, {-60, -20}}, lineColor = {0, 0, 0}, fillColor = {170, 213, 255}, - fillPattern = FillPattern.Solid, visible = withWindow3), Text(extent = {{-25, 6}, {25, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "Win3", origin = {-70, 5}, rotation = 90, visible = withWindow3)}), Documentation(revisions = " + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line(points={{-66.25, + 30.2667},{-80,30.2667},{-80,-40},{-99.5,-40}}, color={0,0,127})); + connect(inside_wall2.port_outside, thermInsideWall2) annotation (Line(points={{32, + -64.25},{32,-72},{30,-72},{30,-90}}, color={191,0,0})); + connect(thermInsideWall2, thermInsideWall2) + annotation (Line(points={{30,-90},{30,-90}}, color={191,0,0})); + connect(inside_wall1.port_outside, thermInsideWall1) annotation (Line(points={{66.25, + 4.00001},{90,4.00001},{90,10}}, color={191,0,0})); + connect(Ceiling.port_outside, thermCeiling) + annotation (Line(points={{22,62.1},{22,70},{90,70}}, color={191,0,0})); + connect(outside_wall2.WindSpeedPort, WindSpeedPort) annotation (Line(points={{ + -7.73333,64.25},{-7.73333,64.25},{-7.73333,70},{-80,70},{-80,-40},{ + -99.5,-40}}, + color={0,0,127})); + connect(airload.port, Tair.port) annotation (Line(points={{1,-12},{-6,-12},{-6, + -40},{24,-40},{24,-13}}, color={191,0,0})); + connect(thermOutside, infiltrationRate.port_a) annotation (Line(points={{-90,90}, + {-90,80},{-80,80},{-80,40},{-74,40},{-74,46}}, color={191,0,0})); + connect(SolarRadiationPort_OW1, outside_wall1.SolarRadiationPort) annotation ( + Line(points={{-99.5,30},{-67.5,30},{-67.5,35.5833}}, color={255,128,0})); + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) annotation ( + Line(points={{-2.41667,65.5},{-2.41667,70},{44.5,70},{44.5,92},{44.5,101}}, + color={255,128,0})); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{70.5833,62.8999},{70.5833,70},{74,70},{74,100}}, color={255,128, + 0})); + connect(roof.port_outside, thermOutside) annotation (Line(points={{55,62.1499}, + {55,70},{-80,70},{-80,80},{-90,80},{-90,90}}, color={191,0,0})); + connect(outside_wall1.port_outside, thermOutside) annotation (Line(points={{-66.25, + 9},{-66.25,7},{-80,7},{-80,80},{-90,80},{-90,90}}, color={191,0,0})); + connect(outside_wall2.port_outside, thermOutside) annotation (Line(points={{-29, + 64.25},{-29,70},{-80,70},{-80,80},{-90,80},{-90,90}}, color={191,0,0})); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-56,9},{-40,9},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-29,54},{-29,40},{-40,40},{-40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0})); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{22,58},{22,40},{-40,40},{-40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0})); + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation ( + Line(points={{55,56},{55,40},{-40,40},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(thermStar_Demux.therm, thermRoom) annotation (Line(points={{-25.1,-15.9}, + {-25.1,6},{-20,6},{-20,20}}, color={191,0,0})); + connect(thermStar_Demux.therm, airload.port) annotation (Line(points={{-25.1,-15.9}, + {-25.1,-12},{1,-12}}, color={191,0,0})); + connect(inside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{56,4.00001},{40,4.00001},{40,-40},{-20.1,-40},{-20.1, + -35.4}}, color={191,0,0})); + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{32,-54},{32,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(infiltrationRate.port_b, airload.port) annotation (Line(points={{-56,46}, + {-40,46},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line(points={ + {-69,-38.4},{-80,-38.4},{-80,70},{-20,70},{-20,100}}, color={0,0,127})); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line(points={{-70, + -32},{-80,-32},{-80,90},{-90,90}}, color={191,0,0})); + connect(NaturalVentilation.port_b, airload.port) annotation (Line(points={{-50, + -32},{-40,-32},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line(points={{67.4667, + 62.1499},{67.4667,70},{-80,70},{-80,-40},{-99.5,-40}}, + color={0,0,127})); + connect(thermFloorHeatingDownHeatFlow, floor_FH.port_a) annotation (Line( + points={{-77,-79},{-77,-80},{-30,-80},{-30,-81.9999}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor_FH.port_b, thermFloor) annotation (Line( + points={{-30,-88},{-30,-94},{-6,-94}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(thermFloor, floor.port_outside) annotation (Line( + points={{-6,-94},{-8,-94},{-8,-66},{-22,-66},{-22,-62.1},{-27,-62.1}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-27,-58},{-27,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_inside, airload.port) annotation (Line( + points={{-48.72,-52.6},{-2,-52.6},{-2,-48},{-2,-48},{-2,-12},{1,-12}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_outside, thermOutside) annotation (Line( + points={{-71.52,-52.6},{-78,-52.6},{-78,92},{-84,92},{-84,90},{-90,90}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + annotation (Icon(graphics={ + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,80},{-50,60}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow2), + Rectangle( + extent={{6,64},{-6,-64}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + origin={74,-4}), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor2), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D2", + visible=withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible=withWindow2), + Text( + extent={{-56,52},{64,40}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line(points={{38,46},{68,46}}, color={255,255,255}), + Line(points={{-60,46},{-30,46}}, color={255,255,255}), + Text( + extent={{-120,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,56}, + rotation=90, + textString="length"), + Line(points={{-46,60},{-46,30}}, color={255,255,255}), + Line(points={{-46,-42},{-46,-68}}, color={255,255,255}), + Rectangle( + extent={{-80,30},{-60,-20}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow3), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,5}, + rotation=90, + visible=withWindow3)}), Documentation(revisions="Model for a room with 2 outer walls, 1 inner wall load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.
Model for a room with 2 outer walls, 2 inner walls load towards two different rooms but with the same orientation, 1 inner wall simple, 1 floor towards ground, 1 ceiling towards upper floor.
The following figure presents the room's layout:
- ")); +Ground temperature
+The ground temperature can be coupled to any desired prescriped temperature. Anyway, suitable ground temperatures depending on locations in Germany are listed as Θ'_m,e in the comprehensive table 1 in "Beiblatt 1" in the norm DIN EN 12831.
+Or a ground temperature can be chosen according to a TRY region, which is listed below: if ...
TRY_Region == 1 then 282.15 K
TRY_Region == 2 then 281.55 K
TRY_Region == 3 then 281.65 K
TRY_Region == 4 then 282.65 K
TRY_Region == 5 then 281.25 K
TRY_Region == 6 then 279.95 K
TRY_Region == 7 then 281.95 K
TRY_Region == 8 then 279.95 K
TRY_Region == 9 then 281.05 K
TRY_Region == 10 then 276.15 K
TRY_Region == 11 then 279.45 K
TRY_Region == 12 then 283.35 K
TRY_Region == 13 then 281.05 K
TRY_Region == 14 then 281.05 K
TRY_Region == 15 then 279.95 K
+")); end Ow2IwL2IwS1Gr1Uf1; diff --git a/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL2IwS1Lf1At1Ro1.mo b/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL2IwS1Lf1At1Ro1.mo index 5bedd689b0..afdd0d946b 100644 --- a/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL2IwS1Lf1At1Ro1.mo +++ b/AixLib/Building/HighOrder/Rooms/OFD/Ow2IwL2IwS1Lf1At1Ro1.mo @@ -1,189 +1,694 @@ -within AixLib.Building.HighOrder.Rooms.OFD; +within AixLib.Building.HighOrder.Rooms.OFD; model Ow2IwL2IwS1Lf1At1Ro1 "2 outer walls, 2 inner walls load, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside" import AixLib; ///////// construction parameters - parameter Integer TMC = 1 "Thermal Mass Class" annotation(Dialog(group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 "Heavy", choice = 2 "Medium", choice = 3 "Light", radioButtons = true)); - parameter Integer TIR = 1 "Thermal Insulation Regulation" annotation(Dialog(groupImage = "modelica://AixLib/Resources/Images/Building/HighOrder/OW2_2IWl_1IWs_1Pa_1At1Ro.png", group = "Construction parameters", compact = true, descriptionLabel = true), choices(choice = 1 - "EnEV_2009", choice = 2 - "EnEV_2002", choice = 3 - "WSchV_1995", choice = 4 - "WSchV_1984", radioButtons = true)); - parameter Boolean withFloorHeating = false - "If true, that floor has different connectors" annotation(Dialog(group = "Construction parameters"), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature T0_air = 295.11 "Air" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_OW1 = 295.15 "OW1" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_OW2 = 295.15 "OW2" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW1a = 295.15 "IW1a" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW1b = 295.15 "IW1b" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_IW2 = 295.15 "IW2" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_CE = 295.10 "Ceiling" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_RO = 295.15 "Roof" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); - parameter Modelica.SIunits.Temperature T0_FL = 295.12 "Floor" annotation(Dialog(tab = "Initial temperatures", descriptionLabel = true)); + parameter Integer TMC=1 "Thermal Mass Class" annotation (Dialog( + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "Heavy", + choice=2 "Medium", + choice=3 "Light", + radioButtons=true)); + parameter Integer TIR=1 "Thermal Insulation Regulation" annotation (Dialog( + groupImage="modelica://AixLib/Resources/Images/Building/HighOrder/OW2_2IWl_1IWs_1Pa_1At1Ro.png", + group="Construction parameters", + compact=true, + descriptionLabel=true), choices( + choice=1 "EnEV_2009", + choice=2 "EnEV_2002", + choice=3 "WSchV_1995", + choice=4 "WSchV_1984", + radioButtons=true)); + + parameter Boolean withFloorHeating=false + "If true, that floor has different connectors" annotation (Dialog(group="Construction parameters"), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature T0_air=295.11 "Air" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_OW1=295.15 "OW1" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_OW2=295.15 "OW2" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW1a=295.15 "IW1a" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW1b=295.15 "IW1b" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_IW2=295.15 "IW2" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_CE=295.10 "Ceiling" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_RO=295.15 "Roof" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); + parameter Modelica.SIunits.Temperature T0_FL=295.12 "Floor" + annotation (Dialog(tab="Initial temperatures", descriptionLabel=true)); //////////room geometry - parameter Modelica.SIunits.Length room_length = 2 "length " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_lengthb = 2 "length_b " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_long = 2 "w1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length room_width_short = 2 "w2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_long = 2 "h1 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Height room_height_short = 2 "h2 " annotation(Dialog(group = "Dimensions", descriptionLabel = true)); - parameter Modelica.SIunits.Length roof_width = 2 "wRO" annotation(Dialog(group = "Dimensions", descriptionLabel = true)); + parameter Modelica.SIunits.Length room_length=2 "length " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_lengthb=2 "length_b " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_long=2 "w1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length room_width_short=2 "w2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_long=2 "h1 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Height room_height_short=2 "h2 " + annotation (Dialog(group="Dimensions", descriptionLabel=true)); + parameter Modelica.SIunits.Length roof_width=2 "wRO" + annotation (Dialog(group="Dimensions", descriptionLabel=true)); // Outer walls properties - parameter Real solar_absorptance_OW = 0.25 "Solar absoptance outer walls " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Real solar_absorptance_RO = 0.25 "Solar absoptance roof " annotation(Dialog(group = "Outer wall properties", descriptionLabel = true)); - parameter Integer ModelConvOW = 1 "Heat Convection Model" annotation(Dialog(group = "Outer wall properties", compact = true, descriptionLabel = true), choices(choice = 1 - "DIN 6946", choice = 2 - "ASHRAE Fundamentals", choice = 3 - "Custom alpha", radioButtons = true)); + parameter Real solar_absorptance_OW=0.25 "Solar absoptance outer walls " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Real solar_absorptance_RO=0.25 "Solar absoptance roof " + annotation (Dialog(group="Outer wall properties", descriptionLabel=true)); + parameter Integer ModelConvOW=1 "Heat Convection Model" annotation (Dialog( + group="Outer wall properties", + compact=true, + descriptionLabel=true), choices( + choice=1 "DIN 6946", + choice=2 "ASHRAE Fundamentals", + choice=3 "Custom alpha", + radioButtons=true)); // Windows and Doors - parameter Boolean withWindow2 = true "Window 2" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Area windowarea_OW2 = 0 "Window area " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withWindow2)); - parameter Boolean withWindow3 = true "Window 3 " annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Area windowarea_RO = 0 "Window area" annotation(Dialog(group = "Windows and Doors", naturalWidth = 10, descriptionLabel = true, enable = withWindow3)); - parameter Boolean withDoor2 = true "Door 2" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Length door_width_OD2 = 0 "width " annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); - parameter Modelica.SIunits.Length door_height_OD2 = 0 "height " annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + parameter Boolean withWindow2=true "Window 2" annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_OW2=0 "Window area " annotation ( + Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withWindow2)); + parameter Boolean withWindow3=true "Window 3 " annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Area windowarea_RO=0 "Window area" annotation ( + Dialog( + group="Windows and Doors", + naturalWidth=10, + descriptionLabel=true, + enable=withWindow3)); + parameter Boolean withDoor2=true "Door 2" annotation (Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true), choices(checkBox=true)); + parameter Modelica.SIunits.Length door_width_OD2=0 "width " annotation ( + Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true, + enable=withDoor2)); + parameter Modelica.SIunits.Length door_height_OD2=0 "height " annotation ( + Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withDoor2)); + // Sunblind + parameter Boolean use_sunblind = false + "Will sunblind become active automatically?" + annotation(Dialog(group = "Sunblind")); + parameter Real ratioSunblind(min=0.0, max=1.0) = 0.8 + "Sunblind factor" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Irradiance solIrrThreshold(min=0.0) = 350 + "Threshold for global solar irradiation on this surface to enable sunblinding (see also TOutAirLimit)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); + parameter Modelica.SIunits.Temperature TOutAirLimit = 293.15 + "Temperature at which sunblind closes (see also solIrrThreshold)" + annotation(Dialog(group = "Sunblind", enable=use_sunblind)); // Dynamic Ventilation - parameter Boolean withDynamicVentilation = false "Dynamic ventilation" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true), choices(checkBox = true)); - parameter Modelica.SIunits.Temperature HeatingLimit = 288.15 - "Outside temperature at which the heating activates" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Real Max_VR = 10 "Maximal ventilation rate" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.TemperatureDifference Diff_toTempset = 2 - "Difference to set temperature" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); - parameter Modelica.SIunits.Temperature Tset = 295.15 "Tset" annotation(Dialog(group = "Dynamic ventilation", descriptionLabel = true, enable = if withDynamicVentilation then true else false)); + parameter Boolean withDynamicVentilation=false "Dynamic ventilation" + annotation (Dialog(group="Dynamic ventilation", descriptionLabel=true), + choices(checkBox=true)); + parameter Modelica.SIunits.Temperature HeatingLimit=288.15 + "Outside temperature at which the heating activates" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Real Max_VR=10 "Maximal ventilation rate" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.TemperatureDifference Diff_toTempset=2 + "Difference to set temperature" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); + parameter Modelica.SIunits.Temperature Tset=295.15 "Tset" annotation (Dialog( + group="Dynamic ventilation", + descriptionLabel=true, + enable=if withDynamicVentilation then true else false)); //Door properties - AixLib.Building.Components.Walls.Wall outside_wall1(solar_absorptance = solar_absorptance_OW, T0 = T0_OW1, wall_length = room_length, wall_height = room_height_short, withWindow = false, windowarea = 0, withDoor = false, door_height = 0, door_width = 0, WallType = Type_OW) annotation(Placement(transformation(extent = {{-64, -24}, {-54, 32}}))); - AixLib.Building.Components.Walls.Wall outside_wall2(solar_absorptance = solar_absorptance_OW, windowarea = windowarea_OW2, T0 = T0_OW2, door_height = door_height_OD2, door_width = door_width_OD2, withWindow = withWindow2, withDoor = withDoor2, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), WallType = Type_OW, WindowType = Type_Win, U_door = U_door_OD2, eps_door = eps_door_OD2) annotation(Placement(transformation(origin = {-25, 58}, extent = {{-6, -33}, {6, 33}}, rotation = 270))); - AixLib.Building.Components.Walls.Wall inside_wall1a(T0 = T0_IW1a, outside = false, WallType = Type_IWload, wall_length = room_length - room_lengthb, wall_height = room_height_long, withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {60, 19}, extent = {{-2, -15}, {2, 15}}, rotation = 180))); - AixLib.Building.Components.Walls.Wall inside_wall2(T0 = T0_IW2, outside = false, WallType = Type_IWsimple, wall_length = room_width_long, wall_height = 0.5 * (room_height_long + room_height_short + room_width_short / room_width_long * (room_height_long - room_height_short)), withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {28, -60}, extent = {{-4.00002, -26}, {4.00001, 26}}, rotation = 90))); - AixLib.Building.Components.DryAir.Airload airload(V = room_V, T(start = T0_air)) annotation(Placement(transformation(extent = {{0, -20}, {20, 0}}))); - AixLib.Building.Components.Walls.Wall Ceiling(T0 = T0_CE, outside = false, WallType = Type_CE, wall_length = room_length, wall_height = room_width_short, withWindow = false, withDoor = false, ISOrientation = 3) annotation(Placement(transformation(origin = {28, 60}, extent = {{1.99999, -10}, {-1.99998, 10}}, rotation = 90))); - AixLib.Building.Components.Walls.Wall floor(T0 = T0_FL, outside = false, WallType = Type_FL, wall_length = room_length, wall_height = room_width_long, withWindow = false, withDoor = false, ISOrientation = 2) if withFloorHeating == false annotation(Placement(transformation(origin = {-24, -60}, extent = {{-1.99999, -10}, {1.99999, 10}}, rotation = 90))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 annotation(Placement(transformation(extent = {{20, -100}, {40, -80}}), iconTransformation(extent = {{20, -100}, {40, -80}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1a annotation(Placement(transformation(extent = {{80, 0}, {100, 20}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside annotation(Placement(transformation(extent = {{-100, 80}, {-80, 100}}))); - Modelica.Blocks.Interfaces.RealInput WindSpeedPort annotation(Placement(transformation(extent = {{-109.5, -60}, {-89.5, -40}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 annotation(Placement(transformation(extent = {{-109.5, 20}, {-89.5, 40}}))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation(Placement(transformation(origin = {44.5, 101}, extent = {{-10, -10}, {10, 10}}, rotation = 270))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling annotation(Placement(transformation(extent = {{80, 40}, {100, 60}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation(Placement(transformation(extent = {{-30, 10}, {-10, 30}}), iconTransformation(extent = {{-30, 10}, {-10, 30}}))); - Utilities.Interfaces.Star starRoom annotation(Placement(transformation(extent = {{10, 10}, {30, 30}}), iconTransformation(extent = {{10, 10}, {30, 30}}))); - Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation(Placement(transformation(extent = {{-13, -13}, {13, 13}}, rotation = 270, origin = {-28, 100}), iconTransformation(extent = {{-10.5, -10.5}, {10.5, 10.5}}, rotation = 270, origin = {-26.5, 96.5}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation(Placement(transformation(extent = {{-40, -100}, {-20, -80}}), iconTransformation(extent = {{-40, -100}, {-20, -80}}))); - AixLib.Building.Components.Walls.Wall roof(T0 = T0_RO, solar_absorptance = solar_absorptance_RO, wall_length = room_length, withDoor = false, door_height = 0, door_width = 0, wall_height = roof_width, withWindow = withWindow3, windowarea = windowarea_RO, WallType = Type_RO, WindowType = Type_Win) annotation(Placement(transformation(origin = {59, 59}, extent = {{-3.00001, -17}, {3.00002, 17}}, rotation = 270))); - Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation(Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {74, 100}))); - AixLib.Building.Components.Walls.Wall inside_wall1b(T0 = T0_IW1b, outside = false, WallType = Type_IWload, wall_length = room_lengthb, wall_height = room_height_long, withWindow = false, withDoor = false) annotation(Placement(transformation(origin = {60, -19}, extent = {{-2, -15}, {2, 15}}, rotation = 180))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1b annotation(Placement(transformation(extent = {{80, -40}, {100, -20}}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair annotation(Placement(transformation(extent = {{22, -20}, {36, -6}}))); - AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate(room_V = room_V, n50 = n50, e = e, eps = eps) annotation(Placement(transformation(extent = {{-72, 42}, {-54, 50}}))); - AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation(HeatingLimit = HeatingLimit, Max_VR = Max_VR, Diff_toTempset = Diff_toTempset, Tset = Tset) if withDynamicVentilation annotation(Placement(transformation(extent = {{-70, -66}, {-46, -54}}))); - Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation(Placement(transformation(extent = {{-10, 8}, {10, -8}}, rotation = 90, origin = {-20, -26}))); - AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V = room_V) annotation(Placement(transformation(extent = {{-68, -50}, {-48, -30}}))); - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor1 if withFloorHeating - "thermal connector for floor heating" annotation(Placement(transformation(extent = {{-8, -58}, {2, -48}}), iconTransformation(extent = {{-32, -34}, {-12, -14}}))); - AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH(l = room_length, n = Type_FL.n, d = Type_FL.d, rho = Type_FL.rho, lambda = Type_FL.lambda, c = Type_FL.c, T0 = T0_FL, h = room_width_long) if withFloorHeating - "floor component if using Floor heating" annotation(Placement(transformation(origin = {-6, -67}, extent = {{-3.00007, 16}, {3, -16}}, rotation = 90))); + AixLib.Building.Components.Walls.Wall outside_wall1( + solar_absorptance=solar_absorptance_OW, + T0=T0_OW1, + wall_length=room_length, + wall_height=room_height_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + windowarea=0, + withDoor=false, + door_height=0, + door_width=0, + WallType=Type_OW) + annotation (Placement(transformation(extent={{-68,-18},{-58,38}}))); + AixLib.Building.Components.Walls.Wall outside_wall2( + solar_absorptance=solar_absorptance_OW, + windowarea=windowarea_OW2, + T0=T0_OW2, + door_height=door_height_OD2, + door_width=door_width_OD2, + withWindow=withWindow2, + withDoor=withDoor2, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + WallType=Type_OW, + WindowType=Type_Win, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + U_door=U_door_OD2, + eps_door=eps_door_OD2) annotation (Placement(transformation( + origin={-25,58}, + extent={{-6,-33},{6,33}}, + rotation=270))); + AixLib.Building.Components.Walls.Wall inside_wall1a( + T0=T0_IW1a, + outside=false, + WallType=Type_IWload, + wall_length=room_length - room_lengthb, + wall_height=room_height_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={60,19}, + extent={{-2,-15},{2,15}}, + rotation=180))); + AixLib.Building.Components.Walls.Wall inside_wall2( + T0=T0_IW2, + outside=false, + WallType=Type_IWsimple, + wall_length=room_width_long, + wall_height=0.5*(room_height_long + room_height_short + room_width_short/ + room_width_long*(room_height_long - room_height_short)), + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={28,-60}, + extent={{-4.00002,-26},{4.00001,26}}, + rotation=90))); + AixLib.Building.Components.DryAir.Airload airload(V=room_V, T(start=T0_air)) + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + AixLib.Building.Components.Walls.Wall Ceiling( + T0=T0_CE, + outside=false, + WallType=Type_CE, + wall_length=room_length, + wall_height=room_width_short, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=3) annotation (Placement(transformation( + origin={28,60}, + extent={{1.99999,-10},{-1.99998,10}}, + rotation=90))); + AixLib.Building.Components.Walls.Wall floor( + T0=T0_FL, + outside=false, + WallType=Type_FL, + wall_length=room_length, + wall_height=room_width_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false, + ISOrientation=2) if withFloorHeating == false annotation (Placement( + transformation( + origin={-24,-60}, + extent={{-1.99999,-10},{1.99999,10}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall2 + annotation (Placement(transformation(extent={{20,-100},{40,-80}}), + iconTransformation(extent={{20,-100},{40,-80}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1a + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermOutside + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + Modelica.Blocks.Interfaces.RealInput WindSpeedPort + annotation (Placement(transformation(extent={{-109.5,-60},{-89.5,-40}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW1 + annotation (Placement(transformation(extent={{-109.5,20},{-89.5,40}}))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_OW2 annotation (Placement( + transformation( + origin={44.5,101}, + extent={{-10,-10},{10,10}}, + rotation=270))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermCeiling + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermRoom annotation ( + Placement(transformation(extent={{-30,10},{-10,30}}), iconTransformation( + extent={{-30,10},{-10,30}}))); + Utilities.Interfaces.Star starRoom annotation (Placement(transformation( + extent={{10,10},{30,30}}), iconTransformation(extent={{10,10},{30,30}}))); + Modelica.Blocks.Interfaces.RealInput AirExchangePort annotation (Placement( + transformation( + extent={{-13,-13},{13,13}}, + rotation=270, + origin={-28,100}), iconTransformation( + extent={{-10.5,-10.5},{10.5,10.5}}, + rotation=270, + origin={-26.5,96.5}))); + AixLib.Building.Components.Walls.Wall roof( + T0=T0_RO, + solar_absorptance=solar_absorptance_RO, + wall_length=room_length, + withDoor=false, + door_height=0, + door_width=0, + wall_height=roof_width, + withWindow=withWindow3, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + windowarea=windowarea_RO, + WallType=Type_RO, + WindowType=Type_Win) annotation (Placement(transformation( + origin={59,59}, + extent={{-3.00001,-17},{3.00002,17}}, + rotation=270))); + Utilities.Interfaces.SolarRad_in SolarRadiationPort_Roof annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={74,100}))); + AixLib.Building.Components.Walls.Wall inside_wall1b( + T0=T0_IW1b, + outside=false, + WallType=Type_IWload, + wall_length=room_lengthb, + wall_height=room_height_long, + withWindow=false, + final withSunblind=use_sunblind, + final Blinding=ratioSunblind, + final LimitSolIrr=solIrrThreshold, + final TOutAirLimit=TOutAirLimit, + withDoor=false) annotation (Placement(transformation( + origin={60,-19}, + extent={{-2,-15},{2,15}}, + rotation=180))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermInsideWall1b + annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor Tair + annotation (Placement(transformation(extent={{22,-20},{36,-6}}))); + AixLib.Building.Components.DryAir.InfiltrationRate_DIN12831 infiltrationRate( + room_V=room_V, + n50=n50, + e=e, + eps=eps) annotation (Placement(transformation(extent={{-72,42},{-54,50}}))); + AixLib.Building.Components.DryAir.DynamicVentilation dynamicVentilation( + HeatingLimit=HeatingLimit, + Max_VR=Max_VR, + Diff_toTempset=Diff_toTempset, + Tset=Tset) if withDynamicVentilation + annotation (Placement(transformation(extent={{-74,-56},{-50,-44}}))); + Utilities.Interfaces.Adaptors.HeatStarToComb thermStar_Demux annotation ( + Placement(transformation( + extent={{-10,8},{10,-8}}, + rotation=90, + origin={-20,-26}))); + AixLib.Building.Components.DryAir.VarAirExchange NaturalVentilation(V=room_V) + annotation (Placement(transformation(extent={{-72,-40},{-52,-20}}))); + AixLib.Building.Components.Walls.BaseClasses.SimpleNLayer floor_FH( + A=room_width_long*room_length, + n=Type_FL.n, + d=Type_FL.d, + rho=Type_FL.rho, + lambda=Type_FL.lambda, + c=Type_FL.c, + T0=T0_FL) if withFloorHeating + "floor component if using Floor heating" annotation (Placement( + transformation( + origin={-30,-85}, + extent={{3.00007,16},{-3,-16}}, + rotation=90))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a thermFloor annotation ( + Placement(transformation(extent={{-16,-104},{4,-84}}), iconTransformation( + extent={{-16,-104},{4,-84}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + thermFloorHeatingDownHeatFlow if withFloorHeating + "Thermal connector for heat flow of floor heating going downwards through the wall/floor/ceiling" + annotation (Placement(transformation(extent={{-84,-86},{-70,-72}}), + iconTransformation(extent={{-56,-92},{-36,-72}}))); protected - parameter Real U_door_OD2 = if TIR == 1 then 1.8 else 2.9 "U-value" annotation(Dialog(group = "Windows and Doors", joinNext = true, descriptionLabel = true, enable = withDoor2)); - parameter Real eps_door_OD2 = 0.95 "eps" annotation(Dialog(group = "Windows and Doors", descriptionLabel = true, enable = withDoor2)); + parameter Real U_door_OD2=if TIR == 1 then 1.8 else 2.9 "U-value" annotation ( + Dialog( + group="Windows and Doors", + joinNext=true, + descriptionLabel=true, + enable=withDoor2)); + parameter Real eps_door_OD2=0.95 "eps" annotation (Dialog( + group="Windows and Doors", + descriptionLabel=true, + enable=withDoor2)); // Infiltration rate - parameter Real n50(unit = "h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR == 3 then 4 else 6 - "Air exchange rate at 50 Pa pressure difference" annotation(Dialog(tab = "Infiltration")); - parameter Real e = 0.03 "Coefficient of windshield" annotation(Dialog(tab = "Infiltration")); - parameter Real eps = 1.0 "Coefficient of height" annotation(Dialog(tab = "Infiltration")); + parameter Real n50(unit="h-1") = if TIR == 1 or TIR == 2 then 3 else if TIR == + 3 then 4 else 6 "Air exchange rate at 50 Pa pressure difference" + annotation (Dialog(tab="Infiltration")); + parameter Real e=0.03 "Coefficient of windshield" + annotation (Dialog(tab="Infiltration")); + parameter Real eps=1.0 "Coefficient of height" + annotation (Dialog(tab="Infiltration")); // Outer wall type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_OW=if TIR == 1 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_M() + else AixLib.DataBase.Walls.EnEV2009.OW.OW_EnEV2009_L() else if TIR == 2 + then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_S() + else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_M() + else AixLib.DataBase.Walls.EnEV2002.OW.OW_EnEV2002_L() else if TIR == 3 + then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_S() + else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_M() + else AixLib.DataBase.Walls.WSchV1995.OW.OW_WSchV1995_L() else if TMC == 1 + then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_S() else if TMC == 2 + then AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_M() else + AixLib.DataBase.Walls.WSchV1984.OW.OW_WSchV1984_L() + annotation (Dialog(tab="Types")); //Inner wall Types - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() annotation(Dialog(tab = "Types")); - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload = if TIR == 1 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if TIR == 2 then if TMC == 1 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC == 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if TIR == 3 then if TMC == 1 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else if TMC == 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else if TMC == 2 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWsimple=if TIR == + 1 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWsimple_EnEV2009_L_half() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWsimple_EnEV2002_L_half() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWsimple_WSchV1995_L_half() else if + TMC == 1 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_S_half() else if + TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWsimple_WSchV1984_L_half() + annotation (Dialog(tab="Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_IWload=if TIR == 1 + then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_M_half() else + AixLib.DataBase.Walls.EnEV2009.IW.IWload_EnEV2009_L_half() else if TIR == + 2 then if TMC == 1 then + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_M_half() else + AixLib.DataBase.Walls.EnEV2002.IW.IWload_EnEV2002_L_half() else if TIR == + 3 then if TMC == 1 then + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_S_half() else if TMC == + 2 then AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_M_half() else + AixLib.DataBase.Walls.WSchV1995.IW.IWload_WSchV1995_L_half() else if TMC == + 1 then AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_S_half() else + if TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_M_half() else + AixLib.DataBase.Walls.WSchV1984.IW.IWload_WSchV1984_L_half() + annotation (Dialog(tab="Types")); // Floor to lower floor type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL = if TIR == 1 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() else if TIR == 2 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() else if TIR == 3 then if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() else AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() else if TMC == 1 or TMC == 2 then AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() else AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_FL= + if withFloorHeating==true then AixLib.DataBase.Walls.Dummys.FloorForFloorHeating2Layers() + else if TIR == 1 + then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2009.Floor.FLpartition_EnEV2009_L_upHalf() + else if TIR == 2 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_SM_upHalf() + else AixLib.DataBase.Walls.EnEV2002.Floor.FLpartition_EnEV2002_L_upHalf() + else if TIR == 3 then if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1995.Floor.FLpartition_WSchV1995_L_upHalf() + else if TMC == 1 or TMC == 2 then + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_SM_upHalf() + else + AixLib.DataBase.Walls.WSchV1984.Floor.FLpartition_WSchV1984_L_upHalf() + annotation (Dialog(tab="Types")); // Ceiling to attic type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() else AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_CE= + if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.CEattic_EnEV2009_SML_loHalf() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.CEattic_EnEV2002_SML_loHalf() + else if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.CEattic_WSchV1995_SML_loHalf() + else + AixLib.DataBase.Walls.WSchV1984.Ceiling.CEattic_WSchV1984_SML_loHalf() + annotation (Dialog(tab="Types")); // Saddle roof type - parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO = if TIR == 1 then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() else if TIR == 2 then AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else if TIR == 3 then AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() annotation(Dialog(tab = "Types")); + parameter AixLib.DataBase.Walls.WallBaseDataDefinition Type_RO=if TIR == 1 + then AixLib.DataBase.Walls.EnEV2009.Ceiling.ROsaddleRoom_EnEV2009_SML() + else if TIR == 2 then + AixLib.DataBase.Walls.EnEV2002.Ceiling.ROsaddleRoom_EnEV2002_SML() else + if TIR == 3 then + AixLib.DataBase.Walls.WSchV1995.Ceiling.ROsaddleRoom_WSchV1995_SML() + else AixLib.DataBase.Walls.WSchV1984.Ceiling.ROsaddleRoom_WSchV1984_SML() + annotation (Dialog(tab="Types")); //Window type - parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple Type_Win = if TIR == 1 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR == 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else if TIR == 3 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() annotation(Dialog(tab = "Types")); - parameter Modelica.SIunits.Volume room_V = room_length * room_width_long * room_height_long - room_length * (room_width_long - room_width_short) * (room_height_long - room_height_short) * 0.5; + parameter AixLib.DataBase.WindowsDoors.Simple.OWBaseDataDefinition_Simple + Type_Win=if TIR == 1 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2009() else if TIR == + 2 then AixLib.DataBase.WindowsDoors.Simple.WindowSimple_EnEV2002() else + if TIR == 3 then + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1995() else + AixLib.DataBase.WindowsDoors.Simple.WindowSimple_WSchV1984() + annotation (Dialog(tab="Types")); + parameter Modelica.SIunits.Volume room_V=room_length*room_width_long* + room_height_long - room_length*(room_width_long - room_width_short)*( + room_height_long - room_height_short)*0.5; equation - // Connect equations for dynamic ventilation - if withDynamicVentilation then - connect(thermOutside, dynamicVentilation.port_outside); - connect(dynamicVentilation.port_inside, airload.port); - end if; - //Connect floor for cases with or without floor heating - if withFloorHeating then - connect(floor_FH.port_b, thermFloor1) annotation(Line(points={{-7.6,-64.3}, - {-7.6,-53},{-3,-53}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(thermFloor, floor_FH.port_a) annotation(Line(points={{-30,-90},{-6, - -90},{-6,-69.7001},{-7.6,-69.7001}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - else - connect(floor.port_outside, thermFloor) annotation(Line(points={{-24,-62.1}, - {-24,-74.5},{-30,-74.5},{-30,-90}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{-24,-58}, - {-24,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, color = {191, 0, 0}, pattern = LinePattern.Dash)); - end if; - connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) annotation(Line(points={{-65.5, - 29.6667},{-80,29.6667},{-80,30},{-99.5,30}}, color = {0, 0, 0})); - connect(inside_wall2.port_outside, thermInsideWall2) annotation(Line(points={{28, - -64.2},{28,-90},{30,-90}}, color = {191, 0, 0})); - connect(thermInsideWall2, thermInsideWall2) annotation(Line(points = {{30, -90}, {30, -90}}, color = {191, 0, 0})); - connect(outside_wall2.WindSpeedPort, WindSpeedPort) annotation(Line(points = {{-0.8, 64.3}, {-0.8, 74}, {-80, 74}, {-80, -50}, {-99.5, -50}}, color = {0, 0, 127})); - connect(inside_wall1b.port_outside, thermInsideWall1b) annotation(Line(points = {{62.1, -19}, {90, -19}, {90, -30}}, color = {191, 0, 0})); - connect(inside_wall1a.port_outside, thermInsideWall1a) annotation(Line(points = {{62.1, 19}, {84, 19}, {84, 20}, {90, 20}, {90, 10}}, color = {191, 0, 0})); - connect(airload.port, Tair.port) annotation(Line(points = {{1, -12}, {-6, -12}, {-6, -40}, {22, -40}, {22, -13}}, color = {191, 0, 0})); - connect(thermRoom, thermStar_Demux.therm) annotation(Line(points = {{-20, 20}, {-20, 6}, {-25.1, 6}, {-25.1, -15.9}}, color = {191, 0, 0})); - connect(starRoom, thermStar_Demux.star) annotation(Line(points = {{20, 20}, {20, 4}, {-14.2, 4}, {-14.2, -15.6}}, color = {95, 95, 95}, pattern = LinePattern.Solid)); - connect(infiltrationRate.port_a, thermOutside) annotation(Line(points = {{-72, 46}, {-80, 46}, {-80, 82}, {-90, 82}, {-90, 90}}, color = {191, 0, 0})); - connect(outside_wall1.port_outside, thermOutside) annotation(Line(points = {{-64.25, 4}, {-80, 4}, {-80, 82}, {-90, 82}, {-90, 90}}, color = {191, 0, 0})); - connect(outside_wall2.port_outside, thermOutside) annotation(Line(points = {{-25, 64.3}, {-25, 74}, {-80, 74}, {-80, 82}, {-90, 82}, {-90, 90}}, color = {191, 0, 0})); - connect(roof.port_outside, thermOutside) annotation(Line(points={{59,62.15},{ - 59,74},{-80,74},{-80,82},{-90,82},{-90,90}}, color = {191, 0, 0})); - connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation(Line(points={{74.5833, - 62.9},{74.5833,92},{74,92},{74,100}}, color = {255, 128, 0})); - connect(Ceiling.port_outside, thermCeiling) annotation(Line(points={{28,62.1}, - {28,62.1},{28,74},{90,74},{90,50}}, color = {191, 0, 0})); - connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) annotation(Line(points = {{5.25, 65.8}, {5.25, 74}, {44.5, 74}, {44.5, 101}}, color = {255, 128, 0})); - connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{-54, 4}, {-40, 4}, {-40, -40}, {-20, -40}, {-20, -38}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{28,-56}, - {28,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(inside_wall1b.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{58, -19}, {40, -19}, {40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{-25, 52}, {-25, 40}, {40, 40}, {40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{59,56}, - {59,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points={{28,58}, - {28,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, color = {191, 0, 0})); - connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation(Line(points={{-64.25, - 24.5333},{-80,24.5333},{-80,-50},{-99.5,-50}}, color = {0, 0, 127})); - connect(thermStar_Demux.therm, airload.port) annotation(Line(points = {{-25.1, -15.9}, {-25.1, -12}, {1, -12}}, color = {191, 0, 0})); - connect(inside_wall1a.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation(Line(points = {{58, 19}, {40, 19}, {40, -40}, {-20.1, -40}, {-20.1, -35.4}}, color = {191, 0, 0})); - connect(infiltrationRate.port_b, airload.port) annotation(Line(points = {{-54, 46}, {-40, 46}, {-40, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(NaturalVentilation.InPort1, AirExchangePort) annotation(Line(points = {{-67, -46.4}, {-80, -46.4}, {-80, 74}, {-28, 74}, {-28, 100}}, color = {0, 0, 127})); - connect(NaturalVentilation.port_a, thermOutside) annotation(Line(points = {{-68, -40}, {-80, -40}, {-80, 90}, {-90, 90}}, color = {191, 0, 0})); - connect(NaturalVentilation.port_b, airload.port) annotation(Line(points = {{-48, -40}, {-6, -40}, {-6, -12}, {1, -12}}, color = {191, 0, 0})); - connect(roof.WindSpeedPort, WindSpeedPort) annotation(Line(points={{71.4667, - 62.15},{71.4667,74},{-80,74},{-80,-50},{-99.5,-50}}, color = {0, 0, 127})); - annotation(Icon(graphics={ Rectangle(extent = {{-80, 80}, {80, 60}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{0, 80}, {-50, 60}}, lineColor = {0, 0, 0}, fillColor = {170, 213, 255}, - fillPattern = FillPattern.Solid, visible = withWindow2), Rectangle(extent = {{80, 60}, {68, -68}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-80, 60}, {-60, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-60, -68}, {80, -80}}, lineColor = {0, 0, 0}, fillColor = {215, 215, 215}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{80, 60}, {68, 8}}, lineColor = {0, 0, 0}, fillColor = {135, 135, 135}, - fillPattern = FillPattern.Solid), Rectangle(extent = {{-80, 30}, {-60, -20}}, lineColor = {0, 0, 0}, fillColor = {170, 213, 255}, - fillPattern = FillPattern.Solid, visible = withWindow3), Rectangle(extent = {{-60, 60}, {68, -68}}, lineColor = {0, 0, 0}, fillColor = {47, 102, 173}, - fillPattern = FillPattern.Solid), Text(extent = {{-56, 52}, {64, 40}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "width"), Line(points = {{38, 46}, {68, 46}}, color = {255, 255, 255}), Line(points = {{-46, 60}, {-46, 30}}, color = {255, 255, 255}), Line(points = {{-60, 46}, {-30, 46}}, color = {255, 255, 255}), Text(extent = {{-120, 6}, {0, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, origin = {-46, 56}, rotation = 90, textString = "length"), Line(points = {{-46, -42}, {-46, -68}}, color = {255, 255, 255}), Rectangle(extent = {{20, 80}, {40, 60}}, lineColor = {0, 0, 0}, fillColor = {127, 127, 0}, - fillPattern = FillPattern.Solid, visible = withDoor2), Text(extent = {{-50, 76}, {0, 64}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "Win2", visible = withWindow2), Text(extent = {{-25, 6}, {25, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "Win3", origin = {-70, 5}, rotation = 90, visible = withWindow3), Text(extent = {{20, 74}, {40, 66}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, textString = "D2", visible = withDoor2), Line(points = {{68, 8}, {54, 8}}, color = {255, 255, 255}), Line(points = {{58, 8}, {58, 0}}, color = {255, 255, 255}), Text(extent = {{50, 6}, {-50, -6}}, lineColor = {255, 255, 255}, fillColor = {255, 170, 170}, - fillPattern = FillPattern.Solid, origin = {58, -30}, rotation = 90, textString = "length_b"), Line(points = {{58, -62}, {58, -68}}, color = {255, 255, 255})}), Documentation(revisions = " + connect(outside_wall1.SolarRadiationPort, SolarRadiationPort_OW1) annotation ( + Line(points={{-69.5,35.6667},{-80,35.6667},{-80,30},{-99.5,30}}, color={0,0, + 0})); + connect(inside_wall2.port_outside, thermInsideWall2) + annotation (Line(points={{28,-64.2},{28,-90},{30,-90}}, color={191,0,0})); + connect(thermInsideWall2, thermInsideWall2) + annotation (Line(points={{30,-90},{30,-90}}, color={191,0,0})); + connect(outside_wall2.WindSpeedPort, WindSpeedPort) annotation (Line(points={{ + -0.8,64.3},{-0.8,74},{-80,74},{-80,-50},{-99.5,-50}}, color={0,0,127})); + connect(inside_wall1b.port_outside, thermInsideWall1b) + annotation (Line(points={{62.1,-19},{90,-19},{90,-30}}, color={191,0,0})); + connect(inside_wall1a.port_outside, thermInsideWall1a) annotation (Line( + points={{62.1,19},{84,19},{84,20},{90,20},{90,10}}, color={191,0,0})); + connect(airload.port, Tair.port) annotation (Line(points={{1,-12},{-6,-12},{-6, + -40},{22,-40},{22,-13}}, color={191,0,0})); + connect(thermRoom, thermStar_Demux.therm) annotation (Line(points={{-20,20},{-20, + 6},{-25.1,6},{-25.1,-15.9}}, color={191,0,0})); + connect(starRoom, thermStar_Demux.star) annotation (Line( + points={{20,20},{20,4},{-14.2,4},{-14.2,-15.6}}, + color={95,95,95}, + pattern=LinePattern.Solid)); + connect(infiltrationRate.port_a, thermOutside) annotation (Line(points={{-72,46}, + {-80,46},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(outside_wall1.port_outside, thermOutside) annotation (Line(points={{-68.25, + 10},{-80,10},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(outside_wall2.port_outside, thermOutside) annotation (Line(points={{-25, + 64.3},{-25,74},{-80,74},{-80,82},{-90,82},{-90,90}}, color={191,0,0})); + connect(roof.port_outside, thermOutside) annotation (Line(points={{59,62.15}, + {59,74},{-80,74},{-80,82},{-90,82},{-90,90}},color={191,0,0})); + connect(roof.SolarRadiationPort, SolarRadiationPort_Roof) annotation (Line( + points={{74.5833,62.9},{74.5833,92},{74,92},{74,100}}, color={255,128,0})); + connect(Ceiling.port_outside, thermCeiling) annotation (Line(points={{28,62.1}, + {28,62.1},{28,74},{90,74},{90,50}}, color={191,0,0})); + connect(outside_wall2.SolarRadiationPort, SolarRadiationPort_OW2) annotation ( + Line(points={{5.25,65.8},{5.25,74},{44.5,74},{44.5,101}}, color={255,128,0})); + connect(outside_wall1.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-58,10},{-40,10},{-40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(inside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{28,-56},{28,-40},{-20.1,-40},{-20.1,-38},{-20.1, + -35.4}}, + color={191,0,0})); + connect(inside_wall1b.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{58,-19},{40,-19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(outside_wall2.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{-25,52},{-25,40},{40,40},{40,-40},{-20.1,-40},{-20.1, + -35.4}}, color={191,0,0})); + connect(roof.thermStarComb_inside, thermStar_Demux.thermStarComb) annotation ( + Line(points={{59,56},{59,40},{40,40},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(Ceiling.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{28,58},{28,40},{40,40},{40,-40},{-20.1,-40},{ + -20.1,-35.4}}, + color={191,0,0})); + connect(outside_wall1.WindSpeedPort, WindSpeedPort) annotation (Line(points={{-68.25, + 30.5333},{-80,30.5333},{-80,-50},{-99.5,-50}}, color={0,0,127})); + connect(thermStar_Demux.therm, airload.port) annotation (Line(points={{-25.1,-15.9}, + {-25.1,-12},{1,-12}}, color={191,0,0})); + connect(inside_wall1a.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line(points={{58,19},{40,19},{40,-40},{-20.1,-40},{-20.1,-35.4}}, + color={191,0,0})); + connect(infiltrationRate.port_b, airload.port) annotation (Line(points={{-54,46}, + {-40,46},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(NaturalVentilation.InPort1, AirExchangePort) annotation (Line(points={ + {-71,-36.4},{-80,-36.4},{-80,74},{-28,74},{-28,100}}, color={0,0,127})); + connect(NaturalVentilation.port_a, thermOutside) annotation (Line(points={{-72, + -30},{-80,-30},{-80,90},{-90,90}}, color={191,0,0})); + connect(NaturalVentilation.port_b, airload.port) annotation (Line(points={{-52, + -30},{-40,-30},{-40,-40},{-6,-40},{-6,-12},{1,-12}}, color={191,0,0})); + connect(roof.WindSpeedPort, WindSpeedPort) annotation (Line(points={{71.4667, + 62.15},{71.4667,74},{-80,74},{-80,-50},{-99.5,-50}}, + color={0,0,127})); + connect(thermFloorHeatingDownHeatFlow, floor_FH.port_a) annotation (Line( + points={{-77,-79},{-77,-80},{-30,-80},{-30,-81.9999}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor_FH.port_b, thermFloor) annotation (Line( + points={{-30,-88},{-30,-94},{-6,-94}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(thermFloor, floor.port_outside) annotation (Line( + points={{-6,-94},{-8,-94},{-8,-66},{-22,-66},{-22,-62.1},{-24,-62.1}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(floor.thermStarComb_inside, thermStar_Demux.thermStarComb) + annotation (Line( + points={{-24,-58},{-24,-40},{-20.1,-40},{-20.1,-38},{-20.1,-35.4}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_outside, thermOutside) annotation (Line( + points={{-73.52,-50.6},{-78,-50.6},{-78,92},{-84,92},{-84,90},{-90,90}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + connect(dynamicVentilation.port_inside, airload.port) annotation (Line( + points={{-50.72,-50.6},{-2,-50.6},{-2,-48},{-2,-48},{-2,-12},{1,-12}}, + color={191,0,0}, + pattern=LinePattern.Dash)); + annotation (Icon(graphics={ + Rectangle( + extent={{-80,80},{80,60}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,80},{-50,60}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow2), + Rectangle( + extent={{80,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,60},{-60,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-60,-68},{80,-80}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{80,60},{68,8}}, + lineColor={0,0,0}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,30},{-60,-20}}, + lineColor={0,0,0}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + visible=withWindow3), + Rectangle( + extent={{-60,60},{68,-68}}, + lineColor={0,0,0}, + fillColor={47,102,173}, + fillPattern=FillPattern.Solid), + Text( + extent={{-56,52},{64,40}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="width"), + Line(points={{38,46},{68,46}}, color={255,255,255}), + Line(points={{-46,60},{-46,30}}, color={255,255,255}), + Line(points={{-60,46},{-30,46}}, color={255,255,255}), + Text( + extent={{-120,6},{0,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-46,56}, + rotation=90, + textString="length"), + Line(points={{-46,-42},{-46,-68}}, color={255,255,255}), + Rectangle( + extent={{20,80},{40,60}}, + lineColor={0,0,0}, + fillColor={127,127,0}, + fillPattern=FillPattern.Solid, + visible=withDoor2), + Text( + extent={{-50,76},{0,64}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win2", + visible=withWindow2), + Text( + extent={{-25,6},{25,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="Win3", + origin={-70,5}, + rotation=90, + visible=withWindow3), + Text( + extent={{20,74},{40,66}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + textString="D2", + visible=withDoor2), + Line(points={{68,8},{54,8}}, color={255,255,255}), + Line(points={{58,8},{58,0}}, color={255,255,255}), + Text( + extent={{50,6},{-50,-6}}, + lineColor={255,255,255}, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={58,-30}, + rotation=90, + textString="length_b"), + Line(points={{58,-62},{58,-68}}, color={255,255,255})}), Documentation( + revisions="Model for a room with 2 outer walls, 2 inner walls load towards two different rooms but with the same orientation, 1 inner wall simple, 1 floor towards lower floor, 1 ceiling towards attic, 1 roof towards outside.
This model is the controller of the facade ventilation unit. It makes use of +six two-point controllers that determine heating, cooling and ventilation +demand. It further indicates if free cooling, heat recovery or cold recovery is +possible. As these are decentralized controllers and as the fresh air +temperature is measured inside the unit, we require an additional measurement +mode. This mode is activated every two hours if there is no ventilation demand +and the unit consequently circulates air. In order to measure the correct fresh +air temperature, the circulation damper is closed for twenty minutes. +Furthermore, the exhaust air fan is switched on and the fresh air damper is +opened. This allows ambient air to flow inside the unit. The temperature set +point in cooling mode is increased by adding the value deltaTemp to the set +point in heating mode. +
+")); +end FVUController; diff --git a/AixLib/Controls/AirHandling/package.mo b/AixLib/Controls/AirHandling/package.mo new file mode 100644 index 0000000000..3dc51bb420 --- /dev/null +++ b/AixLib/Controls/AirHandling/package.mo @@ -0,0 +1,4 @@ +within AixLib.Controls; +package AirHandling "Controllers of (decentralized) air handling units" +extends Modelica.Icons.VariantsPackage; +end AirHandling; diff --git a/AixLib/Controls/AirHandling/package.order b/AixLib/Controls/AirHandling/package.order new file mode 100644 index 0000000000..6784493085 --- /dev/null +++ b/AixLib/Controls/AirHandling/package.order @@ -0,0 +1 @@ +FVUController diff --git a/AixLib/Controls/Continuous/OffTimer.mo b/AixLib/Controls/Continuous/OffTimer.mo index accab487f8..b79bff62be 100644 --- a/AixLib/Controls/Continuous/OffTimer.mo +++ b/AixLib/Controls/Continuous/OffTimer.mo @@ -1,6 +1,6 @@ within AixLib.Controls.Continuous; model OffTimer "Records the time since the input changed to false" - extends Modelica.Blocks.Interfaces.partialBooleanBlockIcon; + extends Modelica.Blocks.Icons.PartialBooleanBlock; Modelica.Blocks.Interfaces.BooleanInput u "Connector of Boolean input signal" annotation (Placement(transformation( diff --git a/AixLib/Controls/HVACAgentBasedControl/Agents/Broker.mo b/AixLib/Controls/HVACAgentBasedControl/Agents/Broker.mo index 418c578c9a..6bf47ec406 100644 --- a/AixLib/Controls/HVACAgentBasedControl/Agents/Broker.mo +++ b/AixLib/Controls/HVACAgentBasedControl/Agents/Broker.mo @@ -10,37 +10,37 @@ model Broker Real[:,7] heatSupplierTable(start=startTable); parameter Real[:,7] startTable = [30001,0,0,0,0,0,0; 30002,0,0,0,0,0,0] "Initialization table for the negotiation process. Fill first column with ProducerAgents"; - Integer proposalCounter(start=1); - Integer counterReject(start=1); - Real lowestPrice(start=0); - Integer counter(start=1); - Boolean requestsExceedSupply(start=false); + Integer proposalCounter(start=1) "Integer variable to describe proposalCounter"; + Integer counterReject(start=1) "Integer variable to describe counterReject"; + Real lowestPrice(start=0) "Real variable to define lowestPrice"; + Integer counter(start=1) "Integer variable to describe counter"; + Boolean requestsExceedSupply(start=false) "Boolean variable to describe whteher requests exceed supply"; // Tables and variables note the requests by the consumers - Real requestTable[10,1](start=[0;0;0;0;0;0;0;0;0;0]); - Real requestAddresses[10,1](start=[0;0;0;0;0;0;0;0;0;0]); - Real heatingRequestSum(start=0); - Integer requestCounter(start=1); + Real requestTable[10,1](start=[0;0;0;0;0;0;0;0;0;0]) "Real variable to define requestTable"; + Real requestAddresses[10,1](start=[0;0;0;0;0;0;0;0;0;0]) "Real variable to define requestAddresses"; + Real heatingRequestSum(start=0) "Real variable to define the sum of heating requests"; + Integer requestCounter(start=1) "Real variable to define requestCounter"; // Variables for average price (for storage) - Real totalPrice; - Real totalHeat; - Real averagePrice; + Real totalPrice "Real variable to define totalPrice"; + Real totalHeat "Real variable to define totalHeat"; + Real averagePrice "Real variable to define averagePrice"; // Variables for finding the lowest price combination - Real heatingCalculationSum(start=0); - Integer cheapest(start=1); - Real heatingPriceSum; - Real totalaveragePrice; - Real restHeat; - Boolean calculationDone( start=false); + Real heatingCalculationSum(start=0) "Real variable to define the sum of heatingCalculation"; + Integer cheapest(start=1) "Integer variable to define the cheapest offer"; + Real heatingPriceSum "Real variable to define the sum of heatingPrice"; + Real totalaveragePrice "Real variable to define totalaveragePrice"; + Real restHeat "Real variable to define restHeat"; + Boolean calculationDone( start=false) "Boolean variable to annonce calculationDone"; // Variable for composing information - Integer informationCounter(start=1); - Boolean informationDone(start=false); + Integer informationCounter(start=1) "Integer variable to define informationCounter"; + Boolean informationDone(start=false) "Boolean variable to announce informationDone"; // Variables for requests from producers - Boolean finalRequestDone(start=false); + Boolean finalRequestDone(start=false) "Boolean variable to announce finalRequestDone"; // This section contains the blocks for the state-machine logic of the agent @@ -962,9 +962,10 @@ equationExample Results
diff --git a/AixLib/Controls/HVACAgentBasedControl/Agents/ConsumerAgent.mo b/AixLib/Controls/HVACAgentBasedControl/Agents/ConsumerAgent.mo index 99f2395f4f..2cd8140534 100644 --- a/AixLib/Controls/HVACAgentBasedControl/Agents/ConsumerAgent.mo +++ b/AixLib/Controls/HVACAgentBasedControl/Agents/ConsumerAgent.mo @@ -314,14 +314,15 @@ equationConcept
The consumer agent receives a requested capacity as an input. When a pre-defined sample-time has elapsed, a cooling or heating request is calculated and send to a broker agent. The broker-agent ensures that the requested heat is produced. The logic is implemented with the help of the StateGraph library. Communication is realized with the help of the DeviceDriver library and follows the language standards for multi-agent-systems set by the FIPA to the highest possible extend for Modelica models. The following figure shows the behaviour of the consumer agent. For further information please refer to the first reference.
Concept
The room agent observes the temperature inside a room. If the temperature crosses a certain treshhold and a pre-defined sample-time has elapsed, a cooling or heating request is calculated and send to a broker agent. The broker-agent ensures that the requested heat is produced. The logic is implemented with the help of the StateGraph library. Communication is realized with the help of the DeviceDriver library and follows the language standards for multi-agent-systems set by the FIPA to the highest possible extend for Modelica models. The following figure shows the behaviour of the roomagent. For further information please refer to the first reference.
The communication takes place via UDP network communication and is implemented with the help of elements from the DeviceDriver library. The inbox is refreshed based on a sample time, the outbox is triggered by an external boolean input.
Since sampling creates time events, the simulation performance will be bad for models with a high number of equations. For this reason, an alternative refresh mechanism can be used with "usePoke=true". In order to use this mechanism the component "MessageNotification" needs to be added to the system.
The partial agent implements the message parameters performative, sender, receiver, reply to, content, ontology and message ID. The parameters are described in the reference.
-Concept
An input and output for capacity and cost respectively is implemented. Also the basic icon is implemented.
The model changes the model published in the Modelica_DeviceDrivers library by an input for the name of the receiver. The receiver is therefore no longer a parameter but now a variable of the model. This change is necessary as some agents need to communicate with a number of different recipents (the broker for example).
-The system has two heat sources, which are a boiler and a heating rod. The heating rod is connected to a PV system. During the times the PV panel is able to provide electricity, the cost function of the heating rod considers the electricity free. During all other times the boiler is more cost efficient than the heating rod and is selected for heat generation first.
-This model was used to present the HVACAgentBasedControl library in [Roozbeh Sangi, Felix Bünning, Marc Baranski, Johannes Fütterer, Dirk Müller. A Platform for the Agent-based Control of HVAC Systems. Modelica Conference, 2017, Prague, Czech Republic]. For detailed information please refer to this source.
+This model was used to present the HVACAgentBasedControl library in [Roozbeh Sangi, Felix Bünning, Johannes Fütterer, Dirk Müller. A Platform for the Agent-based Control of HVAC Systems. Modelica Conference, 2017, Prague, Czech Republic]. For detailed information please refer to this source.
")); end BuildingWithPV; diff --git a/AixLib/Controls/HVACAgentBasedControl/Examples/HVACAgentsCommunications/SimpleCommunication.mo b/AixLib/Controls/HVACAgentBasedControl/Examples/HVACAgentsCommunications/SimpleCommunication.mo index c46d089981..e4c300faf5 100644 --- a/AixLib/Controls/HVACAgentBasedControl/Examples/HVACAgentsCommunications/SimpleCommunication.mo +++ b/AixLib/Controls/HVACAgentBasedControl/Examples/HVACAgentsCommunications/SimpleCommunication.mo @@ -33,11 +33,11 @@ model SimpleCommunication annotation (Placement(transformation(extent={{-92,-42},{-72,-22}}))); inner Agents.MessageNotification messageNotification annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); - CostFunctions.Economic.ConstantFactor constantFactor(p=1, eta=1) + AixLib.Controls.HVACAgentBasedControl.CostFunctions.Economic.Constant_Economic_Cost constantFactor(p=1, eta=1) annotation (Placement(transformation(extent={{-20,80},{0,100}}))); - CostFunctions.Economic.ConstantFactor constantFactor1(eta=1, p=2) + AixLib.Controls.HVACAgentBasedControl.CostFunctions.Economic.Constant_Economic_Cost constantFactor1(eta=1, p=2) annotation (Placement(transformation(extent={{60,80},{80,100}}))); - CostFunctions.Economic.ConstantFactor constantFactor2(eta=1, p=0.5) + AixLib.Controls.HVACAgentBasedControl.CostFunctions.Economic.Constant_Economic_Cost constantFactor2(eta=1, p=0.5) annotation (Placement(transformation(extent={{60,2},{80,22}}))); equation connect(onOff.y, heatProducerAgent.OnOff_external) annotation (Line(points={{-69,30}, @@ -163,19 +163,21 @@ Low Temp Circuit"),Overview
Concept
The model consists of a consumer agent, two brokers, one intermediate agent and three producer agents. The model represents a heating system in which two circuits are interconnected via an heat exchanger. There is no real physical system implemented. The model, however, shows the communication of the agents with each other (see the log below). For further details, please refer to the reference.
The logic is implemented with the help of the StateGraph library. Communication is realized with the help of the DeviceDriver library and follows the language standards for multi-agent-systems set by the FIPA to the highest possible extend for Modelica models.
Example Results
Definition of a standard boiler control bus that contains basic data points + that appear in every boiler.
+", revisions=" +Definition of a standard bus that contains basic data points that appear facade ventilation units.
+", revisions=" +July 2017, by Marc Baranski:
+First implementation.
+")); + + +end FVUControlBus; diff --git a/AixLib/Controls/Interfaces/ModularCompressorControlBus.mo b/AixLib/Controls/Interfaces/ModularCompressorControlBus.mo new file mode 100644 index 0000000000..dea0122bfb --- /dev/null +++ b/AixLib/Controls/Interfaces/ModularCompressorControlBus.mo @@ -0,0 +1,53 @@ +within AixLib.Controls.Interfaces; +expandable connector ModularCompressorControlBus + "Connector used for modular compressor controller" + extends Modelica.Icons.SignalBus; + + // Definition of parameters describing modular approach in general + // + parameter Integer nComCon = 1 + "Number of compressors valves that shall be controlled" + annotation(Dialog(tab="Compressors",group="General")); + + // Definition of parameters describing controlling system in general + // + parameter Boolean extConCom = false + "= true, if external signal is used for compressors" + annotation(Dialog(tab="Compressors",group="General")); + + // Definition of variables describing compressors + // + parameter Types.ControlVariable conVarCom= + Types.ControlVariable.THea + "Choose between different control variables for compressors" + annotation (Dialog(tab="Compressors", group="Control variable")); + Real meaConVarCom[nComCon] + "Array of measured values of compressors' controlled variables" + annotation(Dialog(tab="Compressors",group="Control variable")); + + Real intSetPoiCom[nComCon] + "Array of compressors' set points given for internal controllers" + annotation(Dialog(tab="Compressors",group="Set signals")); + Real extManVarCom[nComCon] + "Array of compressors' manipulated variables (rotational speeds) given externally" + annotation(Dialog(tab="Compressors",group="Manipulated signals")); + Real curManVarCom[nComCon] + "Array of compressors' current manipulated variables (rotational speeds)" + annotation(Dialog(tab="Compressors",group="Manipulated signals")); + + annotation (Documentation(revisions=" ++This connector is a base connector used for modular compressors and +contains typical variables that may be needed in the modular +compressor models. +
+")); +end ModularCompressorControlBus; diff --git a/AixLib/Controls/Interfaces/ModularExpansionValveControlBus.mo b/AixLib/Controls/Interfaces/ModularExpansionValveControlBus.mo new file mode 100644 index 0000000000..f00aa5fc88 --- /dev/null +++ b/AixLib/Controls/Interfaces/ModularExpansionValveControlBus.mo @@ -0,0 +1,53 @@ +within AixLib.Controls.Interfaces; +expandable connector ModularExpansionValveControlBus + "Connector used for modular expansion valve controller" + extends Modelica.Icons.SignalBus; + + // Definition of parameters describing modular approach in general + // + parameter Integer nValCon = 1 + "Number of expansion valves that shall be controlled" + annotation(Dialog(tab="Expansion Valves",group="General")); + + // Definition of parameters describing controlling system in general + // + parameter Boolean extConVal = false + "= true, if external signal is used for expansion valves" + annotation(Dialog(tab="Expansion Valves",group="General")); + + // Definition of variables describing expansion valves + // + parameter Types.ControlVariable conVarVal= + Types.ControlVariable.TSupHea + "Choose between different control variables for expansion valves" + annotation (Dialog(tab="Expansion Valves", group="Control variable")); + Real meaConVarVal[nValCon] + "Array of measured values of expansion valves' controlled variables" + annotation(Dialog(tab="Expansion Valves",group="Control variable")); + + Real intSetPoiVal[nValCon] + "Array of expansion valves' set points given for internal controllers" + annotation(Dialog(tab="Expansion Valves",group="Set signals")); + Real extManVarVal[nValCon] + "Array of expansion valves' manipulated variables (openings) given externally" + annotation(Dialog(tab="Expansion Valves",group="Manipulated signals")); + Real curManVarVal[nValCon] + "Array of expansion valves' current manipulated variables (openings)" + annotation(Dialog(tab="Expansion Valves",group="Manipulated signals")); + + annotation (Documentation(revisions=" ++This connector is a base connector used for modular expansion valves and +contains typical variables that may be needed in the modular expansion +valve models. +
+")); +end ModularExpansionValveControlBus; diff --git a/AixLib/Controls/Interfaces/ModularHeatPumpControlBus.mo b/AixLib/Controls/Interfaces/ModularHeatPumpControlBus.mo new file mode 100644 index 0000000000..be7c29c220 --- /dev/null +++ b/AixLib/Controls/Interfaces/ModularHeatPumpControlBus.mo @@ -0,0 +1,81 @@ +within AixLib.Controls.Interfaces; +expandable connector ModularHeatPumpControlBus + "Connector used for modular heat pump controller" + extends Modelica.Icons.SignalBus; + + // Definition of parameters describing the modular approach in general + // + parameter Integer nVal = 1 + "Number of expansion valves" + annotation(Dialog(tab="General",group="Modular approach")); + parameter Integer nEva = nVal + "Number of evaporators" + annotation(Dialog(tab="General",group="Modular approach", + enable=false)); + parameter Integer nCom = 1 + "Number of compressors" + annotation(Dialog(tab="General",group="Modular approach")); + parameter Integer nCon = 1 + "Number of condensers" + annotation(Dialog(tab="General",group="Modular approach")); + + // Definition of parameters describing controlling system in general + // + parameter Types.heatPumpMode mode= + Types.heatPumpMode.heatPump + "Choose between heat pump or chiller" + annotation (Dialog(tab="General", group="Controller")); + + // Extensions and propagation of parameters + // + ModularExpansionValveControlBus expValBus(final + nValCon=nVal) + "Bus that contains all relevant connections for modular expansion valves"; + ModularCompressorControlBus comBus(final + nComCon=nCom) + "Bus that contains all relevant connections for modular compressors"; + ModularSensorControlBus senBus( + final nValSen=nVal, + final nEvaSen=nEva, + final nComSen=nCom, + final nConSen=nCon) + "Bus that contains all relevant connections for modular sensors"; + + annotation (Documentation(revisions=" ++This connector is a base connector used for modular heat pumps and contains +typical variables that may be measured in the modular heat pump models. +Therefore, this connector contains three further connectors that are +presented below: +
++Additionally, the heat pump mode as well as the number of components (e.g. +expansion valves or compressors) can be selected. +
+")); +end ModularHeatPumpControlBus; diff --git a/AixLib/Controls/Interfaces/ModularSensorControlBus.mo b/AixLib/Controls/Interfaces/ModularSensorControlBus.mo new file mode 100644 index 0000000000..7801b99ac3 --- /dev/null +++ b/AixLib/Controls/Interfaces/ModularSensorControlBus.mo @@ -0,0 +1,163 @@ +within AixLib.Controls.Interfaces; +expandable connector ModularSensorControlBus + "Connector used for modular sensors" + extends Modelica.Icons.SignalBus; + + // Definition of parameters describing modular approach in general + // + parameter Integer nValSen = 1 + "Number of expansion valves" + annotation(Dialog(tab="General",group="Modular approach"), + HideResult=true); + parameter Integer nEvaSen = 1 + "Number of evaporators" + annotation(Dialog(tab="General",group="Modular approach"), + HideResult=true); + parameter Integer nComSen = 1 + "Number of compressors" + annotation(Dialog(tab="General",group="Modular approach"), + HideResult=true); + parameter Integer nConSen = 1 + "Number of condensers" + annotation(Dialog(tab="General",group="Modular approach"), + HideResult=true); + + // Definition of variables describing expansion valves + // + Modelica.SIunits.AbsolutePressure meaPreVal[nValSen] + "Array of measured pressures at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Expansion Valves")); + Modelica.SIunits.Temperature meaTemVal[nValSen] + "Array of measured temperatures at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Expansion Valves")); + Modelica.SIunits.MassFlowRate meaMasFloVal[nValSen] + "Array of measured mass flow rates at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Expansion Valves")); + Real meaPhaVal[nValSen](unit="1") + "Array of measured phases at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Expansion Valves")); + + // Definition of variables describing evaporators + // + Modelica.SIunits.AbsolutePressure meaPreEva[nEvaSen] + "Array of measured pressures at evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Evaporators")); + Modelica.SIunits.Temperature meaTemEva[nEvaSen] + "Array of measured temperatures at evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Evaporators")); + Modelica.SIunits.MassFlowRate meaMasFloEva[nEvaSen] + "Array of measured mass flow rates at evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Evaporators")); + Real meaPhaEva[nEvaSen](unit="1") + "Array of measured phases at evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Evaporators")); + + // Definition of variables describing compressors + // + Modelica.SIunits.AbsolutePressure meaPreCom[nComSen] + "Array of measured pressures at compressors' outlets" + annotation(Dialog(tab="Measurements",group="Compressors")); + Modelica.SIunits.Temperature meaTemCom[nComSen] + "Array of measured temperatures at compressors' outlets" + annotation(Dialog(tab="Measurements",group="Compressors")); + Modelica.SIunits.MassFlowRate meaMasFloCom[nComSen] + "Array of measured mass flow rates at compressors' outlets" + annotation(Dialog(tab="Measurements",group="Compressors")); + Real meaPhaCom[nComSen](unit="1") + "Array of measured phases at compressors' outlets" + annotation(Dialog(tab="Measurements",group="Compressors")); + + // Definition of variables describing condensers + // + Modelica.SIunits.AbsolutePressure meaPreCon[nConSen] + "Array of measured pressures at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Condensers")); + Modelica.SIunits.Temperature meaTemCon[nConSen] + "Array of measured temperatures at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Condensers")); + Modelica.SIunits.MassFlowRate meaMasFloCon[nConSen] + "Array of measured mass flow rates at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Condensers")); + Real meaPhaCon[nConSen](unit="1") + "Array of measured phases at expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Condensers")); + + // Definition of variables describing heat pumps sources + // + Modelica.SIunits.AbsolutePressure meaPreEvaSou[nEvaSen] + "Array of measured pressures at source-sided evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Sources")); + Modelica.SIunits.Temperature meaTemEvaSouInl[nEvaSen] + "Array of measured temperatures at source-sided evaporators' inlets" + annotation(Dialog(tab="Measurements",group="Sources")); + Modelica.SIunits.Temperature meaTemEvaSouOut[nEvaSen] + "Array of measured temperatures at source-sided evaporators' outlet" + annotation(Dialog(tab="Measurements",group="Sources")); + Modelica.SIunits.MassFlowRate meaMasFloEvaSou[nEvaSen] + "Array of measured mass flow rates source-sided at evaporators' outlets" + annotation(Dialog(tab="Measurements",group="Sources")); + + // Definition of variables describing heat pumps sinks + // + Modelica.SIunits.AbsolutePressure meaPreConSin[nConSen] + "Array of measured pressures at sink-sided expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Sinks")); + Modelica.SIunits.Temperature meaTemConSinInl[nConSen] + "Array of measured temperatures at sink-sided expansion valves' inlets" + annotation(Dialog(tab="Measurements",group="Sinks")); + Modelica.SIunits.Temperature meaTemConSinOut[nConSen] + "Array of measured temperatures at sink-sided expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Sinks")); + Modelica.SIunits.MassFlowRate meaMasFloConSin[nConSen] + "Array of measured mass flow rates at sink-sided expansion valves' outlets" + annotation(Dialog(tab="Measurements",group="Sinks")); + + annotation (Documentation(revisions=" ++This connector is a base connector used for modular heat pumps and contains +typical variables that may be measured in the modular heat pump models. +
++Typically, a heat pump consists of four main components: A compressor, a +condenser, an expansion valve and an evaporator. Furthermore, considering the +perspective of the refrigerant used in the heat pump, the evaporator is the +source and the condenser is the sink. Therefore, it is assumed that the heat +pump has six sensor positions: +
++Four different sensors are proposed at refrigerant's side: +
++Three different sensors are proposed at source's and sink's sides: +
+equation
rather than algorithm
+and removed assertion.pre
operator in when
clause and relaxed
tolerance in assert
statement.
diff --git a/AixLib/Controls/SetPoints/Validation/OccupancyScheduleNegativeStartTime.mo b/AixLib/Controls/SetPoints/Validation/OccupancyScheduleNegativeStartTime.mo
new file mode 100644
index 0000000000..e52576c360
--- /dev/null
+++ b/AixLib/Controls/SetPoints/Validation/OccupancyScheduleNegativeStartTime.mo
@@ -0,0 +1,33 @@
+within AixLib.Controls.SetPoints.Validation;
+model OccupancyScheduleNegativeStartTime
+ "Test model for occupancy schedule with look-ahead"
+ extends Modelica.Icons.Example;
+ AixLib.Controls.SetPoints.OccupancySchedule occSchDay(occupancy=3600*{7,24})
+ "Day schedule"
+ annotation (Placement(transformation(extent={{-60,60},{-40,80}})));
+ OccupancySchedule occSchDay1(occupancy=3600*{0,2}) "Day schedule"
+ annotation (Placement(transformation(extent={{-60,20},{-40,40}})));
+ OccupancySchedule occSchDay2(
+ occupancy=3600*{7,10,17,20},
+ firstEntryOccupied=false) "Day schedule"
+ annotation (Placement(transformation(extent={{-60,-20},{-40,0}})));
+ annotation (experiment(
+ StartTime=-112320,
+ StopTime=207360,
+ Tolerance=1e-06),
+ __Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Controls/SetPoints/Validation/OccupancyScheduleNegativeStartTime.mos"
+ "Simulate and plot"),
+ Documentation(info="
++Example that validates the occupancy schedule +for a negative start time. +
+", revisions=" ++Example that validates the occupancy schedule +for a positive start time. +
+", revisions=" ++This package contains validation models for the classes in + +AixLib.Controls.SetPoints. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Controls/SetPoints/Validation/package.order b/AixLib/Controls/SetPoints/Validation/package.order new file mode 100644 index 0000000000..9dee1e2343 --- /dev/null +++ b/AixLib/Controls/SetPoints/Validation/package.order @@ -0,0 +1,2 @@ +OccupancyScheduleNegativeStartTime +OccupancySchedulePositiveStartTime diff --git a/AixLib/Controls/SetPoints/package.order b/AixLib/Controls/SetPoints/package.order index 40600b387c..2b20e6ac05 100644 --- a/AixLib/Controls/SetPoints/package.order +++ b/AixLib/Controls/SetPoints/package.order @@ -2,3 +2,4 @@ HotWaterTemperatureReset OccupancySchedule Table Examples +Validation diff --git a/AixLib/Controls/Types.mo b/AixLib/Controls/Types.mo new file mode 100644 index 0000000000..26f9542363 --- /dev/null +++ b/AixLib/Controls/Types.mo @@ -0,0 +1,48 @@ +within AixLib.Controls; +package Types "Types, constants to define menu choices" + extends Modelica.Icons.TypesPackage; + + type heatPumpMode = enumeration( + heatPump + "Heat pump is used as heat pump", + chiller + "Heat pump is used as chiller") + "Enumeration to define mode of heat pump" + annotation (Evaluate=true); + type ControlVariable = enumeration( + pEva + "Pressure of evaporation", + pCon + "Pressure of condensation", + TEva + "Temperature of evaporation", + TCon + "Temperature of condensation", + TSupHea + "Degree of superheating at evaporator's outlet", + TSupCol + "Degree of supercooling at condenser's outlet", + TCol + "Temperature at source-sided evaporator's outlet (Cooling temperature)", + THea + "Temperature at sink-sided condenser's outlet (Heating temperature)", + QFloCol + "Cooling capacity if system works as chiller", + QFloHea + "Heating capacity if system works as heat pump") + "Enumeration to control variables of expansion valves" + annotation (Evaluate=true); + annotation (Documentation(revisions=" ++This package contains types and constants to define menue choices. +
+")); +end Types; diff --git a/AixLib/Controls/package.order b/AixLib/Controls/package.order index b18a892a61..2b08c07828 100644 --- a/AixLib/Controls/package.order +++ b/AixLib/Controls/package.order @@ -1,7 +1,9 @@ +AirHandling Continuous Discrete HVACAgentBasedControl HeatPump SetPoints VentilationController +Types Interfaces diff --git a/AixLib/DataBase/ActiveWalls/ActiveWallBaseDataDefinition.mo b/AixLib/DataBase/ActiveWalls/ActiveWallBaseDataDefinition.mo new file mode 100644 index 0000000000..5f24e2e001 --- /dev/null +++ b/AixLib/DataBase/ActiveWalls/ActiveWallBaseDataDefinition.mo @@ -0,0 +1,39 @@ +within AixLib.DataBase.ActiveWalls; +record ActiveWallBaseDataDefinition "Base data definition for active walls" +extends Modelica.Icons.Record; +parameter Modelica.SIunits.Temperature Temp_nom[3] "Nominal Temperatures T_flow, T_return, T_room / air "; +parameter Modelica.SIunits.HeatFlux q_dot_nom "nominal Power per square meter"; +parameter Modelica.SIunits.CoefficientOfHeatTransfer k_isolation "k_isolation of whole FH Layer"; +parameter Modelica.SIunits.CoefficientOfHeatTransfer k_top "Heat transfer coefficient for layers above tubes"; +parameter Modelica.SIunits.CoefficientOfHeatTransfer k_down "Heat transfer coefficient for layers underneath tubes"; +parameter Real VolumeWaterPerMeter(unit="l/m") "Water volume"; +parameter Modelica.SIunits.Length Spacing "Spacing of Pipe"; +parameter Modelica.SIunits.Emissivity eps "Emissivity of Floor"; +parameter AixLib.Fluid.HeatExchangers.ActiveWalls.BaseClasses.HeatCapacityPerArea C_ActivatedElement = 50000; +parameter Real c_top_ratio; +parameter Real PressureDropExponent; +parameter Real PressureDropCoefficient; + +annotation (Documentation(revisions=" +Base record for Active Walls (Ceiling and Floor) models.
+Defines heat exchange properties and storage capacity of the active part of the wall.
+Base data definition for record used with EBC.HVAC.Components.ActiveWalls.Panelheating_1D_Dis
+ + +")); + +end ActiveWallBaseDataDefinition; diff --git a/AixLib/DataBase/ActiveWalls/JocoKlimaBodenTOP2000_Parkett.mo b/AixLib/DataBase/ActiveWalls/JocoKlimaBodenTOP2000_Parkett.mo new file mode 100644 index 0000000000..b242067780 --- /dev/null +++ b/AixLib/DataBase/ActiveWalls/JocoKlimaBodenTOP2000_Parkett.mo @@ -0,0 +1,45 @@ +within AixLib.DataBase.ActiveWalls; +record JocoKlimaBodenTOP2000_Parkett + "Floor Heating Klima Boden TOP 2000 by Joco with parquet" + +extends ActiveWallBaseDataDefinition( + Temp_nom=Modelica.SIunits.Conversions.from_degC({40,35,20}), + q_dot_nom=80, + k_isolation=1.25, + k_top=q_dot_nom/AixLib.Fluid.HeatExchangers.ActiveWalls.BaseClasses.logDT( + {Temp_nom[1],Temp_nom[2],(q_dot_nom/8.92)^(1/1.1) + Temp_nom[3]}), + k_down=(k_isolation^(-1) - k_top^(-1))^(-1), + VolumeWaterPerMeter=0.13, + Spacing=0.25, + eps=0.9, + C_ActivatedElement=27400, + c_top_ratio=0.72, + PressureDropExponent=1.76, + PressureDropCoefficient=48500); + // k_top: Third attribute in logDT is T_surface according to GLUECK, + // Bauteilaktivierung 1999, equation 7.91 + // (for heat flow up) from page 41 +annotation (Documentation(revisions=" +Record for Floor Heating Klima Boden TOP 2000.
+Defines heat exchange properties and storage capacity of the active part of the wall.
+Record is used with HVAC.Components.ActiveWalls_UC.Panelheating_1D_Dis
+Source:
+Record for celing cooling system from Uponor Comfort panel HL.
+Defines heat exchange properties and storage capacity of the active part of the wall.
+Record is used with EBC.HVAC.Components.ActiveWalls.Panelheating_1D_Dis
+Source:
+Record for celing heating system from Uponor Comfort panel HL.
+Defines heat exchange properties and storage capacity of the active part of the wall.
+Record is used with EBC.HVAC.Components.ActiveWalls.Panelheating_1D_Dis
+Source:
+Base data definition used in the HeatPump model. It defines the table table_Qdot_Co which gives the condenser heat flow rate and table_Pel which gives the electric power consumption of the heat pump. Both tables define the power values depending on the evaporator inlet temperature (columns) and the evaporator outlet temperature (rows) in W. The nominal heat flow rate in the condenser and evaporator are also defined as parameters.
+Base data definition used in the heat pump model. It defines the table table_Qdot_Co
which gives the condenser heat flow rate and table_Pel
which gives the electric power consumption of the heat pump. Both tables define the power values depending on the evaporator inlet temperature (defined in first row) and the condenser outlet temperature (defined in first column) in W. The nominal heat flow rate in the condenser and evaporator are also defined as parameters.
0 % insulation.
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+", + revisions=" +100 % insulation. Calculated according to: thickness insulation = 1 x d_o
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+", + revisions=" +50 % insulation. Calculated according to: thickness insulation = 0.5 x d_o
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+", + revisions=" +Base data definition for insulation record
+Base data definition for record used with AixLib.Fluid.FixedResistances.Pipe
+", + revisions=" +Record for PE-X pipe.
+The pipe dimensions are according to standard DIN 16893.
+SDR is the diameter to wall thickness ratio.
+d is the diameter in mm.
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+Source:
+Record for PE-X pipe.
+The pipe dimensions are according to standard DIN 16893.
+SDR is the diameter to wall thickness ratio.
+d is the diameter in mm.
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+Source:
+Record for PE-X pipe.
+The pipe dimensions are according to standard DIN 16893.
+SDR is the diameter to wall thickness ratio.
+d is the diameter in mm.
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+Source:
+Record for PE-X pipe.
+The pipe dimensions are according to standard DIN 16893.
+SDR is the diameter to wall thickness ratio.
+d is the diameter in mm.
+Record is used with AixLib.Fluid.FixedResistances.Pipe
+Source:
+Heating load for Test Case 640
Cooling load for Test Case 650
Mean value per day: 0.5 1/h.
@@ -24,5 +24,4 @@ record SetTemperatures_Ventilation2perDayMean value per day: 0.5 1/h.
@@ -24,4 +24,4 @@ record Ventilation_2perDay_Mean05perHOctober 2013, Marcus Fuchs
+ parameter Modelica.SIunits.Efficiency eta_zero(max=1) "Conversion factor/Efficiency at Q = 0"; + parameter Real c1(unit = "W/(m.m.K)") "Loss coefficient c1"; + parameter Real c2(unit = "W/(m.m.K.K)") "Loss coefficient c2"; + annotation(Documentation(revisions="April 2014, Mark Wesseling
-Buffer Storage: Buderus Logalux SF 500 l
-Base data definition for record used with AixLib.Fluid.Storage.Storage and AixLib.Fluid.Storage.BufferStorage
-")); -end Generic_500l; diff --git a/AixLib/DataBase/Storage/package.order b/AixLib/DataBase/Storage/package.order index 922157e1bc..39c4070da7 100644 --- a/AixLib/DataBase/Storage/package.order +++ b/AixLib/DataBase/Storage/package.order @@ -1,3 +1,2 @@ BufferStorageBaseDataDefinition -Generic_500l Generic_New_2000l diff --git a/AixLib/DataBase/Walls/Dummys.mo b/AixLib/DataBase/Walls/Dummys.mo new file mode 100644 index 0000000000..ba686d8a05 --- /dev/null +++ b/AixLib/DataBase/Walls/Dummys.mo @@ -0,0 +1,48 @@ +within AixLib.DataBase.Walls; +package Dummys + + record FloorForFloorHeating2Layers + "Floor dummy with 2 layers for floor heating" + extends WallBaseDataDefinition( + n(min = 1) = 2 "Number of wall layers", + d = {0.00001, 0.00001} "Thickness of wall layers", + rho = {1800, 300} "Density of wall layers", + lambda = {1, 0.1} "Thermal conductivity of wall layers", + c = {1000, 1700} "Specific heat capacity of wall layers", + eps = 0.95 "Emissivity of inner wall surface"); + + /* + extends WallBaseDataDefinition( + n(min = 1) = 4 "Number of wall layers", + d = {0.00001, 0.00001, 0.00001, 0.00001} "Thickness of wall layers", + rho = {1800, 300, 172, 1018.2} "Density of wall layers", + lambda = {1, 0.1, 0.056, 0.346} "Thermal conductivity of wall layers", + c = {1000, 1700, 1337, 1000} "Specific heat capacity of wall layers", + eps = 0.95 "Emissivity of inner wall surface"); + */ + end FloorForFloorHeating2Layers; + + record CeilingForFloorHeating3Layers + "Ceiling dummy with 3 layers for floor heating" + extends WallBaseDataDefinition( + n(min = 1) = 3 "Number of wall layers", + d = {0.00001, 0.00001, 0.00001} "Thickness of wall layers", + rho = {1800, 300, 1018.2} "Density of wall layers", + lambda = {1, 0.1, 0.346} "Thermal conductivity of wall layers", + c = {1000, 1700, 1000} "Specific heat capacity of wall layers", + eps = 0.95 "Emissivity of inner wall surface"); + end CeilingForFloorHeating3Layers; + + record FloorForFloorHeating4Layers + "Floor dummy with 4 layers for floor heating" + + extends WallBaseDataDefinition( + n(min = 1) = 4 "Number of wall layers", + d = {0.00001, 0.00001, 0.00001, 0.00001} "Thickness of wall layers", + rho = {1800, 300, 172, 1018.2} "Density of wall layers", + lambda = {1, 0.1, 0.056, 0.346} "Thermal conductivity of wall layers", + c = {1000, 1700, 1337, 1000} "Specific heat capacity of wall layers", + eps = 0.95 "Emissivity of inner wall surface"); + + end FloorForFloorHeating4Layers; +end Dummys; diff --git a/AixLib/DataBase/Walls/package.order b/AixLib/DataBase/Walls/package.order index 63a7f8a3f2..059f7c22d2 100644 --- a/AixLib/DataBase/Walls/package.order +++ b/AixLib/DataBase/Walls/package.order @@ -1,3 +1,4 @@ +Dummys WallBaseDataDefinition ASHRAE140 EnEV2002 diff --git a/AixLib/DataBase/package.order b/AixLib/DataBase/package.order index adb80eb671..5b214a45e8 100644 --- a/AixLib/DataBase/package.order +++ b/AixLib/DataBase/package.order @@ -1,3 +1,4 @@ +ActiveWalls Boiler CHP HeatPump diff --git a/AixLib/Fluid/Solar/Electric/BaseClasses/PVInverterRMS.mo b/AixLib/Electrical/PVSystem/BaseClasses/PVInverterRMS.mo similarity index 89% rename from AixLib/Fluid/Solar/Electric/BaseClasses/PVInverterRMS.mo rename to AixLib/Electrical/PVSystem/BaseClasses/PVInverterRMS.mo index f7da26a607..38c3c0adb5 100644 --- a/AixLib/Fluid/Solar/Electric/BaseClasses/PVInverterRMS.mo +++ b/AixLib/Electrical/PVSystem/BaseClasses/PVInverterRMS.mo @@ -1,88 +1,88 @@ -within AixLib.Fluid.Solar.Electric.BaseClasses; -model PVInverterRMS - "Inverter model including system management" - - parameter Modelica.SIunits.Power uMax2 - "Upper limits of input signals (MaxOutputPower)"; - Modelica.Blocks.Interfaces.RealOutput PVPowerRmsW( - final quantity="Power", - final unit="W") - "Output power of the PV system including the inverter" - annotation(Placement( - transformation(extent={{85,70},{105,90}}), - iconTransformation( - origin={100,0}, - extent={{-10,-10},{10,10}}))); - Modelica.Blocks.Interfaces.RealInput DCPowerInput( - final quantity="Power", - final unit="W") - "DC output power of PV panels as input for the inverter" - annotation(Placement( - transformation(extent={{-80,55},{-40,95}}), - iconTransformation(extent={{-122,-18},{-82,22}}))); - Modelica.Blocks.Nonlinear.Limiter MaxOutputPower( - uMax( - final quantity="Power", - final displayUnit="Nm/s")=uMax2, - uMin=0) - "Limitier for maximum output power" - annotation(Placement(transformation(extent={{40,70},{60,90}}))); - Modelica.Blocks.Tables.CombiTable1Ds EfficiencyConverterSunnyBoy3800( - tableOnFile=false, - table=[0,0.798700;100,0.848907;200,0.899131;250,0.911689;300,0.921732;350,0.929669;400,0.935906;450,0.940718;500,0.943985;550,0.946260;600,0.947839;700,0.950638;800,0.952875;900,0.954431;1000,0.955214;1250,0.956231;1500,0.956449;2000,0.955198;2500,0.952175;3000,0.948659;3500,0.944961;3800,0.942621]) - "Efficiency of the inverter for different operating points" - annotation(Placement(transformation(extent={{-25,55},{-5,75}}))); - Modelica.Blocks.Math.Product product2 - "Multiplies the output power of the PV cell with the efficiency of the inverter " - annotation(Placement(transformation(extent={{10,70},{30,90}}))); - -equation - connect(product2.u2,EfficiencyConverterSunnyBoy3800.y[1]) annotation(Line( - points={{8,74},{3,74},{1,74},{1,65},{-4,65}}, - color={0,0,127})); - connect(product2.y,MaxOutputPower.u) annotation(Line( - points={{31,80},{36,80},{33,80},{38,80}}, - color={0,0,127})); - connect(MaxOutputPower.y,PVPowerRmsW) annotation(Line( - points={{61,80},{65,80},{90,80},{95,80}}, - color={0,0,127})); - connect(product2.u1,DCPowerInput) annotation(Line( - points={{8,86},{5,86},{-55,86},{-55,75},{-60,75}}, - color={0,0,127})); - connect(EfficiencyConverterSunnyBoy3800.u,DCPowerInput) annotation(Line( - points={{-27,65},{-30,65},{-55,65},{-55,75},{-60,75}}, - color={0,0,127})); - annotation ( - Icon( - coordinateSystem(extent={{-100,-100},{100,100}}), - graphics={ - Rectangle( - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - extent={{-100,100},{100,-100}}), - Line( - points={{-50,37},{53,37}}, - color={0,0,0}), - Line( - points={{-48,-34},{55,-34}}, - color={0,0,0})}), - experiment( - StopTime=1, - StartTime=0), - Documentation(revisions=" -The PVinverterRMS model represents a simple PV inverter.
-
-Concept
PVinverterRMS with reliable system manager.
-")); -end PVInverterRMS; +within AixLib.Electrical.PVSystem.BaseClasses; +model PVInverterRMS + "Inverter model including system management" + + parameter Modelica.SIunits.Power uMax2 + "Upper limits of input signals (MaxOutputPower)"; + Modelica.Blocks.Interfaces.RealOutput PVPowerRmsW( + final quantity="Power", + final unit="W") + "Output power of the PV system including the inverter" + annotation(Placement( + transformation(extent={{85,70},{105,90}}), + iconTransformation( + origin={100,0}, + extent={{-10,-10},{10,10}}))); + Modelica.Blocks.Interfaces.RealInput DCPowerInput( + final quantity="Power", + final unit="W") + "DC output power of PV panels as input for the inverter" + annotation(Placement( + transformation(extent={{-80,55},{-40,95}}), + iconTransformation(extent={{-122,-18},{-82,22}}))); + Modelica.Blocks.Nonlinear.Limiter MaxOutputPower( + uMax( + final quantity="Power", + final displayUnit="Nm/s")=uMax2, + uMin=0) + "Limitier for maximum output power" + annotation(Placement(transformation(extent={{40,70},{60,90}}))); + Modelica.Blocks.Tables.CombiTable1Ds EfficiencyConverterSunnyBoy3800( + tableOnFile=false, + table=[0,0.798700;100,0.848907;200,0.899131;250,0.911689;300,0.921732;350,0.929669;400,0.935906;450,0.940718;500,0.943985;550,0.946260;600,0.947839;700,0.950638;800,0.952875;900,0.954431;1000,0.955214;1250,0.956231;1500,0.956449;2000,0.955198;2500,0.952175;3000,0.948659;3500,0.944961;3800,0.942621]) + "Efficiency of the inverter for different operating points" + annotation(Placement(transformation(extent={{-25,55},{-5,75}}))); + Modelica.Blocks.Math.Product Product2 + "Multiplies the output power of the PV cell with the efficiency of the inverter " + annotation(Placement(transformation(extent={{10,70},{30,90}}))); + +equation + connect(Product2.u2,EfficiencyConverterSunnyBoy3800.y[1]) annotation(Line( + points={{8,74},{3,74},{1,74},{1,65},{-4,65}}, + color={0,0,127})); + connect(Product2.y,MaxOutputPower.u) annotation(Line( + points={{31,80},{36,80},{33,80},{38,80}}, + color={0,0,127})); + connect(MaxOutputPower.y,PVPowerRmsW) annotation(Line( + points={{61,80},{65,80},{90,80},{95,80}}, + color={0,0,127})); + connect(Product2.u1,DCPowerInput) annotation(Line( + points={{8,86},{5,86},{-55,86},{-55,75},{-60,75}}, + color={0,0,127})); + connect(EfficiencyConverterSunnyBoy3800.u,DCPowerInput) annotation(Line( + points={{-27,65},{-30,65},{-55,65},{-55,75},{-60,75}}, + color={0,0,127})); + annotation ( + Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,100},{100,-100}}), + Line( + points={{-50,37},{53,37}}, + color={0,0,0}), + Line( + points={{-48,-34},{55,-34}}, + color={0,0,0})}), + experiment( + StopTime=1, + StartTime=0), + Documentation(revisions=" +The PVinverterRMS model represents a simple PV inverter.
+
+Concept
PVinverterRMS with reliable system manager.
+")); +end PVInverterRMS; diff --git a/AixLib/Fluid/Solar/Electric/BaseClasses/PVModuleDC.mo b/AixLib/Electrical/PVSystem/BaseClasses/PVModuleDC.mo similarity index 56% rename from AixLib/Fluid/Solar/Electric/BaseClasses/PVModuleDC.mo rename to AixLib/Electrical/PVSystem/BaseClasses/PVModuleDC.mo index 62af4c3e99..064126a067 100644 --- a/AixLib/Fluid/Solar/Electric/BaseClasses/PVModuleDC.mo +++ b/AixLib/Electrical/PVSystem/BaseClasses/PVModuleDC.mo @@ -1,72 +1,73 @@ -within AixLib.Fluid.Solar.Electric.BaseClasses; -model PVModuleDC "PV module with temperature dependent efficiency" - - parameter Modelica.SIunits.Area Area - "Area of one Panel"; - parameter Modelica.SIunits.Efficiency Eta0 - "Maximum efficiency"; - parameter Modelica.SIunits.Temp_K NoctTemp - "Defined temperature"; - parameter Modelica.SIunits.Temp_K NoctTempCell - "Meassured cell temperature"; - parameter Modelica.SIunits.RadiantEnergyFluenceRate NoctRadiation - "Defined radiation"; - parameter Modelica.SIunits.LinearTemperatureCoefficient TempCoeff - "Temperature coeffient"; - Modelica.SIunits.Power PowerPV - "Power of PV panels"; - Modelica.SIunits.Efficiency EtaVar - "Efficiency of PV cell"; - Modelica.SIunits.Temp_K TCell - "Cell temperature"; - Utilities.Interfaces.SolarRad_in SolarIrradationPerSquareMeter - "Solar radiation per square meter" - annotation(Placement( - transformation(extent={{-141,45},{-101,85}}), - iconTransformation(extent={{-140,34},{-100,74}}))); - Modelica.Blocks.Interfaces.RealInput AmbientTemperature( - final quantity="ThermodynamicTemperature", - final unit="K") - "Ambient temperature" - annotation(Placement( - transformation(extent={{-139,-70},{-99,-30}}), - iconTransformation(extent={{-140,-68},{-100,-28}}))); - Modelica.Blocks.Interfaces.RealOutput DCOutputPower( - final quantity="Power", - final unit="W") - "DC output power of PV panels" - annotation(Placement( - transformation(extent={{100,70},{120,90}}), - iconTransformation(extent={{100,-10},{120,10}}))); - -equation - TCell=AmbientTemperature+(NoctTempCell-NoctTemp)* - SolarIrradationPerSquareMeter.I/NoctRadiation; - EtaVar=Eta0-TempCoeff*(TCell-NoctTemp)*Eta0; - PowerPV=SolarIrradationPerSquareMeter.I*Area*EtaVar; - DCOutputPower=PowerPV; - annotation ( - Icon( - coordinateSystem(extent={{-100,-100},{100,100}}), - graphics={ - Rectangle( - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - extent={{-100,100},{100,-100}}), - Line( - points={{-3,100},{100,0},{0,-100}}, - color={0,0,0})}), - Documentation(info=" -The PVmoduleDC model represents a simple PV cell.
-PV moduleDC has a temperature dependency for efficiency.
-", - revisions=" -The PVmoduleDC_TMY3 model represents a simple PV cell.
+PV moduleDC has a temperature dependency for efficiency.
+", + revisions=" +Simulation to test the PVsystem model.
-", - revisions=" -Simulation to test the PVsystem model.
+", + revisions=" +Simulation to test the PVsystemTMY3 model.
+", + revisions=" +PV model is based on manufactory data and performance factor including the +NOC
+
+Assumptions
PV model is based on manufactory data and performance factor.
+PV system data (DataBase Records) can be found:
+
+Source of literature for the calculation of the pv cell efficiency:
Thermal modelling to analyze the effect of cell temperature on PV
+modules energy efficiency
by Romary, Florian et al.
AixLib.Fluid.Solar.Electric.Examples.ExamplePV
+",revisions=" + +PV model is based on manufactory data and performance factor including the +NOC
+
+Assumptions
PV model is based on manufactory data and performance factor.
+PV system data (DataBase Records) can be found:
+
+Source of literature for the calculation of the pv cell efficiency:
Thermal modelling to analyze the effect of cell temperature on PV
+modules energy efficiency
by Romary, Florian et al.
AixLib.Fluid.Solar.Electric.Examples.ExamplePV_TMY3
+", revisions=" ++This library contains electrical components to build up analog and digital circuits, +as well as machines to model electrical motors and generators, +especially three phase induction machines such as an asynchronous motor. +
+ +"), + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100.0,-100.0},{100.0,100.0}}), graphics={ + Rectangle( + origin={20.3125,82.8571}, + extent={{-45.3125,-57.8571},{4.6875,-27.8571}}), + Line( + origin={8.0,48.0}, + points={{32.0,-58.0},{72.0,-58.0}}), + Line( + origin={9.0,54.0}, + points={{31.0,-49.0},{71.0,-49.0}}), + Line( + origin={-2.0,55.0}, + points={{-83.0,-50.0},{-33.0,-50.0}}), + Line( + origin={-3.0,45.0}, + points={{-72.0,-55.0},{-42.0,-55.0}}), + Line( + origin={1.0,50.0}, + points={{-61.0,-45.0},{-61.0,-10.0},{-26.0,-10.0}}), + Line( + origin={7.0,50.0}, + points={{18.0,-10.0},{53.0,-10.0},{53.0,-45.0}}), + Line( + origin={6.2593,48.0}, + points={{53.7407,-58.0},{53.7407,-93.0},{-66.2593,-93.0},{-66.2593,-58.0}})})); +end Electrical; diff --git a/AixLib/Electrical/package.order b/AixLib/Electrical/package.order new file mode 100644 index 0000000000..311d325133 --- /dev/null +++ b/AixLib/Electrical/package.order @@ -0,0 +1 @@ +PVSystem diff --git a/AixLib/FastHVAC/BaseClasses/EnergyBalance.mo b/AixLib/FastHVAC/BaseClasses/EnergyBalance.mo new file mode 100644 index 0000000000..62a6fe1567 --- /dev/null +++ b/AixLib/FastHVAC/BaseClasses/EnergyBalance.mo @@ -0,0 +1,60 @@ +within AixLib.FastHVAC.BaseClasses; +model EnergyBalance "Base class depicts energy and mass balances" + + AixLib.FastHVAC.Interfaces.EnthalpyPort_a enthalpyPort_a + "Enthalpie input port includes the parameter temperature, specific enthalpy, specific heat capacity and mass flow" + annotation (Placement(transformation(extent={{-100,-20},{-40,38}}), + iconTransformation(extent={{-100,-20},{-60,20}}))); + AixLib.FastHVAC.Interfaces.EnthalpyPort_b enthalpyPort_b + "Enthalpie output port includes the parameter temperature, specific enthalpy, specific heat capacity and mass flow" + annotation (Placement(transformation(extent={{40,-20},{100,40}}), + iconTransformation(extent={{60,-20},{100,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort_a + "Heat port includes the parameter temperature and heat flow" + annotation (Placement( + transformation(extent={{-20,60},{20,100}}), iconTransformation(extent={{ + -20,60},{20,100}}))); + +equation + // Mass and energy balances + enthalpyPort_a.m_flow - enthalpyPort_b.m_flow = 0; + enthalpyPort_b.T = heatPort_a.T; + enthalpyPort_b.h = enthalpyPort_a.c*heatPort_a.T; + enthalpyPort_b.c = enthalpyPort_a.c; + heatPort_a.Q_flow = -(enthalpyPort_a.h*enthalpyPort_a.m_flow - enthalpyPort_b.h*enthalpyPort_b.m_flow); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={Rectangle( + extent={{-60,60},{60,-60}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-44,34},{44,-16}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="energyBalance")}), Diagram(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics), + Documentation(info="
+ WorkingFluid is based on the models
+ FastHVAC.BaseClasses.EnergyBalance
and HeatCapacitor.
+
+ The heat transfer through the heatPort is ideal. It is used for
+ FastHVAC fluid energy balances.
+
+ This package contains basic classes that are used within the FastHVAC + package +
+")); +end BaseClasses; diff --git a/AixLib/FastHVAC/BaseClasses/package.order b/AixLib/FastHVAC/BaseClasses/package.order new file mode 100644 index 0000000000..62d0d67263 --- /dev/null +++ b/AixLib/FastHVAC/BaseClasses/package.order @@ -0,0 +1,2 @@ +EnergyBalance +WorkingFluid diff --git a/AixLib/FastHVAC/Components/Controller/SwitchCounter.mo b/AixLib/FastHVAC/Components/Controller/SwitchCounter.mo new file mode 100644 index 0000000000..4119c6de57 --- /dev/null +++ b/AixLib/FastHVAC/Components/Controller/SwitchCounter.mo @@ -0,0 +1,41 @@ +within AixLib.FastHVAC.Components.Controller; +model SwitchCounter "Counts the number of switching events" + + Integer n_switch(start=0) "number of switching events"; + + Modelica.Blocks.Interfaces.BooleanInput u "switching signal" + annotation (Placement(transformation(extent={{-120,-30},{-80,10}}), + iconTransformation(extent={{-100,-10},{-80,10}}))); + +initial equation + pre(u) = false; + +algorithm + when (u and not + (pre(u))) then + n_switch:=n_switch + 1; + end when; + + annotation ( + Documentation(info=" +This model counts the number of times that the logical input u switches from 0 to 1 during the simulation time.
+ Model of the multi layers of heat exchanger. From the water flow is + the convective and radiative heat output calculated. +
+")); +end ML_thermal_delta; diff --git a/AixLib/FastHVAC/Components/HeatExchangers/BaseClasses/PseudoRadiator.mo b/AixLib/FastHVAC/Components/HeatExchangers/BaseClasses/PseudoRadiator.mo new file mode 100644 index 0000000000..c46d7078ca --- /dev/null +++ b/AixLib/FastHVAC/Components/HeatExchangers/BaseClasses/PseudoRadiator.mo @@ -0,0 +1,188 @@ +within AixLib.FastHVAC.Components.HeatExchangers.BaseClasses; +model PseudoRadiator + + /* ******************************************************************* + Parameters + ******************************************************************* */ + + parameter Integer n(min=1); + + /* ******************************************************************* + Components + ******************************************************************* */ + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a + therm + "Port connecting the source of convective heat and the environment" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + AixLib.Utilities.Interfaces.Star star + "Port connecting the source of radiative heat and the environment" + annotation (Placement(transformation(extent={{20,80},{40,100}}))); + Interfaces.EnthalpyPort_a enthalpyPort_a[n] + "Input port of the pseudo-radiator. Acts as a sink of heat medium" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + Interfaces.EnthalpyPort_b enthalpyPort_b[n] + "Output port of the pseudo-radiator. Acts as a source of heat medium" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + prescribedConvHeatFlow + "Source for the convective heat produced by the pseudo-radiator" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-30,52}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow + prescribedRadHeatFlow + "Source for the radiative heat produced by the pseudo-radiator" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={30,52}))); + Modelica.Blocks.Interfaces.RealInput dotQ_conv( unit="W") + "Prescribed convective heat into the environment" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-30,-100}))); + Modelica.Blocks.Interfaces.RealInput dotQ_rad( unit="W") + "Prescribed radiative heat into the environment" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={30,-100}))); +equation + connect(prescribedConvHeatFlow.Q_flow, dotQ_conv) annotation (Line( + points={{-30,42},{-30,-100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(prescribedRadHeatFlow.Q_flow, dotQ_rad) annotation (Line( + points={{30,42},{30,-100}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(prescribedConvHeatFlow.port, therm) annotation (Line( + points={{-30,62},{-30,90}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(prescribedRadHeatFlow.port, star) annotation (Line( + points={{30,62},{30,90}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics), Icon(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-100},{100,100}}), graphics={ + Polygon( + points={{18,-58},{58,-73},{18,-88},{18,-58}}, + lineColor={0,128,255}, + smooth=Smooth.None, + fillColor={0,128,255}, + fillPattern=FillPattern.Solid, + visible=showDesignFlowDirection), + Polygon( + points={{18,-63},{48,-73},{18,-83},{18,-63}}, + lineColor={255,255,255}, + smooth=Smooth.None, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + visible=allowFlowReversal), + Line( + points={{53,-73},{-62,-73}}, + color={0,128,255}, + smooth=Smooth.None, + visible=showDesignFlowDirection), + Rectangle( + extent={{-60,74},{-52,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-40,74},{-32,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-20,74},{-12,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{0,74},{8,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{20,74},{28,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,74},{48,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{60,74},{68,-56}}, + lineColor={95,95,95}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-66,-42},{70,-52}}, + lineColor={95,95,95}, + fillColor={230,230,230}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-64,68},{72,58}}, + lineColor={95,95,95}, + fillColor={230,230,230}, + fillPattern=FillPattern.Solid), + Text( + extent={{-50,44},{62,6}}, + lineColor={0,0,0}, + textString="pseudo", + textStyle={TextStyle.Bold,TextStyle.Italic}), + Text( + extent={{-20,-6},{30,-26}}, + lineColor={0,0,0}, + textString="n=%n", + textStyle={TextStyle.Bold,TextStyle.Italic})}), + Documentation(info="+ This model emulates the behaviour of n identical radiators. +
++ +
++ The PseudoRadiator is a component of the MultiRadiator +
++ The PseudoRadiator has three functions: +
++ Model for a counterflow heat exchanger for two circuits. In the first + instance this heat exchanger is used to warm domestic hot water. +
++ The heat transfer between the two circuits is based on the model + + ThermalConductor. The fluid inside the heat exchanger (each side + separately) is represented by the model HeatCapacitor. +
The heat exchanger is discretized in n single layers (min. 3 +layers) towards the flow direction at the heater side. ++ Instead of connecting n radiator models in parallel , the + MultiRadiator model consists of one single radiator model and a + pseudoradiator model. +
++ The radiator model receives the n-th part of the total flow of heat + medium, which interacts with its environment via the therm + (ConvectiveHeat) and star (RadiativeHeat) connectors and flows out of + the radiator at a different temperature and specific enthalpy. +
++ The pseudoradiator emulates the behaivour of the reamaining + (identical) n-1 radiators. It receives the remaining flow of heat + medium, injects (or absorbs) (n-1)-times the heat flow of the + radiator into the environment and injects back heat medium back into + to the circuit with the same temperature and specific enthalpy than + at the output of the actual radiator model. +
++ This method reduces the number of state variables and therefore the + simulation time. +
++ The Radiator model represents a heating device. This model also + includes the conduction through the radiator wall. +
++ The Radiator model represents a heating device. Heat energy taken + from the hot water flow through the device is being emitted via + convective and radiative energy transport connectors. The ratio of + convective and radiative energy flows depends on the type of the + heating device (see table). +
++ T_source output is relevant for exergy analysis. It describes + the logarithmic mean temperature is calculated from the temperatures at in- and outlet of the radiator. +
+
+ + Type ++ |
+
+ + Fraction of convective transport ++ |
+
+ + Fraction of radiative transport ++ |
+
+ + SectionalRadiator + ++ Simple (vertical) sectional radiator + + |
+
+ + 0.70 + + |
+
+ + 0.30 + + |
+
+ + PanelRadiator10 + ++ 10 -- Panel radiator (single panel) without convection device + + |
+
+ + 0.50 + + |
+
+ + 0.50 + + |
+
+ + PanelRadiator11 + ++ 11 -- Panel radiator (single panel) with one convection device + + |
+
+ + 0.65 + + |
+
+ + 0.35 + + |
+
+ + PanelRadiator12 + ++ 12 -- Panel radiator (single panel) with two convection devices + + |
+
+ + 0.75 + + |
+
+ + 0.25 + + |
+
+ + PanelRadiator20 + ++ 20 -- Panel radiator (two panels) without convection device + + |
+
+ + 0.65 + + |
+
+ + 0.35 + + |
+
+ + PanelRadiator21 + ++ 21 -- Panel radiator (two panels) with one convection device + + |
+
+ + 0.80 + + |
+
+ + 0.20 + + |
+
+ + PanelRadiator22 + ++ 22 -- Panel radiator (two panels) with two convection devices + + |
+
+ + 0.85 + + |
+
+ + 0.15 + + |
+
+ + PanelRadiator30 + ++ 30 -- Panel radiator (three panels) without convection device + + |
+
+ + 0.80 + + |
+
+ + 0.20 + + |
+
+ + PanelRadiator31 + ++ 31 -- Panel radiator (three panels) with one convection device + + |
+
+ + 0.85 + + |
+
+ + 0.15 + + |
+
+ + PanelRadiator32 + ++ 32 -- Panel radiator (three panels) with two or more convection + devices + + |
+
+ + 0.90 + + |
+
+ + 0.10 + + |
+
+ + ConvectorHeaterUncovered + ++ Convector heater without cover + + |
+
+ + 0.95 + + |
+
+ + 0.05 + + |
+
+ + ConvectorHeaterCovered + ++ Convector heater with cover + + |
+
+ + 1.00 + + |
+
+ + - no radiative transport - + + |
+
+
+ The Height H of the radiator is discretized in N single Layers, as
+ shown in Figure 1
+
+
+
+
+ Figure 1: Multilayer Model of radiator +
++ For every layer the equation (1) is solved. +
+
+
+ |
+
+
+ |
+
+ | + |
+ The total heat emission consists of a convective and a radiative + part. +
+
+ + + + |
+
+
+ |
+
+ + + + |
+
+
+ |
+
+ + + + |
+
+
+ |
+
+ | + |
+ The convective heat emission is proportional to . +
++ The radiative heat emission is proportional to =(T_L + DeltaT)^4-TR^4 (T_L: Room Temperature, DeltaT: + heater excess temperature, T_R: radiative temperature). +
+
+ + + + |
+
+
+ |
+
+ + + + |
+
+
+ |
+
+ | + |
+ The heat emission of the radiator depends on the heater excess + temperature. In the model it is possible to choose between: +
+
+ + Method ++ |
+
+ + Formula ++ |
+ + |
+ + arithmetic heater excess temperature + + |
+
+ + + + |
+
+
+ |
+
+ + logarithmic heater excess temperature + + |
+
+ + + + |
+
+
+ |
+
+ + exponential heater excess temperature according to [2] + + |
+
+ + + + |
+
+
+ |
+
+ | + | + |
+ Due to stability reasons and accuracy at small heating medium flow, + an exponential calculation of the heater excess temperture is + recommended. The function \"calcHeaterExcessTemp \" regularize the + discontinuities in equation (9). +
++ The radiator exponent according to DIN 442 is valid for the total + heat emission. the radiative heat emission part grows larger. This is + considered by the following formulas: +
+
+ + + + |
+
+
+ |
+
+ + + + |
+
+
+ |
+
+ | + |
+ The modified convective exponent is calculated by (11). The region of + discontinuity in eq. (11) has not yet been regulized, so a constant + radiator exponent is used for now. +
++ In the model the heat emission is calculated according to eq. (5), + (6) for every layer and the respective power is connected to the romm + via the thermal ports. A varHeatSource (inPort=total heat emission) + is connected via a thermal port to the enthalpie flow of the heating + medium and the stored heat in the radiator mass. +
++ |
+ Knowing the heat load of the room, an appropriate radiator can be + choosen out of a Radiator DataBase via a record. But it is also + possible to simulate with arbitrary parameters. +
++ The thermal part of the model is adapted from [3] and [1]. +
++ Boiler model without an internal controller. +
++ The boilers parameterization is based on records from the DataBase + library. In the range of minimal and nominal heat power a modulating + operation is possible. +
++ The control strategy is pretended from an external controller. There + is an ON/OFF switch for the boiler and also a possibility to control + the modulating operation, boilers capacity. +
++ Both, actually and intigrated gas consumption can be taken from + boilers outputs. +
++ Boiler +
+", + revisions="
+
+ Simple model for a electricity driven CHP. using record
+
+ There are two possibilities for parameterization. The first is based + on records for CHP characteristics from the FastHVAC.DataBase. In this + case the electrical and thermal efficiency of the CHP is a function + of return temperature, water mass flow rate and electrical power. +
++ The second possibility is to set the parameters manually (compare: + Parameters-Unit properties). In this case the set values are + constant. +
++ The electrical and thermal behavior of the CHP is represented by PT1 + transfer function. The control strategy is pretended from an external + controller. There is an ON/OFF switch for the boiler and also a + possibility to control the modulating operation, CHPs electrical + capacity. Furthermore a switch counter is implemented. +
++ CHP +
+", + revisions="+ Heat pump black box model with two simple heat exchangers, no + controllers included. +
++ Works as on/off-controlled heat pump or heat pump with capacity + control. The type of capacity and electrical power calculation can be + chosen: +
++ Correction models of the calculation can be activated that effect the + efficiency or the start-up and shut-off behavior of the heat pump. +
++ The heat pump speed is helt between the boundaries N_min and N_max + even if the input speed is higher or lower. But no further + controlling is implemented. The control logic is conciously not + integrated into this model. +
++ The calculation of the capacity and electric power does not represent + any dynamic behavior of the refrigerant cycle as it occurs in real + heat pumps. Therefor two possibilities exist, to add dynamic + behavior: +
++ See ValidationHeatPump +
+", + revisions="+ Base model for a pipe. +
++ This model for a discrete pipe fluid represents just the fluid + without a pipe wall. The outside heat port is a multiple heat port, + this allows the heat transfer connection of each discrete fluid + element with the environment. +
+",revisions=" ++ This model is based on pipeBase. The + pipes parameter can be chosen from DataBase or + entered manually . This model takes into account the heat loss due to + convection and / or radiation and insulation can also be chosen. +
++ The fluid inside the pipe is represented by the model HeatCapacitor. + Two cilindrical layers with + heat conduction and heat + storage where added for the pipe wall and pipe insulation each. +
++ The model directly calculates radiation and convection instead of + modeling these phenomena outside the pipe, an ambient temperature can + be prescribed at the heat-port and the star of the pipe and the loss + to ambient will be calculated within the pipe model. The purpose is + to clean up bigger models and to simplify modeling systems with pipes + outside building-walls. +
++ Please note that it's not possible to consider radiation without + considering convection. +
++ Also, be careful when using neither isolation nor convection, as this + will result in ideal heat transfer to the outside of the pipe and so + to a significant heat loss. Might be useful if used for example for + CCA (concrete core activation). +
++ Pipes +
+", +revisions="+ This model is based on DynamicPipe. The + difference is that the aggregated pipe has pipe wall and insulation + wall which allows discretisation of pipe wall and pipe insulation. +
++ Differently from DynamicPipe for each + discretisation of the pipe, there is a connector to the corresponding + element of the discretized pipe wall. Each element of the discretised + pipe wall is connected to a corresponding element of the discretized + insulation wall. The heat-ports and stars of all nodes are then + collected to form two single ports, which can be connected to an + ambient temperature. +
++ Pipes +
+", +revisions="+ Model for an ideal fluid source with real input connectors to set the + mass flow and the temperature of the fluid. +
++ The output of the fluid source includes following values: +
+
+
+ The fluid source uses the real input to set the flow mass rate and
+ the temperature of the fluid. The specific heat capacity of the
+ medium is referred to the record SimpleMedium. The specific enthalpy
+ is a dependent variable (h=T*cp).
+
+ Examples can be found in FluidSource +
+", +revisions="+ Model for an ideal pump. +
++ Ideal pump +
++ The input and output of the pump include respectively following + values: +
++ The pump uses the real input to set the mass flow rate. The specific + heat capacity of the medium can be set as a parameter, default value + is referred to the record SimpleMedium. The temperature and the + specific enthalpy remain constant. +
++ Examples can be found in Pump +
+", + revisions="+ Mass flow sensor measures the mass flow rate. +
++ Temperature sensor measures the absolute temperature. +
++ Sink model for variable heat flow. Can also be used as a source for + variable heat flow +
++ The Sink model represents a variable heat flow sink, controlled by a + real input port. This model possesses sink function as default, a + source function can be chosen. +
++ Examples can be found in SinkSourceVesselTest +
+", + revisions="+ Sink model vessel. +
++ Sink model for in stream variables mass flow and specific enthalpy + flow. +
++ Examples can be found in SinkSourceVesselTest +
+", + revisions="+ Model for heat transfer between buffer storage layers. +
++ Models buoyancy according to + Buildings.Fluid.Storage.BaseClasses.Buoyancy model of Buildings + library, cf. https://simulationresearch.lbl.gov/modelica. No + conduction is implemented apart from when buoyancy occurs. +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water. Buoyancy and conduction are considered + individually +
++ Total massflow by buoyancy is calculated by a fixed time Tau, a fixed + dT_ref and the actual temperature difference between the layers dT. + The partial mass ratio that goes to each layer is calculated by a + selectable predefined profile (buoyancyDistribution). +
++ Model was developed by Christian Grozescu in his master thesis + Extension of Thermal Storage Models for Energy System + Simulations, 2017 +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water and buoyancy according to Viskanta et al., 1997. + An effective heat conductivity is therefore calculated. Used in + BufferStorage model. +
++ R. Viskanta, A. KaraIds: Interferometric observations of the + temperature structure in water cooled or heated from above. + Advances in Water Resources, volume 1, 1977, pages 57-69. + Bibtex-Key [R.VISKANTA1977] +
+", + revisions="+ Model for heat transfer between buffer storage layers. +
++ Models conductance of water and buoyancy according to Viskanta et + al., 1997. An effective heat conductivity is therefore calculated. + Used in BufferStorage model. In addition, the smooth() + expression is used for the transition of the buoyancy model. +
++ R. Viskanta, A. KaraIds: Interferometric observations of the + temperature structure in water cooled or heated from above. + Advances in Water Resources, volume 1, 1977, pages 57-69. + Bibtex-Key [R.VISKANTA1977] +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water and additional effective conductivity (in case + the above layer is colder than the lower layer). Used in + BufferStorage model. +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water. An effective heat conductivity is therefore + calculated. Used in BufferStorage model. +
++ R. Viskanta, A. KaraIds: Interferometric observations of the + temperature structure in water cooled or heated from above. + Advances in Water Resources, volume 1, 1977, pages 57-69. + Bibtex-Key [R.VISKANTA1977] +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water. Buoyancy and conduction are considered + individually +
++ Equations and parameters for calculating the buoyancy heatflow are + empirically and derived by CFD simulations. The buoyancy is split up + into three parts: Freebuoy, Botmix, Topmix. +
++ Model was developed by Christian Grozescu in his master thesis + Extension of Thermal Storage Models for Energy System + Simulations, 2017 +
+", + revisions="+ Model for heat transfer between buffer storage layers. Models + conductance of water. Buoyancy and conduction are considered + individually. Similar to HeatTransferQbuoy but extended by a fixed + time period in which a check is performerd if a buoyancy layers + exists. +
++ Equations and parameters for calculating the buoyancy heatflow are + empirically and derived by CFD simulations. The buoyancy is split up + into three parts: Freebuoy, Botmix, Topmix. +
++ Model was developed by Christian Grozescu in his master thesis + Extension of Thermal Storage Models for Energy System + Simulations, 2017 +
+", + revisions="+ Model of a heating coil to heat a fluid (e.g. water) by a given input + on the heat port. +
++ The heating coil is implemented as a pipe which is going through the + storage tank. The heat transfer to the storage tank is modelled with + a heat transfer coefficient. +
+", + revisions="+ Partial model for different heat transfer layer models. +
++ +
+", + revisions="+ Heat transfer model for heat transfer between two fluid layers. +
++ +
+ +", revisions= + "+ Buffer storage model with support for heating rod and two heating + coils. +
++ It represents a buffer storage stratified into n layers where 1 + represents the bottom layer and n represents the top layer. The + layers are connected to each other allowing heat and fluid transfer. + The conductance, buoyancy and enthalpy flow represent the heat + transfer between the layers. +
++ The geometrical data for the storage is read by records in the + DataBase package. +
++ The model also includes heat losses over the storage walls (wall, top + and bottom). +
+", +revisions="+ Heat transfer model for heat transfer between two fluid layers. +
++ +
+ +", + revisions="+ Buffer storage model with support for heating rod and two heating + coils. Model with variable connection pairs for loading and unlouding + cycles which are defined by the associated storage layer + number of the ports. +
++ It represents a buffer storage stratified into n layers where 1 + represents the bottom layer and n represents the top layer. The + layers are connected to each other allowing heat and fluid transfer. + The conductance, buoyancy and enthalpy flow represent the heat + transfer between the layers. +
++ The geometrical data for the storage is read by records in the + DataBase package. In this model the number and the position of + connection pairs for loading and unlouding cycles is variable. The + position for each connection pair is defined by the associated + storage layer number of input and output connection (compare + connections tab). +
++ The model also includes heat losses over the storage walls (wall, top + and bottom). +
+
+
+ Example Results
+
+ BufferStorageVariablePorts +
+", +revisions="+ Heat transfer model for heat transfer between two fluid layers. +
+ +", + revisions="+ Buffer storage model with support for heating rod and two heating + coils. Model with variable connection pairs for loading and unlouding + cycles which are defined by the associated storage layer + number of the ports. +
++ +
++ It represents a buffer storage stratified into n layers where 1 + represents the bottom layer and n represents the top layer. The + layers are connected to each other allowing heat and fluid transfer. + The conductance, buoyancy and enthalpy flow represent the heat + transfer between the layers. +
++ The geometrical data for the storage is read by records in the + DataBase package. In this model the number and the position of + connection pairs for loading and unlouding cycles is variable. The + position for each connection pair is defined by the associated + storage layer number of input and output connection (compare + connections tab). +
++ The model also includes heat losses over the storage walls (wall, top + and bottom). +
+", +revisions="+ Model for a manifold +
++ +
++ Collects the flow of the n input ports into one single output port. + Input flows must be of the same medium (same density and specific + heat capacity). The temperature and enthalpy of the output flow are + obtained by balancing the mass and enthalpy flows. +
+", +revisions="+ Model for a splitter +
++ +
++ Splits the input flow evenly in n output flows. +
+", +revisions="+The block passes its input signal as output signal +as long as the input is above uMin. If this is not the case, +y=uMin is passed as output. +
+ +"), Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Line(points={{0,-90},{0,68}}, color={192,192,192}), + Polygon( + points={{0,90},{-8,68},{8,68},{0,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-90,0},{68,0}}, color={192,192,192}), + Polygon( + points={{90,0},{68,-8},{68,8},{90,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-80,-70},{-50,-70},{50,70},{64,90}}, color={0,0,0}), + Text( + extent={{-150,-150},{150,-110}}, + lineColor={0,0,0}, + textString="uMin=%uMin"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + lineColor={0,0,255})}), + Diagram(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={2,2}), graphics={ + Line(points={{0,-60},{0,50}}, color={192,192,192}), + Polygon( + points={{0,60},{-5,50},{5,50},{0,60}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-60,0},{50,0}}, color={192,192,192}), + Polygon( + points={{60,0},{50,-5},{50,5},{60,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-50,-40},{-30,-40},{30,40},{50,40}}, color={0,0,0}), + Text( + extent={{46,-6},{68,-18}}, + lineColor={128,128,128}, + textString="u"), + Text( + extent={{-30,70},{-5,50}}, + lineColor={128,128,128}, + textString="y"), + Text( + extent={{-58,-54},{-28,-42}}, + lineColor={128,128,128}, + textString="uMin"), + Text( + extent={{26,40},{66,56}}, + lineColor={128,128,128}, + textString="uMax")}), + uses(Modelica(version="3.2"))); + end MinLimiter; + +public + Modelica.Blocks.Interfaces.RealInput T_set(unit="K") + "Valve position in the range 0..1" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=0, + origin={-98,-32}),iconTransformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-90,-30}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a T_room + annotation (Placement(transformation(extent={{-100,20},{-80,40}}), + iconTransformation(extent={{-100,20},{-80,40}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor + temperatureSensor + annotation (Placement(transformation( + extent={{-6,-6},{6,6}}, + rotation=0, + origin={-44,30}))); + Modelica.Blocks.Continuous.LimPID PID( + controllerType=Modelica.Blocks.Types.SimpleController.PI, + k=k, + Ti=Ti, + limitsAtInit=true, + yMax=1, + yMin=0, + xi_start=0, + xd_start=0, + y_start=0.5, + initType=Modelica.Blocks.Types.InitPID.InitialOutput) + annotation (Placement(transformation(extent={{11,-11},{-11,11}}, + rotation=180, + origin={-25,-1}))); + FastHVAC.Components.Valves.BaseClases.HysteresisValve hysteresisValve( + filteredOpening=filteredOpening, + leakageOpening=leakageOpening, + riseTime=riseTime) + annotation (Placement(transformation(extent={{0,-12},{20,10}}))); + + Modelica.Blocks.Sources.RealExpression realExpression(y=valveCharacteristic( + hysteresisValve.opening_actual)*dotm_nominal) + annotation (Placement(transformation(extent={{-10,12},{20,38}}))); + Modelica.Blocks.Math.Product product + annotation (Placement(transformation(extent={{56,-6},{76,14}}))); +equation + + connect(T_room, temperatureSensor.port) annotation (Line( + points={{-90,30},{-50,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temperatureSensor.T, PID.u_m) annotation (Line( + points={{-38,30},{-25,30},{-25,12.2}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(T_set, PID.u_s) annotation (Line( + points={{-98,-32},{-56,-32},{-56,-1},{-38.2,-1}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(PID.y, hysteresisValve.opening) annotation (Line( + points={{-12.9,-1},{0,-1}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(dotm_set, product.y) annotation (Line( + points={{101,3},{90,3},{90,4},{77,4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(realExpression.y, product.u1) annotation (Line( + points={{21.5,25},{54,25},{54,10}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(hysteresisValve.opening_actual, product.u2) annotation (Line( + points={{19.8,-1},{54,-1},{54,-2}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), + graphics), Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Bitmap(extent={{-104,100},{102,-100}}, fileName= + "modelica://HVAC/Images/ThermostaticHead_Icon.PNG")}), + Documentation(info="+ Thermostatic valve model. +
++ The thermostatic valve model is designed as a pump controller. The + mass flow set value is calculated based on nominal mass flow and the + temperature difference between the setpoint and actual value. +
+
+ The valve opening characteristic is described by the function
+ valveCharacteristic
, linear characteristic by default,
+ can be replaced by any user-defined function. Equal percentage with
+ customizable rangeability and an optimal characteristic are already
+ provided by the library.
+
+ With the optional parameter \"filteredOpening\", the opening can be + filtered with a second order, criticalDamping filter so that + the opening demand is delayed by parameter \"riseTime\". The filtered + opening is then available via the output signal \"opening_filtered\" + and is used to control the valve equations. This approach + approximates the driving device of a valve. The \"riseTime\" parameter + is used to compute the cut-off frequency of the filter by the + equation: f_cut = 5/(2*pi*riseTime). It defines the time that is + needed until opening_filtered reaches 99.6 % of a step input of + opening. +
++ Model for a three way valve +
++ +
++ The instreaming flow can be divided into two flows. The ratio of the + two flows is controlled by the external input. +
+", +revisions="+ Base data defintion for boilers: Heating curves - Tflow = f(Toutside) + - for night and day modes. +
++ +
++ Base data definition for record used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
+", + revisions="+ Collection of Heating Curves for Viessmann Vitotronic Controller +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ Collection of Heating Curves for Viessmann Vitotronic Controller +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ Data set definition for real boilers. The Boiler has a two point + (on/off) characteristic. +
++ +
++ Base data definition for record used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
+", revisions=" ++ Virtual boiler with 1 kW power output. +
++ +
+")); +end Boiler_Virtual_1kW; diff --git a/AixLib/FastHVAC/Data/Boiler/General/Boiler_Vitocrossal200_311kW.mo b/AixLib/FastHVAC/Data/Boiler/General/Boiler_Vitocrossal200_311kW.mo new file mode 100644 index 0000000000..093110402c --- /dev/null +++ b/AixLib/FastHVAC/Data/Boiler/General/Boiler_Vitocrossal200_311kW.mo @@ -0,0 +1,72 @@ +within AixLib.FastHVAC.Data.Boiler.General; +record Boiler_Vitocrossal200_311kW + "Gas-fired condensing boiler Viessmann Vitocrossal200 311kW" + extends BoilerTwoPointBaseDataDefinition( + name="Vitocrossal200_311kW", + volume=279/1000, + PressureDrop = 4000/(7.79e-3)^2, + Q_nom = 326000, + Q_min = 326000*0.33, + eta = [0.3, (0.973+0.989)/2; + 0.4, (0.960+0.981)/2; + 0.5, (0.942+0.975)/2; + 0.6, (0.924+0.968)/2; + 0.7, (0.907+0.962)/2; + 0.8, (0.889+0.957)/2; + 0.9, (0.872+0.953)/2; + 1.0, (0.857+0.952)/2]); + annotation (preferredView="text", + Documentation(revisions="+ +
++ 3 efficiencies are given in the TechDoc. +
++ As supply temperatures around 50 °C are common (see heating curve), + the average of the first two efficiencies was used. +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ +
++ Record is used with HVAC.Components.HeatGenerators.Boiler.BoilerWithController +
++ Source: +
++ Record for Buderus Logano Plus GB202 condensing boiler. Temperature + range: 40/30°C +
++ Record is not currently used in any model. +
++ Source: +
++ Record for Buderus Logano Plus GB202 condensing boiler. Temperature + range: 75/60°C +
++ +
++ Record is not currently used in any model. +
++ Source: +
++ Base data definition for efficiency based on the current work load. +
++ +
++ Base data definition for record which at this time is not used in any + model +
+", revisions=" ++ Free workload range (0-1) with fixed efficiency of 100% +
++ +
++ Record is currently not used in any model. +
+")); +end ideal; diff --git a/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.mo b/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.mo new file mode 100644 index 0000000000..8d13fe59e3 --- /dev/null +++ b/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.mo @@ -0,0 +1,5 @@ +within AixLib.FastHVAC.Data.Boiler; +package WorkLoad + extends Modelica.Icons.Package; + +end WorkLoad; diff --git a/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.order b/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.order new file mode 100644 index 0000000000..0a26ebde07 --- /dev/null +++ b/AixLib/FastHVAC/Data/Boiler/WorkLoad/package.order @@ -0,0 +1,4 @@ +BuderusGB202_40_30 +BuderusGB202_75_60 +WorkLoadBaseDataDefinition +ideal diff --git a/AixLib/FastHVAC/Data/Boiler/package.mo b/AixLib/FastHVAC/Data/Boiler/package.mo new file mode 100644 index 0000000000..834431cb9b --- /dev/null +++ b/AixLib/FastHVAC/Data/Boiler/package.mo @@ -0,0 +1,5 @@ +within AixLib.FastHVAC.Data; +package Boiler "Parameters of real boilers" + extends Modelica.Icons.Package; + +end Boiler; diff --git a/AixLib/FastHVAC/Data/Boiler/package.order b/AixLib/FastHVAC/Data/Boiler/package.order new file mode 100644 index 0000000000..79e85da070 --- /dev/null +++ b/AixLib/FastHVAC/Data/Boiler/package.order @@ -0,0 +1,3 @@ +DayNightMode +General +WorkLoad diff --git a/AixLib/FastHVAC/Data/CHP/AisinSeiki.mo b/AixLib/FastHVAC/Data/CHP/AisinSeiki.mo new file mode 100644 index 0000000000..683468496d --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/AisinSeiki.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record AisinSeiki + + extends BaseDataDefinition( + a_0=-0.0315, + a_1=-0.0064, + a_2=0.0788, + a_3=-1.0624, + a_4=0.4869, + a_5=0.0000, + a_6=-0.0000, + b_0=0.7111, + b_1=0.0065, + b_2=-0.0811, + b_3=-4.8054, + b_4=2.2644, + b_5=-0.0000, + b_6=0.0001, + P_elRated=5580, + tauQ_th=857.84, + tauP_el=5.41, + dotm_max=0.18, + dotm_min=0.18); +end AisinSeiki; diff --git a/AixLib/FastHVAC/Data/CHP/BaseDataDefinition.mo b/AixLib/FastHVAC/Data/CHP/BaseDataDefinition.mo new file mode 100644 index 0000000000..51f7465d84 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/BaseDataDefinition.mo @@ -0,0 +1,30 @@ +within AixLib.FastHVAC.Data.CHP; +record BaseDataDefinition "Basic Mikro_KWK Data" +extends Modelica.Icons.Record; + + import SI = Modelica.SIunits; + import SIconv = Modelica.SIunits.Conversions.NonSIunits; +Modelica.SIunits.MassFlowRate dotm_max "maximum mass flow rate"; +Modelica.SIunits.MassFlowRate dotm_min "minimum mass flow rate"; + parameter SI.Power P_elRated "rated electrical power (unit=W)"; + parameter Modelica.SIunits.Time tauQ_th + "time constant thermal power start behavior (unit=sec) "; + parameter Modelica.SIunits.Time tauP_el + "time constant electrical power start behavior (unit=sec)"; + + parameter Real a_0; + parameter Real a_1; + parameter Real a_2; + parameter Real a_3; + parameter Real a_4; + parameter Real a_5; + parameter Real a_6; + parameter Real b_0; + parameter Real b_1; + parameter Real b_2; + parameter Real b_3; + parameter Real b_4; + parameter Real b_5; + parameter Real b_6; + +end BaseDataDefinition; diff --git a/AixLib/FastHVAC/Data/CHP/Dachs.mo b/AixLib/FastHVAC/Data/CHP/Dachs.mo new file mode 100644 index 0000000000..bfabaa519f --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Dachs.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Dachs + //import Mikro_KWK_model = CHP_package.Records.Records_model; + extends BaseDataDefinition( + a_0=0.1710, + a_1=0.0080, + a_2=0.0199, + a_3=-4.6258, + a_4=0.3781, + a_5=-0.0000, + a_6=0.0000, + b_0=1.4312, + b_1=-0.0232, + b_2=-0.0839, + b_3=2.2559, + b_4=0.7906, + b_5=0.0000, + b_6=-0.0031, + P_elRated=5500, + tauQ_th=147.05, + tauP_el=73.52, + dotm_max=0.27778, + dotm_min=0.27778); +end Dachs; diff --git a/AixLib/FastHVAC/Data/CHP/Ecopower.mo b/AixLib/FastHVAC/Data/CHP/Ecopower.mo new file mode 100644 index 0000000000..d1b1f05008 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Ecopower.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Ecopower + //import Mikro_KWK_model = CHP_package.Records.Records_model; + extends BaseDataDefinition( + a_0=-0.0417, + a_1=0.0117, + a_2=0.0104, + a_3=-0.0000, + a_4=0.0000, + a_5=-0.0000, + a_6=0.0000, + b_0=-2.0000, + b_1=0.0905, + b_2=0.1875, + b_3=-0.0000, + b_4=0.0000, + b_5=-0.0000, + b_6=-0.0000, + P_elRated=4460, + tauQ_th=882.35, + tauP_el=73.52, + dotm_max=0.287, + dotm_min=0.073); +end Ecopower; diff --git a/AixLib/FastHVAC/Data/CHP/Ecopower_1_0.mo b/AixLib/FastHVAC/Data/CHP/Ecopower_1_0.mo new file mode 100644 index 0000000000..57d130c22f --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Ecopower_1_0.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Ecopower_1_0 + + extends BaseDataDefinition( + a_0=0.263, + a_1=0, + a_2=0, + a_3=-0.0000, + a_4=0.0000, + a_5=-0.0000, + a_6=0.0000, + b_0=0.657, + b_1=0, + b_2=0, + b_3=-0.0000, + b_4=0.0000, + b_5=-0.0000, + b_6=-0.0000, + P_elRated=1000, + tauQ_th=882.35, + tauP_el=73.52, + dotm_max=0.06, + dotm_min=0.06); +end Ecopower_1_0; diff --git a/AixLib/FastHVAC/Data/CHP/Ecopower_3_0.mo b/AixLib/FastHVAC/Data/CHP/Ecopower_3_0.mo new file mode 100644 index 0000000000..d99f0b1203 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Ecopower_3_0.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Ecopower_3_0 + + extends BaseDataDefinition( + a_0=0.25, + a_1=0, + a_2=0, + a_3=-0.0000, + a_4=0.0000, + a_5=-0.0000, + a_6=0.0000, + b_0=0.65, + b_1=0, + b_2=0, + b_3=-0.0000, + b_4=0.0000, + b_5=-0.0000, + b_6=-0.0000, + P_elRated=3000, + tauQ_th=882.35, + tauP_el=73.52, + dotm_max=0.06, + dotm_min=0.06); +end Ecopower_3_0; diff --git a/AixLib/FastHVAC/Data/CHP/Kirsch.mo b/AixLib/FastHVAC/Data/CHP/Kirsch.mo new file mode 100644 index 0000000000..46c65fb696 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Kirsch.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Kirsch + + extends BaseDataDefinition( + a_0=0.117, + a_1=0.0001, + a_2=0.0286, + a_3=0, + a_4=0, + a_5=0, + a_6=0.0002, + b_0=0.7304, + b_1=-0.0029, + b_2=0.0617, + b_3=6.2774, + b_4=-1.0263, + b_5=-1.9368*10^(-6), + b_6=-0.0035, + P_elRated=3900, + tauQ_th=588.23, + tauP_el=275.73, + dotm_max=0.1236, + dotm_min=0.0819); +end Kirsch; diff --git a/AixLib/FastHVAC/Data/CHP/Xrgi.mo b/AixLib/FastHVAC/Data/CHP/Xrgi.mo new file mode 100644 index 0000000000..5fd2a84e0f --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/Xrgi.mo @@ -0,0 +1,24 @@ +within AixLib.FastHVAC.Data.CHP; +record Xrgi + + extends BaseDataDefinition( + a_0=-1.3036, + a_1=0.0009, + a_2=0.0982, + a_3=-0.0000, + a_4=0.0000, + a_5=-0.0000, + a_6=0.0000, + b_0=0.1822, + b_1=0.0011, + b_2=0.0123, + b_3=0.6963, + b_4=-0.5130, + b_5=-0.0000, + b_6=0.0011, + P_elRated=14300, + tauQ_th=661.76, + tauP_el=102.94, + dotm_max=0.3509, + dotm_min=0.0586); +end Xrgi; diff --git a/AixLib/FastHVAC/Data/CHP/package.mo b/AixLib/FastHVAC/Data/CHP/package.mo new file mode 100644 index 0000000000..0408110419 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/package.mo @@ -0,0 +1,5 @@ +within AixLib.FastHVAC.Data; +package CHP + extends Modelica.Icons.Package; + +end CHP; diff --git a/AixLib/FastHVAC/Data/CHP/package.order b/AixLib/FastHVAC/Data/CHP/package.order new file mode 100644 index 0000000000..827e748162 --- /dev/null +++ b/AixLib/FastHVAC/Data/CHP/package.order @@ -0,0 +1,8 @@ +AisinSeiki +BaseDataDefinition +Dachs +Ecopower +Ecopower_1_0 +Ecopower_3_0 +Kirsch +Xrgi diff --git a/AixLib/FastHVAC/Data/package.mo b/AixLib/FastHVAC/Data/package.mo new file mode 100644 index 0000000000..7855684cae --- /dev/null +++ b/AixLib/FastHVAC/Data/package.mo @@ -0,0 +1,21 @@ +within AixLib.FastHVAC; +package Data "Records for the models of the FourTherm library" + + + extends Modelica.Icons.Package; + + +annotation(Documentation(info="+ Example of mass flow & temperature sensor. Compare to equivalent + Fluid-/HVAC- based models. +
+", +revisions="+ This model defines a inlet enthalpy port used withi the FastHVAC + package +
+", revisions=" ++ This model defines a inlet enthalpy port used within the FastHVAC + package +
+", revisions=" ++ This package contains basic classes that are used within the FastHVAC + package +
+")); +end Interfaces; diff --git a/AixLib/FastHVAC/Interfaces/package.order b/AixLib/FastHVAC/Interfaces/package.order new file mode 100644 index 0000000000..86657aea23 --- /dev/null +++ b/AixLib/FastHVAC/Interfaces/package.order @@ -0,0 +1,3 @@ +EnthalpyPort +EnthalpyPort_a +EnthalpyPort_b diff --git a/AixLib/FastHVAC/Media/BaseClasses/MediumSimple.mo b/AixLib/FastHVAC/Media/BaseClasses/MediumSimple.mo new file mode 100644 index 0000000000..2778e4e9ce --- /dev/null +++ b/AixLib/FastHVAC/Media/BaseClasses/MediumSimple.mo @@ -0,0 +1,22 @@ +within AixLib.FastHVAC.Media.BaseClasses; +record MediumSimple +parameter Modelica.SIunits.SpecificHeatCapacity c + "Heat capacity of considered medium"; +parameter Modelica.SIunits.Density rho "Density of considered medium"; +parameter Modelica.SIunits.ThermalConductivity lambda + "Thermal conductivity of considered medium"; +parameter Modelica.SIunits.DynamicViscosity eta + "Dynamic viscosity of considered medium"; + annotation (Documentation(info="+ This record declares parameters that are used by models within the + FastHVAC Package. +
+", revisions=" ++ This record declares parameters for the solar fluid with 50%-vol + DC20. Media properties can be found in: +
++ http://www.wagnersolarshop.com/files//db3431d4-a9ac-4f0b-99ed-a11700e12772/EN-XX_DC20_TI-091110-11207500[1].pdf +
+", revisions=" ++ This record declares parameters that are used by models within the + FastHVAC Package. +
+", revisions=" ++ This package contains media models for water and water mixtures. The + media models in this package are mainly developed for the use with + the FastHVAC library. The models are simpler then the oder media + models in this library. +
+"), +Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Line( + points = {{-76,-80},{-62,-30},{-32,40},{4,66},{48,66},{73,45},{62,-8},{48,-50},{38,-80}}, + color={64,64,64}, + smooth=Smooth.Bezier), + Line( + points={{-40,20},{68,20}}, + color={175,175,175}), + Line( + points={{-40,20},{-44,88},{-44,88}}, + color={175,175,175}), + Line( + points={{68,20},{86,-58}}, + color={175,175,175}), + Line( + points={{-60,-28},{56,-28}}, + color={175,175,175}), + Line( + points={{-60,-28},{-74,84},{-74,84}}, + color={175,175,175}), + Line( + points={{56,-28},{70,-80}}, + color={175,175,175}), + Line( + points={{-76,-80},{38,-80}}, + color={175,175,175}), + Line( + points={{-76,-80},{-94,-16},{-94,-16}}, + color={175,175,175})})); +end Media; diff --git a/AixLib/FastHVAC/Media/package.order b/AixLib/FastHVAC/Media/package.order new file mode 100644 index 0000000000..065476c3e5 --- /dev/null +++ b/AixLib/FastHVAC/Media/package.order @@ -0,0 +1,3 @@ +DC20 +WaterSimple +BaseClasses diff --git a/AixLib/FastHVAC/package.mo b/AixLib/FastHVAC/package.mo new file mode 100644 index 0000000000..98669106e4 --- /dev/null +++ b/AixLib/FastHVAC/package.mo @@ -0,0 +1,19 @@ +within AixLib; +package FastHVAC "Package contains models for components and components for HVAC components with a high simplification of fluid behaviour." + extends Modelica.Icons.Package; + + + + + + + + +annotation ( +preferredView="info", Documentation(info="This package contains models for HVAC components with a high +simplification of fluid behavior. For more information see +FastHVAC - A library for fast composition and simulation of +building energy systems. +")); +end FastHVAC; diff --git a/AixLib/FastHVAC/package.order b/AixLib/FastHVAC/package.order new file mode 100644 index 0000000000..d436435baf --- /dev/null +++ b/AixLib/FastHVAC/package.order @@ -0,0 +1,6 @@ +Components +Media +Data +Examples +Interfaces +BaseClasses diff --git a/AixLib/Fluid/Actuators/BaseClasses/ActuatorSignal.mo b/AixLib/Fluid/Actuators/BaseClasses/ActuatorSignal.mo index a14eb11c2f..c5d34bf2f9 100644 --- a/AixLib/Fluid/Actuators/BaseClasses/ActuatorSignal.mo +++ b/AixLib/Fluid/Actuators/BaseClasses/ActuatorSignal.mo @@ -8,6 +8,8 @@ model ActuatorSignal parameter Modelica.SIunits.Time riseTime=120 "Rise time of the filter (time to reach 99.6 % of an opening step)" annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); + parameter Integer order(min=1) = 2 "Order of filter" + annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)" annotation(Dialog(tab="Dynamics", group="Filtered opening",enable=use_inputFilter)); @@ -34,7 +36,7 @@ protected iconTransformation(extent={{60,50},{80,70}}))); Modelica.Blocks.Continuous.Filter filter( - order=2, + final order=order, f_cut=5/(2*Modelica.Constants.pi*riseTime), final init=init, final y_start=y_start, @@ -97,6 +99,10 @@ Models that extend this model use the signal current position of the actuator.+The filter order can be changed to modify the transient response +of the actuator. +
+See AixLib.Fluid.Actuators.UsersGuide @@ -105,6 +111,12 @@ for a description of the filter. ", revisions="
order
.filteredInput
to use_inputFilter
.kRes
, now the pressure drop of the fully open damper is subtracted from the fixed resistance.
+dp_nominalIncludesDamper
.
+
+Two way valve with polynomial opening characteristic.
+The polynomial coefficients are defined using parameter c
.
+The elements of c
are coefficients for increasing powers of y
,
+starting with the power 0
, which corresponds to a fixed offset.
+This valve model can be used to implement valves with a custom
+opening characteristic, such as a combination
+of a linear and an equal percentage characteristic.
+
+This model is based on the partial valve model + +AixLib.Fluid.Actuators.BaseClasses.PartialTwoWayValve. +Check this model for more information, such +as the regularization near the origin. +
+", +revisions=" +tau<
", revisions="
-
+July 7, 2018, by Filip Jorissen:
+Added asserts that verify whether flow reversal occurs when
+verifyFlowReversal=true
and portFlowDirection<>Bidirectional
.
+See #963.
+
+-
+July 8, 2018, by Filip Jorissen:
+Added nominal value of h_outflow
in FluidPorts
.
+See #977.
+
+-
+March 30, 2018, by Filip Jorissen:
+Added graphical illustrations for the values of portFlowDirection
.
+Added asserts that verify the consistency of
+the values of portFlowDirection
.
+See #902.
+
+-
February 22, 2016, by Michael Wetter:
Conditionally removed control volume vol
, and added the conditional connnector
port_internal
.
@@ -197,7 +277,8 @@ This is for
https://github.com/lbl-srg/modelica-buildings/issues/475.
-- February 20, 2016, by Ruben Baetens:
+ -
+February 20, 2016, by Ruben Baetens:
Removal of dynamicBalance
as parameter for massDynamics
and energyDynamics
.
-
@@ -214,10 +295,51 @@ September 18, 2008 by Michael Wetter:
Replaced splitter model with a fluid port since the
splitter model in Modelica.Fluid 1.0 beta does not transport
mC_flow
.
+
-
June 11, 2008 by Michael Wetter:
First implementation.
-"));
+"), Icon(graphics={
+ Polygon(
+ points={{104,28},{124,20},{104,12},{104,28}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_2==Modelica.Fluid.Types.PortFlowDirection.Leaving),
+ Polygon(
+ points={{124,28},{104,20},{124,12},{124,28}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_2==Modelica.Fluid.Types.PortFlowDirection.Entering),
+ Polygon(
+ points={{-124,28},{-104,20},{-124,12},{-124,28}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_1==Modelica.Fluid.Types.PortFlowDirection.Entering),
+ Polygon(
+ points={{-104,28},{-124,20},{-104,12},{-104,28}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_1==Modelica.Fluid.Types.PortFlowDirection.Leaving),
+ Polygon(
+ points={{1,8},{21,6.12323e-17},{1,-8},{1,8}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_3==Modelica.Fluid.Types.PortFlowDirection.Entering,
+ origin={20,-125},
+ rotation=90),
+ Polygon(
+ points={{21,14},{1,6},{21,-2},{21,14}},
+ lineColor={0,128,255},
+ fillColor={0,128,255},
+ fillPattern=FillPattern.Solid,
+ visible=portFlowDirection_3==Modelica.Fluid.Types.PortFlowDirection.Leaving,
+ origin={26,-125},
+ rotation=90)}));
end PartialThreeWayResistance;
diff --git a/AixLib/Fluid/BoilerCHP/Boiler.mo b/AixLib/Fluid/BoilerCHP/Boiler.mo
index f478cb974a..ef43607123 100644
--- a/AixLib/Fluid/BoilerCHP/Boiler.mo
+++ b/AixLib/Fluid/BoilerCHP/Boiler.mo
@@ -60,9 +60,9 @@ model Boiler "Boiler with internal and external control"
replaceable model ExtControl =
AixLib.Fluid.BoilerCHP.BaseClasses.Controllers.ExternalControlNightDayHC
constrainedby
- AixLib.Fluid.BoilerCHP.BaseClasses.Controllers.PartialExternalControl
- "ExternalControl"
- annotation (Dialog(tab="External Control"),choicesAllMatching=true);
+ AixLib.Fluid.BoilerCHP.BaseClasses.Controllers.PartialExternalControl
+ "External control"
+ annotation (Dialog(tab="External Control"),choicesAllMatching=true);
BaseClasses.Controllers.InternalControl internalControl(
final paramBoiler=paramBoiler,
final KR=KR,
@@ -127,11 +127,10 @@ equation
coordinateSystem(preserveAspectRatio=false)),
Documentation(info="
Overview
-A boiler model consisting of the internal boiler controler and a replaceable
-outer controler.
-This controler can be chosen to provide the boiler temperature setpoint based on
-the chosen conditions
-such as ambient air temperature, etc.
+
A boiler model consisting of the internal boiler controller and a replaceable
+outer controller.
+This controller can be chosen to provide the boiler temperature setpoint based
+on the chosen conditions such as ambient air temperature, etc.
",
revisions="
@@ -148,7 +147,7 @@ equations for boolean inputs
Base class of an example demonstrating the use of a heat pump connected to +two storages and a geothermal source. A replaceable model is connected in the +flow line of the heating circuit. A peak load device can be added here.
+", revisions=" +Base class of an example demonstrating the use of a heat pump connected to two storages and a geothermal source. A replaceable model is connected in the flow line of the heating circuit. A peak load device can be added here. This model also includes basic controllers.
+", revisions=" +Base class containing the +AixLib.Fluid.BoilerCHP.Boiler +to be used in the examples of +AixLib.Fluid.Examples.GeothermalHeatPump. +
+", revisions=" +Model containing the simple boiler model +AixLib.Fluid.BoilerCHP.Boiler +and interfaces for external control.
+")); +end BoilerExternalControl; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Components/BoilerStandAlone.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/BoilerStandAlone.mo new file mode 100644 index 0000000000..8a6fc649f2 --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/BoilerStandAlone.mo @@ -0,0 +1,49 @@ +within AixLib.Fluid.Examples.GeothermalHeatPump.Components; +model BoilerStandAlone + "Model containing the simple boiler model and all required inputs as dummies" + extends BaseClasses.BoilerBase; + Modelica.Blocks.Sources.BooleanConstant falseSource(k=false) + "Outputs a false signal" + annotation (Placement(transformation(extent={{-6,6},{6,-6}}, + rotation=0, + origin={-94,40}))); + Modelica.Blocks.Sources.Constant ambientTemperature(k=273.15 + 10) + "Dummy for ambient temperature" + annotation (Placement(transformation( + extent={{-6,-6},{6,6}}, + rotation=0, + origin={-94,66}))); + Modelica.Blocks.Sources.BooleanConstant trueSource "Outputs a true signal" + annotation (Placement(transformation(extent={{-6,6},{6,-6}}, + rotation=180, + origin={94,-34}))); + Modelica.Blocks.Interfaces.RealOutput chemicalEnergyFlowRate(final unit="W") + "Flow of primary (chemical) energy into boiler " annotation (Placement( + transformation( + extent={{-10,10},{10,-10}}, + rotation=270, + origin={0.5,-109.5}), iconTransformation(extent={{10,-10},{-10,10}}, + rotation=90, + origin={-20.5,-109}))); +equation + connect(ambientTemperature.y, boiler.TAmbient) annotation (Line(points={{-87.4, + 66},{-74,66},{-60,66},{-60,7},{-7,7}}, color={0,0,127})); + connect(falseSource.y, boiler.switchToNightMode) annotation (Line(points={{-87.4, + 40},{-66,40},{-66,4},{-7,4}}, color={255,0,255})); + connect(trueSource.y, boiler.isOn) + annotation (Line(points={{87.4,-34},{5,-34},{5,-9}}, color={255,0,255})); + connect(chemicalEnergyFlowRateSource.y,chemicalEnergyFlowRate) annotation ( + Line(points={{-39,-56},{0.5,-56},{0.5,-109.5}}, color={0,0,127})); + annotation (Documentation(revisions=" +Model containing the simple boiler model +AixLib.Fluid.BoilerCHP.Boiler +and dummy inputs.
+")); +end BoilerStandAlone; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.mo new file mode 100644 index 0000000000..d233869e8e --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.mo @@ -0,0 +1,4 @@ +within AixLib.Fluid.Examples.GeothermalHeatPump; +package Components "Contains variants of the example with connectors to be used in system models." +extends Modelica.Icons.VariantsPackage; +end Components; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.order b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.order new file mode 100644 index 0000000000..e392d93c6e --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Components/package.order @@ -0,0 +1,3 @@ +BoilerExternalControl +BoilerStandAlone +BaseClasses diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Control/PumpControlBus.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/PumpControlBus.mo new file mode 100644 index 0000000000..217f32b4c4 --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/PumpControlBus.mo @@ -0,0 +1,30 @@ +within AixLib.Fluid.Examples.GeothermalHeatPump.Control; +expandable connector PumpControlBus + "Bus for all the pump set points in the geothermal heat pump" + extends Modelica.Icons.SignalBus; + + Modelica.SIunits.Pressure p_pumpGeothermalSource + "Pressure set point of pump moving fluid from geothermal source into system"; + Modelica.SIunits.Pressure p_pumpCondenser + "Pressure set point of pump moving fluid from storage tank to condenser of heat pump"; + Modelica.SIunits.Pressure p_pumpEvaporator + "Pressure set point of pump moving fluid from storage tank to evaporator of heat pump"; + Modelica.SIunits.Pressure p_pumpColdConsumer + "Pressure set point of pump moving fluid from storage tank to cold consumers"; + Modelica.SIunits.Pressure p_pumpHeatConsumer + "Pressure set point of pump moving fluid from storage tank to heat consumers"; + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false)), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" ++Definition of a control bus that includes all the pressure set points required +for +AixLib.Fluid.Examples.GeothermalHeatPump.Components.GeothermalHeatPump. +
+", revisions=" +March 31, 2017, by Marc Baranski:
+First implementation.
+")); +end PumpControlBus; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Control/ValveControlBus.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/ValveControlBus.mo new file mode 100644 index 0000000000..565d471ec9 --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/ValveControlBus.mo @@ -0,0 +1,41 @@ +within AixLib.Fluid.Examples.GeothermalHeatPump.Control; +expandable connector ValveControlBus + "Bus for all the valve positions in the geothermal heat pump" + extends Modelica.Icons.SignalBus; + + Real opening_valveHeatSource + "Rated value of the valve connecting the geothermal field to evaporator (0: closed, 1: open)"; + Real opening_valveColdStorage + "Rated value of the valve connecting the cold storage to evaporator (0: closed, 1: open)"; + + Real opening_valveHeatSink + "Rated value of the valve connecting the geothermal field to condenser (0: closed, 1: open)"; + Real opening_valveHeatStorage + "Rated value of the valve connecting the heat storage to condenser (0: closed, 1: open)"; + + Real feedback_valveHeatSource + "Feedback of the valve connecting the geothermal field to evaporator (0: closed, 1: open)"; + Real feedback_valveColdStorage + "Feedback of the valve connecting the cold storage to evaporator (0: closed, 1: open)"; + + Real feedback_valveHeatSink + "Feedback of the valve connecting the geothermal field to condenser (0: closed, 1: open)"; + Real feedback_valveHeatStorage + "Feedback of the valve connecting the heat storage to condenser (0: closed, 1: open)"; + + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false)), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" ++Definition of a standard control bus that includes all the pressure set points +required for + +AixLib.Fluid.Examples.GeothermalHeatPump.Components.GeothermalHeatPump. +
+", revisions=" +March 31, 2017, by Marc Baranski:
+First implementation.
+")); +end ValveControlBus; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/Control/geothermalFieldController.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/geothermalFieldController.mo new file mode 100644 index 0000000000..eacbb3684a --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/Control/geothermalFieldController.mo @@ -0,0 +1,163 @@ +within AixLib.Fluid.Examples.GeothermalHeatPump.Control; +model geothermalFieldController + "Controls the heat exchange with a heat or cold source by setting two valves" + + parameter Modelica.SIunits.Temperature temperature_low=273.15 + 40 + "Lower temperature threshold for hysteresis"; + parameter Modelica.SIunits.Temperature temperature_high=273.15 + 45 + "Upper temperature threshold for hysteresis"; + parameter Boolean warmSide=true + "true = hysteresis with negation = for warm side"; + parameter Modelica.SIunits.Time delayTime=10 + "Time delay between opening of valve 1 and 2"; + + Modelica.Blocks.Logical.Switch switch + "Switches between fully opened and fully closed" + annotation (Placement(transformation(extent={{-28,-6},{-16,6}}))); + + Modelica.Blocks.Nonlinear.FixedDelay fixedDelay(delayTime=delayTime) + "Delay that prevents that both valves react simultaneously" + annotation (Placement(transformation( + extent={{-7,-7},{7,7}}, + rotation=0, + origin={31,-45}))); + Modelica.Blocks.Math.Add add(k1=-1) + "If one valve is fully openend, the other one must be fully closed" + annotation (Placement( + transformation( + extent={{-7,-6.5},{7,6.5}}, + rotation=0, + origin={5,-44.5}))); + Modelica.Blocks.Logical.Hysteresis hysteresis(uLow=temperature_low, uHigh= + temperature_high) "Checks if the temperature is too high or too low" + annotation (Placement(transformation(extent={{-78,-6},{-66,6}}))); + Modelica.Blocks.Sources.Constant approxFullyClosed(k=0.00001) + "Used for closing a valve almost fully" annotation (Placement( + transformation( + extent={{6,-6},{-6,6}}, + rotation=180, + origin={-52,-25}))); + Modelica.Blocks.Sources.Constant approxFullyOpened(k=0.99999) + "Used for opening a valve almost fully" annotation (Placement( + transformation( + extent={{6,-6},{-6,6}}, + rotation=180, + origin={-50,26}))); + Modelica.Blocks.Interfaces.RealInput temperature( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=0) "Temperature of the controlled flow" annotation (Placement( + transformation( + origin={-100,0}, + extent={{14,-14},{-14,14}}, + rotation=180))); + Modelica.Blocks.Interfaces.RealOutput valveOpening1(min=0, max=1) + "Actuator position (0: closed, 1: open)" annotation (Placement( + transformation( + extent={{-13,-13},{13,13}}, + rotation=0, + origin={99,40}), iconTransformation( + extent={{-12,-12},{12,12}}, + rotation=0, + origin={112,60}))); + Modelica.Blocks.Interfaces.RealOutput valveOpening2(min=0, max=1) + "Actuator position (0: closed, 1: open)" annotation (Placement( + transformation( + extent={{-13,-13},{13,13}}, + rotation=0, + origin={99,-40}), iconTransformation( + extent={{-12,-12},{12,12}}, + rotation=0, + origin={112,-60}))); + Modelica.Blocks.Logical.Switch switch1 + "Switches between delayed and direct opening" + annotation (Placement(transformation(extent={{56,34},{68,46}}))); + Modelica.Blocks.Logical.Switch switch2 + "Switches between delayed and direct opening" + annotation (Placement(transformation(extent={{60,-46},{72,-34}}))); + Modelica.Blocks.Nonlinear.FixedDelay fixedDelay1( + delayTime=delayTime) + "Delay that prevents that both valves react simultaneously" + annotation (Placement(transformation( + extent={{-7,-7},{7,7}}, + rotation=0, + origin={29,51}))); + Modelica.Blocks.Sources.Constant fullOpening(k=1) + "Used for opening a valve fully" annotation (Placement(transformation( + extent={{6,-6},{-6,6}}, + rotation=180, + origin={-26,-48}))); +equation + + connect(approxFullyOpened.y, switch.u1) annotation (Line(points={{-43.4,26},{ + -38,26},{-38,4.8},{-29.2,4.8}}, color={0,0,127})); + connect(switch.y, add.u1) annotation (Line(points={{-15.4,0},{-15.4,0},{-8,0}, + {-8,-40.6},{-3.4,-40.6}}, + color={0,0,127})); + connect(hysteresis.y, switch.u2) + annotation (Line(points={{-65.4,0},{-65.4,0},{-29.2,0}}, + color={255,0,255})); + connect(temperature, hysteresis.u) + annotation (Line(points={{-100,0},{-79.2,0}}, color={0,0,127})); + connect(switch1.y, valveOpening1) + annotation (Line(points={{68.6,40},{99,40}}, color={0,0,127})); + connect(approxFullyClosed.y, switch.u3) annotation (Line(points={{-45.4,-25}, + {-44,-25},{-44,-4.8},{-29.2,-4.8}}, color={0,0,127})); + connect(switch2.y, valveOpening2) + annotation (Line(points={{72.6,-40},{99,-40}}, color={0,0,127})); + connect(add.y, fixedDelay.u) annotation (Line(points={{12.7,-44.5},{12.7,-45}, + {22.6,-45}}, color={0,0,127})); + connect(hysteresis.y, switch1.u2) annotation (Line(points={{-65.4,0},{-64,0}, + {-64,2},{-64,40},{54.8,40}}, color={255,0,255})); + connect(hysteresis.y, switch2.u2) annotation (Line(points={{-65.4,0},{-64,0}, + {-64,-6},{-64,-60},{44,-60},{44,-40},{58.8,-40}}, color={255,0,255})); + connect(fixedDelay.y, switch2.u3) annotation (Line(points={{38.7,-45},{48.35, + -45},{48.35,-44.8},{58.8,-44.8}}, color={0,0,127})); + connect(add.y, switch2.u1) annotation (Line(points={{12.7,-44.5},{12.7,-30},{ + 22,-30},{58.8,-30},{58.8,-35.2}}, color={0,0,127})); + connect(switch1.u1, fixedDelay1.y) annotation (Line(points={{54.8,44.8},{54.8, + 51},{36.7,51}}, color={0,0,127})); + connect(fixedDelay1.u, switch.y) annotation (Line(points={{20.6,51},{-16,51}, + {-16,0},{-15.4,0}}, color={0,0,127})); + connect(switch1.u3, switch.y) annotation (Line(points={{54.8,35.2},{-16,35.2}, + {-16,0},{-15.4,0}}, color={0,0,127})); + connect(fullOpening.y, add.u2) annotation (Line(points={{-19.4,-48},{-3.4,-48}, + {-3.4,-48.4}}, color={0,0,127})); + annotation (Placement(transformation(extent={{-42,-4},{-34,4}})), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics={ + Text( + textString="Edit Here", + extent={{-118,36},{-114,12}}, + lineColor={217,67,180}, + pattern=LinePattern.Dot, + lineThickness=1)}), + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100}, + {100,100}}), graphics={Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,255}, + fillColor={255,255,170}, + fillPattern=FillPattern.Solid), + Text(extent={{ + -56,28},{64,-24}}, + lineColor = {175, 175, 175}, textString = "%name")}), + Documentation(info=" ++This is a model of a controller, which manipulates the opening of two valves. If +the measured temperature drops below the lower thrshold, the first valve is +fully closed and the second valve is fully opened. The opposite constellation +applies if the temperature exceeds the higher threshold. To avoid zero mass flow +rates, the opening is only close 0. Additionally, a delay can be set so that the +valves do not react simultaneously (opened valve is closed first). It can be +used in +AixLib.Fluid.Examples.GeothermalHeatPump.Components.GeothermalHeatPump. +
+", revisions=" +Simple stand-alone model of a combined heat and cold supply system. +The geothermal heat pump can either transport heat
+In the flow line of the heating circuit a boiler is connected as a peak load device. +Consumers are modeled as sinks are sources with a constant temperature.
+"), + Diagram(coordinateSystem(extent={{-160,-120},{160,80}})), + Icon(coordinateSystem(extent={{-160,-120},{160,80}}))); +end GeothermalHeatPump; diff --git a/AixLib/Fluid/Examples/GeothermalHeatPump/package.mo b/AixLib/Fluid/Examples/GeothermalHeatPump/package.mo new file mode 100644 index 0000000000..a6270a7b89 --- /dev/null +++ b/AixLib/Fluid/Examples/GeothermalHeatPump/package.mo @@ -0,0 +1,15 @@ +within AixLib.Fluid.Examples; +package GeothermalHeatPump "Contains examples of hydraulic systems based on geothermal heat pumps" +extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" +Package containing both a stand-alone example and a component demonstrating the use of a heat pump connected to two storages and a geothermal source.
+", revisions=" +
-Example model that demonstrates how translation statistics
-depend on the type of boundary conditions,
-the parallel or series configuration of the components
+Example model that demonstrates how translation statistics
+depend on the type of boundary conditions,
+the parallel or series configuration of the components
and the value of parameter from_dp
.
Example model that demonstrates how translation statistics
depend on the type of boundary conditions,
-the parallel or series configuration of the components
+the parallel or series configuration of the components
and the value of parameter from_dp
.
-Example model that demonstrates how translation statistics
-depend on the type of boundary conditions,
-the parallel or series configuration of the components
+Example model that demonstrates how translation statistics
+depend on the type of boundary conditions,
+the parallel or series configuration of the components
and the value of parameter from_dp
.
-Example model that demonstrates how translation statistics
-depend on the type of boundary conditions,
-the parallel or series configuration of the components
+Example model that demonstrates how translation statistics
+depend on the type of boundary conditions,
+the parallel or series configuration of the components
and the value of parameter from_dp
.
k
.each
.
+quantity
in CZon
.
Model that is used to connect an input signal to a fluid port. The model needs to be used in conjunction with an instance of - -AixLib.Fluid.FMI.OutletAdaptor in order for + +AixLib.Fluid.FMI.Adaptors.Outlet in order for fluid mass flow rate and pressure to be properly assigned to the acausal fluid models.
See - -AixLib.Fluid.FMI.ExportContainers.PartialTwoPortComponent + +AixLib.Fluid.FMI.ExportContainers.PartialTwoPort or AixLib.Fluid.FMI.ExportContainers.Examples.FMUs.ResistanceVolume diff --git a/AixLib/Fluid/FMI/Adaptors/Outlet.mo b/AixLib/Fluid/FMI/Adaptors/Outlet.mo index f7c118b6e2..676d93263f 100644 --- a/AixLib/Fluid/FMI/Adaptors/Outlet.mo +++ b/AixLib/Fluid/FMI/Adaptors/Outlet.mo @@ -134,15 +134,15 @@ equation
Model that is used to connect a fluid port with an output signal. The model needs to be used in conjunction with an instance of - -AixLib.Fluid.FMI.InletAdaptor in order for + +AixLib.Fluid.FMI.Adaptors.Inlet in order for fluid mass flow rate and pressure to be properly assigned to the acausal fluid models.
See
-
-AixLib.Fluid.FMI.ExportContainers.PartialTwoPortComponent
+
+AixLib.Fluid.FMI.ExportContainers.PartialTwoPort
or
AixLib.Fluid.FMI.ExportContainers.Examples.FMUs.ResistanceVolume
diff --git a/AixLib/Fluid/FMI/Adaptors/ThermalZone.mo b/AixLib/Fluid/FMI/Adaptors/ThermalZone.mo
index 336c99f588..5445233efa 100644
--- a/AixLib/Fluid/FMI/Adaptors/ThermalZone.mo
+++ b/AixLib/Fluid/FMI/Adaptors/ThermalZone.mo
@@ -117,8 +117,7 @@ The (time varying) vector Real
output signal of this block can be d
parameter menu via variable y
. The purpose is to support the
easy definition of vector-valued Real expressions in a block diagram.
This validation test is identical to diff --git a/AixLib/Fluid/FMI/Conversion/Validation/InletToAirDryAirCO2.mo b/AixLib/Fluid/FMI/Conversion/Validation/InletToAirDryAirCO2.mo index ab6a5342b9..5bd2d33bde 100644 --- a/AixLib/Fluid/FMI/Conversion/Validation/InletToAirDryAirCO2.mo +++ b/AixLib/Fluid/FMI/Conversion/Validation/InletToAirDryAirCO2.mo @@ -2,7 +2,7 @@ within AixLib.Fluid.FMI.Conversion.Validation; model InletToAirDryAirCO2 "Validation model for inlet to air with dry air medium and CO2" extends AixLib.Fluid.FMI.Conversion.Validation.InletToAirMoistAirCO2( - redeclare package Medium = Modelica.Media.Air.SimpleAir(extraPropertiesNames={"CO2"})); + redeclare replaceable package Medium = Modelica.Media.Air.SimpleAir(extraPropertiesNames={"CO2"})); annotation (Documentation(info="
This validation test is identical to diff --git a/AixLib/Fluid/FMI/Conversion/Validation/InletToAirMoistAirCO2.mo b/AixLib/Fluid/FMI/Conversion/Validation/InletToAirMoistAirCO2.mo index 8331a9fcbb..4a6a00259d 100644 --- a/AixLib/Fluid/FMI/Conversion/Validation/InletToAirMoistAirCO2.mo +++ b/AixLib/Fluid/FMI/Conversion/Validation/InletToAirMoistAirCO2.mo @@ -2,7 +2,7 @@ within AixLib.Fluid.FMI.Conversion.Validation; model InletToAirMoistAirCO2 "Validation model for inlet to AixLib.Media.Air conversion with C02 trace substances" extends AixLib.Fluid.FMI.Conversion.Validation.InletToAirDryAir( - redeclare package Medium = AixLib.Media.Air(extraPropertiesNames={"CO2"})); + redeclare replaceable package Medium = AixLib.Media.Air(extraPropertiesNames={"CO2"})); Modelica.Blocks.Sources.Constant CRev[Medium.nC](each k=0.8) "Trace substance for reverse flow" annotation (Placement(transformation(extent={{92,-80},{72,-60}}))); diff --git a/AixLib/Fluid/FMI/ExportContainers/Examples/FMUs/Fan.mo b/AixLib/Fluid/FMI/ExportContainers/Examples/FMUs/Fan.mo index e4574fd98c..fa53be70ca 100644 --- a/AixLib/Fluid/FMI/ExportContainers/Examples/FMUs/Fan.mo +++ b/AixLib/Fluid/FMI/ExportContainers/Examples/FMUs/Fan.mo @@ -31,15 +31,15 @@ equation
This example demonstrates how to export an FMU with a fluid flow component. The FMU has an instance of - -AixLib.Fluid.FixedResistances.FlowMachine_dp. + +AixLib.Fluid.Movers.FlowControlled_dp.
See AixLib.Fluid.FMI.UsersGuide for why there is no model that exports - -AixLib.Fluid.Movers.FlowMachine_m_flow. + +AixLib.Fluid.Movers.FlowControlled_m_flow.
", revisions="Modelica.Utilities.Files.loadResource
+for weather data file.Modelica.Utilities.Files.loadResource
+for weather data file.p
of
-
-AixLib.Fluid.FMI.OutletAdaptor.
+
+AixLib.Fluid.FMI.Adaptors.Outlet.
", revisions="
The model - -AixLib.Fluid.FixedResistances.FlowMachine_m_flow + +AixLib.Fluid.Movers.FlowControlled_m_flow cannot be exported as an FMU. This is because it assignes the mass flow rate. However, the input connector @@ -257,11 +257,9 @@ already declares the mass flow rate as an input. Therefore, the mass flow rate is overdetermined. As a fall back, if a user needs to set the mass flow rate, he/she can do so by using - -AixLib.Fluid.FMI.IdealSource_m_flow, -which takes as an input signal the mass flow rate. If this differs -from the mass flow rate of the inlet connector, the simulation -will stop with an error. + +AixLib.Fluid.FMI.Source_T, +which takes as an input signal the mass flow rate.
show_V_flow
for calculation of
+V_flow
to conform with pedantic checking.
++Model that computes the temperature propagation of +a fluid flow through a pipe, idealized as a plug flow. +
++The transport delay is computed using the one-dimensional wave equation +without source or sink terms, +
+∂z(x,t)/∂t + v(t) ∂z(x,t)/∂x = 0, +
+where z(x,t) is the spatial distribution as a function of time of any +property z of the fluid. +For the temperature propagation, z will be replaced by T. +
++This model is based on the following assumptions: +
+pipVol
.
++Pipe with heat loss using the time delay based heat losses and plug flow +for the transport delay of the fluid. +
+
+The
+spatialDistribution
operator is used for the temperature wave propagation
+through the length of the pipe. This operator is contained in
+BaseClasses.PlugFlow.
+
+This model does not include thermal inertia of the pipe wall.
+The wall inertia is implemented in
+PlugFlowPipe, which uses this model.
+
+The removal of the thermal inertia with a mixing volume can be desirable in the
+case where mixing volumes are added manually at the pipe junctions.
+
+The model + +PlugFlowHeatLoss +implements a heat loss in design direction, but leaves the enthalpy unchanged +in opposite flow direction. Therefore it is used in front of and behind the time delay. +
++Full details on the model implementation and experimental validation can be found +in: +
+
+van der Heijde, B., Fuchs, M., Ribas Tugores, C., Schweiger, G., Sartor, K., Basciotti, D., Müller,
+D., Nytsch-Geusen, C., Wetter, M. and Helsen, L. (2017).
+Dynamic equation-based thermo-hydraulic pipe model for district heating and cooling systems.
+Energy Conversion and Management, vol. 151, p. 158-169.
+doi: 10.1016/j.enconman.2017.08.072.
+Component that calculates the heat losses at the end of a plug flow pipe +when the flow goes in the design direction. +
++The governing equations are +
++Tout = Tb + (Tin - Tb) +exp((tout - tin)/tauchar) +
++with +
++tauchar = R C +
++This model is based on the following assumptions: +
+
+Heat losses are only considered in design flow direction.
+For heat loss consideration in both directions, use one of these models at
+both ends of a
+
+AixLib.Fluid.FixedResistances.BaseClasses.PlugFlow model.
+The outlet temperature is calculated as in the equation above,
+using the inlet temperature at port_a
and the instantaneous
+time delay and boundary temperature.
+The boundary temperature can be either the air temperature
+or the undisturbed ground temperature, depending on the definition of the
+thermal resistance R.
+
+This component requires the delay time and the instantaneous ambient temperature +as an input. +This component is to be used in single pipes or in more advanced configurations +where no influence from other pipes is considered.
+", +revisions=" ++Calculates time delay at both sides of the pipe as the difference between the +current simulation time and the inlet time of the fluid at both ends of the pipe. +
++∂z(x,t)/∂t + v(t) ∂z(x,t)/∂x = 0, +
++where z(x,t) is the spatial distribution as a function of time of any +property z of the fluid. For the inlet time propagation, z will +be replaced by the inlet time of the fluid tin. +
++The inlet time is approached as a fluid property and its propagation follows +the one-dimensional wave equation, implemented using the spatialDistribution +function. This components requires the mass flow through the pipe and the pipe +dimensions in order to derive information about the fluid propagation. +
++The component calculates the delay time at both in/outlet ports of the pipe +and therefore has two outlets. During forward flow, only the forward + +AixLib.Fluid.PlugFlowPipes.BaseClasses.HeatLossPipeDelay component in + +AixLib.Fluid.PlugFlowPipes.BaseClasses.PipeCore +will be active and uses the forward output of PlugFlowTransportDelay. +During reverse, the opposite is true and only the reverse output is used. +
+It is assumed that no axial mixing takes place in the pipe.
+", revisions=" +abs()
of normalized velocity input in order to avoid negative
+delay times. +Basic test of model + +AixLib.Fluid.FixedResistances.BaseClasses.PlugFlowCore. +This test includes an inlet temperature step under a constant mass flow rate. +
+", revisions=" ++This package contains validation models for the classes in + +AixLib.Fluid.FixedResistances.BaseClasses. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Fluid/FixedResistances/BaseClasses/Validation/package.order b/AixLib/Fluid/FixedResistances/BaseClasses/Validation/package.order new file mode 100644 index 0000000000..de00bc67cf --- /dev/null +++ b/AixLib/Fluid/FixedResistances/BaseClasses/Validation/package.order @@ -0,0 +1 @@ +PlugFlowCore diff --git a/AixLib/Fluid/FixedResistances/BaseClasses/package.mo b/AixLib/Fluid/FixedResistances/BaseClasses/package.mo new file mode 100644 index 0000000000..d9c97a4f50 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/BaseClasses/package.mo @@ -0,0 +1,11 @@ +within AixLib.Fluid.FixedResistances; +package BaseClasses "Package with base classes for AixLib.Fluid.FixedResistances" + extends Modelica.Icons.BasesPackage; +annotation (preferredView="info", Documentation(info=" ++This package contains base classes that are used to construct the models in + +AixLib.Fluid.FixedResistances. +
+")); +end BaseClasses; diff --git a/AixLib/Fluid/FixedResistances/BaseClasses/package.order b/AixLib/Fluid/FixedResistances/BaseClasses/package.order new file mode 100644 index 0000000000..d3b83e36fc --- /dev/null +++ b/AixLib/Fluid/FixedResistances/BaseClasses/package.order @@ -0,0 +1,5 @@ +PlugFlow +PlugFlowCore +PlugFlowHeatLoss +PlugFlowTransportDelay +Validation diff --git a/AixLib/Fluid/FixedResistances/Examples/Pipe.mo b/AixLib/Fluid/FixedResistances/Examples/Pipe.mo new file mode 100644 index 0000000000..c79d8a9461 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Examples/Pipe.mo @@ -0,0 +1,106 @@ +within AixLib.Fluid.FixedResistances.Examples; +model Pipe + + extends Modelica.Icons.Example; + + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater "Medium in the system" annotation(choicesAllMatching = true); + + Modelica.Fluid.Sources.MassFlowSource_T Source( + redeclare package Medium = Medium, + use_m_flow_in=false, + use_T_in=true, + m_flow=0.001, + T=323.15, + nPorts=1) + annotation (Placement(transformation(extent={{-64,-10},{-44,10}}))); + Modelica.Blocks.Sources.Ramp ramp( + duration=3600, + offset=273.15 + 40, + startTime=400, + height=40) + annotation (Placement(transformation(extent={{-100,-6},{-80,14}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemp(T=293.15) + annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); + Modelica.Fluid.Sources.FixedBoundary + Sink( + redeclare package Medium = Medium, nPorts=1) + annotation (Placement(transformation(extent={{-11,-11},{11,11}}, + rotation=180, + origin={79,1}))); + inner Modelica.Fluid.System system + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + Modelica.Fluid.Sensors.Temperature temperatureAfter(redeclare package Medium + = Medium) + annotation (Placement(transformation(extent={{14,-40},{34,-20}}))); + Modelica.Fluid.Sensors.Temperature temperatureBefore(redeclare package Medium + = Medium) + annotation (Placement(transformation(extent={{-52,-40},{-32,-20}}))); + AixLib.Fluid.FixedResistances.Pipe dynamicPipeEBCAggregated_Ambient_Loss_UC( + length=2, + redeclare package Medium = Medium, + parameterPipe=DataBase.Pipes.Copper.Copper_6x1(), + parameterIso=DataBase.Pipes.Insulation.Iso100pc(), + diameter=dynamicPipeEBCAggregated_Ambient_Loss_UC.parameterPipe.d_i, + nNodes=5, + Heat_Loss_To_Ambient=true, + isEmbedded=false, + withInsulation=true, + use_HeatTransferConvective=true) + annotation (Placement(transformation(extent={{-14,-10},{6,10}}))); +equation + connect(ramp.y, Source.T_in) annotation (Line( + points={{-79,4},{-66,4}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(dynamicPipeEBCAggregated_Ambient_Loss_UC.Star, fixedTemp.port) + annotation (Line( + points={{-5.4,5.6},{-5.4,30},{-30,30}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(Source.ports[1], dynamicPipeEBCAggregated_Ambient_Loss_UC.port_a) + annotation (Line( + points={{-44,0},{-14.4,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(temperatureBefore.port, dynamicPipeEBCAggregated_Ambient_Loss_UC.port_a) + annotation (Line( + points={{-42,-40},{-30,-40},{-30,0},{-14.4,0}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(dynamicPipeEBCAggregated_Ambient_Loss_UC.port_b, Sink.ports[1]) + annotation (Line(points={{6.4,0},{68,0},{68,1}}, color={0,127,255})); + connect(temperatureAfter.port, dynamicPipeEBCAggregated_Ambient_Loss_UC.port_b) + annotation (Line(points={{24,-40},{40,-40},{40,0},{6.4,0}}, color={0,127,255})); + connect(fixedTemp.port, dynamicPipeEBCAggregated_Ambient_Loss_UC.heatPort_outside) + annotation (Line(points={{-30,30},{-2.4,30},{-2.4,5.6}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}})), Documentation(info=" +Simple example to test the model for DynamicPipeEBCAggregated_Ambient_Loss
+Plot:
+Basic test of model + +AixLib.Fluid.FixedResistances.PlugFlowPipe. +This test includes an inlet temperature step under a constant mass flow rate. +
+", revisions=" +The pressure drop is computed by calling a function in the package - -Buildings.Fluid.BaseClasses.FlowModels, + +AixLib.Fluid.BaseClasses.FlowModels, This package contains regularized implementations of the equation
diff --git a/AixLib/Fluid/FixedResistances/Junction.mo b/AixLib/Fluid/FixedResistances/Junction.mo index cab30a361d..e8cd32c738 100644 --- a/AixLib/Fluid/FixedResistances/Junction.mo +++ b/AixLib/Fluid/FixedResistances/Junction.mo @@ -2,9 +2,9 @@ within AixLib.Fluid.FixedResistances; model Junction "Flow splitter with fixed resistance at each port" extends AixLib.Fluid.BaseClasses.PartialThreeWayResistance( + m_flow_small=mDyn_flow_nominal*1e-4, mDyn_flow_nominal = sum(abs(m_flow_nominal[:])/3), redeclare AixLib.Fluid.FixedResistances.PressureDrop res1( - final allowFlowReversal=true, from_dp=from_dp, final m_flow_nominal=m_flow_nominal[1], final dp_nominal=dp_nominal[1], @@ -12,7 +12,6 @@ model Junction homotopyInitialization=homotopyInitialization, deltaM=deltaM), redeclare AixLib.Fluid.FixedResistances.PressureDrop res2( - final allowFlowReversal=true, from_dp=from_dp, final m_flow_nominal=m_flow_nominal[2], final dp_nominal=dp_nominal[2], @@ -20,7 +19,6 @@ model Junction homotopyInitialization=homotopyInitialization, deltaM=deltaM), redeclare AixLib.Fluid.FixedResistances.PressureDrop res3( - final allowFlowReversal=true, from_dp=from_dp, final m_flow_nominal=m_flow_nominal[3], final dp_nominal=dp_nominal[3], @@ -120,6 +118,15 @@ system of equations. ", revisions="
final allowFlowReversal=true
from all resistances
+since this overrides the default simplification when the flow
+is not bidirectional.
+This change can lead to smaller algebraic loops.
+This is for
+issue 898.
+SplitterFixedResistanceDpM
to
FlowJunction
and removed the parameters
diff --git a/AixLib/Fluid/FixedResistances/LosslessPipe.mo b/AixLib/Fluid/FixedResistances/LosslessPipe.mo
index 2f63b866fa..2c3ee7df15 100644
--- a/AixLib/Fluid/FixedResistances/LosslessPipe.mo
+++ b/AixLib/Fluid/FixedResistances/LosslessPipe.mo
@@ -5,17 +5,17 @@ model LosslessPipe "Pipe with no flow friction and no heat transfer"
equation
dp=0;
// Isenthalpic state transformation (no storage and no loss of energy)
- port_a.h_outflow = inStream(port_b.h_outflow);
+ port_a.h_outflow = if allowFlowReversal then inStream(port_b.h_outflow) else Medium.h_default;
port_b.h_outflow = inStream(port_a.h_outflow);
// Mass balance (no storage)
port_a.m_flow + port_b.m_flow = 0;
// Transport of substances
- port_a.Xi_outflow = inStream(port_b.Xi_outflow);
+ port_a.Xi_outflow = if allowFlowReversal then inStream(port_b.Xi_outflow) else Medium.X_default[1:Medium.nXi];
port_b.Xi_outflow = inStream(port_a.Xi_outflow);
- port_a.C_outflow = inStream(port_b.C_outflow);
+ port_a.C_outflow = if allowFlowReversal then inStream(port_b.C_outflow) else zeros(Medium.nC);
port_b.C_outflow = inStream(port_a.C_outflow);
annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,
-100},{100,100}}), graphics={
@@ -44,6 +44,11 @@ AixLib.Fluid.Actuators.BaseClasses.PartialThreeWayValve.
revisions="
allowFlowReversal=false
.
+See #949.
+show_V_flow
.
Dynamic Pipe with pipe wall and insulation wall which allows discretisation of pipe wall and pipe insulation. This model considers heat loss through radiation and convection if pipe is not embedded in wall. In case that the pipe is embedded in the wall, heat transfer between the pipe wall / insulation and the surrounding material is based on heat conduction.
+Dynamic pipe model with heat losses for various applications. It is possible to choose whether the pipe is embedded in a wall or not. In addition, no insulation can be selected, if used for example for CCA ( concrete core activation).
+The model already includes heat-transfer by convection and by radiation. Instead of modeling these phenomena outside the pipe, an ambient temperature can be prescribed at the heat-port and the star of the pipe, so the loss to ambient will be calculated within the pipe model.
+For each discretisation of the pipe, there is a connector to the corresponding element of the discretized pipe wall. Each element of the discretised pipe wall is connected to a corresponding element of the discretized insulation wall. The heat-ports and stars of all nodes are then collected to form two single ports, which can be connected to an ambient temperature.
+AixLib.Fluid.FixedResistances.Examples.DPEAgg_ambientLoss
+", + revisions=" +pipVol
.
++Pipe with heat loss using the time delay based heat losses and transport +of the fluid using a plug flow model, applicable for simulation of long +pipes such as in district heating and cooling systems.
++This model takes into account transport delay along the pipe length idealized +as a plug flow. +The model also includes thermal inertia of the pipe wall. +
+Heat losses are implemented by + +AixLib.Fluid.FixedResistances.BaseClasses.PlugFlowHeatLoss +at each end of the pipe (see + +AixLib.Fluid.FixedResistances.BaseClasses.PlugFlowCore). +Depending on the flow direction, the temperature difference due to heat losses +is subtracted at the right fluid port. +
++The pressure drop is implemented using + +AixLib.Fluid.FixedResistances.HydraulicDiameter. +
+
+The thermal capacity of the pipe wall is implemented as a mixing volume
+of the fluid in the pipe, of which the thermal capacity
+is equal to that of the pipe wall material.
+In addition, this mixing volume allows the hydraulic separation of subsequent pipes.
+Thanks to the vectorized implementation of the (design) outlet port,
+splits and junctions of pipes can be handled in a numerically efficient way.
+
+This mixing volume is not present in the
+PlugFlowCore model,
+which can be used in cases where mixing volumes at pipe junctions need to
+be added manually.
+
ports_b
.
++Full details on the model implementation and experimental validation can be found +in: +
+
+van der Heijde, B., Fuchs, M., Ribas Tugores, C., Schweiger, G., Sartor, K.,
+Basciotti, D., Müller, D., Nytsch-Geusen, C., Wetter, M. and Helsen, L.
+(2017).
+Dynamic equation-based thermo-hydraulic pipe model for district heating and
+cooling systems.
+Energy Conversion and Management, vol. 151, p. 158-169.
+doi:
+10.1016/j.enconman.2017.08.072.
from_dp
+when linearized=true
.
+See #884.
+
+Defines basic record of experimental data with n
measured points.
+The first column corresponds to time
, further columns to measured data.
+
n
to facilitate use of extends clause.
++This record contains information of an aproximately 15 minutes long test bench +carried out at the University of Liège. +
+ +Column 1: Time in s
+Column 2: Mass flow rate in kg/s
+Column 3: Outlet pipe temperature in °C
+Column 4: Outlet water temperature in °C
+Column 5: Inlet pipe temperature in °C
+Column 6: Inlet water temperature in °C
+ ++Before to perform a test, the water city network is pushed inside +the approximately 39 meter long studied pipe during about 10 minutes +to be sure that it is at the same temperature. +During this time period, valves V3 and V1 are opened, the boiler is off and +the valve V2 is closed. +
++Then, the valve V1 is closed and the valve V2 and V3 are opened. +The boiler is started to reach the setpoint hot water temperature. +When the temperature setpoint is achieved, data starts to be recorded, +the valve V1 is opened and the valve V2 is closed at the same time +to supply the studied pipe in hot water. +After the outlet pipe temperature is stabilized, the boiler is shut off. +
++During the test, the ambient temperature is equal to 18ˆC and +the mass flow rate is set to 1.245 kg/s.
+ +Notice: length are approximate
+ ++This package contains base classes that are used to construct the models in + +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data. +
+")); +end BaseClasses; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/BaseClasses/package.order b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/BaseClasses/package.order new file mode 100644 index 0000000000..d3906fb970 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/BaseClasses/package.order @@ -0,0 +1,2 @@ +PipeDataBaseDefinition +PipeDataULg diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataAIT151218.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataAIT151218.mo new file mode 100644 index 0000000000..1388c10db9 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataAIT151218.mo @@ -0,0 +1,670 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataAIT151218 + "Experimental data from AIT monitoring data December 18, 2015" + extends BaseClasses.PipeDataBaseDefinition(final n=9, data=[0, + 372.3,362.9,360.2,356.2,26.667,0.168,0.029,0.013,276.8; 900,371.8, + 362.7,359.2,357.2,27.333,0.099,0.028,0.012,276.8; 1800,371.1,364.2, + 362.2,357.2,23.5,0.089,0.031,0.012,277; 2700,371.6,362.6,361.2, + 357.2,26.167,0.095,0.029,0.011,277; 3600,370.7,363.4,361.2,357.2, + 25.667,0.158,0.035,0.011,277; 4500,371.3,363.8,361.2,357.2,28.167, + 0.101,0.035,0.012,277.1; 5400,372.6,363.8,361.2,357.2,27.5,0.101, + 0.029,0.012,277.2; 6300,372.4,363.8,362.2,358.2,26.833,0.088,0.033, + 0.013,277.4; 7200,372.1,364.4,362.2,358.2,23.833,0.088,0.031,0.013, + 277.2; 8100,372,363.1,361.2,357.2,25.333,0.097,0.033,0.012,277.2; + 9000,371.5,363.8,361.2,357.2,25.833,0.161,0.031,0.012,277.2; 9900, + 371.4,362.7,361.2,356.2,26.167,0.095,0.031,0.011,277.2; 10800,371.4, + 362.7,361.2,356.2,25.833,0.095,0.033,0.012,277.3; 11700,370.9,362.2, + 361.2,356.2,26.333,0.097,0.032,0.012,277.3; 12600,372.4,362.7,361.2, + 357.2,26,0.091,0.031,0.012,276.9; 13500,373.8,364.6,362.2,358.2, + 26.5,0.16,0.031,0.01,276.7; 14400,373.3,364,362.2,357.2,26.667, + 0.091,0.029,0.011,276.7; 15300,370.8,363.3,362.2,357.2,26.333,0.094, + 0.034,0.011,276.8; 16200,372.7,362.7,362.2,357.2,26.667,0.092,0.034, + 0.011,276.8; 17100,371,362.7,361.2,357.2,25.167,0.092,0.031,0.011, + 276.9; 18000,370.2,363.2,361.2,356.2,25,0.165,0.033,0.011,276.9; + 18900,369.7,363.8,364.2,356.2,25.5,0.088,0.083,0.012,276.7; 19800, + 370.3,363.7,367.2,364.2,28.833,0.098,0.066,0.021,276.7; 20700,368.8, + 364.4,365.2,364.2,28.667,0.089,0.064,0.021,276.7; 21600,370.1,363.3, + 365.2,362.2,26.833,0.095,0.064,0.022,276.7; 22500,369.3,363.3,366.2, + 361.2,24.333,0.095,0.106,0.02,276.6; 23400,371,364.6,364.2,361.2,26, + 0.163,0.015,0.02,276.6; 24300,370.3,362.9,364.2,363.2,25.833,0.099, + 0.062,0.035,276.7; 25200,370.7,362.1,364.2,363.2,28,0.094,0.059, + 0.028,276.7; 26100,370.1,362.5,363.2,363.2,27.333,0.094,0.059,0.028, + 276.7; 27000,370.6,363.5,363.2,363.2,25,0.168,0.059,0.032,276.6; + 27900,371.3,362.1,362.2,363.2,26,0.096,0.056,0.032,277; 28800,370.9, + 362.4,364.2,364.2,27.333,0.098,0.059,0.028,276.8; 29700,372.2,363.2, + 364.2,366.2,28.333,0.089,0.049,0.068,276.8; 30600,371.2,362.6,364.2, + 348.2,26.5,0.095,0.059,0,276.7; 31500,371.7,363.1,364.2,348.2, + 27.667,0.167,0.046,0,276.7; 32400,372.6,363.7,364.2,365.2,25.5, + 0.103,0.046,0.054,276.7; 33300,372.6,363.7,364.2,365.2,26,0.103, + 0.052,0.044,276.8; 34200,369.3,363.3,364.2,366.2,25.667,0.096,0.044, + 0.043,276.7; 35100,371.8,363.2,365.2,365.2,27.167,0.094,0.043,0.021, + 276.8; 36000,371.5,364.1,364.2,363.2,27.5,0.089,0.042,0.011,276.8; + 36900,370.8,364.7,363.2,363.2,30,0.162,0.036,0.011,276.8; 37800,372, + 363.9,363.2,361.2,29.333,0.094,0.036,0.009,276.8; 38700,371.2,363.9, + 363.2,359.2,26.5,0.094,0.035,0.014,276.9; 39600,372.3,364,363.2, + 359.2,27.667,0.096,0.038,0.014,277.1; 40500,373,363.8,362.2,359.2, + 28.667,0.087,0.041,0.013,277; 41400,373.9,361.7,362.2,356.2,26, + 0.094,0.037,0.025,277; 42300,372.1,362.4,362.2,356.2,26.5,0.083, + 0.036,0.025,276.7; 43200,372.4,361.1,362.2,361.2,26.833,0.083,0.036, + 0.02,276.7; 44100,373.7,361.1,361.2,360.2,29.5,0.083,0.037,0.018, + 276.7; 45000,370.9,362.5,361.2,360.2,32.833,0.095,0.032,0.017,276.9; + 45900,372.8,361.4,362.2,360.2,29.333,0.06,0.035,0.013,276.8; 46800, + 372.7,362.4,362.2,360.2,29,0.068,0.032,0.015,276.7; 47700,372.1, + 362.1,363.2,360.2,27,0.088,0.038,0.015,276.7; 48600,372.6,362.5, + 363.2,360.2,25.833,0.147,0.031,0.015,276.5; 49500,372.8,363.8,363.2, + 360.2,27.333,0.088,0.031,0.014,276.5; 50400,372.3,363.8,362.2,358.2, + 27.833,0.088,0.032,0.013,276.7; 51300,373.1,362.3,365.2,359.2, + 27.833,0.062,0.061,0.013,276.8; 52200,373.6,363.3,363.2,358.2, + 29.667,0.061,0.029,0.014,276.7; 53100,371.8,362.2,362.2,359.2, + 29.833,0.086,0.033,0.014,276.7; 54000,373.8,364.6,362.2,359.2,31, + 0.153,0.029,0.014,276.9; 54900,373.2,363,362.2,359.2,31.167,0.08, + 0.029,0.014,276.9; 55800,373.6,363,362.2,359.2,34.5,0.08,0.034, + 0.014,276.7; 56700,372.9,363,362.2,359.2,33.167,0.078,0.029,0.013, + 276.6; 57600,373.8,363,362.2,359.2,33.833,0.08,0.03,0.016,276.7; + 58500,373.4,364.6,362.2,359.2,34,0.159,0.028,0.015,276.7; 59400, + 373.8,364,362.2,359.2,32.333,0.084,0.029,0.015,276.7; 60300,371,363, + 362.2,359.2,32.667,0.077,0.029,0.013,276.7; 61200,371,363,362.2, + 360.2,38.333,0.077,0.03,0.017,276.5; 62100,372.3,363.1,362.2,360.2, + 34.667,0.083,0.03,0.014,276.3; 63000,372.4,363.2,363.2,360.2,33.167, + 0.09,0.031,0.014,276.3; 63900,372.1,364.7,362.2,360.2,30.833,0.086, + 0.031,0.02,276.4; 64800,372.5,363.8,363.2,360.2,32.833,0.079,0.031, + 0.02,276.5; 65700,374.2,364,363.2,360.2,37.833,0.079,0.031,0.011, + 276.6; 66600,373.1,364,363.2,354.2,36,0.079,0.03,0,276.6; 67500, + 372.1,363.8,362.2,342.2,39.333,0.083,0.031,0,276.5; 68400,372.8, + 363.3,361.2,336.2,37.5,0.164,0.032,0,276.6; 69300,373.2,362.8,361.2, + 330.2,39.333,0.084,0.035,0,276.6; 70200,372.6,362.5,362.2,330.2, + 38.333,0.083,0.031,0,276.5; 71100,372.7,362.5,362.2,330.2,37.667, + 0.082,0.031,0,276.6; 72000,373.6,362.5,361.2,324.2,39,0.082,0.033, + 0.001,276.6; 72900,373.3,363.3,361.2,319.2,39.5,0.156,0.001,0,276.6; + 73800,374.1,364.4,356.2,316.2,39,0.086,0.013,0,276.8; 74700,373.3, + 363.3,358.2,313.2,35.5,0.085,0.019,0,276.9; 75600,373.5,362.6,357.2, + 313.2,34,0.083,0.016,0,277; 76500,372.7,362.9,357.2,310.2,37.667, + 0.159,0.016,0,277.2; 77400,375,362.9,357.2,308.2,39,0.159,0.02,0, + 277.2; 78300,374.2,364.1,357.2,306.2,40.667,0.088,0.016,0,277.8; + 79200,373.9,363,358.2,306.2,41,0.087,0.021,0,278.5; 80100,375.6, + 362.8,357.2,305.2,38.833,0.079,0.021,0.001,278.4; 81000,377.7,362.8, + 358.2,303.2,38.667,0.086,0.021,0,278.3; 81900,376.3,364.6,357.2, + 303.2,35.5,0.153,0.016,0,278.5; 82800,378,363.2,357.2,302.2,39.833, + 0.09,0.016,0,278.5; 83700,376.7,363.2,359.2,301.2,43.333,0.09,0.021, + 0,278.6; 84600,376.7,362.9,358.2,300.2,40,0.082,0.02,0,278.7; 85500, + 375.5,362.3,358.2,299.2,37.5,0.086,0.021,0,278.5; 86400,376.3,364.6, + 358.2,299.2,34.667,0.161,0.02,0,278.9; 87300,375.7,363.6,358.2, + 299.2,34.833,0.088,0.02,0,279.4; 88200,375.5,363.6,359.2,298.2, + 35.167,0.088,0.02,0,279.4; 89100,376.6,364,358.2,297.2,35,0.08,0.02, + 0.001,280.1; 90000,375.9,365,360.2,297.2,41.5,0.079,0.022,0,280.3; + 90900,373.8,366.5,361.2,296.2,42.167,0.15,0.019,0.001,280.3; 91800, + 375.1,366.2,361.2,296.2,38.833,0.08,0.021,0,280; 92700,375.3,365.4, + 361.2,296.2,35.833,0.077,0.02,0,279.9; 93600,374.8,364.7,361.2, + 296.2,36.833,0.079,0.02,0,279.8; 94500,374.2,364.7,361.2,295.2, + 37.667,0.079,0.022,0.001,279.6; 95400,375.9,365.3,360.2,295.2, + 35.167,0.143,0.02,0.001,279.5; 96300,375.2,365.5,361.2,294.2,36.833, + 0.091,0.023,0,279.4; 97200,375.2,364.5,360.2,294.2,37.5,0.077,0.021, + 0.001,279.2; 98100,375.5,364.7,361.2,294.2,36.833,0.085,0.023,0.001, + 279.2; 99000,375.2,364.5,361.2,294.2,34.167,0.159,0.023,0.001,279.2; + 99900,375.3,364.5,361.2,294.2,30.667,0.159,0.022,0.001,278.8; + 100800,375.8,365,360.2,293.2,32.167,0.089,0.025,0.001,278.8; 101700, + 372.6,364.3,361.2,293.2,33.5,0.08,0.023,0.001,278.5; 102600,374.4, + 363.8,361.2,293.2,33.667,0.085,0.026,0.001,278.1; 103500,375.5, + 364.4,361.2,293.2,36.167,0.155,0.025,0.001,277.7; 104400,375.2, + 365.6,361.2,293.2,35.667,0.084,0.025,0,277.4; 105300,371.6,365.6, + 361.2,293.2,34.167,0.084,0.029,0.021,277.1; 106200,374.4,364.3, + 366.2,293.2,31.167,0.079,0.053,0.021,277.1; 107100,372.7,364.5, + 367.2,366.2,33,0.082,0.055,0.024,276.9; 108000,371.5,365.2,365.2, + 364.2,31.5,0.161,0.052,0.024,276.7; 108900,371,365.5,369.2,364.2, + 31.667,0.08,0.101,0.024,276.3; 109800,371.8,365.8,369.2,366.2, + 31.167,0.076,0.101,0.059,276.2; 110700,371,365.8,367.2,366.2,34.5, + 0.076,0.053,0.037,276; 111600,371.5,365.9,366.2,367.2,33.667,0.079, + 0.059,0.067,276; 112500,371,365.4,366.2,367.2,33.833,0.154,0.053, + 0.067,275.9; 113400,372.4,365.7,365.2,365.2,30.333,0.088,0.057, + 0.037,275.7; 114300,369.9,363.4,365.2,365.2,35.333,0.085,0.055, + 0.037,275.6; 115200,372.2,362.9,365.2,366.2,36.833,0.086,0.055, + 0.037,275.3; 116100,370.9,362.9,365.2,366.2,33.167,0.086,0.059, + 0.064,275.1; 117000,371.2,364.3,365.2,366.2,30,0.153,0.063,0.035, + 275.1; 117900,371.7,364,365.2,365.2,29.5,0.082,0.056,0.046,275.1; + 118800,371.9,363.5,365.2,365.2,30.333,0.087,0.05,0.046,274.7; + 119700,370.5,363.5,364.2,365.2,32.167,0.083,0.046,0.046,274.5; + 120600,370.8,364.3,364.2,366.2,30.5,0.164,0.046,0.033,274.3; 121500, + 371.4,364.3,364.2,363.2,28.833,0.164,0.039,0.026,274.2; 122400, + 371.4,363.5,363.2,362.2,29.667,0.089,0.036,0.017,274.2; 123300, + 371.8,362.8,362.2,360.2,28.167,0.081,0.033,0.015,274.2; 124200, + 372.6,362.7,362.2,360.2,29.167,0.079,0.038,0.021,274.1; 125100, + 372.9,362.6,363.2,360.2,25.5,0.081,0.042,0.021,273.8; 126000,373.6, + 363.9,363.2,359.2,26.833,0.155,0.042,0.013,273.6; 126900,372.2, + 363.9,362.2,359.2,28,0.155,0.036,0.013,273.5; 127800,373.3,362, + 362.2,358.2,30.333,0.088,0.039,0.016,273.7; 128700,374.3,361.5, + 362.2,361.2,33.333,0.094,0.036,0.023,273.7; 129600,374.6,361.6, + 362.2,348.2,27.667,0.053,0.038,0,273.4; 130500,372.5,361.8,362.2, + 348.2,28.333,0.075,0.036,0,273.3; 131400,374.3,362,362.2,338.2, + 28.167,0.089,0.036,0,273.2; 132300,375,362,362.2,338.2,28.333,0.089, + 0.036,0,273.2; 133200,374.8,361.7,362.2,331.2,30.333,0.098,0.033, + 0.001,273.1; 134100,373.7,363.6,362.2,325.2,29,0.146,0.031,0.001, + 273.1; 135000,372.4,362.7,362.2,321.2,29.833,0.042,0.033,0.001, + 272.8; 135900,372,361.6,362.2,317.2,29.333,0.09,0.031,0,272.9; + 136800,374.9,361.5,362.2,317.2,29.833,0.099,0.033,0,272.8; 137700, + 373.5,361.8,362.2,314.2,28.833,0.1,0.033,0,272.8; 138600,374.5, + 361.8,362.2,314.2,29.667,0.1,0.027,0,272.7; 139500,375.2,362.1, + 361.2,311.2,29.667,0.053,0.03,0,272.7; 140400,374.9,362.2,362.2, + 308.2,28.5,0.063,0.029,0,272.8; 141300,374.4,364,362.2,306.2,26.167, + 0.056,0.03,0,272.5; 142200,374.3,362.5,362.2,306.2,29.667,0.091, + 0.03,0,272.4; 143100,375.2,360.2,362.2,305.2,32.167,0.009,0.03,0, + 272.5; 144000,373.6,360.2,361.2,303.2,32,0.009,0.03,0,272.8; 144900, + 374.5,361.2,363.2,303.2,29.333,0.089,0.049,0,272.5; 145800,373.8, + 360.6,363.2,301.2,29.5,0.098,0.038,0,272.5; 146700,373.5,362.9, + 362.2,301.2,28.833,0.157,0.033,0,272.3; 147600,373.2,363.4,363.2, + 301.2,29.167,0.071,0.034,0,272.2; 148500,373.7,363.3,363.2,300.2, + 27.667,0.087,0.034,0,272.3; 149400,372.9,363.3,363.2,299.2,29.833, + 0.087,0.035,0,272.3; 150300,371.1,363,364.2,298.2,32.667,0.098, + 0.041,0,272.4; 151200,372.5,362.8,364.2,298.2,32,0.057,0.039,0.001, + 272.4; 152100,373.9,364.7,362.2,297.2,26.833,0.09,0.027,0.001,272.5; + 153000,372.8,363.8,362.2,297.2,28.833,0.08,0.034,0.001,272.7; + 153900,371.9,363.1,362.2,297.2,29.833,0.099,0.034,0.001,272.5; + 154800,371.6,363.1,362.2,297.2,29.5,0.099,0.034,0,272.8; 155700, + 372.5,363,363.2,296.2,28.333,0.071,0.039,0.001,272.6; 156600,372.9, + 364.6,363.2,295.2,27.833,0.156,0.032,0,272.6; 157500,372.8,363.5, + 362.2,295.2,26.333,0.086,0.039,0,272.8; 158400,373,362.4,362.2, + 295.2,30.5,0.084,0.034,0,272.9; 159300,372.4,362.9,362.2,295.2,31, + 0.079,0.034,0,273.1; 160200,372.3,362.9,360.2,295.2,29.667,0.079, + 0.02,0,272.9; 161100,373.4,363.8,360.2,294.2,29.833,0.159,0.017,0, + 273; 162000,372.5,363.2,358.2,294.2,27.167,0.095,0.017,0.001,273; + 162900,374.2,362.3,357.2,294.2,30,0.083,0.018,0,273.2; 163800,372.9, + 362.4,357.2,294.2,29.667,0.083,0.019,0,273.5; 164700,373.8,362.6, + 357.2,293.2,29.333,0.115,0.019,0,273.9; 165600,373.6,362.6,357.2, + 293.2,27.667,0.115,0.018,0.001,274.5; 166500,374.2,364.3,357.2, + 293.2,29.167,0.109,0.018,0.001,275; 167400,375,362.5,358.2,293.2,30, + 0.086,0.022,0,275; 168300,377,362.3,357.2,293.2,27.667,0.08,0.021,0, + 275.5; 169200,374.9,362.5,358.2,293.2,28.833,0.084,0.022,0,275.9; + 170100,376.2,364,358.2,293.2,29.667,0.153,0.022,0.001,276.1; 171000, + 375.8,364,358.2,292.2,30.333,0.153,0.021,0,275.9; 171900,376.3, + 363.3,358.2,292.2,28.5,0.084,0.021,0,275.6; 172800,376.2,363.2, + 359.2,292.2,28.333,0.088,0.021,0,275.6; 173700,377.8,362.9,359.2, + 292.2,28.333,0.085,0.023,0,275.8; 174600,376.8,364.6,359.2,292.2, + 29.167,0.156,0.021,0,275.8; 175500,375.5,364.4,359.2,292.2,28.167, + 0.084,0.021,0,275.9; 176400,375,364.4,359.2,292.2,29.333,0.084, + 0.023,0.001,275.9; 177300,374.5,364.7,361.2,291.2,26.167,0.082, + 0.023,0.001,276.1; 178200,374,364.5,361.2,291.2,26.333,0.084,0.021, + 0.001,276.2; 179100,374.5,366.1,361.2,291.2,29.167,0.153,0.021, + 0.001,276.2; 180000,375.8,365.3,361.2,291.2,29.333,0.09,0.021,0, + 276.2; 180900,375.7,364.8,360.2,291.2,30.667,0.083,0.021,0,276.1; + 181800,374.9,365.4,360.2,291.2,30.667,0.08,0.021,0.001,276.3; + 182700,373.5,365.4,361.2,291.2,31.167,0.08,0.022,0.001,276.4; + 183600,375.3,366.8,362.2,291.2,30.167,0.147,0.021,0.001,276.5; + 184500,375.8,365.2,361.2,291.2,30.5,0.079,0.022,0,276.5; 185400, + 375.1,364,360.2,291.2,28.167,0.081,0.02,0,276.5; 186300,375.8,363.4, + 360.2,291.2,29.5,0.084,0.023,0,276.5; 187200,375.9,364.7,360.2, + 291.2,30.667,0.151,0.023,0.001,276.6; 188100,373.2,364.7,359.2, + 291.2,29.833,0.151,0.021,0,276.7; 189000,374.8,364.7,360.2,290.2, + 29.833,0.085,0.023,0,276.7; 189900,375.9,364.5,360.2,291.2,28.833, + 0.086,0.021,0,276.7; 190800,373.8,363.7,360.2,290.2,29.833,0.078, + 0.023,0,276.6; 191700,372.1,364.6,362.2,290.2,32.5,0.157,0.035,0, + 276.6; 192600,373.8,365.1,362.2,290.2,32.833,0.088,0.035,0,276.6; + 193500,371.9,365.1,364.2,290.2,33.167,0.088,0.037,0.001,276.7; + 194400,373.7,364.6,365.2,290.2,28.667,0.076,0.032,0.001,276.8; + 195300,372.3,365.3,365.2,283.2,28.667,0.083,0.07,0.081,276.8; + 196200,371.7,364.9,364.2,364.2,30.333,0.158,0.043,0.02,277; 197100, + 373.1,365.5,365.2,364.2,30.333,0.085,0.039,0.02,276.9; 198000,372.3, + 364.5,365.2,364.2,29.167,0.082,0.039,0.02,277.1; 198900,371,364.5, + 364.2,362.2,28.833,0.082,0.039,0.023,277.1; 199800,371,363.1,364.2, + 363.2,27.667,0.079,0.037,0.024,277; 200700,371.3,364.7,364.2,364.2, + 29.5,0.158,0.041,0.022,277; 201600,371.6,364.8,364.2,363.2,30.5, + 0.082,0.041,0.022,276.9; 202500,372.7,363.7,363.2,363.2,30.333, + 0.083,0.039,0.022,276.9; 203400,372.1,362.7,363.2,363.2,28.333, + 0.086,0.039,0.021,276.7; 204300,370.9,362.7,364.2,363.2,27.667, + 0.086,0.038,0.021,276.9; 205200,371.6,364.9,363.2,362.2,28.833, + 0.154,0.035,0.021,276.8; 206100,371.5,363.3,364.2,361.2,29,0.083, + 0.061,0.018,276.8; 207000,372.3,362.5,364.2,360.2,28.667,0.086, + 0.045,0.019,276.8; 207900,373.4,362.6,364.2,360.2,26.5,0.085,0.041, + 0.019,276.9; 208800,372.8,364.9,364.2,361.2,26.667,0.154,0.041, + 0.018,277; 209700,373.8,364.9,364.2,361.2,28.5,0.154,0.042,0.018, + 277; 210600,373.9,363.8,363.2,358.2,28.5,0.082,0.031,0.009,277.1; + 211500,373.7,362.5,361.2,355.2,26.167,0.083,0.03,0.012,277.1; + 212400,374.6,362.3,362.2,355.2,28.333,0.084,0.031,0.012,277.1; + 213300,376,362.3,361.2,355.2,28.833,0.081,0.031,0.012,277; 214200, + 373.7,364.1,361.2,355.2,30.167,0.096,0.031,0.009,277; 215100,372.7, + 364.1,361.2,356.2,27.5,0.096,0.028,0.011,277; 216000,372.9,362.8, + 362.2,348.2,27.333,0.063,0.028,0,276.9; 216900,373.9,362.9,361.2, + 337.2,28.833,0.061,0.031,0.001,276.9; 217800,373.2,362.9,362.2, + 330.2,27.5,0.087,0.028,0,277.1; 218700,375.8,361.7,362.2,330.2, + 28.833,0.09,0.029,0,276.9; 219600,375.4,361.3,362.2,330.2,25.667, + 0.023,0.029,0,276.9; 220500,375.9,361.3,362.2,324.2,25,0.023,0.028, + 0,276.9; 221400,374.3,362.5,362.2,320.2,25.667,0.085,0.028,0.001, + 276.9; 222300,375.2,363.9,363.2,316.2,26,0.137,0.032,0.001,276.9; + 223200,374.7,362,362.2,312.2,27,0.018,0.028,0.001,276.8; 224100, + 374.8,362.3,361.2,310.2,26.833,0.067,0.033,0,276.5; 225000,375.5, + 359.6,361.2,310.2,26.333,0.106,0.028,0,276.4; 225900,374.6,359.5, + 361.2,310.2,25.833,0.024,0.028,0,276.3; 226800,374.3,359.5,361.2, + 307.2,24.667,0.024,0.035,0,276.2; 227700,372.4,360.7,362.2,305.2, + 26.667,0.048,0.032,0,276; 228600,376.5,361,363.2,304.2,28.167,0.091, + 0.036,0.001,276; 229500,375.4,363.6,363.2,302.2,27,0.157,0.031, + 0.001,275.9; 230400,373.4,363,363.2,302.2,25.5,0.043,0.035,0.001, + 275.5; 231300,371.6,362.7,363.2,301.2,24.333,0.074,0.035,0,275.3; + 232200,374.4,362.7,363.2,301.2,24.5,0.074,0.036,0,275.1; 233100, + 374.5,362.6,363.2,300.2,25,0.09,0.034,0.001,275.1; 234000,373.7, + 362.2,364.2,299.2,25.667,0.097,0.063,0.001,275.1; 234900,372.4, + 362.8,364.2,298.2,25.5,0.053,0.044,0,274.9; 235800,371.6,364.3, + 364.2,298.2,23.5,0.096,0.042,0,274.8; 236700,373.2,363.6,364.2, + 297.2,24.667,0.045,0.042,0,274.2; 237600,374,363.6,365.2,297.2, + 24.167,0.045,0.041,0.001,274.3; 238500,371.8,364.5,363.2,297.2, + 22.833,0.08,0.018,0.001,273.9; 239400,371.8,362.9,362.2,296.2,21.5, + 0.087,0.032,0,273.9; 240300,371.6,362.7,363.2,295.2,21.167,0.141, + 0.039,0,274; 241200,371.5,364.7,364.2,295.2,20.167,0.089,0.039,0, + 273.6; 242100,371.9,363.4,364.2,295.2,19.833,0.079,0.039,0,273.5; + 243000,372.1,363.4,363.2,294.2,19.5,0.079,0.044,0.001,273.6; 243900, + 372.6,362.1,363.2,299.2,19,0.078,0.041,0.154,273.5; 244800,372.5, + 362.5,364.2,299.2,22,0.085,0.045,0.154,273.5; 245700,373.8,364.5, + 361.2,359.2,22.5,0.153,0.014,0.012,273.4; 246600,373.1,362.6,360.2, + 359.2,21.5,0.085,0.019,0.012,273.5; 247500,372.1,362.5,360.2,358.2, + 18,0.079,0.019,0.012,273.7; 248400,371.9,362.5,359.2,358.2,18.333, + 0.079,0.026,0.013,273.8; 249300,372.5,362.2,359.2,358.2,18.5,0.086, + 0.023,0.013,273.5; 250200,372.3,364.1,359.2,358.2,20,0.159,0.022, + 0.013,273.5; 251100,373.3,363.2,360.2,358.2,20.667,0.087,0.024, + 0.013,274.3; 252000,372.5,362.7,360.2,358.2,18.333,0.085,0.025, + 0.013,274.5; 252900,374.2,363.1,360.2,358.2,16.5,0.085,0.025,0.014, + 275.1; 253800,375.2,363.1,361.2,359.2,17.667,0.085,0.027,0.014, + 276.1; 254700,375.2,364.7,361.2,358.2,19,0.155,0.027,0.013,276.7; + 255600,374,363.6,361.2,358.2,20.667,0.083,0.028,0.013,276.7; 256500, + 375.5,362.9,361.2,359.2,18.167,0.084,0.029,0.013,277.4; 257400, + 374.2,362.7,361.2,359.2,19.5,0.091,0.028,0.013,277.7; 258300,375.3, + 364.3,361.2,359.2,17.833,0.157,0.028,0.013,277.8; 259200,373.6, + 364.3,362.2,359.2,18.667,0.157,0.032,0.013,278.3; 260100,374.4,364, + 362.2,359.2,19.167,0.092,0.033,0.014,278.5; 261000,373.4,364,363.2, + 360.2,19.167,0.086,0.032,0.014,278.5; 261900,372.2,364.8,364.2, + 361.2,18.333,0.083,0.033,0.014,278.2; 262800,372.6,365.9,364.2, + 360.2,18.333,0.146,0.033,0.014,278.7; 263700,375.2,365.8,364.2, + 360.2,20.333,0.094,0.033,0.014,278.5; 264600,374.7,364.7,364.2, + 361.2,20.167,0.082,0.033,0.015,278.6; 265500,373.2,364.7,364.2, + 361.2,18.333,0.082,0.036,0.015,278.7; 266400,374.4,364.9,364.2, + 361.2,19,0.079,0.035,0.015,278.7; 267300,373.9,365,363.2,361.2, + 17.667,0.155,0.034,0.015,278.6; 268200,373.8,365.2,363.2,360.2,19, + 0.087,0.034,0.014,278.4; 269100,374.2,363.4,363.2,360.2,17.5,0.081, + 0.039,0.014,278.2; 270000,371.9,363.1,363.2,359.2,18,0.086,0.039, + 0.015,278.4; 270900,371.8,363.1,364.2,361.2,19.167,0.086,0.037, + 0.014,278.2; 271800,373.4,365.4,364.2,361.2,19.833,0.144,0.039, + 0.014,278.3; 272700,371.9,365.6,364.2,361.2,21.667,0.081,0.035, + 0.015,278.3; 273600,370.8,364.6,364.2,366.2,20.5,0.085,0.036,0.034, + 278.4; 274500,372.6,364.2,364.2,366.2,18.667,0.082,0.034,0.034,278; + 275400,372.5,365.6,364.2,365.2,17.833,0.156,0.034,0.029,277.6; + 276300,371.1,365.6,364.2,363.2,18.333,0.156,0.038,0.022,277.4; + 277200,369.9,364.9,363.2,364.2,20.333,0.106,0.039,0.033,277; 278100, + 371.4,363.2,365.2,364.2,19,0.083,0.061,0.033,277; 279000,372.1, + 363.9,365.2,363.2,19.167,0.083,0.062,0.026,276.5; 279900,371.6, + 363.8,366.2,363.2,18.667,0.157,0.062,0.026,276.5; 280800,371.5, + 365.2,366.2,366.2,20,0.086,0.062,0.032,276.3; 281700,371.2,365.2, + 366.2,361.2,20.333,0.086,0.059,0.044,276.1; 282600,371.7,363.9, + 366.2,368.2,22.667,0.085,0.111,0.088,276; 283500,370.6,362.4,367.2, + 363.2,19.833,0.088,0.093,0,276; 284400,371.5,364.9,366.2,367.2,21.5, + 0.158,0.001,0.08,275.5; 285300,370.4,365.1,365.2,367.2,19.667,0.096, + 0.061,0.08,275.4; 286200,370.9,363.8,365.2,363.2,19.167,0.085,0.061, + 0,275.2; 287100,371.1,363.7,365.2,367.2,20.333,0.084,0.061,0.081, + 275.2; 288000,371.2,363.4,365.2,353.2,20.5,0.086,0.057,0,275.2; + 288900,370,363.4,365.2,353.2,20.5,0.086,0.057,0,275.2; 289800,371.2, + 364.3,365.2,353.2,21.333,0.089,0.057,0,275; 290700,371.8,363.9, + 365.2,366.2,20.167,0.082,0.055,0.065,275; 291600,371.4,363.4,364.2, + 366.2,20.333,0.084,0.047,0.065,275; 292500,371.6,363,365.2,365.2, + 19.5,0.086,0.049,0.033,275; 293400,370.7,364.3,364.2,365.2,21.167, + 0.088,0.041,0.033,275.1; 294300,372.8,363,364.2,364.2,22.5,0.088, + 0.041,0.033,275.1; 295200,370.1,363,362.2,363.2,20.167,0.088,0.033, + 0.027,275.1; 296100,369.3,362.7,362.2,364.2,21.667,0.088,0.033, + 0.025,275; 297000,369.5,362.9,362.2,364.2,21.833,0.089,0.036,0.026, + 275.3; 297900,369.2,363.1,363.2,364.2,22,0.085,0.04,0.028,275.1; + 298800,372.4,362.9,363.2,364.2,22.333,0.085,0.042,0.028,275; 299700, + 373,363.6,363.2,364.2,21,0.091,0.042,0.028,275; 300600,372.4,362.9, + 363.2,363.2,18.5,0.084,0.039,0.023,275.1; 301500,373,363.1,363.2, + 363.2,20,0.089,0.04,0.039,275.1; 302400,372.8,361.2,361.2,362.2,20, + 0.07,0.039,0.036,275.1; 303300,373.8,360.4,360.2,363.2,27,0.097, + 0.044,0.039,274.9; 304200,374.5,358.6,362.2,363.2,27,0.054,0.041, + 0.039,274.7; 305100,373.2,360.7,362.2,365.2,25.5,0.089,0.041,0.03, + 274.7; 306000,372.4,361.4,363.2,365.2,22,0.086,0.039,0.03,274.8; + 306900,374.2,364,363.2,364.2,24.667,0.088,0.034,0.024,274.9; 307800, + 374,360.2,363.2,364.2,23,0.014,0.034,0.032,274.7; 308700,374,362.5, + 363.2,364.2,21.5,0.092,0.034,0.031,274.4; 309600,373.9,361.8,363.2, + 363.2,23.333,0.033,0.038,0.013,274.9; 310500,374.2,360,363.2,363.2, + 24.5,0.01,0.038,0.013,275.2; 311400,374.8,361.8,363.2,364.2,23.333, + 0.093,0.033,0.03,275.2; 312300,374.3,362.2,364.2,360.2,25.333,0.03, + 0.032,0.008,275.1; 313200,373.2,362.6,363.2,357.2,24,0.098,0.038, + 0.011,275.1; 314100,371.4,363,362.2,357.2,23.167,0.085,0.033,0.011, + 275.2; 315000,373.2,362.6,363.2,359.2,29.333,0.086,0.04,0.017,275.3; + 315900,372.7,364,363.2,359.2,28.5,0.09,0.036,0.017,275.5; 316800, + 374.9,362.7,363.2,359.2,27,0.046,0.036,0.01,275.5; 317700,374.2, + 362.7,363.2,357.2,25.833,0.046,0.036,0.011,275.3; 318600,370.9, + 363.5,364.2,357.2,24.167,0.078,0.038,0.013,275.3; 319500,372,362.7, + 364.2,357.2,26.167,0.09,0.037,0.013,275.4; 320400,373.2,364.1,363.2, + 360.2,29.167,0.08,0.043,0.015,275.5; 321300,371.1,363.4,363.2,360.2, + 29,0.083,0.044,0.015,275.4; 322200,372.2,362.3,363.2,361.2,27.667, + 0.085,0.044,0.016,275.4; 323100,371.4,362.3,363.2,360.2,29,0.085, + 0.05,0.015,275.5; 324000,370.9,364.4,365.2,360.2,30.5,0.087,0.044, + 0.012,275.5; 324900,373.3,364.5,364.2,356.2,28.333,0.081,0.043,0, + 275.5; 325800,373.4,363.7,364.2,356.2,35.5,0.089,0.051,0,275.3; + 326700,371.5,362.7,364.2,356.2,33.5,0.086,0.045,0,275.1; 327600, + 372.8,363.4,364.2,338.2,32.667,0.085,0.045,0,275.1; 328500,372.8, + 363.4,363.2,338.2,33.167,0.085,0.046,0,274.9; 329400,374,364,364.2, + 331.2,33.5,0.089,0.047,0.001,274.9; 330300,372.1,362.9,363.2,325.2, + 30.5,0.088,0.048,0,274.8; 331200,372.4,362.3,364.2,321.2,33.167, + 0.087,0.054,0.001,274.7; 332100,373.2,362.9,359.2,321.2,32.333,0.09, + 0.003,0.001,274.5; 333000,372.5,364.6,359.2,360.2,31,0.159,0.003, + 0.014,274.5; 333900,373.3,364.6,360.2,359.2,32.667,0.159,0.025, + 0.013,274.6; 334800,372.3,364.3,360.2,359.2,33,0.084,0.023,0.013, + 274.9; 335700,372,363.6,358.2,358.2,35.667,0.085,0.025,0.012,274.8; + 336600,371.3,363.9,360.2,357.2,35.5,0.086,0.024,0.01,275.1; 337500, + 372,363.6,361.2,357.2,36.333,0.097,0.024,0.01,275.1; 338400,373, + 364.9,361.2,357.2,34.333,0.136,0.024,0.013,275.1; 339300,374.3, + 364.9,360.2,357.2,31.5,0.136,0.027,0.013,276; 340200,374,364.2, + 361.2,358.2,32.833,0.091,0.025,0.011,276.6; 341100,373.4,363.3, + 360.2,357.2,32,0.092,0.025,0.011,277.1; 342000,373.7,363.4,361.2, + 357.2,34.167,0.091,0.024,0.011,277.8; 342900,372.7,364,360.2,357.2, + 36.333,0.164,0.025,0.011,278.3; 343800,373.9,362.8,360.2,357.2,45.5, + 0.09,0.025,0.013,278.3; 344700,374.4,362.8,360.2,357.2,38.5,0.09, + 0.029,0.013,278.5; 345600,373.9,362.6,360.2,357.2,36.333,0.092, + 0.028,0.012,278.7; 346500,375.3,363.5,362.2,358.2,21.333,0.091, + 0.027,0.011,278.9; 347400,373.6,365,362.2,357.2,34.833,0.146,0.024, + 0.011,279.5; 348300,371.3,365,361.2,357.2,35,0.099,0.024,0.011, + 279.8; 349200,371.7,364.3,361.2,357.2,22.333,0.089,0.024,0.01,279.8; + 350100,373.9,364.3,361.2,357.2,45.333,0.089,0.025,0.01,279.7; + 351000,374.9,363.6,361.2,357.2,41.5,0.089,0.024,0.012,279.5; 351900, + 373.9,363.8,361.2,357.2,38,0.145,0.026,0.011,279.2; 352800,375.4, + 365.5,362.2,358.2,35.5,0.09,0.027,0.01,279; 353700,373.1,364.7, + 362.2,358.2,37.5,0.089,0.028,0.011,278.4; 354600,372.6,364.9,362.2, + 358.2,38.167,0.091,0.027,0.011,278.4; 355500,371.5,363.4,362.2, + 357.2,37,0.151,0.027,0.012,278; 356400,374.2,363.4,361.2,357.2,37, + 0.151,0.029,0.012,277.8; 357300,371.4,364.2,361.2,356.2,33.167, + 0.114,0.03,0.011,277.9; 358200,373.8,364.2,362.2,357.2,34.167,0.087, + 0.03,0.011,277.9; 359100,373.3,364.9,363.2,358.2,33.167,0.091,0.029, + 0.012,277.6; 360000,372.6,364.4,362.2,358.2,33,0.096,0.028,0.012, + 277.6; 360900,372.9,365.2,362.2,358.2,35.5,0.159,0.028,0.011,277.6; + 361800,374.6,365.2,362.2,362.2,37.167,0.159,0.027,0.02,277.1; + 362700,372.9,363.6,361.2,362.2,38.5,0.088,0.028,0.02,277.1; 363600, + 372.3,363.1,360.2,363.2,35.667,0.091,0.026,0.018,276.7; 364500, + 371.7,363.7,364.2,362.2,34.333,0.089,0.064,0.016,276.5; 365400,372, + 365.4,365.2,362.2,30.5,0.154,0.061,0.016,276.1; 366300,371.4,364.3, + 365.2,361.2,33.167,0.09,0.061,0.02,276.1; 367200,370.4,364.3,365.2, + 361.2,31,0.09,0.058,0.022,275.9; 368100,371.2,363.9,366.2,363.2, + 30.333,0.089,0.055,0.061,275.7; 369000,370.7,364.9,366.2,363.2, + 30.833,0.087,0.053,0.061,275.5; 369900,371.2,365.5,364.2,364.2,29.5, + 0.157,0.052,0.034,275.2; 370800,371.7,364.1,364.2,364.2,29.333, + 0.091,0.051,0.034,275.1; 371700,370.3,363.7,364.2,365.2,28.167, + 0.085,0.051,0.055,275.1; 372600,371,363.3,365.2,364.2,31.5,0.088, + 0.064,0.04,274.9; 373500,371.5,362.3,363.2,366.2,31.333,0.09,0.05, + 0.051,274.5; 374400,371,364.6,364.2,366.2,29.5,0.153,0.045,0.047, + 274.4; 375300,370.8,364.1,364.2,366.2,27,0.092,0.041,0.051,274.2; + 376200,370,363.1,364.2,366.2,27.333,0.091,0.041,0.051,274.1; 377100, + 372.9,363.2,364.2,366.2,28.167,0.087,0.047,0.051,274.1; 378000, + 371.9,363.1,364.2,365.2,28.167,0.088,0.041,0.048,273.8; 378900, + 370.4,363.9,364.2,364.2,27,0.161,0.045,0.04,273.7; 379800,371.9,364, + 363.2,366.2,27.167,0.16,0.041,0.051,273.6; 380700,371.7,363.2,363.2, + 366.2,28.167,0.094,0.047,0.051,273.3; 381600,372,362.7,363.2,365.2, + 30.333,0.089,0.047,0.033,273.4; 382500,370.3,362.7,363.2,366.2, + 30.667,0.089,0.041,0.034,273.4; 383400,371.3,362.6,364.2,364.2, + 28.167,0.088,0.041,0.04,273.3; 384300,370.7,364.7,363.2,364.2,25.5, + 0.159,0.039,0.04,273; 385200,372.5,362.9,362.2,364.2,24.167,0.093, + 0.039,0.02,272.8; 386100,371.2,363,363.2,364.2,24.5,0.089,0.035, + 0.02,272.8; 387000,372.9,363.3,363.2,364.2,25,0.092,0.035,0.036, + 272.6; 387900,372.6,363.3,363.2,364.2,26,0.092,0.04,0.021,272.6; + 388800,371.6,363.7,363.2,362.2,26.167,0.165,0.036,0.028,272.4; + 389700,372.5,364,362.2,363.2,25.167,0.095,0.037,0.019,272.3; 390600, + 373.2,363,362.2,363.2,25.667,0.091,0.037,0.019,272.3; 391500,371.6, + 362.3,362.2,363.2,26.5,0.091,0.036,0.019,272.2; 392400,372.8,363.1, + 362.2,362.2,25.167,0.092,0.036,0.014,272.1; 393300,372.7,363.1, + 362.2,362.2,25.333,0.092,0.036,0.038,271.9; 394200,373.3,364.3, + 363.2,363.2,24.167,0.159,0.032,0.012,271.9; 395100,372,364.1,363.2, + 361.2,22.5,0.088,0.037,0.024,271.5; 396000,371.6,363.2,363.2,364.2, + 24.5,0.088,0.033,0.014,271.5; 396900,371.5,363.3,363.2,364.2,25.667, + 0.089,0.035,0.014,271.6; 397800,371.9,364.1,363.2,364.2,25.5,0.159, + 0.038,0.014,271.3; 398700,371.9,364.3,363.2,362.2,26.833,0.094, + 0.038,0.013,271.3; 399600,374.4,364.3,363.2,363.2,26.167,0.094, + 0.034,0.041,271.3; 400500,371.1,364.2,363.2,361.2,23.833,0.086, + 0.037,0.015,271.1; 401400,371,363.8,363.2,360.2,21.5,0.084,0.036, + 0.013,271.1; 402300,371.8,363.2,363.2,361.2,23.167,0.088,0.038,0.02, + 271; 403200,372.2,364,362.2,361.2,23.333,0.124,0.037,0.02,271.1; + 404100,370.9,363.2,362.2,361.2,23.667,0.087,0.037,0.02,271.1; + 405000,370.9,363.2,363.2,360.2,22.833,0.087,0.037,0.013,271.1; + 405900,371.2,362.8,364.2,363.2,22.667,0.09,0.038,0.025,270.7; + 406800,371.1,364.3,363.2,360.2,22.833,0.089,0.04,0.015,270.7; + 407700,372.2,363.8,363.2,360.2,23.5,0.163,0.041,0.013,270.5; 408600, + 371.2,363.3,363.2,360.2,26.333,0.09,0.043,0.013,270.5; 409500,372.2, + 363.7,363.2,362.2,23.667,0.088,0.043,0.031,270.5; 410400,372.4, + 363.7,363.2,362.2,22.167,0.088,0.04,0.031,270.5; 411300,372.2,362.7, + 363.2,361.2,23.667,0.089,0.042,0.015,270.6; 412200,371.7,362.6, + 363.2,352.2,25.833,0.109,0.041,0.001,270.2; 413100,371.4,363.8, + 363.2,341.2,22.667,0.088,0.046,0,270.1; 414000,371.5,363.1,363.2, + 341.2,23.333,0.089,0.039,0,270.3; 414900,372.5,363.4,363.2,333.2, + 24.5,0.091,0.039,0.001,270.1; 415800,371.9,363.4,363.2,327.2,22.667, + 0.091,0.041,0.001,270.1; 416700,371.9,362.5,363.2,327.2,23.167,0.09, + 0.042,0.001,269.7; 417600,372.2,364.6,363.2,322.2,25.5,0.156,0.044, + 0.001,269.7; 418500,373,363.5,356.2,318.2,21.5,0.089,0.012,0,269.7; + 419400,373.7,362.7,357.2,318.2,22.833,0.09,0.014,0,269.8; 420300, + 373.7,362.3,357.2,315.2,22.5,0.088,0.014,0,270.2; 421200,372.3, + 362.3,358.2,312.2,22.5,0.088,0.017,0.001,270.5; 422100,373.4,364.2, + 356.2,309.2,22.833,0.159,0.02,0,271.3; 423000,372.9,363.3,357.2, + 309.2,23.167,0.092,0.018,0,271.7; 423900,372.5,362.9,358.2,307.2, + 22.833,0.092,0.022,0,271.7; 424800,372.4,362.4,358.2,307.2,23.833, + 0.091,0.018,0,272.2; 425700,376.8,364.2,358.2,305.2,24.833,0.16, + 0.018,0,273; 426600,374.5,364.2,358.2,304.2,23,0.16,0.022,0,273.5; + 427500,373.3,364.4,358.2,302.2,23,0.09,0.021,0,274.3; 428400,372.1, + 364,359.2,301.2,21.667,0.095,0.02,0.001,274.8; 429300,376.6,363.1, + 359.2,301.2,21.667,0.088,0.021,0.001,274.8; 430200,374.5,363.9, + 358.2,301.2,22.667,0.158,0.021,0.001,275.3; 431100,372.5,363.8, + 358.2,300.2,26.667,0.101,0.021,0,275.7; 432000,372.7,363.8,359.2, + 299.2,23.167,0.101,0.022,0.001,276.1; 432900,375.3,362.9,358.2, + 298.2,22.833,0.091,0.022,0.001,276.6; 433800,374.9,364.6,359.2, + 298.2,24.667,0.089,0.023,0,277.1; 434700,376.3,365.1,361.2,297.2, + 24.167,0.148,0.021,0.001,277.1; 435600,375,364.4,360.2,297.2,24.5, + 0.088,0.023,0.001,277.3; 436500,374.8,363.9,360.2,297.2,24.333, + 0.088,0.023,0,277.4; 437400,373.1,363.9,359.2,297.2,24.667,0.088, + 0.021,0,277.4; 438300,374.7,364.8,360.2,296.2,24.333,0.085,0.024,0, + 277.4; 439200,375.2,364.1,360.2,296.2,25,0.096,0.021,0,277; 440100, + 372.7,364.1,359.2,295.2,25.667,0.158,0.023,0.001,277; 441000,374.3, + 363.9,359.2,295.2,27.667,0.091,0.021,0.001,276.8; 441900,374.4, + 364.7,359.2,295.2,26,0.085,0.021,0,276.7; 442800,372.9,364.7,360.2, + 295.2,27.5,0.085,0.025,0,276.7; 443700,371.4,365,361.2,294.2,28, + 0.086,0.021,0,276.7; 444600,375,366,361.2,294.2,26.167,0.154,0.023, + 0.001,276.9; 445500,374.3,364,361.2,294.2,25.667,0.092,0.022,0.001, + 276.7; 446400,372.8,364.2,360.2,294.2,26,0.087,0.024,0.001,276.7; + 447300,374.6,364.3,360.2,293.2,28.833,0.088,0.024,0.001,276.3; + 448200,375.4,364.3,361.2,293.2,28,0.088,0.023,0.001,275.9; 449100, + 374.7,365,360.2,293.2,27.667,0.159,0.024,0.001,275.6; 450000,372.1, + 364.5,360.2,293.2,27.833,0.091,0.023,0.001,275.4; 450900,371.5, + 363.4,362.2,293.2,31,0.092,0.058,0.006,275.2; 451800,373.2,362.5, + 365.2,293.2,31.333,0.088,0.047,0.006,275.2; 452700,371.5,364.7, + 365.2,364.2,29.833,0.156,0.047,0.021,274.9; 453600,370.8,364.7, + 365.2,364.2,26.5,0.156,0.053,0.023,274.6; 454500,371.7,365.4,368.2, + 363.2,29,0.099,0.107,0.05,274.3; 455400,372.2,365.9,367.2,367.2, + 29.167,0.085,0.062,0.043,274.3; 456300,372,365.1,365.2,365.2,29.5, + 0.083,0.048,0.029,274.2; 457200,370.4,364.1,365.2,365.2,28,0.155, + 0.048,0.029,274.2; 458100,371.2,365.1,365.2,367.2,25.667,0.087, + 0.048,0.044,274.1; 459000,372.3,365.1,364.2,365.2,30,0.087,0.044, + 0.034,273.8; 459900,371.6,363.5,363.2,365.2,31.333,0.092,0.051, + 0.034,273.6; 460800,371.5,363.1,364.2,367.2,30,0.086,0.047,0.048, + 273.6; 461700,372.4,365.4,365.2,366.2,29.167,0.086,0.047,0.048, + 273.3; 462600,371,363.9,363.2,366.2,29,0.086,0.047,0.048,273.3; + 463500,371.3,362.7,363.2,366.2,27.667,0.152,0.048,0.033,273.2; + 464400,371.7,363.3,364.2,365.2,29.833,0.088,0.043,0.033,273.2; + 465300,372.6,363.1,364.2,365.2,29.833,0.09,0.043,0.046,273.2; + 466200,371.8,364.4,364.2,365.2,29.833,0.089,0.047,0.039,272.8; + 467100,371.9,364.1,364.2,365.2,31.333,0.089,0.044,0.035,272.7; + 468000,370.6,363.9,364.2,365.2,30.5,0.149,0.045,0.035,272.7; 468900, + 370.8,363.2,364.2,365.2,30.333,0.093,0.037,0.033,272.7; 469800, + 371.1,363,363.2,365.2,28.833,0.084,0.043,0.033,272.8; 470700,372.1, + 364.6,363.2,366.2,27.667,0.089,0.043,0.032,272.3; 471600,370.6, + 364.1,363.2,366.2,30.167,0.091,0.041,0.034,272.3; 472500,371.3, + 363.2,363.2,364.2,28.667,0.091,0.041,0.034,272.1; 473400,371.8, + 363.2,363.2,364.2,27.167,0.091,0.041,0.034,272.1; 474300,372.4, + 362.7,363.2,364.2,26.833,0.161,0.041,0.049,272.3; 475200,372.6, + 363.6,362.2,364.2,27.167,0.091,0.041,0.049,272.3; 476100,373.3, + 363.8,363.2,364.2,31.833,0.089,0.037,0.03,272.3; 477000,372.6,363.5, + 363.2,363.2,32.5,0.089,0.037,0.03,272.6; 477900,373.6,362.7,362.2, + 363.2,31,0.091,0.037,0.03,272.5; 478800,374.3,362.5,361.2,363.2, + 27.5,0.168,0.036,0.028,272.5; 479700,371.3,362.6,361.2,361.2,29.167, + 0.092,0.036,0.036,272.5; 480600,371.2,364.5,362.2,361.2,29.333, + 0.086,0.034,0.033,272.5; 481500,371,363.8,362.2,363.2,29.5,0.095, + 0.033,0.024,272.5; 482400,370.9,363.6,363.2,365.2,27.833,0.089, + 0.033,0.024,272.4; 483300,371,363.9,363.2,360.2,27.167,0.094,0.033, + 0.013,272.2; 484200,372,363.5,363.2,364.2,28.833,0.15,0.034,0.013, + 272.3; 485100,372,364.9,363.2,364.2,27.333,0.087,0.036,0.029,272.3; + 486000,372.5,364.6,363.2,363.2,30,0.087,0.034,0.014,272.3; 486900, + 372.1,362.4,363.2,362.2,29.5,0.083,0.034,0.023,272.2; 487800,371.7, + 362.5,361.2,362.2,27.833,0.087,0.031,0.029,272.3; 488700,372.6, + 362.2,362.2,362.2,26.5,0.161,0.033,0.029,272.3; 489600,372.3,362.1, + 361.2,360.2,27.5,0.087,0.033,0.014,272.5; 490500,371.3,364,362.2, + 360.2,27.333,0.093,0.033,0.034,272.5; 491400,370.4,363.5,362.2, + 364.2,28.167,0.088,0.031,0.034,272.5; 492300,370.9,363,365.2,362.2, + 25.333,0.091,0.039,0.016,272.6; 493200,370,363.3,364.2,362.2,24.333, + 0.097,0.033,0.011,272.8; 494100,370.6,363,363.2,362.2,27.167,0.116, + 0.037,0.011,272.9; 495000,370.6,364.3,363.2,364.2,28.5,0.091,0.037, + 0.031,273; 495900,369.4,364.3,363.2,364.2,28.167,0.088,0.053,0.019, + 273; 496800,370.4,362.5,363.2,361.2,27.833,0.084,0.037,0.019,273; + 497700,370.6,362.9,362.2,361.2,21.667,0.087,0.037,0.043,273; 498600, + 371,362.1,362.2,348.2,22.667,0.16,0.038,0.02,273.1; 499500,370.1, + 363.1,362.2,348.2,21.833,0.091,0.038,0.02,273.2; 500400,370.6,362.8, + 362.2,339.2,20,0.089,0.038,0.013,273.2; 501300,370.1,362.4,362.2, + 339.2,23.667,0.087,0.038,0.018,273.2; 502200,370.8,361.8,362.2, + 332.2,24.167,0.091,0.041,0,273.2; 503100,371.2,361.6,362.2,326.2, + 24.667,0.166,0.038,0,273.3; 504000,370.9,363,362.2,321.2,20.333, + 0.099,0.042,0,273.4; 504900,370.2,363.2,358.2,317.2,22.333,0.093, + 0.039,0,273.5; 505800,370.7,361.8,355.2,317.2,21.833,0.093,0.039, + 0.001,273.5; 506700,370.4,361.9,358.2,317.2,19.5,0.091,0.041,0, + 273.6; 507600,369.9,361.7,358.2,314.2,21.5,0.17,0.039,0,273.7; + 508500,370.7,362.7,356.2,311.2,21.167,0.103,0.001,0,273.7; 509400, + 370.6,362.9,356.2,309.2,20.5,0.092,0.012,0,273.9; 510300,370,362.1, + 357.2,307.2,22.333,0.091,0.021,0,273.9; 511200,370.6,361.8,357.2, + 305.2,22.5,0.092,0.021,0,273.9; 512100,371.6,361.5,357.2,305.2,23, + 0.168,0.019,0.001,274.1; 513000,373.6,362.5,357.2,304.2,20.167, + 0.091,0.021,0.001,274.3; 513900,372.9,362.7,357.2,304.2,19.333, + 0.089,0.019,0,274.6; 514800,373.2,361.8,357.2,302.2,19.167,0.093, + 0.021,0,274.8; 515700,374.4,361.7,357.2,301.2,21.833,0.095,0.019,0, + 274.8; 516600,375.3,361.3,358.2,300.2,22.167,0.166,0.019,0,274.8; + 517500,375,362.2,358.2,300.2,21.667,0.096,0.022,0,274.7; 518400, + 375.2,362.4,358.2,299.2,19.667,0.094,0.021,0.001,274.8; 519300, + 375.5,362.1,358.2,298.2,18.833,0.095,0.023,0,274.8; 520200,375.9, + 362.9,358.2,298.2,21.667,0.092,0.022,0.001,274.7; 521100,372.7, + 363.5,359.2,298.2,21.5,0.165,0.023,0.001,274.5; 522000,373.6,363.7, + 360.2,297.2,20.167,0.09,0.023,0,274.5; 522900,373.1,364.8,359.2, + 297.2,18.5,0.094,0.022,0.001,274.5; 523800,375,364.5,359.2,297.2, + 19.167,0.091,0.024,0.001,274.6; 524700,374.7,365.2,360.2,296.2, + 18.667,0.091,0.022,0,274.7; 525600,374.9,364.4,361.2,296.2,19.333, + 0.162,0.023,0,274.9; 526500,375,365.4,361.2,296.2,19.333,0.084, + 0.023,0,274.8; 527400,373.9,366,361.2,295.2,19.167,0.088,0.023,0, + 274.8; 528300,372.3,364.8,361.2,295.2,18.5,0.085,0.024,0,275; + 529200,374,363.5,361.2,295.2,19.5,0.088,0.021,0.001,274.8; 530100, + 373.1,363.3,361.2,294.2,20.333,0.151,0.024,0.001,275.1; 531000, + 375.7,364.2,360.2,294.2,19.333,0.078,0.021,0.001,274.7; 531900, + 375.6,365,360.2,294.2,20.833,0.082,0.024,0.001,274.7; 532800,374.6, + 364.5,361.2,294.2,21.333,0.093,0.024,0.001,274.7; 533700,371.4, + 364.6,361.2,293.2,19,0.091,0.024,0,274.7; 534600,372.7,364.4,361.2, + 293.2,20,0.155,0.023,0,274.5; 535500,371.9,364.5,361.2,293.2,20.167, + 0.082,0.024,0.001,274.2; 536400,373.7,364.4,361.2,293.2,22,0.089, + 0.024,0.001,274.1; 537300,371.7,363.7,363.2,291.2,20.833,0.09,0.024, + 0.001,273.9; 538200,373.2,364.1,366.2,365.2,20.833,0.086,0.024, + 0.001,273.7; 539100,371.5,364.9,366.2,365.2,20.833,0.156,0.024, + 0.001,273.7; 540000,371.8,365.4,364.2,365.2,19.167,0.096,0.025,0, + 273.9; 540900,372,364.5,364.2,362.2,18.333,0.096,0.083,0.068,273.9; + 541800,369.7,363.6,365.2,364.2,20.167,0.095,0.053,0.024,273.7; + 542700,370.5,364.6,365.2,365.2,21.333,0.086,0.046,0.024,274; 543600, + 368.8,364,365.2,365.2,20,0.16,0.049,0.024,273.9; 544500,367.5,365, + 364.2,365.2,18,0.1,0.049,0.022,273.9; 545400,367.1,364.5,364.2, + 365.2,19,0.097,0.001,0.052,274; 546300,368.2,362.8,364.2,364.2, + 21.667,0.095,0.05,0.03,274; 547200,365.2,363.2,364.2,364.2,22.167, + 0.089,0.043,0.033,274; 548100,366.1,362.1,363.2,363.2,21.5,0.151, + 0.051,0.03,273.9; 549000,368.4,362.3,362.2,363.2,20.667,0.087,0.043, + 0.03,274; 549900,369.5,361.4,362.2,363.2,19.833,0.091,0.043,0.04, + 274; 550800,367.1,360.3,362.2,363.2,20.667,0.088,0.049,0.04,274; + 551700,369.8,360,361.2,363.2,20,0.09,0.047,0.044,274.1; 552600, + 369.3,360.4,358.2,363.2,21.5,0.103,0.046,0.044,274; 553500,371.4, + 358.1,358.2,362.2,18.5,0.174,0.046,0.063,274; 554400,372.6,360.2, + 360.2,363.2,19.5,0.094,0.046,0.063,273.9; 555300,371.8,362.3,362.2, + 363.2,19.5,0.096,0.043,0.053,273.9; 556200,371.2,361.8,361.2,362.2, + 20.833,0.096,0.048,0.053,273.9; 557100,372.2,360.2,360.2,361.2,20.5, + 0.103,0.048,0.042,274; 558000,370.4,360.2,361.2,361.2,21.667,0.181, + 0.04,0.049,274; 558900,370,360.2,361.2,361.2,19.667,0.127,0.04, + 0.047,274.3; 559800,371.8,363.3,362.2,365.2,18.833,0.091,0.04,0.035, + 274.1; 560700,373.2,363.3,362.2,365.2,20,0.094,0.04,0.036,274.1; + 561600,371.7,363.3,363.2,363.2,20,0.094,0.038,0.036,274.1; 562500, + 373.1,362.9,363.2,364.2,21,0.094,0.038,0.036,274; 563400,371.6, + 362.9,363.2,362.2,25,0.167,0.036,0.036,274; 564300,371.7,363.2, + 362.2,359.2,24.167,0.096,0.036,0.036,274; 565200,372.1,362.8,361.2, + 359.2,21.167,0.096,0.039,0.016,273.9; 566100,371.9,361.8,361.2, + 359.2,21.167,0.089,0.036,0.028,273.9; 567000,372.4,363.3,361.2, + 363.2,21.333,0.092,0.039,0.012,274; 567900,373.4,363.7,363.2,363.2, + 21.333,0.087,0.037,0.027,273.9; 568800,372.9,363.3,362.2,363.2, + 21.333,0.09,0.038,0.027,273.9; 569700,372.5,363.9,363.2,363.2, + 21.833,0.092,0.033,0.027,273.8; 570600,372.3,363.4,362.2,361.2, + 21.667,0.086,0.033,0.027,273.9; 571500,372.9,363,362.2,361.2,22, + 0.091,0.035,0.018,273.9; 572400,372.7,363,362.2,361.2,24.667,0.087, + 0.034,0.032,273.7; 573300,372,362.9,362.2,363.2,25.167,0.156,0.032, + 0.019,273.6; 574200,371.7,362.8,362.2,361.2,25.5,0.087,0.034,0.014, + 273.7; 575100,372.1,365.2,363.2,362.2,23.833,0.09,0.034,0.014,273.7; + 576000,372.1,363.7,363.2,361.2,25.833,0.09,0.029,0.014,273.5; + 576900,372.3,363.4,362.2,361.2,26.333,0.088,0.035,0.016,273.5; + 577800,371.5,363.4,362.2,362.2,26.5,0.087,0.031,0.011,273.6; 578700, + 370.7,363.4,363.2,362.2,25.833,0.12,0.036,0.04,273.6; 579600,370.6, + 363.7,363.2,366.2,31.167,0.088,0.034,0.012,273.7; 580500,369,364.1, + 363.2,362.2,30.833,0.09,0.038,0.012,273.7; 581400,367.7,363.2,363.2, + 363.2,25.333,0.089,0.038,0.015,273.8; 582300,370.5,363.1,363.2, + 363.2,25,0.089,0.032,0.015,273.8; 583200,369.9,363.6,363.2,364.2, + 26.167,0.124,0.001,0.015,273.8; 584100,367.1,363.6,363.2,364.2, + 29.167,0.103,0.034,0.038,273.8; 585000,369.7,364,362.2,356.2,32.167, + 0.088,0.037,0.013,273.8; 585900,370.6,362.2,362.2,347.2,30,0.089, + 0.036,0.013,273.9; 586800,367.4,362,361.2,338.2,28,0.085,0.036, + 0.024,273.8; 587700,368.8,360.7,360.2,338.2,30,0.085,0.039,0.024, + 273.8; 588600,369,362.3,360.2,331.2,31,0.16,0.037,0.001,273.8; + 589500,365.9,362.3,361.2,325.2,27.833,0.092,0.039,0,273.8; 590400, + 367.5,361.8,361.2,321.2,29.5,0.09,0.038,0.001,273.8; 591300,367.8, + 359.8,355.2,321.2,27.333,0.096,0.039,0.001,273.8; 592200,368,360.8, + 355.2,317.2,26.5,0.163,0.039,0.001,273.9; 593100,365.2,362.1,357.2, + 317.2,27.5,0.163,0.04,0,273.9; 594000,366.5,360.7,357.2,314.2,28, + 0.093,0.039,0.001,274; 594900,366.2,360.7,356.2,311.2,31.667,0.098, + 0.002,0.001,274; 595800,367.4,360.6,356.2,308.2,32.5,0.097,0.016,0, + 274; 596700,364.8,359.9,356.2,306.2,29.167,0.175,0.02,0,273.9; + 597600,369.5,358.4,355.2,305.2,29.167,0.111,0.02,0,274; 598500, + 371.8,360.7,355.2,305.2,30,0.111,0.02,0,273.9; 599400,371.1,359.2, + 355.2,305.2,30.5,0.098,0.021,0.001,274.1; 600300,370.9,359.2,356.2, + 303.2,33.667,0.096,0.021,0.001,274.2; 601200,371.7,358,355.2,302.2, + 37.167,0.125,0.022,0,274.2; 602100,371.6,358.2,355.2,301.2,33.333, + 0.172,0.026,0,274.2; 603000,373,360,355.2,300.2,30.5,0.095,0.026,0, + 274.2; 603900,373,358.5,355.2,300.2,30.833,0.095,0.024,0,274.2]); + annotation (Documentation(revisions=" +Overview
+This record contains data of a real disitrict heating network for week-long period (23-29 Januar 2009) monitored by the Austrian Institut for Technology.
+Pipes are layed underground + +
Data structure
+Column 1: Time in s
+Column 2: Temperature in point 1 in K
+Column 3: Temperature in point 2 in K
+Column 4: Temperature in point 3 in K
+Column 5: Temperature in point 4 in K
+Column 6: Mass flow rate in point 1 in kg/s
+Column 7: Mass flow rate in point 2 in kg/s
+Column 8: Mass flow rate in point 3 in kg/s
+Column 9: Mass flow rate in point 4 in kg/s
+Column 10: Outdoor temperature in K
+ +Test procedure
+Information at several points of the district heating network is recorded during a week. + +Test bench schematic
++
+ ++Notice that length are approximated +
+ +Pipe characteristics
++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg150801; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151202.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151202.mo new file mode 100644 index 0000000000..cf16fd0c2a --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151202.mo @@ -0,0 +1,108 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg151202 + "Experimental data from ULg's pipe test bench from December 2, 2015" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=18.2, + T_start_in=18.8, + m_flowIni=0.589, + data=[0,0.589,0,18.2,18.7,18.8; 3.1,0.589,0,18.2,19.2,28; 6.4,0.589,0,18.2, + 21.6,34.7; 11.5,0.589,0,18.2,26.7,41.4; 14.6,0.589,0,18.2,29.6,43.9; + 17.9,0.589,0,18.2,32.3,45.8; 21,0.589,0,18.3,34.6,47.2; 24.1,0.589,0, + 18.3,36.6,48.2; 27.3,0.589,0,18.3,38.3,49; 30.4,0.589,0,18.3,39.8,49.6; + 33.6,0.589,0,18.3,41.1,50.1; 36.7,0.589,0,18.3,42.2,50.4; 39.9,0.589,0, + 18.2,43.2,50.7; 43.1,0.589,0,18.2,44,50.9; 46.2,0.589,0,18.2,44.8,51.1; + 49.3,0.589,0,18.2,45.4,51.3; 52.6,0.589,0,18.2,46,51.4; 55.7,0.589,0, + 18.2,46.5,51.5; 59.9,0.589,0,18.3,47.1,51.7; 63,0.589,0,18.3,47.5,51.8; + 66,0.589,0,18.3,47.8,51.8; 69.2,0.589,0,18.3,48.1,51.8; 72.3,0.589,0, + 18.3,48.3,51.9; 77.4,0.589,0,18.3,48.7,51.9; 80.6,0.589,0,18.3,48.8, + 51.9; 83.7,0.589,0,18.3,49,51.9; 86.8,0.589,0,18.3,49.2,52; 90.1,0.589, + 0,18.2,49.3,52; 93.3,0.589,0,18.3,49.5,52; 96.5,0.589,0,18.3,49.6,52.1; + 99.5,0.589,0,18.3,49.8,52.1; 102.8,0.589,0,18.2,49.9,52.1; 106,0.589,0, + 18.3,50,52.2; 109.2,0.589,0,18.3,50.1,52.2; 114.3,0.589,0,18.3,50.3, + 52.3; 117.4,0.589,0,18.3,50.3,52.3; 120.5,0.589,0,18.2,50.4,52.3; 125.7, + 0.589,0,18.2,50.4,52.2; 128.8,0.589,0,18.2,50.5,52.3; 131.9,0.589,0, + 18.3,50.5,52.3; 135,0.589,0,18.3,50.6,52.2; 138.1,0.589,0,18.6,50.6, + 52.2; 141.4,0.589,0,19,50.6,52.2; 144.5,0.589,0,19.6,50.6,52.2; 147.9, + 0.589,0,20.3,50.7,52.2; 151,0.589,0,21.2,50.7,52.2; 154.4,0.589,0,22.2, + 50.8,52.2; 157.5,0.589,0,23.2,50.8,52.3; 161,0.589,0,24.5,50.9,52.3; + 164.1,0.589,0,25.6,50.9,52.3; 167.4,0.589,0,26.9,51,52.3; 170.5,0.589,0, + 28.1,51,52.3; 173.8,0.589,0,29.4,51,52.3; 177,0.589,0,30.6,51,52.3; 180, + 0.589,0,31.8,51,52.3; 183.4,0.589,0,33,51.1,52.3; 186.5,0.589,0,34.2,51, + 52.3; 189.5,0.589,0,35.4,51.1,52.3; 192.7,0.589,0,36.5,51.1,52.3; 195.9, + 0.589,0,37.6,51.1,52.4; 199,0.589,0,38.7,51.2,52.4; 202.2,0.589,0,39.7, + 51.2,52.4; 205.3,0.589,0,40.6,51.2,52.4; 208.4,0.589,0,41.5,51.2,52.4; + 211.6,0.589,0,42.4,51.2,52.4; 214.8,0.589,0,43.1,51.2,52.4; 218,0.589,0, + 43.9,51.2,52.4; 221.2,0.589,0,44.6,51.2,52.4; 224.3,0.589,0,45.3,51.3, + 52.4; 227.5,0.589,0,45.9,51.3,52.4; 230.6,0.589,0,46.4,51.3,52.4; 233.8, + 0.589,0,47,51.3,52.4; 237,0.589,0,47.5,51.3,52.4; 240.1,0.589,0,47.9, + 51.4,52.4; 243.2,0.589,0,48.3,51.4,52.5; 246.4,0.589,0,48.7,51.4,52.5; + 249.6,0.589,0,49,51.4,52.5; 252.8,0.589,0,49.4,51.4,52.5; 256,0.589,0, + 49.6,51.4,52.5; 259.1,0.589,0,49.9,51.5,52.5; 262.5,0.589,0,50.1,51.5, + 52.5; 265.7,0.589,0,50.3,51.5,52.5; 268.9,0.589,0,50.5,51.5,52.5; 273.2, + 0.589,0,50.8,51.5,52.5; 276.4,0.589,0,50.9,51.5,52.5; 279.5,0.589,0,51, + 51.5,52.5; 282.9,0.589,0,51.2,51.5,52.4; 286.1,0.589,0,51.3,51.5,52.5; + 290.4,0.589,0,51.4,51.5,52.5; 293.6,0.589,0,51.5,51.5,52.4; 296.9,0.589, + 0,51.5,51.5,52.4; 300.1,0.589,0,51.6,51.5,52.4; 303.3,0.589,0,51.7,51.5, + 52.4; 306.5,0.589,0,51.7,51.5,52.4; 309.7,0.589,0,51.7,51.5,52.4; 312.9, + 0.589,0,51.7,51.5,52.4; 316.1,0.589,0,51.8,51.5,52.4; 319.3,0.589,0, + 51.8,51.5,52.4; 322.4,0.589,0,51.9,51.5,52.4; 327.6,0.589,0,51.9,51.5, + 52.3; 330.7,0.589,0,51.9,51.5,52.3; 333.9,0.589,0,51.9,51.5,52.3; 337.2, + 0.589,0,51.9,51.5,52.3; 340.4,0.589,0,51.9,51.5,52.4; 343.6,0.589,0,52, + 51.5,52.4; 346.8,0.589,0,52,51.5,52.4; 350,0.589,0,52.1,51.6,52.4; + 353.2,0.589,0,52.1,51.6,52.5; 356.4,0.589,0,52.1,51.6,52.5; 359.6,0.589, + 0,52.1,51.6,52.5; 363.1,0.589,0,52.1,51.6,52.4; 366.3,0.589,0,52.1,51.6, + 52.4; 369.5,0.589,0,52.1,51.6,52.4; 372.6,0.589,0,52.1,51.6,52.4; 375.8, + 0.589,0,52.1,51.6,52.4; 379,0.589,0,52.1,51.6,52.4; 382.2,0.589,0,52.1, + 51.6,52.4; 385.4,0.589,0,52.1,51.6,52.4; 388.8,0.589,0,52.1,51.6,52.4; + 392,0.589,0,52.1,51.6,52.4; 395.2,0.589,0,52.1,51.6,52.4; 398.4,0.589,0, + 52.1,51.6,52.4; 401.7,0.589,0,52.2,51.6,52.4; 404.9,0.589,0,52.1,51.6, + 52.4; 408.2,0.589,0,52.1,51.6,52.4; 411.5,0.589,0,52.1,51.6,52.4; 414.7, + 0.589,0,52.1,51.6,52.4; 418,0.589,0,52.1,51.6,52.4; 421.5,0.589,0,52.1, + 51.6,52.4; 424.6,0.589,0,52.1,51.6,52.4; 428,0.589,0,52.1,51.6,52.4; + 431.1,0.589,0,52.1,51.6,52.4; 434.6,0.589,0,52.1,51.6,52.4; 437.9,0.589, + 0,52.1,51.6,52.4; 441,0.589,0,52.2,51.6,52.4; 444.2,0.589,0,52.1,51.6, + 52.4; 447.5,0.589,0,52.1,51.6,52.4; 450.7,0.589,0,52.1,51.6,52.4; 454.1, + 0.589,0,52.1,51.6,52.4; 457.2,0.589,0,52.1,51.6,52.4; 460.5,0.589,0, + 52.1,51.6,52.4; 463.8,0.589,0,52.1,51.6,52.4; 467.1,0.589,0,52.1,51.6, + 52.4; 470.5,0.589,0,52.1,51.6,52.4; 473.9,0.589,0,52.2,51.7,52.5; 477.2, + 0.589,0,52.2,51.8,52.5; 480.5,0.589,0,52.3,51.8,52.6; 484,0.589,0,52.3, + 51.8,52.6; 487.2,0.589,0,52.3,51.9,52.6; 492.2,0.589,0,52.3,51.9,52.6; + 495.4,0.589,0,52.3,51.9,52.6; 500.8,0.589,0,52.3,51.9,52.6; 504.1,0.589, + 0,52.3,51.9,52.6; 507.3,0.589,0,52.3,51.9,52.5; 510.7,0.589,0,52.3,51.8, + 52.5; 513.9,0.589,0,52.3,51.8,52.5; 517.2,0.589,0,52.3,51.8,52.5; 520.4, + 0.589,0,52.3,51.8,52.5; 523.8,0.589,0,52.3,51.8,52.5; 527.1,0.589,0, + 52.3,51.8,52.6; 530.5,0.589,0,52.3,51.8,52.6; 533.8,0.589,0,52.3,51.9, + 52.6; 537,0.589,0,52.3,51.9,52.6; 540.2,0.589,0,52.3,51.9,52.6; 543.6, + 0.589,0,52.4,51.9,52.6; 546.8,0.589,0,52.4,51.9,52.6; 551.2,0.589,0, + 52.4,51.9,52.6; 554.4,0.589,0,52.4,51.9,52.6; 557.7,0.589,0,52.4,51.9, + 52.6; 561.1,0.589,0,52.3,51.9,52.6; 564.3,0.589,0,52.3,51.9,52.5; 567.8, + 0.589,0,52.3,51.8,52.4; 571.1,0.589,0,52.3,51.8,52.4; 574.5,0.589,0, + 52.2,51.7,52.4; 577.7,0.589,0,52.2,51.7,52.3; 581,0.589,0,52.3,51.7, + 52.3; 584.3,0.589,0,52.2,51.7,52.3; 587.7,0.589,0,52.2,51.7,52.2; 590.9, + 0.589,0,52.3,51.7,52.2]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg151202; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_1.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_1.mo new file mode 100644 index 0000000000..43a00023d0 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_1.mo @@ -0,0 +1,83 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg151204_1 + "Experimental data from ULg's pipe test bench from December 4, 2015 (1); + increase followed by a decrease in temperature" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=14.0, + T_start_in=14.0, + m_flowIni=1.618, + data=[0,1.618,14.4,14,14.2,14; 2.9,1.618,14.4,14,14.3,16.8; 5.8,1.618,14.4, + 14,15.5,20.5; 8.7,1.618,14.4,14.1,17.3,22.9; 11.6,1.618,14.4,14.1,19, + 24.6; 14.5,1.618,14.4,14.1,20.5,25.8; 17.3,1.618,14.4,14.1,21.8,26.7; + 20.2,1.618,14.4,14.1,22.9,27.4; 23.2,1.618,14.4,14.2,23.8,27.9; 26.2, + 1.618,14.4,14.2,24.6,28.3; 29.2,1.618,14.5,14.3,25.3,28.6; 32.3,1.618, + 14.5,14.3,25.8,28.9; 35.2,1.618,14.5,14.3,26.3,29.1; 38.1,1.618,14.5, + 14.2,26.7,29.3; 41,1.618,14.5,14.2,27,29.4; 43.9,1.618,14.4,14.2,27.3, + 29.5; 47,1.618,14.4,14.2,27.6,29.6; 50.5,1.618,14.4,14.2,27.9,29.7; + 53.5,1.618,14.4,14.3,28,29.8; 56.4,1.618,14.5,14.8,28.2,29.9; 59.2, + 1.618,14.8,15.7,28.3,29.9; 63.6,1.618,15.8,17.2,28.5,29.9; 66.6,1.618, + 16.6,18.2,28.6,29.9; 69.5,1.618,17.5,19.3,28.7,29.9; 72.4,1.618,18.5, + 20.4,28.8,29.9; 76.4,1.618,19.8,21.8,28.9,30; 79.3,1.618,20.7,22.7,28.9, + 30; 82.2,1.618,21.6,23.6,29,30; 85.1,1.618,22.4,24.4,29,30; 88,1.618, + 23.2,25.1,29.1,30; 92.7,1.618,24.2,26.1,29.2,30.1; 95.7,1.618,24.8,26.7, + 29.2,30.1; 98.6,1.618,25.3,27.1,29.3,30.1; 101.5,1.618,25.8,27.5,29.3, + 30.2; 105.5,1.618,26.3,28,29.4,30.2; 108.5,1.618,26.6,28.4,29.4,30.2; + 111.4,1.618,26.9,28.6,29.4,30.2; 114.3,1.618,27.2,28.8,29.5,30.2; 117.3, + 1.618,27.4,29,29.5,30.2; 120.2,1.618,27.6,29.2,29.5,30.1; 123.1,1.618, + 27.7,29.3,29.5,30.1; 126,1.618,27.9,29.4,29.5,30.1; 129,1.618,28,29.5, + 29.5,30.1; 131.9,1.618,28.1,29.6,29.5,30.1; 134.9,1.618,28.2,29.7,29.5, + 30.1; 137.8,1.618,28.3,29.7,29.5,30.1; 141,1.618,28.4,29.8,29.6,30.2; + 143.8,1.618,28.5,29.9,29.6,30.2; 146.8,1.618,28.5,29.9,29.6,30.2; 149.8, + 1.618,28.6,30,29.6,30.2; 152.7,1.618,28.6,30,29.6,30.3; 155.7,1.618, + 28.7,30,29.7,30.3; 158.6,1.618,28.7,30,29.7,30.3; 161.5,1.618,28.8,30.1, + 29.7,30.3; 164.6,1.618,28.8,30.1,29.7,30.3; 167.5,1.618,28.8,30.1,29.7, + 30.3; 170.5,1.618,28.9,30.1,29.8,30.3; 173.4,1.618,28.9,30.1,29.8,30.3; + 176.3,1.618,28.9,30.2,29.8,30.3; 179.3,1.618,29,30.2,29.8,30.3; 182.2, + 1.618,29,30.2,29.8,30.3; 185.1,1.618,29,30.2,29.8,30.3; 188.1,1.618,29, + 30.2,29.8,30.3; 191,1.618,29,30.2,29.8,30.3; 194,1.618,29,30.2,29.8, + 30.3; 196.9,1.618,29,30.2,29.8,30.3; 199.8,1.618,29.1,30.2,29.8,30.3; + 202.8,1.618,29.1,30.2,29.8,30.3; 205.7,1.618,29.1,30.2,29.8,30.3; 208.7, + 1.618,29.1,30.2,29.8,30.3; 211.6,1.618,29.1,30.2,29.8,30.3; 214.6,1.618, + 29.1,30.2,29.8,30.3; 218.7,1.618,29.2,30.3,29.8,30.3; 221.7,1.618,29.2, + 30.3,29.9,30.3; 225.6,1.618,29.2,30.3,29.9,30.3; 228.6,1.618,29.2,30.3, + 29.8,30.3; 233.6,1.618,29.3,30.3,29.9,30.3; 236.5,1.618,29.3,30.3,29.9, + 30.3; 239.4,1.618,29.3,30.3,29.9,30.3; 242.4,1.618,29.3,30.3,29.9,30.3; + 245.7,1.618,29.3,30.3,29.9,30.3; 248.7,1.618,29.3,30.3,29.9,30.3; 251.6, + 1.618,29.3,30.3,29.9,30.4; 254.5,1.618,29.3,30.3,30,30.4; 257.4,1.618, + 29.3,30.3,30,30.4; 260.4,1.618,29.3,30.3,30,30.4; 265.5,1.618,29.4,30.3, + 30,30.3; 268.4,1.618,29.4,30.3,30,30.3; 271.6,1.618,29.4,30.3,30,30.3; + 274.6,1.618,29.4,30.3,30,30.3; 277.7,1.618,29.4,30.3,30,30.4; 281.4, + 1.618,29.4,30.3,30,30.4; 284.4,1.618,29.4,30.3,30,30.4; 289.3,1.618, + 29.4,30.3,30,30.4; 292.3,1.618,29.4,30.3,30,30.4; 295.2,1.618,29.4,30.3, + 30,30.3; 298.1,1.618,29.4,30.3,30,30.4; 301.1,1.618,29.4,30.3,30,30.3; + 304,1.618,29.4,30.3,30,30.3; 307,1.618,29.5,30.3,30,30.3; 310.1,1.618, + 29.5,30.3,30,30.3; 313,1.618,29.5,30.4,30,30.3; 317.1,1.618,29.5,30.4, + 30,30.3; 320.1,1.618,29.5,30.4,30,30.3; 323,1.618,29.5,30.3,30,30.3; + 325.9,1.618,29.5,30.4,30,30.4; 330.1,1.618,29.5,30.4,30,30.3; 333.1, + 1.618,29.5,30.4,30,30.3; 336,1.618,29.5,30.4,30,30.4]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg151204_1; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_2.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_2.mo new file mode 100644 index 0000000000..48179c3465 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_2.mo @@ -0,0 +1,85 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg151204_2 + "Experimental data from ULg's pipe test bench from December 4, 2015 (2)" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=14.3, + T_start_in=14.7, + m_flowIni=1.251, + data=[0,1.251,14.7,14.3,14.4,14.7; 4.7,1.251,14.7,14.3,15.4,20.7; 9.6,1.251, + 14.6,14.3,17.8,24.1; 14.3,1.251,14.7,14.4,19.9,25.9; 19.2,1.251,14.6, + 14.3,21.8,27; 23.9,1.251,14.6,14.3,23.2,27.8; 28.6,1.251,14.6,14.3,24.3, + 28.3; 33.5,1.251,14.6,14.3,25.2,28.6; 38.2,1.251,14.6,14.3,25.9,28.9; + 42.9,1.251,14.6,14.3,26.4,29; 47.4,1.251,14.6,14.2,26.8,29.1; 52.4, + 1.251,14.5,14.2,27.2,29.2; 57,1.251,14.4,14.1,27.5,29.3; 61.7,1.251, + 14.4,14,27.7,29.3; 66.5,1.251,14.3,14,27.9,29.3; 71.3,1.251,14.4,14.7, + 28.1,29.4; 76.3,1.251,15,15.9,28.2,29.4; 80.8,1.251,15.9,17.2,28.3,29.4; + 85.4,1.251,17,18.6,28.4,29.4; 90.2,1.251,18.2,20.1,28.4,29.4; 94.8, + 1.251,19.5,21.4,28.5,29.4; 99.5,1.251,20.7,22.7,28.6,29.4; 104.3,1.251, + 21.9,23.9,28.6,29.4; 108.9,1.251,22.9,24.8,28.7,29.4; 113.7,1.251,23.8, + 25.7,28.7,29.4; 118.4,1.251,24.5,26.4,28.8,29.5; 123.2,1.251,25.2,27, + 28.8,29.5; 127.9,1.251,25.7,27.5,28.8,29.5; 132.6,1.251,26.2,27.9,28.9, + 29.5; 137.4,1.251,26.6,28.2,28.9,29.5; 142.1,1.251,26.9,28.5,28.9,29.5; + 147.1,1.251,27.2,28.7,28.9,29.5; 151.7,1.251,27.4,28.9,28.9,29.5; 156.8, + 1.251,27.5,29,29,29.5; 161.4,1.251,27.7,29.1,29,29.5; 166.3,1.251,27.8, + 29.2,29,29.5; 171.2,1.251,27.9,29.2,29,29.4; 176,1.251,28,29.3,29,29.4; + 180.8,1.251,28.1,29.3,29,29.5; 185.5,1.251,28.1,29.4,29,29.5; 190.1, + 1.251,28.2,29.4,29,29.5; 195,1.251,28.2,29.4,29,29.5; 200,1.251,28.3, + 29.4,29.1,29.5; 204.7,1.251,28.3,29.5,29.1,29.5; 209.5,1.251,28.4,29.5, + 29.1,29.5; 214.3,1.251,28.4,29.5,29.1,29.5; 219.1,1.251,28.4,29.5,29.1, + 29.5; 223.8,1.251,28.5,29.5,29.1,29.5; 228.5,1.251,28.5,29.5,29.1,29.6; + 233.3,1.251,28.5,29.5,29.1,29.6; 237.8,1.251,28.5,29.5,29.2,29.5; 242.5, + 1.251,28.5,29.5,29.1,29.5; 247.2,1.251,28.5,29.5,29.2,29.6; 251.9,1.251, + 28.5,29.5,29.2,29.5; 256.6,1.251,28.5,29.5,29.2,29.5; 261.2,1.251,28.6, + 29.5,29.2,29.5; 266,1.251,28.6,29.5,29.2,29.5; 270.8,1.251,28.6,29.5, + 29.2,29.5; 275.5,1.251,28.6,29.5,29.2,29.5; 280.3,1.251,28.6,29.5,29.2, + 29.6; 284.8,1.251,28.6,29.5,29.2,29.6; 289.5,1.251,28.6,29.5,29.2,29.6; + 294.2,1.251,28.6,29.5,29.2,29.6; 298.9,1.251,28.7,29.5,29.2,29.6; 303.6, + 1.251,28.7,29.5,29.2,29.6; 308.3,1.251,28.7,29.5,29.2,29.6; 313.1,1.251, + 28.7,29.5,29.3,29.6; 317.9,1.251,28.7,29.5,29.2,29.6; 322.7,1.251,28.7, + 29.5,29.2,29.5; 327.4,1.251,28.7,29.5,29.3,29.5; 332.3,1.251,28.7,29.5, + 29.2,29.5; 337.3,1.251,28.8,29.5,29.2,29.5; 342.1,1.251,28.8,29.5,29.2, + 29.5; 347.1,1.251,28.8,29.5,29.2,29.5; 352,1.251,28.8,29.6,29.2,29.5; + 356.8,1.251,28.8,29.6,29.2,29.5; 361.8,1.251,28.8,29.6,29.2,29.5; 366.6, + 1.251,28.8,29.6,29.2,29.5; 371.4,1.251,28.8,29.6,29.2,29.5; 376,1.251, + 28.8,29.6,29.2,29.5; 380.8,1.251,28.8,29.6,29.2,29.5; 385.6,1.251,28.8, + 29.6,29.2,29.5; 390.7,1.251,28.8,29.6,29.2,29.5; 395.5,1.251,28.8,29.6, + 29.2,29.5; 400.2,1.251,28.8,29.6,29.2,29.5; 405.1,1.251,28.8,29.6,29.2, + 29.5; 409.9,1.251,28.8,29.5,29.2,29.5; 414.9,1.251,28.8,29.5,29.3,29.6; + 419.8,1.251,28.8,29.5,29.3,29.5; 424.6,1.251,28.8,29.5,29.3,29.5; 429.4, + 1.251,28.8,29.5,29.3,29.5; 434.2,1.251,28.8,29.5,29.2,29.5; 439.1,1.251, + 28.8,29.5,29.2,29.5; 443.8,1.251,28.8,29.5,29.2,29.5; 448.7,1.251,28.8, + 29.5,29.2,29.5; 453.4,1.251,28.8,29.5,29.2,29.5; 458.2,1.251,28.8,29.5, + 29.2,29.5; 463,1.251,28.8,29.5,29.2,29.4; 467.8,1.251,28.8,29.5,29.2, + 29.5; 472.6,1.251,28.8,29.5,29.2,29.5; 477.6,1.251,28.8,29.5,29.2,29.5; + 482.3,1.251,28.8,29.5,29.2,29.4; 487.3,1.251,28.8,29.5,29.2,29.4; 492.1, + 1.251,28.9,29.5,29.2,29.4; 497,1.251,28.8,29.5,29.2,29.4; 501.8,1.251, + 28.8,29.5,29.2,29.4; 506.6,1.251,28.8,29.5,29.2,29.4; 511.5,1.251,28.8, + 29.5,29.2,29.4; 516.3,1.251,28.8,29.5,29.2,29.4; 521.4,1.251,28.8,29.5, + 29.2,29.4; 526.3,1.251,28.9,29.5,29.2,29.4; 531.2,1.251,28.8,29.5,29.2, + 29.4]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg151204_2; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_4.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_4.mo new file mode 100644 index 0000000000..41ad324cd3 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg151204_4.mo @@ -0,0 +1,96 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg151204_4 + "Experimental data from ULg's pipe test bench from December 4, 2015 (4); an increase followed by a decrease temperature" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=27.7, + T_start_in=31.2, + m_flowIni=1.257, + data=[0,1.257,27.1,27.7,30.5,31.2; 6.1,1.257,27.1,27.8,31.7,40.2; 12.5, + 1.257,27.3,28.1,38.2,49.7; 18.5,1.257,27.5,28.2,43.6,54.2; 24.8,1.257, + 27.6,28.3,47.8,56.8; 31.2,1.257,27.7,28.4,50.8,58.2; 37.3,1.257,27.9, + 28.6,52.8,59.1; 43.6,1.257,28,28.6,54.2,59.5; 49.6,1.257,28,28.6,55.3, + 59.9; 55.9,1.257,28,28.6,56.1,60.1; 62.1,1.257,28,28.6,56.7,60.3; 68.2, + 1.257,28,28.9,57.1,60.4; 74.6,1.257,28.8,31.1,57.5,60.5; 80.3,1.257, + 30.8,34.3,57.8,60.6; 86.4,1.257,34,38.2,58.1,60.7; 92.6,1.257,37.6,42.2, + 58.3,60.8; 98.6,1.257,41.1,45.8,58.5,60.9; 104.8,1.257,44.4,49.1,58.7, + 60.9; 111.3,1.257,47.3,51.9,58.8,60.9; 118.7,1.257,49.9,54.4,58.9,60.9; + 125.4,1.257,51.7,56.1,59,61; 132.2,1.257,53.1,57.4,59.1,61; 139,1.257, + 54.2,58.3,59.2,61; 147.4,1.257,55.1,59.1,59.3,61; 154.1,1.257,55.7,59.5, + 59.3,61; 160.9,1.257,56.1,59.9,59.4,61.1; 168.8,1.257,56.5,60.2,59.5, + 61.2; 175.2,1.257,56.8,60.4,59.6,61.2; 181.8,1.257,57,60.6,59.7,61.3; + 189.1,1.257,57.2,60.7,59.7,61.2; 196.2,1.257,57.3,60.7,59.7,61.3; 203, + 1.257,57.4,60.8,59.8,61.2; 209.7,1.257,57.5,60.9,59.8,61.2; 216.4,1.257, + 57.6,60.9,59.8,61.3; 222.6,1.257,57.7,60.9,59.9,61.3; 229,1.257,57.8,61, + 59.9,61.4; 235.3,1.257,57.8,61,60,61.4; 241.7,1.257,57.9,61.1,60,61.4; + 248.3,1.257,58,61.1,60.1,61.4; 254.9,1.257,58,61.1,60.1,61.4; 261.7, + 1.257,58.1,61.2,60.1,61.5; 268.1,1.257,58.2,61.2,60.2,61.5; 274.6,1.257, + 58.2,61.2,60.2,61.5; 281.4,1.257,58.2,61.2,60.2,61.5; 288.1,1.257,58.2, + 61.2,60.3,61.5; 294.8,1.257,58.3,61.2,60.3,61.5; 301.2,1.257,58.3,61.3, + 60.3,61.5; 307.7,1.257,58.3,61.3,60.3,61.6; 314.1,1.257,58.4,61.3,60.4, + 61.7; 320.3,1.257,58.4,61.4,60.4,61.7; 326.7,1.257,58.5,61.4,60.5,61.7; + 333.2,1.257,58.5,61.4,60.5,61.7; 339.7,1.257,58.6,61.4,60.5,61.8; 346, + 1.257,58.6,61.4,60.5,61.8; 352.4,1.257,58.6,61.5,60.6,61.8; 358.9,1.257, + 58.6,61.5,60.6,61.8; 365.3,1.257,58.6,61.5,60.6,61.8; 371.7,1.257,58.6, + 61.5,60.6,61.8; 378.2,1.257,58.7,61.5,60.6,61.8; 384.2,1.257,58.7,61.5, + 60.6,61.8; 391.2,1.257,58.8,61.6,60.6,61.8; 397.9,1.257,58.8,61.6,60.7, + 61.9; 404.6,1.257,58.8,61.6,60.7,61.9; 411.5,1.257,58.8,61.7,60.8,61.9; + 417.8,1.257,58.9,61.7,60.8,61.9; 424.7,1.257,58.9,61.7,60.8,61.9; 431, + 1.257,58.9,61.7,60.8,61.9; 437.2,1.257,58.9,61.7,60.8,62; 443.6,1.257, + 58.9,61.7,60.9,62; 450.4,1.257,58.9,61.7,60.9,62; 456.9,1.257,59,61.8, + 60.9,62; 463.4,1.257,59,61.8,60.9,62.1; 470.2,1.257,59,61.8,60.9,62.1; + 476.7,1.257,59,61.8,61,62; 483.4,1.257,59.1,61.8,61,62.1; 490.4,1.257, + 59.1,61.9,61,62; 497,1.257,59.1,61.9,61,62; 503.4,1.257,59.1,61.9,61, + 62.1; 510,1.257,59.2,61.9,61,62.2; 516.5,1.257,59.2,61.9,61.1,62.2; + 522.8,1.257,59.2,61.9,61.1,62.3; 529.6,1.257,59.2,62,61.1,62.2; 536.4, + 1.257,59.2,62,61.1,62.2; 543.2,1.257,59.2,62,61.1,62.2; 550.1,1.257, + 59.3,62,61.2,62.3; 556.3,1.257,59.3,62,61.2,62.3; 562.9,1.257,59.3,62, + 61.2,62.3; 569.5,1.257,59.3,62,61.2,62.2; 576.2,1.257,59.3,62,61.2,62.3; + 582.8,1.257,59.3,62,61.2,62.3; 589.3,1.257,59.3,62.1,61.2,62.3; 595.6, + 1.257,59.3,62.1,61.2,62.3; 601.9,1.257,59.4,62.1,61.3,62.3; 608.4,1.257, + 59.4,62.1,61.2,62.2; 614.9,1.257,59.4,62.1,61.2,62.1; 621.5,1.257,59.4, + 62.2,61.1,61.9; 628.3,1.257,59.4,62.2,60.9,61.6; 634.9,1.257,59.4,62.2, + 60.7,61.3; 641.4,1.257,59.4,62.2,60.5,60.9; 648.1,1.257,59.4,62.2,60.2, + 60.5; 654.7,1.257,59.5,62.2,59.9,60.1; 661.3,1.257,59.5,62.2,59.5,59.7; + 667.6,1.257,59.5,62.2,59.2,59.2; 674,1.257,59.5,62.2,58,53.9; 680.3, + 1.257,59.5,62.2,54.7,48.5; 687,1.257,59.5,62.2,51,44.4; 693.4,1.257, + 59.5,62.1,47.9,41.9; 699.6,1.257,59.4,62,45.6,40.4; 706,1.257,59.3,61.8, + 43.7,39.2; 712.4,1.257,59.1,61.6,42.2,38.6; 718.9,1.257,58.9,61.4,41.2, + 38.3; 725.5,1.257,58.7,61.1,40.5,38.1; 732.5,1.257,58.4,60.7,39.8,37.9; + 739.4,1.257,58,60.1,39.3,37.8; 746.1,1.257,57.2,58.5,39,37.7; 753.2, + 1.257,55.4,56,38.8,37.8; 759.8,1.257,53.2,53.2,38.5,37.7; 766.5,1.257, + 50.6,50.4,38.4,37.7; 772.9,1.257,48.2,47.8,38.3,37.6; 779.4,1.257,45.9, + 45.5,38.2,37.6; 785.7,1.257,44.1,43.7,38.1,37.6; 792.1,1.257,42.5,42.2, + 38,37.6; 798.5,1.257,41.3,41,37.9,37.5; 805.3,1.257,40.3,40.1,37.8,37.5; + 811.9,1.257,39.5,39.4,37.7,37.5; 818.3,1.257,39,38.9,37.7,37.4; 824.7, + 1.257,38.5,38.5,37.7,37.4; 831.1,1.257,38.2,38.3,37.6,37.3; 838.1,1.257, + 37.9,38,37.5,37.3; 845.1,1.257,37.6,37.9,37.4,37.3; 851.7,1.257,37.5, + 37.8,37.4,37.3; 858.2,1.257,37.3,37.7,37.4,37.2; 864.5,1.257,37.2,37.7, + 37.3,37.3; 871.3,1.257,37.1,37.6,37.3,37.2; 878,1.257,37,37.6,37.2,37.2; + 884.5,1.257,36.9,37.5,37.2,37.3; 891.8,1.257,36.9,37.5,37.2,37.1; 899.7, + 1.257,36.8,37.4,37.1,36.9]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg151204_4; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160104_2.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160104_2.mo new file mode 100644 index 0000000000..6d5433c60a --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160104_2.mo @@ -0,0 +1,1031 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg160104_2 "Experimental data from ULg's pipe test bench from 4 January 2016. Low mass flow" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=15.0, + T_start_in=17.9, + m_flowIni=0.2494, + data=[0,0.2494,15.3,15,17.8,17.9; 3,0.2494,15.3,15,17.8,18; 8.1,0.2494,15.3, + 15,17.8,18; 11.2,0.2494,15.3,15,17.9,18; 16.3,0.2494,15.3,15,17.9,18.1; + 19.4,0.2494,15.3,15,17.9,18.1; 22.5,0.2494,15.3,15,17.9,18.1; 25.6, + 0.2494,15.3,15,18,18.1; 30.2,0.2494,15.3,15,18,18.1; 33.1,0.2494,15.3, + 15,18,18.2; 38,0.2494,15.3,15.1,18,18.2; 41,0.2494,15.3,15.1,18.1,18.2; + 45.7,0.2494,15.4,15.1,18.1,18.3; 48.7,0.2494,15.4,15.1,18.1,18.3; 53.6, + 0.2494,15.4,15.2,18.1,18.3; 56.6,0.2494,15.4,15.2,18.2,18.3; 61.4, + 0.2494,15.4,15.3,18.2,18.4; 64.4,0.2494,15.4,15.3,18.2,18.4; 69.5, + 0.2494,15.5,15.3,18.2,18.4; 72.5,0.2494,15.5,15.3,18.2,18.4; 77.6, + 0.2494,15.5,15.4,18.3,18.5; 80.6,0.2494,15.5,15.4,18.3,18.5; 83.7, + 0.2494,15.6,15.4,18.3,18.5; 86.8,0.2494,15.6,15.5,18.4,18.5; 89.8, + 0.2494,15.6,15.5,18.4,18.6; 92.9,0.2494,15.6,15.5,18.4,18.6; 96,0.2494, + 15.6,15.5,18.4,18.6; 99.1,0.2494,15.7,15.6,18.4,18.6; 102.2,0.2494,15.7, + 15.6,18.5,18.6; 105.3,0.2494,15.7,15.6,18.5,18.7; 108.6,0.2494,15.7, + 15.7,18.5,18.7; 113.8,0.2494,15.8,15.7,18.5,18.7; 116.8,0.2494,15.8, + 15.8,18.6,18.7; 122,0.2494,15.9,15.8,18.6,18.8; 125,0.2494,15.9,15.8, + 18.6,18.8; 130.1,0.2494,15.9,15.9,18.7,18.9; 133.5,0.2494,15.9,15.9, + 18.7,18.9; 138.6,0.2494,16,15.9,18.7,18.9; 141.7,0.2494,16,16,18.7,18.9; + 144.8,0.2494,16,16,18.7,18.9; 149.1,0.2494,16.1,16.1,18.8,19; 152.1, + 0.2494,16.1,16.1,18.8,19; 155.3,0.2494,16.1,16.1,18.8,19; 160.4,0.2494, + 16.2,16.1,18.8,19; 163.7,0.2494,16.2,16.2,18.9,19.1; 167,0.2494,16.2, + 16.2,18.9,19.1; 171.6,0.2494,16.3,16.3,18.9,19.1; 174.6,0.2494,16.3, + 16.3,19,19.1; 177.8,0.2494,16.3,16.3,19,19.2; 183.1,0.2494,16.4,16.4,19, + 19.2; 186.2,0.2494,16.4,16.4,19,19.2; 191.5,0.2494,16.4,16.4,19.1,19.2; + 194.9,0.2494,16.4,16.5,19.1,19.2; 199.1,0.2494,16.5,16.5,19.1,19.3; + 202.2,0.2494,16.5,16.5,19.1,19.3; 206.9,0.2494,16.5,16.5,19.1,19.3; + 210.1,0.2494,16.6,16.6,19.2,19.3; 213.3,0.2494,16.6,16.6,19.2,19.4; + 216.5,0.2494,16.6,16.6,19.2,19.4; 220.1,0.2494,16.6,16.7,19.2,19.4; + 223.6,0.2494,16.7,16.7,19.3,19.4; 227,0.2494,16.7,16.7,19.3,19.4; 230.1, + 0.2494,16.7,16.7,19.3,19.5; 233.2,0.2494,16.7,16.8,19.3,19.5; 236.4, + 0.2494,16.8,16.8,19.3,19.5; 241.7,0.2494,16.8,16.8,19.4,19.5; 245, + 0.2494,16.8,16.9,19.4,19.5; 248.1,0.2494,16.8,16.9,19.4,19.6; 251.3, + 0.2494,16.9,16.9,19.4,19.6; 254.5,0.2494,16.9,16.9,19.4,19.6; 257.9, + 0.2494,16.9,16.9,19.4,19.6; 263.2,0.2494,17,17,19.5,19.7; 266.3,0.2494, + 17,17,19.5,19.7; 270.8,0.2494,17,17,19.5,19.7; 273.8,0.2494,17,17.1, + 19.6,19.7; 277,0.2494,17,17.1,19.6,19.7; 282.2,0.2494,17.1,17.1,19.6, + 19.8; 285.7,0.2494,17.1,17.2,19.6,19.8; 290.9,0.2494,17.1,17.2,19.7, + 19.8; 294.3,0.2494,17.2,17.2,19.7,19.9; 297.8,0.2494,17.2,17.2,19.7, + 19.9; 303,0.2494,17.2,17.3,19.7,19.9; 306.2,0.2494,17.3,17.3,19.8,19.9; + 309.6,0.2494,17.3,17.3,19.8,20; 312.6,0.2494,17.3,17.3,19.8,20; 315.9, + 0.2494,17.3,17.4,19.8,20; 319,0.2494,17.3,17.4,19.8,20; 323.1,0.2494, + 17.4,17.4,19.8,20; 326.3,0.2494,17.4,17.5,19.9,20.1; 329.6,0.2494,17.4, + 17.5,19.9,20.1; 332.8,0.2494,17.4,17.5,19.9,20.1; 336.7,0.2494,17.5, + 17.5,19.9,20.1; 339.9,0.2494,17.5,17.5,19.9,20.1; 345,0.2494,17.5,17.6, + 20,20.2; 348.2,0.2494,17.5,17.6,20,20.2; 351.5,0.2494,17.6,17.6,20,20.2; + 354.7,0.2494,17.6,17.6,20,20.2; 359.3,0.2494,17.6,17.7,20.1,20.3; 362.5, + 0.2494,17.6,17.7,20.1,20.3; 367.2,0.2494,17.7,17.7,20.1,20.3; 370.4, + 0.2494,17.7,17.8,20.1,20.3; 375.1,0.2494,17.7,17.8,20.1,20.3; 378.2, + 0.2494,17.7,17.8,20.2,20.4; 383,0.2494,17.8,17.8,20.2,20.4; 386.1, + 0.2494,17.8,17.8,20.2,20.4; 389.3,0.2494,17.8,17.9,20.2,20.4; 392.5, + 0.2494,17.8,17.9,20.3,20.4; 396.8,0.2494,17.8,17.9,20.3,20.5; 400, + 0.2494,17.9,17.9,20.3,20.5; 403.1,0.2494,17.9,18,20.3,20.5; 406.3, + 0.2494,17.9,18,20.3,20.5; 409.4,0.2494,17.9,18,20.4,20.5; 412.5,0.2494, + 17.9,18,20.4,20.6; 415.7,0.2494,18,18.1,20.4,20.6; 418.9,0.2494,18,18.1, + 20.4,20.6; 422.1,0.2494,18,18.1,20.4,20.6; 425.3,0.2494,18,18.1,20.4, + 20.7; 428.4,0.2494,18,18.1,20.5,20.7; 431.5,0.2494,18.1,18.2,20.5,20.7; + 434.7,0.2494,18.1,18.2,20.5,20.7; 437.8,0.2494,18.1,18.2,20.5,20.7; 443, + 0.2494,18.1,18.2,20.6,20.8; 446.2,0.2494,18.1,18.2,20.6,20.8; 449.2, + 0.2494,18.2,18.3,20.6,20.8; 452.4,0.2494,18.2,18.3,20.6,20.8; 455.5, + 0.2494,18.2,18.3,20.6,20.8; 458.7,0.2494,18.2,18.3,20.7,20.8; 462.9, + 0.2494,18.2,18.4,20.7,20.9; 466.1,0.2494,18.3,18.4,20.7,20.9; 469.3, + 0.2494,18.3,18.4,20.7,20.9; 472.4,0.2494,18.3,18.4,20.7,20.9; 475.5, + 0.2494,18.3,18.4,20.7,21; 478.6,0.2494,18.3,18.5,20.8,21; 481.8,0.2494, + 18.4,18.5,20.8,21; 485,0.2494,18.4,18.5,20.8,21; 488.1,0.2494,18.4,18.5, + 20.8,21; 491.3,0.2494,18.4,18.5,20.8,21; 494.4,0.2494,18.4,18.5,20.9, + 21.1; 499.7,0.2494,18.5,18.6,20.9,21.1; 502.9,0.2494,18.5,18.6,20.9, + 21.1; 506,0.2494,18.5,18.6,20.9,21.1; 509.2,0.2494,18.5,18.6,21,21.1; + 512.4,0.2494,18.5,18.7,21,21.2; 515.6,0.2494,18.6,18.7,21,21.2; 518.8, + 0.2494,18.6,18.7,21,21.2; 522,0.2494,18.6,18.7,21,21.2; 525.1,0.2494, + 18.6,18.7,21,21.2; 528.4,0.2494,18.6,18.8,21.1,21.3; 531.6,0.2494,18.7, + 18.8,21.1,21.3; 534.8,0.2494,18.7,18.8,21.1,21.3; 537.9,0.2494,18.7, + 18.8,21.1,21.3; 541,0.2494,18.7,18.8,21.1,21.3; 545,0.2494,18.7,18.9, + 21.1,21.3; 548.3,0.2494,18.8,18.9,21.2,21.4; 551.5,0.2494,18.8,18.9, + 21.2,21.4; 554.6,0.2494,18.8,18.9,21.2,21.4; 557.7,0.2494,18.8,18.9, + 21.2,21.4; 560.9,0.2494,18.8,19,21.2,21.5; 564.8,0.2494,18.8,19,21.3, + 21.5; 568.1,0.2494,18.9,19,21.3,21.5; 572.7,0.2494,18.9,19,21.3,21.5; + 575.9,0.2494,18.9,19.1,21.3,21.6; 579.1,0.2494,18.9,19.1,21.4,21.6; + 582.3,0.2494,19,19.1,21.4,21.6; 585.5,0.2494,19,19.1,21.4,21.6; 588.6, + 0.2494,19,19.1,21.4,21.6; 591.8,0.2494,19,19.1,21.4,21.6; 595,0.2494,19, + 19.2,21.4,21.6; 598.2,0.2494,19,19.2,21.5,21.7; 602.4,0.2494,19.1,19.2, + 21.5,21.7; 605.6,0.2494,19.1,19.2,21.5,21.7; 608.8,0.2494,19.1,19.2, + 21.5,21.7; 612,0.2494,19.1,19.3,21.6,21.8; 615.1,0.2494,19.1,19.3,21.6, + 21.8; 618.3,0.2494,19.2,19.3,21.6,21.8; 621.6,0.2494,19.2,19.3,21.6, + 21.8; 624.8,0.2494,19.2,19.3,21.6,21.8; 628.2,0.2494,19.2,19.4,21.6, + 21.8; 631.4,0.2494,19.2,19.4,21.7,21.9; 634.6,0.2494,19.2,19.4,21.7, + 21.9; 637.8,0.2494,19.3,19.4,21.7,21.9; 640.9,0.2494,19.3,19.4,21.7, + 21.9; 644.2,0.2494,19.3,19.5,21.7,21.9; 647.4,0.2494,19.3,19.5,21.7, + 21.9; 650.6,0.2494,19.3,19.5,21.8,22; 654.9,0.2494,19.4,19.5,21.8,22; + 658,0.2494,19.4,19.5,21.8,22; 661.2,0.2494,19.4,19.5,21.8,22; 664.5, + 0.2494,19.4,19.6,21.8,22.1; 667.7,0.2494,19.4,19.6,21.9,22.1; 670.9, + 0.2494,19.4,19.6,21.9,22.1; 674.3,0.2494,19.5,19.6,21.9,22.1; 678.7, + 0.2494,19.5,19.7,21.9,22.1; 681.9,0.2494,19.5,19.7,21.9,22.1; 685.2, + 0.2494,19.5,19.7,22,22.2; 688.4,0.2494,19.5,19.7,22,22.2; 692.9,0.2494, + 19.6,19.7,22,22.2; 696.1,0.2494,19.6,19.8,22,22.2; 699.4,0.2494,19.6, + 19.8,22,22.2; 702.6,0.2494,19.6,19.8,22.1,22.2; 706.8,0.2494,19.6,19.8, + 22.1,22.3; 710.1,0.2494,19.7,19.8,22.1,22.3; 713.3,0.2494,19.7,19.9, + 22.1,22.3; 718.5,0.2494,19.7,19.9,22.1,22.3; 721.7,0.2494,19.7,19.9, + 22.1,22.4; 725.1,0.2494,19.7,19.9,22.2,22.4; 728.3,0.2494,19.8,19.9, + 22.2,22.4; 733.6,0.2494,19.8,20,22.2,22.4; 736.9,0.2494,19.8,20,22.2, + 22.4; 740.1,0.2494,19.8,20,22.2,22.5; 744.9,0.2494,19.9,20,22.3,22.5; + 748.1,0.2494,19.9,20.1,22.3,22.5; 751.3,0.2494,19.9,20.1,22.3,22.5; + 754.6,0.2494,19.9,20.1,22.3,22.5; 758.5,0.2494,19.9,20.1,22.3,22.5; + 761.7,0.2494,19.9,20.1,22.4,22.6; 765,0.2494,20,20.2,22.4,22.6; 768.5, + 0.2494,20,20.2,22.4,22.6; 772.2,0.2494,20,20.2,22.4,22.6; 775.5,0.2494, + 20,20.2,22.4,22.6; 779.8,0.2494,20,20.3,22.5,22.7; 783.5,0.2494,20.1, + 20.3,22.5,22.7; 787,0.2494,20.1,20.3,22.5,22.7; 796.9,0.2494,20.1,20.3, + 22.5,22.8; 800.6,0.2494,20.2,20.4,22.6,22.8; 804.5,0.2494,20.2,20.4, + 22.6,22.8; 807.9,0.2494,20.2,20.4,22.6,22.8; 811.1,0.2494,20.2,20.4, + 22.6,22.8; 814.5,0.2494,20.2,20.5,22.6,22.8; 817.8,0.2494,20.2,20.5, + 22.6,22.9; 821.1,0.2494,20.3,20.5,22.7,22.9; 826.5,0.2494,20.3,20.5, + 22.7,22.9; 829.7,0.2494,20.3,20.5,22.7,22.9; 832.9,0.2494,20.3,20.6, + 22.7,22.9; 837.2,0.2494,20.4,20.6,22.7,22.9; 840.4,0.2494,20.4,20.6, + 22.8,23; 843.7,0.2494,20.4,20.6,22.8,23; 846.9,0.2494,20.4,20.6,22.8,23; + 850.1,0.2494,20.4,20.7,22.8,23; 853.3,0.2494,20.4,20.7,22.8,23; 856.6, + 0.2494,20.4,20.7,22.8,23; 860.1,0.2494,20.5,20.7,22.9,23.1; 863.5, + 0.2494,20.5,20.7,22.9,23.1; 866.7,0.2494,20.5,20.8,22.9,23.1; 870, + 0.2494,20.5,20.8,22.9,23.1; 873.2,0.2494,20.6,20.8,22.9,23.2; 877.1, + 0.2494,20.6,20.8,22.9,23.2; 880.3,0.2494,20.6,20.8,23,23.2; 883.6, + 0.2494,20.6,20.9,23,23.2; 886.9,0.2494,20.6,20.9,23,23.2; 890.1,0.2494, + 20.6,20.9,23,23.2; 893.4,0.2494,20.6,20.9,23,23.2; 896.7,0.2494,20.7, + 20.9,23,23.2; 899.8,0.2494,20.7,21,23.1,23.3; 903.1,0.2494,20.7,21,23.1, + 23.3; 906.3,0.2494,20.7,21,23.1,23.3; 909.6,0.2494,20.7,21,23.1,23.3; + 912.9,0.2494,20.8,21,23.1,23.3; 916.2,0.2494,20.8,21,23.1,23.3; 919.4, + 0.2494,20.8,21.1,23.2,23.4; 923.7,0.2494,20.8,21.1,23.2,23.4; 926.9, + 0.2494,20.8,21.1,23.2,23.4; 930.2,0.2494,20.8,21.1,23.2,23.4; 933.4, + 0.2494,20.9,21.2,23.2,23.5; 936.7,0.2494,20.9,21.2,23.3,23.5; 940, + 0.2494,20.9,21.2,23.3,23.5; 943.3,0.2494,20.9,21.2,23.3,23.5; 946.6, + 0.2494,20.9,21.2,23.3,23.5; 950,0.2494,21,21.2,23.3,23.5; 953.3,0.2494, + 21,21.2,23.3,23.5; 956.6,0.2494,21,21.3,23.3,23.6; 959.8,0.2494,21,21.3, + 23.4,23.6; 963.1,0.2494,21,21.3,23.4,23.6; 966.4,0.2494,21.1,21.3,23.4, + 23.6; 969.7,0.2494,21.1,21.4,23.4,23.6; 973.1,0.2494,21.1,21.4,23.4, + 23.6; 976.3,0.2494,21.1,21.4,23.4,23.6; 979.6,0.2494,21.1,21.4,23.5, + 23.7; 982.9,0.2494,21.1,21.4,23.5,23.7; 986.2,0.2494,21.2,21.4,23.5, + 23.7; 989.5,0.2494,21.2,21.5,23.5,23.7; 992.8,0.2494,21.2,21.5,23.5, + 23.7; 998.2,0.2494,21.2,21.5,23.5,23.7; 1001.5,0.2494,21.2,21.5,23.5, + 23.8; 1005,0.2494,21.3,21.6,23.6,23.8; 1008.3,0.2494,21.3,21.6,23.6, + 23.8; 1011.8,0.2494,21.3,21.6,23.6,23.8; 1015,0.2494,21.3,21.6,23.6, + 23.8; 1020.5,0.2494,21.3,21.6,23.6,23.9; 1023.7,0.2494,21.4,21.7,23.6, + 23.9; 1027.1,0.2494,21.4,21.7,23.7,23.9; 1030.5,0.2494,21.4,21.7,23.7, + 23.9; 1035.8,0.2494,21.4,21.7,23.7,23.9; 1039.3,0.2494,21.4,21.7,23.7, + 23.9; 1042.6,0.2494,21.4,21.8,23.7,24; 1045.9,0.2494,21.5,21.8,23.8,24; + 1049.2,0.2494,21.5,21.8,23.8,24; 1052.5,0.2494,21.5,21.8,23.8,24; + 1055.8,0.2494,21.5,21.8,23.8,24; 1059.1,0.2494,21.6,21.9,23.8,24; + 1062.5,0.2494,21.5,21.9,23.8,24; 1065.8,0.2494,21.6,21.9,23.8,24.1; + 1069.3,0.2494,21.6,21.9,23.9,24.1; 1072.9,0.2494,21.6,21.9,23.9,24.1; + 1076.2,0.2494,21.6,22,23.9,24.1; 1079.5,0.2494,21.6,22,23.9,24.1; + 1082.9,0.2494,21.7,22,23.9,24.1; 1086.3,0.2494,21.7,22,23.9,24.2; + 1089.6,0.2494,21.7,22,24,24.2; 1095,0.2494,21.7,22,24,24.2; 1098.4, + 0.2494,21.7,22.1,24,24.2; 1101.7,0.2494,21.8,22.1,24,24.2; 1105.1, + 0.2494,21.8,22.1,24,24.2; 1108.5,0.2494,21.8,22.1,24,24.3; 1111.9, + 0.2494,21.8,22.1,24.1,24.3; 1116.2,0.2494,21.8,22.2,24.1,24.3; 1119.5, + 0.2494,21.8,22.2,24.1,24.3; 1122.8,0.2494,21.9,22.2,24.1,24.3; 1126.1, + 0.2494,21.9,22.2,24.1,24.3; 1129.4,0.2494,21.9,22.2,24.1,24.3; 1132.8, + 0.2494,21.9,22.3,24.1,24.4; 1136.2,0.2494,21.9,22.3,24.2,24.4; 1139.5, + 0.2494,21.9,22.3,24.2,24.4; 1143.1,0.2494,22,22.3,24.2,24.4; 1146.4, + 0.2494,22,22.3,24.2,24.4; 1149.9,0.2494,22,22.3,24.2,24.5; 1153.3, + 0.2494,22,22.4,24.2,24.5; 1156.7,0.2494,22,22.4,24.3,24.5; 1160.1, + 0.2494,22.1,22.4,24.3,24.5; 1163.4,0.2494,22.1,22.4,24.3,24.5; 1168.9, + 0.2494,22.1,22.4,24.3,24.5; 1172.2,0.2494,22.1,22.5,24.3,24.5; 1175.5, + 0.2494,22.1,22.5,24.3,24.5; 1179,0.2494,22.2,22.5,24.4,24.6; 1182.4, + 0.2494,22.2,22.5,24.4,24.6; 1185.8,0.2494,22.2,22.5,24.4,24.6; 1189.2, + 0.2494,22.2,22.5,24.4,24.6; 1194.7,0.2494,22.2,22.6,24.4,24.6; 1198.1, + 0.2494,22.2,22.6,24.4,24.7; 1201.5,0.2494,22.3,22.6,24.5,24.7; 1204.9, + 0.2494,22.3,22.6,24.5,24.7; 1208.2,0.2494,22.3,22.6,24.5,24.7; 1211.6, + 0.2494,22.3,22.7,24.5,24.7; 1215,0.2494,22.3,22.7,24.5,24.7; 1218.4, + 0.2494,22.3,22.7,24.5,24.8; 1222.8,0.2494,22.4,22.7,24.6,24.8; 1226.2, + 0.2494,22.4,22.7,24.6,24.8; 1229.6,0.2494,22.4,22.7,24.6,24.8; 1232.9, + 0.2494,22.4,22.8,24.6,24.8; 1236.3,0.2494,22.4,22.8,24.6,24.8; 1239.9, + 0.2494,22.4,22.8,24.6,24.8; 1243.3,0.2494,22.5,22.8,24.6,24.8; 1247.2, + 0.2494,22.5,22.8,24.6,24.9; 1250.6,0.2494,22.5,22.9,24.7,24.9; 1254, + 0.2494,22.5,22.9,24.7,24.9; 1257.4,0.2494,22.5,22.9,24.7,24.9; 1260.8, + 0.2494,22.5,22.9,24.7,24.9; 1265.5,0.2494,22.6,22.9,24.7,24.9; 1268.9, + 0.2494,22.6,22.9,24.7,25; 1272.3,0.2494,22.6,23,24.8,25; 1275.6,0.2494, + 22.6,23,24.8,25; 1279,0.2494,22.6,23,24.8,25; 1282.3,0.2494,22.6,23, + 24.8,25; 1285.7,0.2494,22.6,23,24.8,25; 1289.1,0.2494,22.7,23,24.8,25; + 1293.6,0.2494,22.7,23.1,24.8,25.1; 1297,0.2494,22.7,23.1,24.9,25.1; + 1300.5,0.2494,22.7,23.1,24.9,25.1; 1303.8,0.2494,22.7,23.1,24.9,25.1; + 1307.2,0.2494,22.8,23.2,24.9,25.1; 1310.6,0.2494,22.8,23.2,24.9,25.1; + 1314,0.2494,22.8,23.2,24.9,25.1; 1317.4,0.2494,22.8,23.2,24.9,25.2; + 1320.8,0.2494,22.8,23.2,24.9,25.2; 1324.2,0.2494,22.8,23.2,25,25.2; + 1327.6,0.2494,22.9,23.2,25,25.2; 1331,0.2494,22.9,23.3,25,25.2; 1336.5, + 0.2494,22.9,23.3,25,25.3; 1340,0.2494,22.9,23.3,25,25.3; 1343.3,0.2494, + 22.9,23.3,25,25.3; 1346.7,0.2494,22.9,23.3,25.1,25.3; 1350,0.2494,22.9, + 23.3,25.1,25.3; 1353.5,0.2494,23,23.4,25.1,25.3; 1356.9,0.2494,23,23.4, + 25.1,25.3; 1360.3,0.2494,23,23.4,25.1,25.3; 1363.8,0.2494,23,23.4,25.1, + 25.4; 1367.1,0.2494,23,23.4,25.1,25.4; 1370.7,0.2494,23.1,23.5,25.2, + 25.4; 1376,0.2494,23.1,23.5,25.2,25.4; 1379.3,0.2494,23.1,23.5,25.2, + 25.4; 1382.8,0.2494,23.1,23.5,25.2,25.4; 1386.2,0.2494,23.1,23.5,25.2, + 25.5; 1389.7,0.2494,23.1,23.5,25.2,25.5; 1393.1,0.2494,23.1,23.6,25.3, + 25.5; 1396.4,0.2494,23.2,23.6,25.3,25.5; 1399.7,0.2494,23.2,23.6,25.3, + 25.5; 1403,0.2494,23.2,23.6,25.3,25.5; 1406.3,0.2494,23.2,23.6,25.3, + 25.5; 1409.8,0.2494,23.2,23.6,25.3,25.5; 1413.2,0.2494,23.2,23.6,25.3, + 25.6; 1416.6,0.2494,23.2,23.7,25.3,25.6; 1420.2,0.2494,23.3,23.7,25.4, + 25.6; 1423.6,0.2494,23.3,23.7,25.4,25.6; 1427,0.2494,23.3,23.7,25.4, + 25.6; 1430.6,0.2494,23.3,23.7,25.4,25.6; 1436,0.2494,23.3,23.7,25.4, + 25.6; 1439.3,0.2494,23.4,23.8,25.4,25.7; 1442.8,0.2494,23.4,23.8,25.5, + 25.7; 1446.2,0.2494,23.4,23.8,25.5,25.7; 1449.8,0.2494,23.4,23.8,25.5, + 25.7; 1453.4,0.2494,23.4,23.8,25.5,25.7; 1456.9,0.2494,23.4,23.8,25.5, + 25.7; 1460.2,0.2494,23.4,23.9,25.5,25.7; 1465.7,0.2494,23.5,23.9,25.5, + 25.8; 1469.2,0.2494,23.5,23.9,25.6,25.8; 1472.6,0.2494,23.5,23.9,25.6, + 25.8; 1476.1,0.2494,23.5,24,25.6,25.8; 1479.5,0.2494,23.5,24,25.6,25.8; + 1483.2,0.2494,23.5,24,25.6,25.8; 1488.6,0.2494,23.6,24,25.6,25.9; + 1492.1,0.2494,23.6,24,25.6,25.9; 1495.6,0.2494,23.6,24,25.7,25.9; + 1499.2,0.2494,23.6,24.1,25.7,25.9; 1502.6,0.2494,23.6,24,25.7,25.9; + 1506.1,0.2494,23.6,24.1,25.7,25.9; 1509.5,0.2494,23.7,24.1,25.7,25.9; + 1513,0.2494,23.7,24.1,25.7,26; 1516.4,0.2494,23.7,24.1,25.7,26; 1519.8, + 0.2494,23.7,24.1,25.8,26; 1523.2,0.2494,23.7,24.2,25.8,26; 1526.7, + 0.2494,23.7,24.2,25.8,26; 1532.2,0.2494,23.7,24.2,25.8,26; 1535.7, + 0.2494,23.8,24.2,25.8,26; 1539.6,0.2494,23.8,24.2,25.8,26.1; 1543.1, + 0.2494,23.8,24.2,25.8,26.1; 1546.6,0.2494,23.8,24.2,25.9,26.1; 1550.1, + 0.2494,23.8,24.3,25.9,26.1; 1553.6,0.2494,23.8,24.3,25.9,26.1; 1559, + 0.2494,23.9,24.3,25.9,26.1; 1562.6,0.2494,23.9,24.3,25.9,26.1; 1566, + 0.2494,23.9,24.3,25.9,26.2; 1569.6,0.2494,23.9,24.4,25.9,26.2; 1573.5, + 0.2494,23.9,24.4,26,26.2; 1577,0.2494,23.9,24.4,26,26.2; 1580.5,0.2494, + 24,24.4,26,26.2; 1584,0.2494,24,24.4,26,26.2; 1587.4,0.2494,24,24.4,26, + 26.2; 1593,0.2494,24,24.5,26,26.3; 1596.5,0.2494,24,24.5,26.1,26.3; + 1600.1,0.2494,24,24.5,26.1,26.3; 1603.7,0.2494,24.1,24.5,26.1,26.3; + 1607.2,0.2494,24.1,24.5,26.1,26.3; 1610.8,0.2494,24.1,24.5,26.1,26.3; + 1614.3,0.2494,24.1,24.6,26.1,26.4; 1617.8,0.2494,24.1,24.6,26.1,26.4; + 1621.6,0.2494,24.1,24.6,26.2,26.4; 1625.1,0.2494,24.1,24.6,26.2,26.4; + 1628.5,0.2494,24.2,24.6,26.2,26.4; 1632.3,0.2494,24.2,24.6,26.2,26.4; + 1635.8,0.2494,24.2,24.6,26.2,26.4; 1639.3,0.2494,24.2,24.7,26.2,26.4; + 1642.9,0.2494,24.2,24.7,26.2,26.4; 1646.3,0.2494,24.2,24.7,26.2,26.5; + 1649.8,0.2494,24.2,24.7,26.2,26.5; 1653.5,0.2494,24.2,24.7,26.3,26.5; + 1657,0.2494,24.3,24.7,26.3,26.5; 1660.6,0.2494,24.3,24.7,26.3,26.5; + 1664.3,0.2494,24.3,24.8,26.3,26.5; 1667.8,0.2494,24.3,24.8,26.3,26.5; + 1671.4,0.2494,24.3,24.8,26.3,26.6; 1675.1,0.2494,24.3,24.8,26.3,26.6; + 1680.6,0.2494,24.4,24.8,26.4,26.6; 1684.1,0.2494,24.4,24.8,26.4,26.6; + 1687.7,0.2494,24.4,24.9,26.4,26.6; 1691.4,0.2494,24.4,24.9,26.4,26.6; + 1697,0.2494,24.4,24.9,26.4,26.6; 1700.5,0.2494,24.4,24.9,26.4,26.7; + 1704.8,0.2494,24.5,24.9,26.4,26.7; 1708.3,0.2494,24.5,25,26.4,26.7; + 1711.8,0.2494,24.5,25,26.5,26.7; 1715.4,0.2494,24.5,25,26.5,26.7; + 1718.9,0.2494,24.5,25,26.5,26.7; 1722.4,0.2494,24.5,25,26.5,26.7; + 1726.1,0.2494,24.5,25,26.5,26.7; 1729.8,0.2494,24.6,25,26.5,26.8; + 1733.3,0.2494,24.6,25,26.5,26.8; 1736.9,0.2494,24.6,25.1,26.5,26.8; + 1740.8,0.2494,24.6,25.1,26.6,26.8; 1744.3,0.2494,24.6,25.1,26.6,26.8; + 1748,0.2494,24.6,25.1,26.6,26.8; 1751.8,0.2494,24.6,25.1,26.6,26.8; + 1755.3,0.2494,24.6,25.1,26.6,26.8; 1758.8,0.2494,24.7,25.1,26.6,26.9; + 1762.4,0.2494,24.7,25.2,26.6,26.9; 1768,0.2494,24.7,25.2,26.7,26.9; + 1771.5,0.2494,24.7,25.2,26.7,26.9; 1775.1,0.2494,24.7,25.2,26.7,26.9; + 1778.6,0.2494,24.7,25.2,26.7,26.9; 1782.2,0.2494,24.8,25.2,26.7,26.9; + 1785.8,0.2494,24.8,25.3,26.7,26.9; 1789.3,0.2494,24.8,25.3,26.7,27; + 1793,0.2494,24.8,25.3,26.7,27; 1796.5,0.2494,24.8,25.3,26.8,27; 1800.1, + 0.2494,24.8,25.3,26.8,27; 1803.7,0.2494,24.8,25.3,26.8,27; 1807.2, + 0.2494,24.9,25.4,26.8,27; 1810.9,0.2494,24.9,25.4,26.8,27; 1814.5, + 0.2494,24.9,25.4,26.8,27.1; 1819.1,0.2494,24.9,25.4,26.8,27.1; 1822.6, + 0.2494,24.9,25.4,26.8,27.1; 1826.2,0.2494,24.9,25.4,26.9,27.1; 1829.8, + 0.2494,24.9,25.4,26.9,27.1; 1833.4,0.2494,24.9,25.4,26.9,27.1; 1838.1, + 0.2494,25,25.5,26.9,27.1; 1841.6,0.2494,25,25.5,26.9,27.1; 1845.3, + 0.2494,25,25.5,26.9,27.2; 1848.8,0.2494,25,25.5,27,27.2; 1852.5,0.2494, + 25,25.5,27,27.2; 1856.2,0.2494,25,25.5,27,27.2; 1859.7,0.2494,25,25.6, + 27,27.2; 1863.5,0.2494,25.1,25.6,27,27.2; 1867.2,0.2494,25.1,25.6,27, + 27.2; 1870.7,0.2494,25.1,25.6,27,27.3; 1874.3,0.2494,25.1,25.6,27,27.3; + 1878,0.2494,25.1,25.6,27,27.3; 1881.5,0.2494,25.1,25.6,27,27.3; 1885.1, + 0.2494,25.1,25.7,27.1,27.3; 1888.6,0.2494,25.1,25.7,27.1,27.3; 1892.3, + 0.2494,25.2,25.7,27.1,27.3; 1895.8,0.2494,25.2,25.7,27.1,27.3; 1899.4, + 0.2494,25.2,25.7,27.1,27.3; 1903,0.2494,25.2,25.7,27.1,27.4; 1906.5, + 0.2494,25.2,25.7,27.1,27.4; 1910.2,0.2494,25.2,25.8,27.1,27.4; 1914.2, + 0.2494,25.2,25.8,27.2,27.4; 1917.8,0.2494,25.3,25.8,27.2,27.4; 1921.4, + 0.2494,25.3,25.8,27.2,27.4; 1925.3,0.2494,25.3,25.8,27.2,27.4; 1928.8, + 0.2494,25.3,25.8,27.2,27.4; 1932.3,0.2494,25.3,25.8,27.2,27.5; 1936.1, + 0.2494,25.3,25.9,27.2,27.5; 1939.7,0.2494,25.3,25.9,27.2,27.5; 1943.4, + 0.2494,25.3,25.9,27.3,27.5; 1947.1,0.2494,25.4,25.9,27.3,27.5; 1950.8, + 0.2494,25.4,25.9,27.3,27.5; 1954.4,0.2494,25.4,25.9,27.3,27.5; 1958, + 0.2494,25.4,25.9,27.3,27.5; 1961.6,0.2494,25.4,26,27.3,27.6; 1965.3, + 0.2494,25.4,26,27.3,27.6; 1968.9,0.2494,25.4,26,27.3,27.6; 1974.6, + 0.2494,25.5,26,27.3,27.6; 1978.2,0.2494,25.5,26,27.4,27.6; 1981.7, + 0.2494,25.5,26,27.4,27.6; 1985.3,0.2494,25.5,26,27.4,27.6; 1988.9, + 0.2494,25.5,26.1,27.4,27.6; 1992.7,0.2494,25.5,26.1,27.4,27.6; 1996.4, + 0.2494,25.5,26.1,27.4,27.7; 2000.2,0.2494,25.5,26.1,27.4,27.7; 2003.7, + 0.2494,25.6,26.1,27.4,27.7; 2007.3,0.2494,25.6,26.1,27.5,27.7; 2011, + 0.2494,25.6,26.1,27.5,27.7; 2014.6,0.2494,25.6,26.2,27.5,27.7; 2018.2, + 0.2494,25.6,26.2,27.5,27.7; 2021.9,0.2494,25.6,26.2,27.5,27.8; 2025.6, + 0.2494,25.6,26.2,27.5,27.8; 2029.2,0.2494,25.7,26.2,27.5,27.8; 2032.8, + 0.2494,25.7,26.2,27.5,27.8; 2036.6,0.2494,25.7,26.2,27.6,27.8; 2040.4, + 0.2494,25.7,26.3,27.6,27.8; 2044,0.2494,25.7,26.3,27.6,27.8; 2047.9, + 0.2494,25.7,26.3,27.6,27.8; 2051.6,0.2494,25.7,26.3,27.6,27.8; 2055.3, + 0.2494,25.7,26.3,27.6,27.8; 2058.8,0.2494,25.8,26.3,27.6,27.9; 2062.6, + 0.2494,25.8,26.3,27.6,27.9; 2066.2,0.2494,25.8,26.4,27.6,27.9; 2069.9, + 0.2494,25.8,26.3,27.7,27.9; 2073.6,0.2494,25.8,26.4,27.7,27.9; 2077.2, + 0.2494,25.8,26.4,27.7,27.9; 2080.8,0.2494,25.8,26.4,27.7,27.9; 2084.5, + 0.2494,25.8,26.4,27.7,27.9; 2088.2,0.2494,25.8,26.4,27.7,27.9; 2091.9, + 0.2494,25.9,26.4,27.7,28; 2095.8,0.2494,25.9,26.5,27.7,28; 2099.6, + 0.2494,25.9,26.5,27.7,28; 2103.4,0.2494,25.9,26.5,27.8,28; 2107.1, + 0.2494,25.9,26.5,27.8,28; 2110.8,0.2494,25.9,26.5,27.8,28; 2114.5, + 0.2494,25.9,26.5,27.8,28; 2118.1,0.2494,26,26.5,27.8,28.1; 2121.9, + 0.2494,26,26.5,27.8,28.1; 2125.5,0.2494,26,26.5,27.8,28.1; 2129.1, + 0.2494,26,26.6,27.8,28.1; 2132.8,0.2494,26,26.6,27.8,28.1; 2136.5, + 0.2494,26,26.6,27.9,28.1; 2140.3,0.2494,26,26.6,27.9,28.1; 2146.1, + 0.2494,26,26.6,27.9,28.1; 2149.8,0.2494,26.1,26.6,27.9,28.1; 2154.6, + 0.2494,26.1,26.6,27.9,28.2; 2158.2,0.2494,26.1,26.7,27.9,28.2; 2161.9, + 0.2494,26.1,26.7,27.9,28.2; 2165.5,0.2494,26.1,26.7,27.9,28.2; 2169.2, + 0.2494,26.1,26.7,28,28.2; 2175.1,0.2494,26.1,26.7,28,28.2; 2178.8, + 0.2494,26.1,26.7,28,28.2; 2182.5,0.2494,26.2,26.7,28,28.2; 2186.2, + 0.2494,26.2,26.8,28,28.2; 2190.1,0.2494,26.2,26.8,28,28.3; 2193.8, + 0.2494,26.2,26.8,28,28.3; 2197.4,0.2494,26.2,26.8,28,28.3; 2201.3, + 0.2494,26.2,26.8,28.1,28.3; 2205,0.2494,26.2,26.8,28.1,28.3; 2208.6, + 0.2494,26.3,26.8,28.1,28.3; 2212.3,0.2494,26.3,26.9,28.1,28.3; 2216.1, + 0.2494,26.3,26.9,28.1,28.3; 2219.7,0.2494,26.3,26.9,28.1,28.3; 2223.4, + 0.2494,26.3,26.9,28.1,28.3; 2229.2,0.2494,26.3,26.9,28.1,28.4; 2233, + 0.2494,26.3,26.9,28.1,28.4; 2237.9,0.2494,26.4,26.9,28.1,28.4; 2241.5, + 0.2494,26.4,27,28.2,28.4; 2245.3,0.2494,26.4,27,28.2,28.4; 2249,0.2494, + 26.4,27,28.2,28.4; 2252.9,0.2494,26.4,27,28.2,28.4; 2256.9,0.2494,26.4, + 27,28.2,28.5; 2260.7,0.2494,26.4,27,28.2,28.5; 2264.4,0.2494,26.4,27, + 28.2,28.5; 2268.4,0.2494,26.4,27,28.3,28.5; 2272.5,0.2494,26.5,27.1, + 28.3,28.5; 2276.4,0.2494,26.5,27.1,28.3,28.5; 2280.2,0.2494,26.5,27.1, + 28.3,28.5; 2285.1,0.2494,26.5,27.1,28.3,28.5; 2288.9,0.2494,26.5,27.1, + 28.3,28.5; 2292.6,0.2494,26.5,27.1,28.3,28.5; 2296.4,0.2494,26.5,27.1, + 28.3,28.5; 2300.1,0.2494,26.5,27.1,28.3,28.6; 2304,0.2494,26.5,27.2, + 28.3,28.6; 2309.7,0.2494,26.6,27.2,28.4,28.6; 2313.5,0.2494,26.6,27.2, + 28.4,28.6; 2317.2,0.2494,26.6,27.2,28.4,28.6; 2320.9,0.2494,26.6,27.2, + 28.4,28.6; 2324.6,0.2494,26.6,27.2,28.4,28.6; 2328.4,0.2494,26.6,27.2, + 28.4,28.7; 2332.2,0.2494,26.6,27.2,28.4,28.7; 2335.9,0.2494,26.6,27.3, + 28.4,28.7; 2339.8,0.2494,26.7,27.3,28.4,28.7; 2343.6,0.2494,26.7,27.3, + 28.4,28.7; 2347.3,0.2494,26.7,27.3,28.5,28.7; 2350.9,0.2494,26.7,27.3, + 28.5,28.7; 2355.6,0.2494,26.7,27.3,28.5,28.8; 2359.4,0.2494,26.7,27.3, + 28.5,28.8; 2363.3,0.2494,26.7,27.3,28.5,28.8; 2367.1,0.2494,26.7,27.4, + 28.5,28.8; 2370.8,0.2494,26.8,27.4,28.5,28.8; 2374.7,0.2494,26.8,27.4, + 28.5,28.8; 2379,0.2494,26.8,27.4,28.6,28.8; 2382.8,0.2494,26.8,27.4, + 28.6,28.8; 2386.7,0.2494,26.8,27.4,28.6,28.8; 2390.5,0.2494,26.8,27.4, + 28.6,28.8; 2394.2,0.2494,26.8,27.4,28.6,28.8; 2398.2,0.2494,26.8,27.4, + 28.6,28.9; 2404.1,0.2494,26.8,27.5,28.6,28.9; 2407.8,0.2494,26.8,27.5, + 28.6,28.9; 2411.8,0.2494,26.9,27.5,28.7,28.9; 2415.5,0.2494,26.9,27.5, + 28.7,28.9; 2419.3,0.2494,26.9,27.5,28.7,28.9; 2423.1,0.2494,26.9,27.5, + 28.7,28.9; 2427,0.2494,26.9,27.5,28.7,28.9; 2430.7,0.2494,26.9,27.6, + 28.7,28.9; 2434.6,0.2494,26.9,27.6,28.7,28.9; 2438.5,0.2494,27,27.6, + 28.7,29; 2442.4,0.2494,27,27.6,28.7,29; 2446.3,0.2494,27,27.6,28.7,29; + 2450,0.2494,27,27.6,28.7,29; 2454,0.2494,27,27.6,28.8,29; 2458.1,0.2494, + 27,27.6,28.8,29; 2462.1,0.2494,27,27.6,28.8,29; 2466,0.2494,27,27.7, + 28.8,29; 2470.1,0.2494,27,27.7,28.8,29; 2474.2,0.2494,27,27.7,28.8,29.1; + 2478.2,0.2494,27.1,27.7,28.8,29.1; 2482.2,0.2494,27.1,27.7,28.8,29.1; + 2486.2,0.2494,27.1,27.7,28.8,29.1; 2490,0.2494,27.1,27.7,28.9,29.1; + 2493.9,0.2494,27.1,27.7,28.9,29.1; 2497.9,0.2494,27.1,27.8,28.9,29.1; + 2502.1,0.2494,27.1,27.8,28.9,29.2; 2508,0.2494,27.1,27.8,28.9,29.2; + 2511.9,0.2494,27.2,27.8,28.9,29.2; 2515.9,0.2494,27.2,27.8,28.9,29.2; + 2519.7,0.2494,27.2,27.8,28.9,29.2; 2523.5,0.2494,27.2,27.8,29,29.2; + 2527.5,0.2494,27.2,27.8,29,29.2; 2531.3,0.2494,27.2,27.9,29,29.2; + 2535.3,0.2494,27.2,27.9,29,29.2; 2539.3,0.2494,27.2,27.9,29,29.2; + 2543.1,0.2494,27.2,27.9,29,29.2; 2547,0.2494,27.2,27.9,29,29.3; 2550.8, + 0.2494,27.3,27.9,29,29.3; 2554.8,0.2494,27.3,27.9,29,29.3; 2558.8, + 0.2494,27.3,27.9,29,29.3; 2562.8,0.2494,27.3,28,29.1,29.3; 2566.7, + 0.2494,27.3,28,29.1,29.3; 2570.7,0.2494,27.3,28,29.1,29.3; 2574.9, + 0.2494,27.3,28,29.1,29.3; 2578.7,0.2494,27.3,28,29.1,29.3; 2582.7, + 0.2494,27.3,28,29.1,29.4; 2586.6,0.2494,27.4,28,29.1,29.4; 2590.5, + 0.2494,27.4,28,29.1,29.4; 2594.5,0.2494,27.4,28.1,29.1,29.4; 2598.5, + 0.2494,27.4,28.1,29.1,29.4; 2602.5,0.2494,27.4,28.1,29.1,29.4; 2606.5, + 0.2494,27.4,28.1,29.2,29.4; 2610.5,0.2494,27.4,28.1,29.2,29.4; 2614.4, + 0.2494,27.4,28.1,29.2,29.4; 2618.4,0.2494,27.4,28.1,29.2,29.4; 2622.6, + 0.2494,27.5,28.1,29.2,29.4; 2626.4,0.2494,27.5,28.1,29.2,29.5; 2630.4, + 0.2494,27.5,28.2,29.2,29.5; 2634.3,0.2494,27.5,28.2,29.2,29.5; 2638.5, + 0.2494,27.5,28.2,29.2,29.5; 2642.4,0.2494,27.5,28.2,29.3,29.5; 2646.3, + 0.2494,27.5,28.2,29.3,29.5; 2650.2,0.2494,27.5,28.2,29.3,29.5; 2654.2, + 0.2494,27.5,28.2,29.3,29.5; 2658.4,0.2494,27.6,28.2,29.3,29.6; 2662.3, + 0.2494,27.6,28.2,29.3,29.6; 2666.4,0.2494,27.6,28.3,29.3,29.6; 2670.3, + 0.2494,27.6,28.3,29.3,29.6; 2674.3,0.2494,27.6,28.3,29.3,29.6; 2678.4, + 0.2494,27.6,28.3,29.3,29.6; 2682.3,0.2494,27.6,28.3,29.4,29.6; 2686.2, + 0.2494,27.6,28.3,29.4,29.6; 2690.3,0.2494,27.6,28.3,29.4,29.6; 2694.3, + 0.2494,27.6,28.3,29.4,29.6; 2698.4,0.2494,27.7,28.4,29.4,29.6; 2702.5, + 0.2494,27.7,28.4,29.4,29.7; 2706.5,0.2494,27.7,28.4,29.4,29.7; 2710.4, + 0.2494,27.7,28.4,29.4,29.7; 2714.3,0.2494,27.7,28.4,29.4,29.7; 2718.4, + 0.2494,27.7,28.4,29.5,29.7; 2722.4,0.2494,27.7,28.4,29.5,29.7; 2726.5, + 0.2494,27.7,28.4,29.5,29.7; 2730.6,0.2494,27.7,28.4,29.5,29.7; 2734.6, + 0.2494,27.8,28.5,29.5,29.8; 2738.5,0.2494,27.8,28.5,29.5,29.7; 2742.5, + 0.2494,27.8,28.5,29.5,29.8; 2746.6,0.2494,27.8,28.5,29.5,29.8; 2750.8, + 0.2494,27.8,28.5,29.5,29.8; 2754.8,0.2494,27.8,28.5,29.5,29.8; 2758.8, + 0.2494,27.8,28.5,29.6,29.8; 2762.7,0.2494,27.8,28.5,29.6,29.8; 2766.6, + 0.2494,27.8,28.5,29.6,29.8; 2770.5,0.2494,27.9,28.6,29.6,29.8; 2774.4, + 0.2494,27.9,28.6,29.6,29.8; 2778.6,0.2494,27.9,28.6,29.6,29.9; 2782.8, + 0.2494,27.9,28.6,29.6,29.9; 2786.9,0.2494,27.9,28.6,29.6,29.9; 2790.8, + 0.2494,27.9,28.6,29.6,29.9; 2794.7,0.2494,27.9,28.6,29.6,29.9; 2798.6, + 0.2494,27.9,28.6,29.6,29.9; 2802.6,0.2494,27.9,28.6,29.7,29.9; 2806.7, + 0.2494,28,28.7,29.7,29.9; 2810.7,0.2494,28,28.7,29.7,29.9; 2814.8, + 0.2494,28,28.7,29.7,29.9; 2818.7,0.2494,28,28.7,29.7,30; 2822.5,0.2494, + 28,28.7,29.7,30; 2826.6,0.2494,28,28.7,29.7,30; 2830.5,0.2494,28,28.7, + 29.7,30; 2834.7,0.2494,28,28.7,29.7,30; 2838.6,0.2494,28,28.7,29.7,30; + 2842.4,0.2494,28,28.7,29.7,30; 2846.4,0.2494,28.1,28.8,29.8,30; 2850.5, + 0.2494,28.1,28.8,29.8,30; 2854.4,0.2494,28.1,28.8,29.8,30; 2858.5, + 0.2494,28.1,28.8,29.8,30.1; 2862.5,0.2494,28.1,28.8,29.8,30.1; 2866.4, + 0.2494,28.1,28.8,29.8,30.1; 2870.7,0.2494,28.1,28.8,29.8,30.1; 2874.6, + 0.2494,28.1,28.8,29.8,30.1; 2878.4,0.2494,28.1,28.8,29.8,30.1; 2882.5, + 0.2494,28.1,28.9,29.8,30.1; 2886.6,0.2494,28.1,28.9,29.9,30.1; 2890.4, + 0.2494,28.2,28.9,29.9,30.1; 2894.7,0.2494,28.2,28.9,29.9,30.1; 2898.7, + 0.2494,28.2,28.9,29.9,30.1; 2902.5,0.2494,28.2,28.9,29.9,30.2; 2906.6, + 0.2494,28.2,28.9,29.9,30.2; 2914.7,0.2494,28.2,28.9,29.9,30.2; 2918.6, + 0.2494,28.2,29,29.9,30.2; 2922.5,0.2494,28.2,29,30,30.2; 2926.4,0.2494, + 28.2,29,30,30.2; 2930.5,0.2494,28.2,29,30,30.2; 2934.5,0.2494,28.3,29, + 30,30.2; 2938.6,0.2494,28.3,29,30,30.3; 2942.4,0.2494,28.3,29,30,30.3; + 2946.7,0.2494,28.3,29,30,30.3; 2950.8,0.2494,28.3,29,30,30.3; 2954.8, + 0.2494,28.3,29,30,30.3; 2958.9,0.2494,28.3,29.1,30,30.3; 2962.9,0.2494, + 28.3,29.1,30.1,30.3; 2967.1,0.2494,28.3,29.1,30.1,30.3; 2971.1,0.2494, + 28.4,29.1,30.1,30.3; 2975.1,0.2494,28.4,29.1,30.1,30.3; 2979.3,0.2494, + 28.4,29.1,30.1,30.3; 2983.4,0.2494,28.4,29.1,30.1,30.3; 2987.3,0.2494, + 28.4,29.1,30.1,30.4; 2991.4,0.2494,28.4,29.1,30.1,30.4; 2995.4,0.2494, + 28.4,29.2,30.1,30.4; 2999.4,0.2494,28.4,29.2,30.1,30.4; 3003.6,0.2494, + 28.4,29.2,30.1,30.4; 3007.6,0.2494,28.4,29.2,30.1,30.4; 3011.6,0.2494, + 28.4,29.2,30.2,30.4; 3015.7,0.2494,28.5,29.2,30.2,30.4; 3019.6,0.2494, + 28.5,29.2,30.2,30.4; 3023.6,0.2494,28.5,29.2,30.2,30.5; 3027.5,0.2494, + 28.5,29.2,30.2,30.5; 3031.6,0.2494,28.5,29.2,30.2,30.5; 3035.6,0.2494, + 28.5,29.3,30.2,30.5; 3039.7,0.2494,28.5,29.3,30.2,30.5; 3043.6,0.2494, + 28.5,29.3,30.2,30.5; 3047.6,0.2494,28.5,29.3,30.3,30.5; 3051.5,0.2494, + 28.6,29.3,30.3,30.5; 3055.6,0.2494,28.5,29.3,30.3,30.5; 3059.7,0.2494, + 28.6,29.3,30.3,30.5; 3063.7,0.2494,28.6,29.3,30.3,30.6; 3067.8,0.2494, + 28.6,29.4,30.3,30.6; 3071.8,0.2494,28.6,29.4,30.3,30.6; 3075.8,0.2494, + 28.6,29.4,30.3,30.6; 3079.9,0.2494,28.6,29.4,30.3,30.6; 3083.9,0.2494, + 28.6,29.4,30.3,30.6; 3088,0.2494,28.6,29.4,30.3,30.6; 3092.1,0.2494, + 28.6,29.4,30.4,30.6; 3097,0.2494,28.7,29.4,30.4,30.6; 3101.6,0.2494, + 28.7,29.4,30.4,30.6; 3105.7,0.2494,28.7,29.4,30.4,30.6; 3109.8,0.2494, + 28.7,29.5,30.4,30.6; 3114,0.2494,28.7,29.5,30.4,30.6; 3118.2,0.2494, + 28.7,29.5,30.4,30.7; 3122.5,0.2494,28.7,29.5,30.4,30.7; 3126.5,0.2494, + 28.7,29.5,30.4,30.7; 3130.8,0.2494,28.7,29.5,30.4,30.7; 3135.4,0.2494, + 28.7,29.5,30.4,30.7; 3139.5,0.2494,28.8,29.5,30.4,30.7; 3143.6,0.2494, + 28.7,29.5,30.4,30.7; 3147.7,0.2494,28.8,29.5,30.4,30.7; 3151.7,0.2494, + 28.8,29.6,30.5,30.7; 3156,0.2494,28.8,29.6,30.5,30.7; 3160.1,0.2494, + 28.8,29.6,30.5,30.8; 3164.1,0.2494,28.8,29.6,30.5,30.8; 3168.1,0.2494, + 28.8,29.6,30.5,30.8; 3172.2,0.2494,28.8,29.6,30.5,30.8; 3176.7,0.2494, + 28.8,29.6,30.5,30.8; 3180.6,0.2494,28.8,29.6,30.5,30.8; 3184.6,0.2494, + 28.9,29.6,30.6,30.8; 3188.8,0.2494,28.9,29.7,30.6,30.8; 3193,0.2494, + 28.9,29.7,30.6,30.9; 3197,0.2494,28.9,29.7,30.6,30.9; 3201.1,0.2494, + 28.9,29.7,30.6,30.9; 3205.2,0.2494,28.9,29.7,30.6,30.9; 3209.6,0.2494, + 28.9,29.7,30.6,30.9; 3213.8,0.2494,28.9,29.7,30.6,30.9; 3218.1,0.2494, + 28.9,29.7,30.6,30.9; 3222.3,0.2494,28.9,29.7,30.6,30.9; 3226.4,0.2494, + 29,29.7,30.6,30.9; 3230.6,0.2494,29,29.7,30.6,30.9; 3234.6,0.2494,29, + 29.8,30.7,30.9; 3238.7,0.2494,29,29.8,30.7,30.9; 3242.7,0.2494,29,29.8, + 30.7,30.9; 3246.7,0.2494,29,29.8,30.7,31; 3250.9,0.2494,29,29.8,30.7, + 30.9; 3255,0.2494,29,29.8,30.7,31; 3259.1,0.2494,29,29.8,30.7,31; + 3263.2,0.2494,29,29.8,30.7,31; 3267.3,0.2494,29,29.8,30.7,31; 3271.4, + 0.2494,29.1,29.8,30.7,31; 3275.4,0.2494,29.1,29.9,30.7,31; 3279.6, + 0.2494,29.1,29.9,30.8,31; 3283.7,0.2494,29.1,29.9,30.8,31; 3287.8, + 0.2494,29.1,29.9,30.8,31; 3292.1,0.2494,29.1,29.9,30.8,31.1; 3296.5, + 0.2494,29.1,29.9,30.8,31; 3300.6,0.2494,29.1,29.9,30.8,31.1; 3305, + 0.2494,29.1,29.9,30.8,31.1; 3309.2,0.2494,29.2,29.9,30.8,31.1; 3313.4, + 0.2494,29.2,30,30.8,31.1; 3317.7,0.2494,29.2,30,30.8,31.1; 3322.9, + 0.2494,29.2,30,30.9,31.1; 3327,0.2494,29.2,30,30.9,31.1; 3331.3,0.2494, + 29.2,30,30.9,31.1; 3335.4,0.2494,29.2,30,30.9,31.1; 3339.7,0.2494,29.2, + 30,30.9,31.2; 3343.7,0.2494,29.2,30,30.9,31.2; 3347.8,0.2494,29.2,30, + 30.9,31.2; 3351.9,0.2494,29.3,30,30.9,31.2; 3356.1,0.2494,29.3,30.1, + 30.9,31.2; 3360.5,0.2494,29.3,30.1,30.9,31.2; 3364.7,0.2494,29.3,30.1, + 30.9,31.2; 3368.9,0.2494,29.3,30.1,30.9,31.2; 3373,0.2494,29.3,30.1, + 30.9,31.2; 3377.1,0.2494,29.3,30.1,31,31.2; 3381.6,0.2494,29.3,30.1,31, + 31.2; 3385.8,0.2494,29.3,30.1,31,31.3; 3391,0.2494,29.3,30.1,31,31.3; + 3395.2,0.2494,29.3,30.2,31,31.3; 3399.2,0.2494,29.4,30.2,31,31.3; + 3403.4,0.2494,29.4,30.2,31,31.3; 3407.7,0.2494,29.4,30.2,31,31.3; + 3411.8,0.2494,29.4,30.2,31,31.3; 3416.1,0.2494,29.4,30.2,31,31.3; + 3420.3,0.2494,29.4,30.2,31,31.3; 3424.5,0.2494,29.4,30.2,31.1,31.3; + 3428.7,0.2494,29.4,30.2,31.1,31.3; 3432.8,0.2494,29.4,30.2,31.1,31.3; + 3437,0.2494,29.4,30.3,31.1,31.3; 3441.5,0.2494,29.5,30.3,31.1,31.4; + 3445.6,0.2494,29.5,30.3,31.1,31.4; 3449.9,0.2494,29.5,30.3,31.1,31.4; + 3454,0.2494,29.5,30.3,31.1,31.3; 3458.1,0.2494,29.5,30.3,31.1,31.4; + 3462.2,0.2494,29.5,30.3,31.1,31.4; 3466.3,0.2494,29.5,30.3,31.1,31.4; + 3470.5,0.2494,29.5,30.3,31.1,31.4; 3474.7,0.2494,29.5,30.3,31.1,31.4; + 3478.9,0.2494,29.5,30.3,31.2,31.4; 3483.2,0.2494,29.5,30.4,31.2,31.4; + 3489.4,0.2494,29.5,30.4,31.2,31.4; 3493.7,0.2494,29.6,30.4,31.2,31.4; + 3498,0.2494,29.6,30.4,31.2,31.5; 3502.4,0.2494,29.6,30.4,31.2,31.5; + 3506.5,0.2494,29.6,30.4,31.2,31.5; 3510.8,0.2494,29.6,30.4,31.2,31.5; + 3514.9,0.2494,29.6,30.4,31.2,31.5; 3519.1,0.2494,29.6,30.4,31.2,31.5; + 3523.4,0.2494,29.6,30.4,31.2,31.5; 3527.8,0.2494,29.6,30.4,31.2,31.5; + 3532.5,0.2494,29.6,30.4,31.2,31.5; 3536.6,0.2494,29.6,30.5,31.3,31.6; + 3541.1,0.2494,29.6,30.5,31.3,31.5; 3545.2,0.2494,29.7,30.5,31.3,31.6; + 3549.8,0.2494,29.7,30.5,31.3,31.6; 3554.3,0.2494,29.7,30.5,31.3,31.5; + 3558.7,0.2494,29.7,30.5,31.3,31.6; 3563,0.2494,29.7,30.5,31.3,31.6; + 3567.3,0.2494,29.7,30.5,31.3,31.6; 3571.6,0.2494,29.7,30.6,31.3,31.6; + 3578,0.2494,29.7,30.6,31.3,31.6; 3582.2,0.2494,29.7,30.6,31.3,31.6; + 3586.7,0.2494,29.7,30.6,31.4,31.6; 3591.2,0.2494,29.8,30.6,31.4,31.6; + 3596,0.2494,29.8,30.6,31.4,31.6; 3600.3,0.2494,29.8,30.6,31.4,31.6; + 3604.7,0.2494,29.8,30.6,31.4,31.6; 3609.5,0.2494,29.8,30.6,31.4,31.7; + 3614,0.2494,29.8,30.7,31.4,31.7; 3618.2,0.2494,29.8,30.7,31.4,31.7; + 3624.5,0.2494,29.8,30.7,31.4,31.7; 3628.7,0.2494,29.8,30.7,31.4,31.7; + 3632.9,0.2494,29.8,30.7,31.5,31.7; 3637.3,0.2494,29.8,30.7,31.4,31.7; + 3643.8,0.2494,29.9,30.7,31.5,31.7; 3648.3,0.2494,29.9,30.7,31.5,31.7; + 3652.7,0.2494,29.9,30.7,31.5,31.7; 3657,0.2494,29.9,30.7,31.5,31.8; + 3661.7,0.2494,29.9,30.7,31.5,31.8; 3665.9,0.2494,29.9,30.7,31.5,31.8; + 3670.6,0.2494,29.9,30.8,31.5,31.8; 3674.8,0.2494,29.9,30.8,31.5,31.8; + 3679,0.2494,29.9,30.8,31.5,31.8; 3683.6,0.2494,29.9,30.8,31.5,31.8; + 3688,0.2494,29.9,30.8,31.5,31.8; 3692.5,0.2494,30,30.8,31.5,31.8; + 3696.8,0.2494,30,30.8,31.6,31.8; 3701.7,0.2494,30,30.8,31.5,31.8; 3706, + 0.2494,30,30.8,31.6,31.8; 3710.5,0.2494,30,30.9,31.6,31.9; 3714.8, + 0.2494,30,30.9,31.6,31.9; 3719.2,0.2494,30,30.9,31.6,31.9; 3723.6, + 0.2494,30,30.9,31.6,31.9; 3728.1,0.2494,30,30.9,31.6,31.9; 3733.2, + 0.2494,30.1,30.9,31.6,31.9; 3737.6,0.2494,30.1,30.9,31.6,31.9; 3741.9, + 0.2494,30.1,30.9,31.6,31.9; 3746.2,0.2494,30.1,30.9,31.7,31.9; 3750.5, + 0.2494,30.1,30.9,31.7,31.9; 3754.7,0.2494,30.1,30.9,31.7,31.9; 3758.9, + 0.2494,30.1,31,31.7,31.9; 3765.2,0.2494,30.1,31,31.7,31.9; 3769.5, + 0.2494,30.1,31,31.7,32; 3773.8,0.2494,30.1,31,31.7,32; 3778.9,0.2494, + 30.1,31,31.7,32; 3783.1,0.2494,30.1,31,31.7,32; 3787.5,0.2494,30.1,31, + 31.7,32; 3791.8,0.2494,30.1,31,31.7,32; 3796.4,0.2494,30.2,31,31.7,32; + 3800.8,0.2494,30.2,31,31.8,32; 3805.3,0.2494,30.2,31,31.7,32; 3809.8, + 0.2494,30.2,31.1,31.8,32; 3814.3,0.2494,30.2,31.1,31.8,32; 3818.5, + 0.2494,30.2,31.1,31.8,32; 3822.9,0.2494,30.2,31.1,31.8,32.1; 3827.4, + 0.2494,30.2,31.1,31.8,32.1; 3833.8,0.2494,30.2,31.1,31.8,32.1; 3838, + 0.2494,30.2,31.1,31.8,32.1; 3842.3,0.2494,30.3,31.1,31.8,32.1; 3846.7, + 0.2494,30.3,31.1,31.8,32.1; 3851.3,0.2494,30.3,31.1,31.8,32.1; 3857.9, + 0.2494,30.3,31.2,31.8,32.1; 3862.3,0.2494,30.3,31.2,31.8,32.1; 3866.7, + 0.2494,30.3,31.2,31.8,32.1; 3871.6,0.2494,30.3,31.2,31.9,32.1; 3876, + 0.2494,30.3,31.2,31.9,32.1; 3880.5,0.2494,30.3,31.2,31.9,32.1; 3885.1, + 0.2494,30.3,31.2,31.9,32.2; 3889.5,0.2494,30.3,31.2,31.9,32.2; 3893.9, + 0.2494,30.3,31.2,31.9,32.2; 3898.3,0.2494,30.3,31.2,31.9,32.2; 3902.8, + 0.2494,30.4,31.2,31.9,32.2; 3907.4,0.2494,30.4,31.2,31.9,32.2; 3911.8, + 0.2494,30.4,31.2,31.9,32.2; 3916.3,0.2494,30.4,31.3,31.9,32.2; 3921.1, + 0.2494,30.4,31.3,31.9,32.2; 3925.4,0.2494,30.4,31.3,31.9,32.2; 3930, + 0.2494,30.4,31.3,31.9,32.2; 3934.3,0.2494,30.4,31.3,32,32.2; 3938.9, + 0.2494,30.4,31.3,32,32.2; 3943.4,0.2494,30.4,31.3,32,32.3; 3947.8, + 0.2494,30.4,31.3,32,32.3; 3952.1,0.2494,30.5,31.3,32,32.3; 3956.9, + 0.2494,30.5,31.3,32,32.3; 3961.9,0.2494,30.5,31.3,32,32.3; 3966.8, + 0.2494,30.5,31.4,32,32.3; 3971.9,0.2494,30.5,31.4,32,32.3; 3976.7, + 0.2494,30.5,31.4,32,32.3; 3981.2,0.2494,30.5,31.4,32,32.3; 3985.9, + 0.2494,30.5,31.4,32,32.3; 3990.8,0.2494,30.5,31.4,32.1,32.3; 3995.9, + 0.2494,30.5,31.4,32.1,32.3; 4000.8,0.2494,30.5,31.4,32.1,32.3; 4006.1, + 0.2494,30.5,31.4,32.1,32.4; 4010.3,0.2494,30.6,31.4,32.1,32.4; 4014.9, + 0.2494,30.6,31.4,32.1,32.4; 4019.4,0.2494,30.6,31.5,32.1,32.4; 4023.9, + 0.2494,30.6,31.4,32.1,32.4; 4028.6,0.2494,30.6,31.5,32.1,32.4; 4033, + 0.2494,30.6,31.5,32.1,32.4; 4037.5,0.2494,30.6,31.5,32.1,32.4; 4041.9, + 0.2494,30.6,31.5,32.1,32.4; 4046.5,0.2494,30.6,31.5,32.1,32.4; 4050.9, + 0.2494,30.6,31.5,32.1,32.4; 4056.2,0.2494,30.6,31.5,32.1,32.4; 4060.8, + 0.2494,30.6,31.5,32.1,32.4; 4065.6,0.2494,30.6,31.5,32.2,32.4; 4070.3, + 0.2494,30.6,31.5,32.2,32.4; 4074.8,0.2494,30.6,31.6,32.2,32.4; 4079.8, + 0.2494,30.6,31.6,32.2,32.4; 4084.8,0.2494,30.7,31.6,32.2,32.4; 4090.1, + 0.2494,30.7,31.6,32.2,32.5; 4094.7,0.2494,30.7,31.6,32.2,32.4; 4099.7, + 0.2494,30.7,31.6,32.2,32.4; 4104.6,0.2494,30.7,31.6,32.2,32.4; 4109.7, + 0.2494,30.7,31.6,32.2,32.5; 4114.8,0.2494,30.7,31.6,32.2,32.5; 4119.7, + 0.2494,30.7,31.6,32.2,32.5; 4124.6,0.2494,30.7,31.7,32.2,32.5; 4129.9, + 0.2494,30.7,31.7,32.2,32.5; 4134.6,0.2494,30.8,31.7,32.2,32.5; 4139.5, + 0.2494,30.8,31.7,32.2,32.5; 4144.4,0.2494,30.8,31.7,32.2,32.5; 4149.4, + 0.2494,30.8,31.7,32.2,32.5; 4154.3,0.2494,30.8,31.7,32.3,32.5; 4158.9, + 0.2494,30.8,31.7,32.3,32.5; 4163.9,0.2494,30.8,31.7,32.2,32.5; 4168.7, + 0.2494,30.8,31.7,32.3,32.5; 4173.8,0.2494,30.8,31.7,32.3,32.5; 4178.3, + 0.2494,30.8,31.7,32.3,32.5; 4183.1,0.2494,30.8,31.7,32.3,32.6; 4187.9, + 0.2494,30.8,31.8,32.3,32.6; 4192.7,0.2494,30.8,31.8,32.3,32.6; 4197.9, + 0.2494,30.8,31.8,32.3,32.6; 4202.9,0.2494,30.9,31.8,32.3,32.6; 4207.9, + 0.2494,30.9,31.8,32.3,32.6; 4212.9,0.2494,30.9,31.8,32.3,32.6; 4217.8, + 0.2494,30.9,31.8,32.3,32.6; 4222.8,0.2494,30.9,31.8,32.4,32.6; 4227.9, + 0.2494,30.9,31.8,32.4,32.6; 4232.6,0.2494,30.9,31.8,32.3,32.6; 4237.6, + 0.2494,30.9,31.8,32.3,32.6; 4242.5,0.2494,30.9,31.8,32.4,32.6; 4247.1, + 0.2494,30.9,31.9,32.4,32.6; 4251.9,0.2494,30.9,31.9,32.4,32.6; 4256.5, + 0.2494,30.9,31.9,32.4,32.6; 4261.1,0.2494,31,31.9,32.4,32.7; 4265.8, + 0.2494,31,31.9,32.4,32.7; 4270.8,0.2494,31,31.9,32.4,32.7; 4275.6, + 0.2494,31,31.9,32.4,32.7; 4280.3,0.2494,31,31.9,32.4,32.7; 4285.1, + 0.2494,31,31.9,32.4,32.7; 4290,0.2494,31,31.9,32.4,32.7; 4294.7,0.2494, + 31,31.9,32.4,32.7; 4299.5,0.2494,31,31.9,32.4,32.7; 4304.5,0.2494,31, + 31.9,32.4,32.7; 4309.1,0.2494,31,32,32.4,32.7; 4314.1,0.2494,31,32,32.5, + 32.7; 4318.8,0.2494,31,32,32.5,32.8; 4323.9,0.2494,31,32,32.5,32.8; + 4329.1,0.2494,31.1,32,32.5,32.8; 4333.8,0.2494,31.1,32,32.5,32.8; + 4338.7,0.2494,31.1,32,32.5,32.8; 4343.7,0.2494,31.1,32,32.5,32.8; + 4348.6,0.2494,31.1,32,32.5,32.8; 4353.8,0.2494,31.1,32,32.5,32.8; + 4358.8,0.2494,31.1,32,32.5,32.8; 4363.7,0.2494,31.1,32,32.5,32.8; + 4368.3,0.2494,31.1,32,32.5,32.8; 4373,0.2494,31.1,32.1,32.6,32.8; 4378, + 0.2494,31.1,32,32.5,32.8; 4383.1,0.2494,31.1,32.1,32.6,32.9; 4387.9, + 0.2494,31.2,32.1,32.6,32.9; 4392.8,0.2494,31.2,32.1,32.6,32.9; 4398.1, + 0.2494,31.2,32.1,32.6,32.9; 4402.8,0.2494,31.2,32.1,32.6,32.9; 4408.1, + 0.2494,31.2,32.1,32.6,32.9; 4413.1,0.2494,31.2,32.1,32.6,32.9; 4417.8, + 0.2494,31.2,32.1,32.6,32.9; 4422.7,0.2494,31.2,32.1,32.6,32.9; 4427.6, + 0.2494,31.2,32.1,32.7,32.9; 4432.4,0.2494,31.2,32.1,32.6,32.9; 4437.3, + 0.2494,31.2,32.1,32.6,32.9; 4442.3,0.2494,31.2,32.2,32.6,32.9; 4447, + 0.2494,31.2,32.2,32.7,32.9; 4451.7,0.2494,31.2,32.2,32.7,32.9; 4456.6, + 0.2494,31.2,32.2,32.7,32.9; 4461.2,0.2494,31.2,32.2,32.7,32.9; 4466.5, + 0.2494,31.2,32.2,32.7,32.9; 4471.2,0.2494,31.2,32.2,32.7,32.9; 4476.2, + 0.2494,31.2,32.2,32.7,33; 4481,0.2494,31.3,32.2,32.7,33; 4486.1,0.2494, + 31.3,32.2,32.7,33; 4491.3,0.2494,31.3,32.2,32.7,33; 4496.1,0.2494,31.3, + 32.2,32.7,33; 4501.2,0.2494,31.3,32.2,32.7,33; 4506.3,0.2494,31.3,32.2, + 32.7,33; 4511.5,0.2494,31.3,32.2,32.7,33; 4516.2,0.2494,31.3,32.3,32.7, + 33; 4521,0.2494,31.3,32.3,32.7,33; 4525.6,0.2494,31.3,32.3,32.7,33; + 4530.1,0.2494,31.3,32.3,32.7,33; 4534.7,0.2494,31.3,32.3,32.7,33; + 4539.3,0.2494,31.3,32.3,32.8,33; 4544.4,0.2494,31.3,32.3,32.8,33; + 4549.3,0.2494,31.3,32.3,32.8,33; 4554.3,0.2494,31.3,32.3,32.8,33.1; + 4559.4,0.2494,31.3,32.3,32.8,33.1; 4564.4,0.2494,31.3,32.3,32.8,33.1; + 4569.7,0.2494,31.4,32.3,32.8,33.1; 4574.3,0.2494,31.4,32.3,32.8,33.1; + 4579.1,0.2494,31.4,32.3,32.8,33.1; 4584.4,0.2494,31.4,32.3,32.8,33.1; + 4589.4,0.2494,31.4,32.3,32.8,33.1; 4594.2,0.2494,31.4,32.3,32.8,33.1; + 4599.5,0.2494,31.4,32.3,32.8,33.1; 4604.3,0.2494,31.4,32.3,32.8,33.1; + 4609.4,0.2494,31.4,32.4,32.9,33.1; 4614.3,0.2494,31.4,32.4,32.9,33.1; + 4619.1,0.2494,31.4,32.4,32.8,33.1; 4624.2,0.2494,31.4,32.4,32.9,33.1; + 4629,0.2494,31.4,32.4,32.9,33.1; 4633.7,0.2494,31.4,32.4,32.9,33.1; + 4638.4,0.2494,31.4,32.4,32.9,33.2; 4643.2,0.2494,31.4,32.4,32.9,33.2; + 4648.4,0.2494,31.4,32.4,32.9,33.2; 4653.4,0.2494,31.4,32.4,32.9,33.2; + 4658.1,0.2494,31.5,32.4,32.9,33.2; 4663,0.2494,31.5,32.4,32.9,33.2; + 4668,0.2494,31.5,32.4,32.9,33.2; 4673.3,0.2494,31.5,32.4,32.9,33.2; + 4678.2,0.2494,31.5,32.5,32.9,33.2; 4683.1,0.2494,31.5,32.5,32.9,33.2; + 4687.8,0.2494,31.5,32.5,32.9,33.2; 4692.7,0.2494,31.5,32.5,32.9,33.2; + 4697.7,0.2494,31.5,32.5,32.9,33.2; 4702.4,0.2494,31.5,32.5,33,33.2; + 4707.2,0.2494,31.5,32.5,33,33.2; 4712.1,0.2494,31.5,32.5,33,33.2; + 4717.1,0.2494,31.5,32.5,33,33.2; 4722.2,0.2494,31.5,32.5,33,33.2; + 4727.2,0.2494,31.5,32.5,33,33.2; 4732.3,0.2494,31.5,32.5,33,33.2; + 4737.2,0.2494,31.5,32.5,33,33.3; 4742.2,0.2494,31.6,32.5,33,33.2; + 4747.4,0.2494,31.6,32.5,33,33.3; 4752.6,0.2494,31.6,32.5,33,33.3; + 4757.3,0.2494,31.6,32.6,33,33.3; 4762.4,0.2494,31.6,32.6,33,33.3; + 4767.6,0.2494,31.6,32.6,33,33.3; 4773,0.2494,31.6,32.6,33,33.3; 4778, + 0.2494,31.6,32.6,33,33.3; 4782.8,0.2494,31.6,32.6,33,33.3; 4787.6, + 0.2494,31.6,32.6,33,33.3; 4792.8,0.2494,31.6,32.6,33,33.3; 4797.5, + 0.2494,31.6,32.6,33,33.3; 4802.7,0.2494,31.6,32.6,33,33.3; 4807.6, + 0.2494,31.7,32.6,33.1,33.3; 4812.9,0.2494,31.6,32.6,33.1,33.3; 4817.8, + 0.2494,31.7,32.6,33.1,33.4; 4822.7,0.2494,31.7,32.7,33.1,33.4; 4827.5, + 0.2494,31.7,32.7,33.1,33.4; 4832.6,0.2494,31.7,32.7,33.1,33.4; 4837.6, + 0.2494,31.7,32.7,33.1,33.4; 4843,0.2494,31.7,32.7,33.1,33.4; 4847.7, + 0.2494,31.7,32.7,33.1,33.4; 4853.2,0.2494,31.7,32.7,33.1,33.4; 4858, + 0.2494,31.7,32.7,33.1,33.4; 4863.1,0.2494,31.7,32.7,33.1,33.4; 4868.2, + 0.2494,31.7,32.7,33.1,33.4; 4873.2,0.2494,31.7,32.7,33.1,33.4; 4878.6, + 0.2494,31.7,32.7,33.1,33.4; 4883.6,0.2494,31.7,32.7,33.1,33.4; 4888.6, + 0.2494,31.7,32.7,33.1,33.4; 4893.8,0.2494,31.7,32.7,33.2,33.4; 4898.3, + 0.2494,31.8,32.7,33.2,33.4; 4903.5,0.2494,31.8,32.8,33.2,33.4; 4908.5, + 0.2494,31.8,32.7,33.2,33.4; 4913.8,0.2494,31.8,32.8,33.2,33.4; 4918.5, + 0.2494,31.8,32.8,33.2,33.4; 4923.6,0.2494,31.8,32.8,33.2,33.4; 4928.5, + 0.2494,31.8,32.8,33.2,33.5; 4933.4,0.2494,31.8,32.8,33.2,33.5; 4938.6, + 0.2494,31.8,32.8,33.2,33.5; 4943.6,0.2494,31.8,32.8,33.2,33.5; 4948.6, + 0.2494,31.8,32.8,33.2,33.5; 4953.5,0.2494,31.8,32.8,33.2,33.5; 4958.7, + 0.2494,31.8,32.8,33.2,33.5; 4963.9,0.2494,31.8,32.8,33.2,33.5; 4969.1, + 0.2494,31.8,32.8,33.2,33.5; 4974.5,0.2494,31.8,32.8,33.2,33.5; 4979.7, + 0.2494,31.8,32.8,33.2,33.5; 4984.7,0.2494,31.9,32.9,33.2,33.5; 4989.7, + 0.2494,31.9,32.9,33.2,33.5; 4994.7,0.2494,31.9,32.9,33.2,33.5; 4999.4, + 0.2494,31.9,32.9,33.2,33.5; 5004.5,0.2494,31.9,32.9,33.2,33.5; 5009.7, + 0.2494,31.9,32.9,33.3,33.5; 5014.9,0.2494,31.9,32.9,33.3,33.5; 5019.9, + 0.2494,31.9,32.9,33.3,33.6; 5024.9,0.2494,31.9,32.9,33.3,33.6; 5029.9, + 0.2494,31.9,32.9,33.3,33.6; 5035,0.2494,31.9,32.9,33.3,33.6; 5039.8, + 0.2494,31.9,32.9,33.3,33.6; 5044.9,0.2494,31.9,32.9,33.3,33.6; 5049.5, + 0.2494,31.9,32.9,33.3,33.6; 5054.9,0.2494,31.9,32.9,33.3,33.6; 5059.9, + 0.2494,31.9,32.9,33.3,33.6; 5065,0.2494,31.9,32.9,33.3,33.6; 5070, + 0.2494,31.9,33,33.3,33.6; 5074.9,0.2494,31.9,33,33.3,33.6; 5079.8, + 0.2494,31.9,33,33.3,33.6; 5084.8,0.2494,31.9,33,33.3,33.6; 5089.8, + 0.2494,31.9,33,33.3,33.6; 5094.9,0.2494,32,33,33.3,33.6; 5099.7,0.2494, + 32,33,33.3,33.6; 5104.6,0.2494,32,33,33.4,33.6; 5109.6,0.2494,32,33, + 33.3,33.6; 5114.7,0.2494,32,33,33.4,33.6; 5119.8,0.2494,32,33,33.4,33.6; + 5124.8,0.2494,32,33,33.4,33.7; 5129.6,0.2494,32,33,33.4,33.6; 5134.5, + 0.2494,32,33,33.4,33.6; 5139.8,0.2494,32,33,33.4,33.7; 5144.8,0.2494,32, + 33,33.4,33.7; 5149.8,0.2494,32,33,33.4,33.7; 5154.8,0.2494,32,33,33.4, + 33.7; 5159.6,0.2494,32,33,33.4,33.7; 5164.7,0.2494,32,33,33.4,33.7; + 5169.8,0.2494,32,33.1,33.4,33.7; 5174.9,0.2494,32,33.1,33.4,33.7; + 5179.9,0.2494,32,33.1,33.4,33.7; 5184.8,0.2494,32.1,33.1,33.4,33.7; + 5189.9,0.2494,32.1,33.1,33.4,33.7; 5195.3,0.2494,32.1,33.1,33.4,33.7; + 5200.7,0.2494,32.1,33.1,33.4,33.7; 5205.9,0.2494,32.1,33.1,33.4,33.7; + 5211.1,0.2494,32.1,33.1,33.4,33.7; 5216.5,0.2494,32.1,33.1,33.5,33.7; + 5221.4,0.2494,32.1,33.1,33.4,33.7; 5226.6,0.2494,32.1,33.1,33.5,33.7; + 5231.7,0.2494,32.1,33.1,33.5,33.7; 5236.8,0.2494,32.1,33.1,33.5,33.7; + 5241.9,0.2494,32.1,33.1,33.5,33.7; 5247.2,0.2494,32.1,33.1,33.4,33.7; + 5252.2,0.2494,32.1,33.1,33.5,33.8; 5257.7,0.2494,32.1,33.2,33.5,33.7; + 5263,0.2494,32.1,33.2,33.5,33.8; 5268.7,0.2494,32.1,33.2,33.5,33.7; + 5274.1,0.2494,32.1,33.2,33.5,33.8; 5279.4,0.2494,32.1,33.2,33.5,33.8; + 5284.5,0.2494,32.2,33.2,33.5,33.8; 5289.5,0.2494,32.2,33.2,33.5,33.8; + 5294.4,0.2494,32.2,33.2,33.5,33.8; 5299.5,0.2494,32.2,33.2,33.5,33.8; + 5304.4,0.2494,32.2,33.2,33.5,33.8; 5309.2,0.2494,32.2,33.2,33.5,33.8; + 5314.5,0.2494,32.2,33.2,33.5,33.8; 5319.4,0.2494,32.2,33.2,33.5,33.8; + 5324.4,0.2494,32.2,33.2,33.5,33.8; 5329.4,0.2494,32.2,33.2,33.5,33.8; + 5334.5,0.2494,32.2,33.2,33.5,33.8; 5339.7,0.2494,32.2,33.2,33.5,33.8; + 5345.3,0.2494,32.2,33.3,33.5,33.8; 5350.4,0.2494,32.2,33.2,33.5,33.8; + 5355.8,0.2494,32.2,33.2,33.6,33.9; 5361.2,0.2494,32.2,33.3,33.6,33.8; + 5366.1,0.2494,32.2,33.3,33.6,33.8; 5371.3,0.2494,32.2,33.3,33.6,33.8; + 5376.7,0.2494,32.2,33.2,33.6,33.8; 5382.4,0.2494,32.2,33.3,33.6,33.8; + 5387.4,0.2494,32.2,33.3,33.6,33.9; 5392.4,0.2494,32.2,33.3,33.6,33.9; + 5397.9,0.2494,32.3,33.3,33.6,33.9; 5403.2,0.2494,32.3,33.3,33.6,33.8; + 5408.3,0.2494,32.3,33.3,33.6,33.9; 5413.2,0.2494,32.3,33.3,33.6,33.9; + 5418.2,0.2494,32.3,33.3,33.6,33.9; 5423.3,0.2494,32.3,33.3,33.6,33.9; + 5428.2,0.2494,32.3,33.3,33.6,33.9; 5433.4,0.2494,32.3,33.3,33.6,33.9; + 5438.2,0.2494,32.3,33.3,33.6,33.9; 5443.7,0.2494,32.3,33.3,33.6,33.9; + 5449.4,0.2494,32.3,33.3,33.6,33.9; 5454.5,0.2494,32.3,33.3,33.6,33.9; + 5459.9,0.2494,32.3,33.3,33.6,33.9; 5465.2,0.2494,32.3,33.3,33.7,33.9; + 5470.6,0.2494,32.3,33.4,33.7,33.9; 5476,0.2494,32.3,33.4,33.7,33.9; + 5481.5,0.2494,32.3,33.4,33.7,33.9; 5486.5,0.2494,32.3,33.4,33.7,33.9; + 5491.9,0.2494,32.3,33.4,33.7,34; 5497.4,0.2494,32.3,33.4,33.7,34; + 5502.6,0.2494,32.3,33.4,33.7,33.9; 5507.8,0.2494,32.3,33.4,33.7,34; + 5513,0.2494,32.3,33.4,33.7,34; 5518.4,0.2494,32.4,33.4,33.7,34; 5523.5, + 0.2494,32.4,33.4,33.7,34; 5528.7,0.2494,32.4,33.4,33.7,33.9; 5534, + 0.2494,32.4,33.4,33.7,34; 5539.5,0.2494,32.4,33.4,33.7,34; 5544.7, + 0.2494,32.4,33.4,33.7,34; 5549.9,0.2494,32.4,33.4,33.7,34; 5555.3, + 0.2494,32.4,33.4,33.7,34; 5560.6,0.2494,32.4,33.4,33.7,34; 5565.7, + 0.2494,32.4,33.4,33.7,34; 5570.9,0.2494,32.4,33.4,33.7,34; 5576.4, + 0.2494,32.4,33.4,33.7,34; 5581.8,0.2494,32.4,33.4,33.7,34; 5586.9, + 0.2494,32.4,33.5,33.8,34; 5592.9,0.2494,32.4,33.5,33.7,34; 5598.6, + 0.2494,32.4,33.5,33.7,34; 5603.7,0.2494,32.4,33.5,33.8,34.1; 5608.9, + 0.2494,32.4,33.5,33.7,34; 5614.6,0.2494,32.4,33.5,33.8,34; 5619.7, + 0.2494,32.4,33.5,33.8,34.1; 5625.2,0.2494,32.4,33.5,33.8,34.1; 5630.6, + 0.2494,32.4,33.5,33.8,34.1; 5635.8,0.2494,32.5,33.5,33.8,34; 5641, + 0.2494,32.5,33.5,33.8,34.1; 5646.1,0.2494,32.5,33.5,33.8,34.1; 5651.6, + 0.2494,32.5,33.5,33.8,34.1; 5656.8,0.2494,32.5,33.5,33.8,34.1; 5661.8, + 0.2494,32.5,33.5,33.8,34.1; 5666.9,0.2494,32.5,33.5,33.8,34.1; 5672.4, + 0.2494,32.5,33.5,33.8,34.1; 5678,0.2494,32.5,33.5,33.8,34.1; 5683.5, + 0.2494,32.5,33.5,33.8,34.1; 5689.1,0.2494,32.5,33.5,33.8,34.1; 5694.3, + 0.2494,32.5,33.6,33.8,34.1; 5700.2,0.2494,32.5,33.6,33.8,34.1; 5705.5, + 0.2494,32.5,33.6,33.8,34.1; 5711,0.2494,32.5,33.6,33.8,34.1; 5716.2, + 0.2494,32.5,33.6,33.8,34.1; 5721.2,0.2494,32.5,33.6,33.8,34.1; 5726.5, + 0.2494,32.5,33.6,33.8,34.1; 5732.1,0.2494,32.5,33.6,33.8,34.1; 5736.9, + 0.2494,32.5,33.6,33.9,34.1; 5742.1,0.2494,32.5,33.6,33.9,34.1; 5747, + 0.2494,32.5,33.6,33.8,34.1; 5752.2,0.2494,32.5,33.6,33.9,34.1; 5757.6, + 0.2494,32.5,33.6,33.9,34.1; 5763.2,0.2494,32.6,33.6,33.9,34.2; 5768.5, + 0.2494,32.5,33.6,33.9,34.2; 5774,0.2494,32.6,33.6,33.9,34.2; 5779.5, + 0.2494,32.6,33.6,33.9,34.2; 5785.3,0.2494,32.6,33.6,33.9,34.2; 5790.8, + 0.2494,32.6,33.6,33.9,34.2; 5796.1,0.2494,32.6,33.6,33.9,34.2; 5801.5, + 0.2494,32.6,33.6,33.9,34.2; 5806.9,0.2494,32.6,33.6,33.9,34.2; 5812.3, + 0.2494,32.6,33.6,33.9,34.2; 5817.6,0.2494,32.6,33.6,33.9,34.2; 5823.3, + 0.2494,32.6,33.7,33.9,34.2; 5828.6,0.2494,32.6,33.7,33.9,34.2; 5834.2, + 0.2494,32.6,33.7,33.9,34.2; 5839.5,0.2494,32.6,33.7,33.9,34.2; 5845.1, + 0.2494,32.6,33.7,33.9,34.2; 5850.5,0.2494,32.6,33.7,33.9,34.2; 5856.2, + 0.2494,32.6,33.7,33.9,34.2; 5861.4,0.2494,32.6,33.7,33.9,34.2; 5866.6, + 0.2494,32.6,33.7,33.9,34.2; 5872.1,0.2494,32.6,33.7,34,34.2; 5877.4, + 0.2494,32.6,33.7,34,34.2; 5882.7,0.2494,32.6,33.7,34,34.2; 5888.3, + 0.2494,32.6,33.7,34,34.2; 5893.6,0.2494,32.6,33.7,34,34.3; 5899.2, + 0.2494,32.7,33.7,34,34.2; 5904.4,0.2494,32.6,33.7,34,34.3; 5910.5, + 0.2494,32.7,33.7,34,34.2; 5916.3,0.2494,32.7,33.7,34,34.3; 5921.9, + 0.2494,32.7,33.7,34,34.3; 5927.5,0.2494,32.7,33.7,34,34.3; 5933.4, + 0.2494,32.7,33.7,34,34.3; 5938.8,0.2494,32.7,33.7,34,34.3; 5944.6, + 0.2494,32.7,33.7,34,34.3; 5950.5,0.2494,32.7,33.8,34,34.3; 5956,0.2494, + 32.7,33.8,34,34.3; 5961.6,0.2494,32.7,33.8,34,34.3; 5966.9,0.2494,32.7, + 33.8,34,34.3; 5972.1,0.2494,32.7,33.8,34,34.3; 5977.9,0.2494,32.7,33.8, + 34,34.3; 5983.2,0.2494,32.7,33.8,34,34.3; 5989.3,0.2494,32.7,33.8,34, + 34.3; 5995.2,0.2494,32.7,33.8,34,34.3; 6000.5,0.2494,32.7,33.8,34,34.3; + 6006.4,0.2494,32.7,33.8,34,34.3; 6012.2,0.2494,32.7,33.8,34,34.3; + 6017.8,0.2494,32.7,33.8,34.1,34.3; 6023.7,0.2494,32.7,33.8,34.1,34.3; + 6029.4,0.2494,32.7,33.8,34.1,34.3; 6035.3,0.2494,32.7,33.8,34,34.3; + 6041.1,0.2494,32.8,33.8,34.1,34.3; 6046.6,0.2494,32.8,33.8,34.1,34.3; + 6054.4,0.2494,32.8,33.8,34.1,34.3; 6060,0.2494,32.8,33.8,34.1,34.3; + 6065.5,0.2494,32.8,33.8,34.1,34.3; 6071.5,0.2494,32.8,33.8,34.1,34.4; + 6077.2,0.2494,32.8,33.9,34.1,34.4; 6083.7,0.2494,32.8,33.9,34.1,34.4; + 6089.4,0.2494,32.8,33.9,34.1,34.4; 6095.5,0.2494,32.8,33.9,34.1,34.4; + 6101.2,0.2494,32.8,33.9,34.1,34.4; 6107.5,0.2494,32.8,33.9,34.1,34.4; + 6113.2,0.2494,32.8,33.9,34.1,34.4; 6119.1,0.2494,32.8,33.9,34.1,34.4; + 6125.4,0.2494,32.8,33.9,34.1,34.4; 6131,0.2494,32.8,33.9,34.1,34.4; + 6136.1,0.2494,32.8,33.9,34.1,34.4; 6142.6,0.2494,32.8,33.9,34.1,34.4; + 6148.3,0.2494,32.8,33.9,34.1,34.4; 6154.2,0.2494,32.8,33.9,34.1,34.4; + 6160.2,0.2494,32.8,33.9,34.1,34.4; 6166,0.2494,32.8,33.9,34.1,34.4; + 6171.7,0.2494,32.8,33.9,34.1,34.4; 6177.5,0.2494,32.8,33.9,34.1,34.4; + 6183.3,0.2494,32.9,33.9,34.2,34.4; 6189.4,0.2494,32.8,33.9,34.1,34.4; + 6195.4,0.2494,32.9,33.9,34.1,34.4; 6200.9,0.2494,32.9,34,34.2,34.4; + 6206.4,0.2494,32.9,34,34.2,34.4; 6212.3,0.2494,32.9,33.9,34.2,34.4; + 6218.5,0.2494,32.9,34,34.2,34.4; 6224,0.2494,32.9,34,34.2,34.5; 6230.1, + 0.2494,32.9,34,34.2,34.5; 6235.9,0.2494,32.9,34,34.2,34.5; 6242.7, + 0.2494,32.9,34,34.2,34.5; 6248.1,0.2494,32.9,34,34.2,34.5; 6254.2, + 0.2494,32.9,34,34.2,34.5; 6260.2,0.2494,32.9,34,34.2,34.5; 6266.4, + 0.2494,32.9,34,34.2,34.5; 6274.3,0.2494,32.9,34,34.2,34.5; 6280,0.2494, + 32.9,34,34.2,34.5; 6285.4,0.2494,32.9,34,34.2,34.5; 6291.4,0.2494,32.9, + 34,34.2,34.5; 6297.5,0.2494,32.9,34,34.2,34.5; 6303.5,0.2494,32.9,34, + 34.2,34.5; 6309.5,0.2494,32.9,34,34.2,34.5; 6315.6,0.2494,32.9,34,34.2, + 34.5; 6321.6,0.2494,33,34,34.2,34.5; 6327.7,0.2494,33,34,34.2,34.5; + 6333.6,0.2494,33,34,34.2,34.5; 6339.8,0.2494,33,34,34.2,34.5; 6345.8, + 0.2494,33,34,34.2,34.5; 6351.5,0.2494,33,34,34.2,34.5; 6357.3,0.2494,33, + 34,34.2,34.5; 6363,0.2494,33,34.1,34.2,34.5; 6368.8,0.2494,33,34.1,34.2, + 34.5; 6374.5,0.2494,33,34.1,34.2,34.5; 6380.8,0.2494,33,34.1,34.2,34.5; + 6386.6,0.2494,33,34.1,34.2,34.5; 6392.7,0.2494,33,34.1,34.2,34.5; + 6398.6,0.2494,33,34.1,34.2,34.5; 6404.7,0.2494,33,34.1,34.2,34.5; + 6410.6,0.2494,33,34.1,34.3,34.5; 6416.7,0.2494,33,34.1,34.2,34.5; + 6422.6,0.2494,33,34.1,34.3,34.6; 6428.7,0.2494,33,34.1,34.3,34.6; + 6434.6,0.2494,33,34.1,34.3,34.5; 6440.8,0.2494,33,34.1,34.3,34.5; + 6447.3,0.2494,33,34.1,34.3,34.6; 6453,0.2494,33,34.1,34.3,34.6; 6458.9, + 0.2494,33.1,34.1,34.3,34.6; 6464.8,0.2494,33,34.1,34.3,34.6; 6470.8, + 0.2494,33,34.1,34.3,34.6; 6477,0.2494,33.1,34.1,34.3,34.5; 6483.3, + 0.2494,33.1,34.1,34.3,34.5; 6488.7,0.2494,33.1,34.1,34.3,34.6; 6494.5, + 0.2494,33,34.1,34.3,34.6; 6500.1,0.2494,33.1,34.1,34.3,34.6; 6506.4, + 0.2494,33.1,34.1,34.3,34.6; 6512.2,0.2494,33.1,34.2,34.3,34.6; 6518.2, + 0.2494,33.1,34.1,34.3,34.6; 6524.2,0.2494,33.1,34.1,34.3,34.6; 6530.4, + 0.2494,33.1,34.2,34.3,34.6; 6536.2,0.2494,33.1,34.2,34.3,34.6; 6542.3, + 0.2494,33.1,34.2,34.3,34.6; 6548.2,0.2494,33.1,34.2,34.3,34.6; 6554.4, + 0.2494,33.1,34.2,34.3,34.6; 6560.4,0.2494,33.1,34.2,34.3,34.6; 6566.1, + 0.2494,33.1,34.2,34.3,34.6; 6572.2,0.2494,33.1,34.2,34.3,34.6; 6578.3, + 0.2494,33.1,34.2,34.3,34.6; 6584.1,0.2494,33.1,34.2,34.3,34.6; 6590.2, + 0.2494,33.1,34.2,34.3,34.6; 6596.2,0.2494,33.1,34.2,34.3,34.6; 6602.2, + 0.2494,33.1,34.2,34.3,34.6; 6608.3,0.2494,33.1,34.2,34.3,34.6; 6614.3, + 0.2494,33.1,34.2,34.3,34.6; 6620.4,0.2494,33.1,34.2,34.3,34.6; 6626.4, + 0.2494,33.1,34.2,34.4,34.7; 6632.4,0.2494,33.1,34.2,34.4,34.7; 6638.6, + 0.2494,33.1,34.2,34.4,34.7; 6644.9,0.2494,33.1,34.2,34.4,34.6; 6651.4, + 0.2494,33.1,34.2,34.4,34.7; 6657.1,0.2494,33.1,34.2,34.4,34.7; 6663.3, + 0.2494,33.1,34.2,34.4,34.7; 6669.3,0.2494,33.2,34.2,34.4,34.6; 6675.6, + 0.2494,33.1,34.2,34.4,34.6; 6681.6,0.2494,33.1,34.2,34.4,34.6; 6687.6, + 0.2494,33.1,34.2,34.4,34.7; 6693.3,0.2494,33.1,34.2,34.4,34.7; 6699.6, + 0.2494,33.1,34.3,34.4,34.7; 6705.4,0.2494,33.1,34.2,34.4,34.7; 6711.3, + 0.2494,33.2,34.3,34.4,34.7; 6717.7,0.2494,33.2,34.3,34.4,34.7; 6725.5, + 0.2494,33.2,34.3,34.4,34.7; 6731.1,0.2494,33.2,34.3,34.4,34.7; 6737.5, + 0.2494,33.2,34.3,34.4,34.7; 6743.1,0.2494,33.2,34.3,34.4,34.7; 6749.6, + 0.2494,33.2,34.3,34.4,34.7; 6755.5,0.2494,33.2,34.3,34.4,34.7; 6761.4, + 0.2494,33.2,34.3,34.4,34.6; 6767.5,0.2494,33.2,34.3,34.4,34.6; 6773.9, + 0.2494,33.2,34.3,34.4,34.6; 6780.1,0.2494,33.2,34.3,34.4,34.6; 6786.3, + 0.2494,33.2,34.3,34.3,34.5; 6792.3,0.2494,33.2,34.3,34.3,34.6; 6798.8, + 0.2494,33.2,34.3,34.3,34.5; 6804.6,0.2494,33.2,34.3,34.3,34.5; 6810.8, + 0.2494,33.2,34.3,34.3,34.5; 6816.7,0.2494,33.2,34.3,34.3,34.4; 6822.7, + 0.2494,33.2,34.3,34.2,34.4; 6828.5,0.2494,33.2,34.3,34.2,34.4; 6834.8, + 0.2494,33.2,34.3,34.2,34.4; 6840.8,0.2494,33.2,34.3,34.2,34.3; 6846.5, + 0.2494,33.2,34.3,34.2,34.3; 6852.8,0.2494,33.2,34.3,34.1,34.3; 6858.6, + 0.2494,33.2,34.3,34.1,34.2; 6864.4,0.2494,33.2,34.3,34.1,34.2; 6870.8, + 0.2494,33.2,34.3,34,34.2; 6876.6,0.2494,33.2,34.3,34,34.1; 6882.9, + 0.2494,33.2,34.3,34,34.1; 6888.7,0.2494,33.2,34.3,34,34.1; 6894.7, + 0.2494,33.2,34.3,34,34; 6901.1,0.2494,33.2,34.3,33.9,34; 6908,0.2494, + 33.2,34.3,33.9,34; 6913.7,0.2494,33.2,34.3,33.8,33.9; 6919.9,0.2494, + 33.2,34.3,33.8,33.9; 6926.3,0.2494,33.2,34.3,33.8,33.9; 6932.6,0.2494, + 33.3,34.3,33.7,33.8; 6938.6,0.2494,33.3,34.3,33.7,33.8; 6944.5,0.2494, + 33.3,34.4,33.7,33.8; 6950.8,0.2494,33.3,34.3,33.6,33.7; 6957.1,0.2494, + 33.3,34.4,33.6,33.7; 6963.9,0.2494,33.3,34.4,33.6,33.6; 6970.7,0.2494, + 33.3,34.4,33.5,33.6; 6976.7,0.2494,33.3,34.4,33.5,33.6; 6982.4,0.2494, + 33.3,34.4,33.5,33.5; 6988.8,0.2494,33.3,34.4,33.4,33.5; 6995.7,0.2494, + 33.3,34.4,33.4,33.4; 7002.2,0.2494,33.3,34.4,33.3,33.4; 7008.3,0.2494, + 33.3,34.4,33.3,33.4; 7014.2,0.2494,33.3,34.4,33.3,33.3; 7020.4,0.2494, + 33.3,34.4,33.2,33.3; 7026.7,0.2494,33.3,34.4,33.2,33.3; 7033.4,0.2494, + 33.3,34.4,33.2,33.2; 7039.3,0.2494,33.3,34.4,33.1,33.2; 7044.9,0.2494, + 33.3,34.4,33.1,33.1; 7051.1,0.2494,33.3,34.4,33.1,33.1; 7057.3,0.2494, + 33.3,34.4,33,33.1; 7063.2,0.2494,33.3,34.4,33,33; 7069.3,0.2494,33.3, + 34.4,33,33; 7077.1,0.2494,33.3,34.4,32.9,33; 7083.2,0.2494,33.3,34.4, + 32.9,32.9; 7089.4,0.2494,33.3,34.4,32.9,32.9; 7096.2,0.2494,33.3,34.4, + 32.8,32.9; 7102.5,0.2494,33.3,34.4,32.8,32.8; 7109.2,0.2494,33.3,34.4, + 32.7,32.8; 7115.1,0.2494,33.3,34.4,32.7,32.7; 7121.4,0.2494,33.3,34.4, + 32.7,32.7; 7128.1,0.2494,33.3,34.4,32.6,32.7; 7134.6,0.2494,33.3,34.4, + 32.6,32.6; 7141.5,0.2494,33.3,34.4,32.6,32.6; 7148.1,0.2494,33.3,34.4, + 32.5,32.5; 7154.4,0.2494,33.3,34.4,32.5,32.5; 7161,0.2494,33.3,34.4, + 32.4,32.5; 7167.3,0.2494,33.3,34.4,32.4,32.4; 7174.2,0.2494,33.3,34.4, + 32.4,32.4; 7180.9,0.2494,33.3,34.3,32.3,32.4; 7187.1,0.2494,33.3,34.3, + 32.3,32.3; 7193.3,0.2494,33.3,34.3,32.2,32.3; 7200,0.2494,33.3,34.3, + 32.2,32.2; 7206.4,0.2494,33.3,34.3,32.2,32.2; 7213,0.2494,33.2,34.3, + 32.1,32.2; 7219.9,0.2494,33.2,34.3,32.1,32.1; 7226.1,0.2494,33.2,34.2, + 32.1,32.1; 7232.8,0.2494,33.2,34.2,32,32; 7239.3,0.2494,33.2,34.2,32, + 31.9; 7245.8,0.2494,33.1,34.2,31.9,31.3; 7252.3,0.2494,33.1,34.2,31.7, + 31.6; 7258.6,0.2494,33.1,34.1,31.7,31.7; 7264.5,0.2494,33.1,34.1,31.7, + 31.8; 7271.1,0.2494,33.1,34.1,31.7,31.8; 7277.9,0.2494,33.1,34,31.6, + 31.7; 7284.5,0.2494,33,34,31.6,31.7; 7290.6,0.2494,33,34,31.6,31.7; + 7296.7,0.2494,33,34,31.6,31.7; 7303.1,0.2494,33,33.9,31.6,31.6; 7310.1, + 0.2494,32.9,33.9,31.5,31.6; 7316.6,0.2494,32.9,33.9,31.5,31.5; 7323.2, + 0.2494,32.9,33.8,31.5,31.5; 7329.7,0.2494,32.9,33.8,31.4,31.5; 7336, + 0.2494,32.8,33.8,31.4,31.4; 7342.9,0.2494,32.8,33.7,31.4,31.4; 7350, + 0.2494,32.8,33.7,31.3,31.4; 7357.1,0.2494,32.7,33.7,31.3,31.3; 7363.8, + 0.2494,32.7,33.6,31.3,31.3; 7370,0.2494,32.7,33.6,31.2,31.3; 7377.3, + 0.2494,32.6,33.6,31.2,31.2; 7383.7,0.2494,32.6,33.5,31.2,31.2; 7390.5, + 0.2494,32.6,33.5,31.1,31.2; 7396.6,0.2494,32.5,33.4,31.1,31.1; 7403.2, + 0.2494,32.5,33.4,31.1,31.1; 7409.8,0.2494,32.5,33.4,31,31.1; 7416.7, + 0.2494,32.5,33.3,31,31; 7424,0.2494,32.4,33.3,31,31; 7430.6,0.2494,32.4, + 33.3,30.9,31; 7437.5,0.2494,32.3,33.2,30.9,30.9; 7444.5,0.2494,32.3, + 33.2,30.9,30.9; 7450.9,0.2494,32.3,33.2,30.8,30.8; 7457.7,0.2494,32.2, + 33.1,30.8,30.8; 7464.5,0.2494,32.2,33.1,30.8,30.8; 7471.5,0.2494,32.2, + 33,30.7,30.7; 7478.6,0.2494,32.1,33,30.7,30.7; 7485.6,0.2494,32.1,33, + 30.6,30.7; 7492.7,0.2494,32,32.9,30.6,30.6; 7499.8,0.2494,32,32.9,30.6, + 30.6; 7506.3,0.2494,32,32.8,30.5,30.6; 7513.5,0.2494,32,32.8,30.5,30.5; + 7520.3,0.2494,31.9,32.7,30.5,30.5; 7526.6,0.2494,31.9,32.7,30.4,30.4; + 7533.8,0.2494,31.8,32.7,30.4,30.4; 7540.6,0.2494,31.8,32.6,30.4,30.4; + 7547.7,0.2494,31.8,32.6,30.3,30.3; 7554.2,0.2494,31.7,32.6,30.3,30.3; + 7560.8,0.2494,31.7,32.5,30.3,30.3; 7567.5,0.2494,31.7,32.5,30.2,30.2; + 7574.3,0.2494,31.6,32.4,30.2,30.2; 7581.6,0.2494,31.6,32.4,30.2,30.2; + 7588,0.2494,31.5,32.3,30.1,30.1; 7594.5,0.2494,31.5,32.3,30.1,30.1; + 7601.5,0.2494,31.5,32.2,30,30.1; 7608.1,0.2494,31.4,32.2,30,30; 7614.7, + 0.2494,31.4,32.2,30,30; 7621.1,0.2494,31.3,32.1,30,30; 7627.4,0.2494, + 31.3,32.1,29.9,29.9; 7634.4,0.2494,31.3,32,29.9,29.9; 7641.1,0.2494, + 31.2,32,29.9,29.9; 7648.1,0.2494,31.2,31.9,29.8,29.8; 7655.1,0.2494, + 31.2,31.9,29.8,29.8; 7661.9,0.2494,31.1,31.9,29.8,29.8; 7669,0.2494, + 31.1,31.8,29.7,29.7; 7676.2,0.2494,31.1,31.8,29.7,29.7; 7683.2,0.2494, + 31,31.8,29.6,29.6; 7690,0.2494,31,31.7,29.6,29.6; 7697,0.2494,30.9,31.7, + 29.6,29.6; 7703.7,0.2494,30.9,31.6,29.6,29.6; 7710.5,0.2494,30.8,31.6, + 29.5,29.5; 7717.3,0.2494,30.8,31.6,29.5,29.5; 7723.7,0.2494,30.8,31.5, + 29.4,29.4; 7731.2,0.2494,30.7,31.5,29.4,29.4; 7738,0.2494,30.7,31.5, + 29.4,29.4; 7745.2,0.2494,30.7,31.4,29.3,29.3; 7752,0.2494,30.6,31.4, + 29.3,29.3; 7758.5,0.2494,30.6,31.4,29.3,29.3; 7766.4,0.2494,30.6,31.3, + 29.3,29.2; 7772.7,0.2494,30.5,31.3,29.2,29.2; 7779.6,0.2494,30.5,31.2, + 29.2,29.2; 7787.7,0.2494,30.5,31.2,29.1,29.1; 7794.6,0.2494,30.4,31.2, + 29.1,29.1; 7801.8,0.2494,30.4,31.1,29.1,29.1; 7808.5,0.2494,30.4,31.1, + 29,29; 7815.7,0.2494,30.3,31.1,29,29; 7823.2,0.2494,30.3,31,29,29; + 7830.4,0.2494,30.3,31,28.9,28.9; 7837.9,0.2494,30.2,30.9,28.9,28.9; + 7845.1,0.2494,30.2,30.9,28.9,28.9; 7851.7,0.2494,30.2,30.9,28.8,28.8; + 7858.6,0.2494,30.1,30.8,28.8,28.8; 7865.9,0.2494,30.1,30.8,28.8,28.8; + 7873,0.2494,30.1,30.8,28.7,28.7; 7880.1,0.2494,30,30.7,28.7,28.7; 7888, + 0.2494,30,30.7,28.7,28.7; 7894.9,0.2494,29.9,30.6,28.6,28.6; 7901.7, + 0.2494,29.9,30.6,28.6,28.6; 7908.2,0.2494,29.9,30.6,28.6,28.6; 7916, + 0.2494,29.9,30.5,28.6,28.5; 7922.9,0.2494,29.8,30.5,28.5,28.5; 7929.5, + 0.2494,29.8,30.5,28.5,28.5; 7937,0.2494,29.8,30.4,28.4,28.4; 7943.8, + 0.2494,29.7,30.4,28.4,28.4; 7950.4,0.2494,29.7,30.4,28.4,28.4; 7957, + 0.2494,29.6,30.3,28.4,28.3; 7965.1,0.2494,29.6,30.3,28.3,28.3; 7972.1, + 0.2494,29.6,30.2,28.3,28.3; 7979.3,0.2494,29.6,30.2,28.3,28.2; 7987, + 0.2494,29.5,30.2,28.2,28.2; 7994.3,0.2494,29.5,30.1,28.2,28.2; 8001.3, + 0.2494,29.4,30.1,28.1,28.1; 8008.2,0.2494,29.4,30.1,28.1,28.1; 8015.1, + 0.2494,29.4,30,28.1,28.1; 8022.2,0.2494,29.3,30,28.1,28.1; 8028.8, + 0.2494,29.3,29.9,28,28; 8035.3,0.2494,29.3,29.9,28,28; 8041.9,0.2494, + 29.2,29.9,28,27.9; 8049.3,0.2494,29.2,29.9,28,27.9; 8056.6,0.2494,29.2, + 29.8,27.9,27.9; 8063.1,0.2494,29.2,29.8,27.9,27.9; 8070.1,0.2494,29.1, + 29.7,27.9,27.8; 8076.5,0.2494,29.1,29.7,27.8,27.8; 8082.9,0.2494,29.1, + 29.7,27.8,27.8; 8089.6,0.2494,29,29.7,27.8,27.8; 8096.7,0.2494,29,29.6, + 27.8,27.7; 8103.3,0.2494,29,29.6,27.7,27.7; 8110.5,0.2494,28.9,29.6, + 27.7,27.6; 8116.8,0.2494,28.9,29.5,27.7,27.6; 8123.3,0.2494,28.9,29.5, + 27.6,27.6; 8131.3,0.2494,28.8,29.5,27.6,27.6; 8137.7,0.2494,28.8,29.4, + 27.6,27.5; 8144.6,0.2494,28.8,29.4,27.5,27.5; 8151.6,0.2494,28.8,29.4, + 27.5,27.5; 8158.3,0.2494,28.7,29.3,27.5,27.5; 8165.4,0.2494,28.7,29.3, + 27.5,27.4; 8172.6,0.2494,28.7,29.3,27.4,27.4; 8179,0.2494,28.7,29.2, + 27.4,27.4; 8185.6,0.2494,28.6,29.2,27.4,27.4; 8192.9,0.2494,28.6,29.2, + 27.4,27.3; 8200.7,0.2494,28.6,29.1,27.3,27.3; 8207,0.2494,28.5,29.1, + 27.3,27.3; 8214.3,0.2494,28.5,29.1,27.3,27.2; 8221.4,0.2494,28.5,29, + 27.2,27.2; 8228.8,0.2494,28.4,29,27.2,27.2; 8235.8,0.2494,28.4,29,27.2, + 27.2; 8242.6,0.2494,28.4,29,27.2,27.1; 8249.8,0.2494,28.3,28.9,27.1, + 27.1; 8256.9,0.2494,28.3,28.9,27.1,27.1; 8263.6,0.2494,28.3,28.9,27.1, + 27; 8270.9,0.2494,28.3,28.8,27,27; 8277.8,0.2494,28.3,28.8,27,27; + 8284.2,0.2494,28.2,28.8,27,27; 8290.5,0.2494,28.2,28.7,27,26.9; 8298.1, + 0.2494,28.2,28.7,26.9,26.9; 8305.1,0.2494,28.1,28.7,26.9,26.9; 8312, + 0.2494,28.1,28.6,26.9,26.8; 8318.5,0.2494,28.1,28.6,26.9,26.8; 8325.3, + 0.2494,28,28.6,26.8,26.8; 8332.5,0.2494,28,28.6,26.8,26.8; 8340,0.2494, + 28,28.5,26.8,26.8; 8347.3,0.2494,27.9,28.5,26.8,26.7; 8354.7,0.2494, + 27.9,28.5,26.7,26.7; 8362.2,0.2494,27.9,28.4,26.7,26.7; 8369.5,0.2494, + 27.8,28.4,26.7,26.6; 8376.8,0.2494,27.8,28.4,26.6,26.6; 8383.9,0.2494, + 27.8,28.3,26.6,26.6; 8390.9,0.2494,27.8,28.3,26.6,26.5; 8397.7,0.2494, + 27.8,28.3,26.6,26.5; 8404.1,0.2494,27.7,28.3,26.5,26.5; 8410.9,0.2494, + 27.7,28.2,26.5,26.5; 8417.9,0.2494,27.7,28.2,26.5,26.5; 8425.3,0.2494, + 27.6,28.2,26.5,26.4; 8432.8,0.2494,27.6,28.1,26.4,26.4; 8440.1,0.2494, + 27.6,28.1,26.4,26.4; 8447.4,0.2494,27.5,28.1,26.4,26.3; 8454.8,0.2494, + 27.5,28,26.4,26.3; 8462.5,0.2494,27.5,28,26.3,26.3; 8469.1,0.2494,27.5, + 28,26.3,26.3; 8476,0.2494,27.4,27.9,26.3,26.2; 8482.3,0.2494,27.4,27.9, + 26.3,26.2; 8489.6,0.2494,27.4,27.9,26.2,26.2; 8496.9,0.2494,27.3,27.8, + 26.2,26.2; 8504,0.2494,27.3,27.8,26.2,26.1; 8511.5,0.2494,27.3,27.8, + 26.2,26.1; 8518.8,0.2494,27.3,27.8,26.1,26.1; 8526.2,0.2494,27.2,27.7, + 26.1,26.1; 8533.6,0.2494,27.2,27.7,26.1,26.1; 8541.1,0.2494,27.2,27.7, + 26.1,26; 8548.6,0.2494,27.1,27.6,26,26; 8555.2,0.2494,27.1,27.6,26,25.9; + 8561.9,0.2494,27.1,27.6,26,25.9; 8569.5,0.2494,27.1,27.5,25.9,25.9; + 8576.4,0.2494,27,27.5,25.9,25.9; 8584.2,0.2494,27,27.5,25.9,25.9; + 8591.1,0.2494,27,27.5,25.9,25.8; 8598.9,0.2494,27,27.4,25.8,25.8; + 8605.9,0.2494,26.9,27.4,25.8,25.8; 8613.6,0.2494,26.9,27.4,25.8,25.8; + 8620.7,0.2494,26.8,27.3,25.8,25.7; 8628.3,0.2494,26.8,27.3,25.7,25.7; + 8635.8,0.2494,26.8,27.3,25.7,25.7; 8643.9,0.2494,26.8,27.3,25.7,25.7; + 8651.4,0.2494,26.7,27.2,25.7,25.6; 8658,0.2494,26.7,27.2,25.6,25.6; + 8665.8,0.2494,26.7,27.2,25.6,25.6; 8672.7,0.2494,26.7,27.1,25.6,25.5; + 8680.6,0.2494,26.7,27.1,25.6,25.5; 8687.8,0.2494,26.6,27.1,25.5,25.5; + 8694.6,0.2494,26.6,27,25.5,25.5; 8701.5,0.2494,26.6,27,25.5,25.4; + 8708.6,0.2494,26.6,27,25.5,25.4; 8716.2,0.2494,26.5,27,25.4,25.4; + 8723.3,0.2494,26.5,26.9,25.4,25.4; 8730.2,0.2494,26.5,26.9,25.4,25.4; + 8737.3,0.2494,26.4,26.9,25.4,25.3; 8744.3,0.2494,26.4,26.9,25.3,25.3; + 8751.1,0.2494,26.4,26.8,25.3,25.3; 8758.3,0.2494,26.4,26.8,25.3,25.2; + 8765.5,0.2494,26.3,26.8,25.3,25.2; 8773.6,0.2494,26.3,26.7,25.2,25.2; + 8780.7,0.2494,26.3,26.7,25.2,25.2; 8788.5,0.2494,26.3,26.7,25.2,25.1; + 8795.6,0.2494,26.2,26.7,25.2,25.1; 8802.6,0.2494,26.2,26.6,25.1,25.1; + 8809.8,0.2494,26.2,26.6,25.1,25.1; 8817.5,0.2494,26.2,26.6,25.1,25.1; + 8824.9,0.2494,26.1,26.6,25.1,25; 8832.1,0.2494,26.1,26.5,25.1,25; + 8839.3,0.2494,26.1,26.5,25,25; 8846.5,0.2494,26.1,26.5,25,25; 8854.9, + 0.2494,26,26.4,25,24.9; 8862.4,0.2494,26,26.4,24.9,24.9; 8870.1,0.2494, + 26,26.4,24.9,24.9; 8877,0.2494,25.9,26.4,24.9,24.9; 8884.9,0.2494,25.9, + 26.3,24.9,24.8; 8892.9,0.2494,25.9,26.3,24.9,24.8; 8901.2,0.2494,25.9, + 26.3,24.8,24.8; 8909.2,0.2494,25.8,26.2,24.8,24.7; 8917.2,0.2494,25.8, + 26.2,24.8,24.7; 8925,0.2494,25.8,26.2,24.7,24.7; 8932.4,0.2494,25.7, + 26.1,24.7,24.6; 8940.2,0.2494,25.7,26.1,24.7,24.6; 8947.2,0.2494,25.7, + 26.1,24.7,24.6; 8954.4,0.2494,25.7,26.1,24.6,24.6; 8961.7,0.2494,25.7, + 26,24.6,24.6; 8969.7,0.2494,25.6,26,24.6,24.5; 8977.5,0.2494,25.6,26, + 24.6,24.5; 8984.8,0.2494,25.6,26,24.6,24.5; 8992.5,0.2494,25.5,25.9, + 24.5,24.5; 8999.7,0.2494,25.5,25.9,24.5,24.5; 9006.9,0.2494,25.5,25.9, + 24.5,24.4; 9014.1,0.2494,25.5,25.8,24.5,24.4; 9021.1,0.2494,25.5,25.8, + 24.4,24.4; 9028.5,0.2494,25.4,25.8,24.4,24.3; 9036.1,0.2494,25.4,25.8, + 24.4,24.3; 9043,0.2494,25.4,25.7,24.4,24.3; 9050.1,0.2494,25.3,25.7, + 24.3,24.3; 9057.1,0.2494,25.3,25.7,24.3,24.3; 9064.3,0.2494,25.3,25.7, + 24.3,24.2; 9071.6,0.2494,25.3,25.6,24.3,24.2; 9079,0.2494,25.2,25.6, + 24.2,24.2; 9087.1,0.2494,25.2,25.6,24.2,24.2; 9095.2,0.2494,25.2,25.6, + 24.2,24.1; 9103.1,0.2494,25.2,25.5,24.2,24.1; 9111,0.2494,25.2,25.5, + 24.1,24.1; 9118.2,0.2494,25.1,25.5,24.1,24.1; 9126.2,0.2494,25.1,25.5, + 24.1,24; 9133.1,0.2494,25.1,25.4,24.1,24; 9140.3,0.2494,25,25.4,24.1,24; + 9148.8,0.2494,25,25.4,24,24; 9156.3,0.2494,25,25.3,24,23.9; 9163.4, + 0.2494,25,25.3,24,23.9; 9171,0.2494,24.9,25.3,23.9,23.9; 9178.4,0.2494, + 24.9,25.3,23.9,23.9; 9185.7,0.2494,24.9,25.2,23.9,23.8; 9193.1,0.2494, + 24.9,25.2,23.9,23.8; 9201.7,0.2494,24.9,25.2,23.9,23.8; 9208.6,0.2494, + 24.8,25.2,23.8,23.8; 9215.7,0.2494,24.8,25.1,23.8,23.8; 9223.9,0.2494, + 24.8,25.1,23.8,23.7; 9231.7,0.2494,24.8,25.1,23.8,23.7; 9240.2,0.2494, + 24.7,25.1,23.7,23.7; 9247.6,0.2494,24.7,25,23.7,23.7; 9254.7,0.2494, + 24.7,25,23.7,23.6; 9262,0.2494,24.7,25,23.7,23.6; 9270,0.2494,24.6,25, + 23.7,23.6; 9278.2,0.2494,24.6,24.9,23.6,23.6; 9286.2,0.2494,24.6,24.9, + 23.6,23.5; 9294,0.2494,24.6,24.9,23.6,23.5; 9301.1,0.2494,24.5,24.9, + 23.6,23.5; 9307.9,0.2494,24.5,24.8,23.5,23.5; 9314.9,0.2494,24.5,24.8, + 23.5,23.4; 9322.4,0.2494,24.5,24.8,23.5,23.4; 9330.5,0.2494,24.4,24.8, + 23.5,23.4; 9338.4,0.2494,24.4,24.7,23.4,23.4; 9345.1,0.2494,24.4,24.7, + 23.4,23.4; 9352.3,0.2494,24.4,24.7,23.4,23.3; 9359.7,0.2494,24.4,24.7, + 23.4,23.3; 9367.8,0.2494,24.3,24.6,23.4,23.3; 9375.9,0.2494,24.3,24.6, + 23.3,23.3; 9383.5,0.2494,24.3,24.6,23.3,23.2; 9390.2,0.2494,24.3,24.6, + 23.3,23.2; 9398.3,0.2494,24.2,24.5,23.3,23.2; 9406.3,0.2494,24.2,24.5, + 23.2,23.2; 9414.5,0.2494,24.2,24.5,23.2,23.1; 9422.6,0.2494,24.2,24.5, + 23.2,23.1; 9430.6,0.2494,24.1,24.4,23.2,23.1; 9438.9,0.2494,24.1,24.4, + 23.2,23.1; 9446.7,0.2494,24.1,24.4,23.1,23; 9454.8,0.2494,24.1,24.4, + 23.1,23; 9462.9,0.2494,24.1,24.3,23.1,23; 9471.1,0.2494,24,24.3,23.1,23; + 9478.9,0.2494,24,24.3,23,22.9; 9487.2,0.2494,24,24.2,23,22.9; 9495.3, + 0.2494,24,24.2,23,22.9; 9503.1,0.2494,23.9,24.2,23,22.9; 9510.3,0.2494, + 23.9,24.2,22.9,22.9; 9518.1,0.2494,23.9,24.1,22.9,22.8; 9525.4,0.2494, + 23.9,24.1,22.9,22.8; 9532.8,0.2494,23.9,24.1,22.9,22.8; 9540.8,0.2494, + 23.8,24.1,22.9,22.8; 9549,0.2494,23.8,24.1,22.8,22.7; 9557.1,0.2494, + 23.8,24,22.8,22.7; 9565.2,0.2494,23.7,24,22.8,22.7; 9572.9,0.2494,23.7, + 24,22.8,22.7; 9580.2,0.2494,23.7,24,22.7,22.6; 9587.2,0.2494,23.7,23.9, + 22.7,22.6; 9594.4,0.2494,23.7,23.9,22.7,22.6; 9601.7,0.2494,23.6,23.9, + 22.7,22.6; 9609.5,0.2494,23.6,23.9,22.7,22.6; 9616.9,0.2494,23.6,23.8, + 22.6,22.6; 9625.4,0.2494,23.6,23.8,22.6,22.5; 9632.6,0.2494,23.6,23.8, + 22.6,22.5; 9639.7,0.2494,23.5,23.8,22.6,22.5; 9647.2,0.2494,23.5,23.7, + 22.5,22.5; 9655.2,0.2494,23.5,23.7,22.5,22.4; 9663.2,0.2494,23.5,23.7, + 22.5,22.4; 9671.4,0.2494,23.4,23.7,22.5,22.4; 9679.2,0.2494,23.4,23.7, + 22.5,22.4; 9686.5,0.2494,23.4,23.6,22.4,22.4; 9694.6,0.2494,23.4,23.6, + 22.4,22.3; 9702.6,0.2494,23.4,23.6,22.4,22.3; 9710.4,0.2494,23.3,23.6, + 22.4,22.3; 9717.5,0.2494,23.3,23.5,22.4,22.3; 9724.8,0.2494,23.3,23.5, + 22.3,22.3; 9733.2,0.2494,23.3,23.5,22.3,22.2; 9740.7,0.2494,23.3,23.5, + 22.3,22.2; 9747.9,0.2494,23.2,23.4,22.3,22.2; 9755.3,0.2494,23.2,23.4, + 22.3,22.2; 9762.7,0.2494,23.2,23.4,22.2,22.2; 9770.8,0.2494,23.2,23.4, + 22.2,22.1; 9779.3,0.2494,23.1,23.3,22.2,22.1; 9786.7,0.2494,23.1,23.3, + 22.2,22.1; 9794.4,0.2494,23.1,23.3,22.2,22.1; 9802.6,0.2494,23.1,23.3, + 22.1,22; 9810.2,0.2494,23.1,23.3,22.1,22; 9818.7,0.2494,23,23.2,22.1,22; + 9826.4,0.2494,23,23.2,22.1,22; 9833.8,0.2494,23,23.2,22.1,22; 9841, + 0.2494,23,23.2,22,22; 9848.3,0.2494,22.9,23.1,22,21.9; 9855.8,0.2494, + 22.9,23.1,22,21.9; 9864.1,0.2494,22.9,23.1,22,21.9; 9872.3,0.2494,22.9, + 23.1,22,21.9; 9880.5,0.2494,22.9,23,21.9,21.8; 9888.2,0.2494,22.8,23, + 21.9,21.8; 9896.3,0.2494,22.8,23,21.9,21.8; 9903.8,0.2494,22.8,23,21.9, + 21.8; 9911.2,0.2494,22.8,23,21.9,21.8; 9919.7,0.2494,22.8,22.9,21.8, + 21.7; 9927,0.2494,22.7,22.9,21.8,21.7; 9934.8,0.2494,22.7,22.9,21.8, + 21.7; 9942.5,0.2494,22.7,22.9,21.8,21.7; 9949.7,0.2494,22.7,22.9,21.8, + 21.7; 9956.9,0.2494,22.7,22.8,21.7,21.6; 9964.6,0.2494,22.6,22.8,21.7, + 21.6; 9971.8,0.2494,22.6,22.8,21.7,21.6; 9979,0.2494,22.6,22.8,21.7, + 21.6; 9986.4,0.2494,22.6,22.7,21.7,21.6; 9994.5,0.2494,22.6,22.7,21.6, + 21.5; 10002.6,0.2494,22.5,22.7,21.6,21.5; 10011.1,0.2494,22.5,22.7,21.6, + 21.5; 10018.7,0.2494,22.5,22.7,21.6,21.5; 10027.2,0.2494,22.5,22.6,21.6, + 21.5; 10034.8,0.2494,22.4,22.6,21.5,21.5; 10043,0.2494,22.4,22.6,21.5, + 21.4; 10050.9,0.2494,22.4,22.6,21.5,21.4; 10059.2,0.2494,22.4,22.5,21.5, + 21.4; 10067.5,0.2494,22.4,22.5,21.5,21.4; 10075.4,0.2494,22.4,22.5,21.5, + 21.3; 10082.4,0.2494,22.3,22.5,21.4,21.3; 10091,0.2494,22.3,22.4,21.4, + 21.3; 10098.8,0.2494,22.3,22.4,21.4,21.3; 10106.2,0.2494,22.3,22.4,21.4, + 21.3; 10113.5,0.2494,22.3,22.4,21.4,21.3; 10121.8,0.2494,22.2,22.4,21.3, + 21.2; 10128.8,0.2494,22.2,22.4,21.3,21.2; 10136.3,0.2494,22.2,22.3,21.3, + 21.2; 10145.1,0.2494,22.2,22.3,21.3,21.2; 10152.7,0.2494,22.1,22.3,21.2, + 21.2; 10161.2,0.2494,22.1,22.3,21.2,21.1; 10169,0.2494,22.1,22.2,21.2, + 21.1; 10176.5,0.2494,22.1,22.2,21.2,21.1]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg160104_2; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160118_1.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160118_1.mo new file mode 100644 index 0000000000..15d2914920 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/PipeDataULg160118_1.mo @@ -0,0 +1,86 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +record PipeDataULg160118_1 + "Experimental data from ULg's pipe test bench from January 18, 2016" + extends AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg( + final n=5, + T_start_out=18.2, + T_start_in=17.9, + m_flowIni=2.269, + data=[0,2.269,18.6,18.2,17.8,17.9; 3.1,2.269,18.6,18.2,17.8,17.9; 6.1,2.269, + 18.6,18.2,17.8,20.5; 9.1,2.269,18.6,18.2,19.1,25.7; 13.8,2.269,18.6, + 18.2,22.8,30.6; 16.8,2.269,18.6,18.2,25.3,32.7; 19.8,2.269,18.5,18.1, + 27.3,34.2; 22.9,2.269,18.5,18.2,29.1,35.2; 25.9,2.269,18.4,18.1,30.5,36; + 28.8,2.269,18.4,18.1,31.6,36.6; 31.7,2.269,18.4,18.1,32.6,37; 36.2, + 2.269,18.3,18,33.6,37.5; 39,2.269,18.3,17.9,34.2,37.8; 42,2.269,18.2, + 17.9,34.8,38; 45,2.269,18.2,18.3,35.2,38.1; 47.9,2.269,18.5,19.5,35.5, + 38.3; 51,2.269,19.4,21.1,35.9,38.4; 53.9,2.269,20.7,22.9,36.1,38.5; + 56.9,2.269,22.2,24.6,36.4,38.5; 59.8,2.269,23.7,26.3,36.5,38.6; 62.8, + 2.269,25.4,28,36.7,38.6; 65.8,2.269,26.9,29.5,36.9,38.7; 68.7,2.269, + 28.3,30.8,37,38.7; 71.6,2.269,29.6,32,37.1,38.7; 74.5,2.269,30.7,33, + 37.2,38.7; 77.5,2.269,31.7,33.9,37.3,38.7; 80.6,2.269,32.6,34.7,37.3, + 38.7; 83.8,2.269,33.4,35.4,37.4,38.7; 86.7,2.269,33.9,36,37.5,38.8; + 89.7,2.269,34.4,36.5,37.5,38.9; 92.6,2.269,34.9,36.9,37.6,38.9; 97.5, + 2.269,35.4,37.4,37.7,38.8; 100.4,2.269,35.6,37.6,37.7,38.9; 103.3,2.269, + 35.8,37.9,37.8,38.9; 106.2,2.269,36,38,37.8,38.8; 109.2,2.269,36.2,38.2, + 37.8,38.8; 112.1,2.269,36.3,38.3,37.9,38.8; 115,2.269,36.4,38.4,37.9, + 38.8; 118.1,2.269,36.5,38.5,37.9,38.8; 121.1,2.269,36.6,38.5,37.9,38.8; + 123.9,2.269,36.7,38.6,37.9,38.8; 126.9,2.269,36.7,38.7,37.9,38.8; 129.8, + 2.269,36.8,38.7,38,38.8; 132.8,2.269,36.9,38.8,38,38.8; 135.7,2.269, + 36.9,38.8,38,38.8; 138.7,2.269,36.9,38.8,38,38.8; 141.6,2.269,37,38.8, + 38,38.9; 146.7,2.269,37.1,38.9,38.1,38.9; 149.7,2.269,37.1,38.9,38.1, + 38.9; 153.5,2.269,37.1,38.9,38.1,38.9; 156.5,2.269,37.1,38.9,38.2,38.9; + 159.7,2.269,37.1,38.9,38.2,38.9; 162.8,2.269,37.2,38.9,38.2,39; 165.8, + 2.269,37.2,38.9,38.2,39; 168.7,2.269,37.2,38.9,38.3,39; 171.7,2.269, + 37.2,38.9,38.3,39; 174.6,2.269,37.3,38.9,38.3,39.1; 177.6,2.269,37.3, + 38.9,38.3,39.1; 180.5,2.269,37.3,38.9,38.4,39.1; 185.3,2.269,37.3,38.9, + 38.4,39.2; 188.3,2.269,37.4,38.9,38.5,39.2; 191.2,2.269,37.4,38.9,38.5, + 39.2; 194.2,2.269,37.4,38.9,38.5,39.2; 197.1,2.269,37.4,39,38.5,39.1; + 200.1,2.269,37.4,39,38.5,39.1; 203.1,2.269,37.4,39,38.5,39.2; 206.4, + 2.269,37.4,39,38.5,39.1; 209.3,2.269,37.4,39,38.5,39.2; 213.4,2.269, + 37.5,39,38.5,39.2; 217.3,2.269,37.5,39.1,38.5,39.2; 220.7,2.269,37.5, + 39.1,38.6,39.2; 223.6,2.269,37.6,39.1,38.6,39.2; 226.5,2.269,37.6,39.1, + 38.6,39.2; 229.5,2.269,37.6,39.1,38.6,39.2; 233.2,2.269,37.6,39.2,38.6, + 39.3; 236.1,2.269,37.6,39.2,38.7,39.3; 239,2.269,37.6,39.2,38.7,39.3; + 242,2.269,37.6,39.2,38.7,39.3; 245.1,2.269,37.7,39.2,38.7,39.2; 248, + 2.269,37.7,39.2,38.7,39.2; 251,2.269,37.7,39.2,38.7,39.3; 255.1,2.269, + 37.7,39.2,38.7,39.3; 259.5,2.269,37.7,39.2,38.7,39.3; 262.8,2.269,37.8, + 39.2,38.7,39.3; 265.8,2.269,37.8,39.2,38.8,39.4; 268.8,2.269,37.8,39.2, + 38.8,39.3; 273.7,2.269,37.8,39.2,38.8,39.4; 276.6,2.269,37.8,39.3,38.8, + 39.4; 279.6,2.269,37.8,39.3,38.8,39.4; 282.6,2.269,37.8,39.3,38.8,39.4; + 285.5,2.269,37.8,39.3,38.9,39.4; 288.5,2.269,37.8,39.3,38.9,39.4; 293.2, + 2.269,37.9,39.3,38.9,39.5; 296.2,2.269,37.9,39.3,38.9,39.4; 299.2,2.269, + 37.9,39.3,38.9,39.4; 302.1,2.269,37.9,39.3,38.9,39.4; 307.1,2.269,37.9, + 39.3,39,39.5; 310.1,2.269,38,39.4,39,39.5; 313.1,2.269,37.9,39.4,39, + 39.5; 316,2.269,38,39.4,39,39.5; 319,2.269,38,39.4,39,39.4; 322,2.269, + 38,39.4,39,39.4; 327,2.269,38,39.4,39,39.5; 330.4,2.269,38,39.4,39,39.6; + 333.4,2.269,38,39.4,39,39.6; 338.4,2.269,38,39.4,39.1,39.6; 341.9,2.269, + 38.1,39.5,39.1,39.6; 344.8,2.269,38.1,39.5,39.1,39.6; 347.7,2.269,38.1, + 39.5,39.1,39.6; 352.8,2.269,38.1,39.5,39.1,39.5; 355.7,2.269,38.1,39.5, + 39,39.4; 360.9,2.269,38.2,39.5,39,39.4; 363.8,2.269,38.2,39.5,39,39.5; + 368.9,2.269,38.2,39.5,39,39.5; 372.3,2.269,38.2,39.5,39.1,39.5; 375.3, + 2.269,38.2,39.6,39.1,39.6]); + annotation (Documentation(revisions=" ++This data record contains the experimental data from the +long test bench carried out at the University of Liège. +See +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data.BaseClasses.PipeDataULg +for more information. +
+")); +end PipeDataULg160118_1; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/TestData.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/TestData.mo new file mode 100644 index 0000000000..cd85805553 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/TestData.mo @@ -0,0 +1,30 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.Data; +model TestData "Example to check pipe data records" +extends Modelica.Icons.Example; +replaceable PipeDataAIT151218 pipeDataToBeRead constrainedby + BaseClasses.PipeDataBaseDefinition "Measurement dataset from AIT" + annotation (Placement(transformation(extent={{-20,-8},{0,12}}))); + Modelica.Blocks.Sources.CombiTimeTable combiTimeTable(table= + pipeDataToBeRead.data) + annotation (Placement(transformation(extent={{10,-10},{30,10}}))); +equation + + annotation (experiment(StopTime=603900, Interval=900, Tolerance=1e-6), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-40,-40},{60,40}})), + Documentation(info=" +Model used to visualize and check data of district heating networks
+", revisions=" +.mos
file.
+Subpackage that contains measurement data from various experiments at ULg and AIT. This data is used to validate BaseClasses.PipeCore.
+van der Heijde, B., Fuchs, M., Ribas Tugores, C., Schweiger, G., Sartor, K., Basciotti, D., Müller, D., Nytsch-Geusen, C., Wetter, M. and Helsen, L. (2017). Dynamic equation-based thermo-hydraulic pipe model for district heating and cooling systems. Energy Conversion and Management, 151 (November), 158-169. https://doi.org/10.1016/j.enconman.2017.08.072
+")); +end Data; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/package.order b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/package.order new file mode 100644 index 0000000000..b640434728 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/Data/package.order @@ -0,0 +1,10 @@ +TestData +PipeDataAIT151218 +PipeDataULg150801 +PipeDataULg151202 +PipeDataULg151204_1 +PipeDataULg151204_2 +PipeDataULg151204_4 +PipeDataULg160104_2 +PipeDataULg160118_1 +BaseClasses diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/FlowReversal.mo b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/FlowReversal.mo new file mode 100644 index 0000000000..e504ec487c --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/FlowReversal.mo @@ -0,0 +1,82 @@ +within AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes; +model FlowReversal + "Simple example of plug flow pipe with flow reversal" + extends Modelica.Icons.Example; + package Medium = AixLib.Media.Water "Medium in the pipe"; + Modelica.Blocks.Sources.Step m_flow( + height=-4, + offset=2, + startTime=50) "Mass flow rate signal" + annotation (Placement(transformation(extent={{-92,-2},{-72,18}}))); + Sources.Boundary_pT sin( + redeclare package Medium = Medium, + nPorts=1, + p(displayUnit="Pa") = 101325, + T=313.15) "Pressure boundary condition" + annotation (Placement(transformation(extent={{82,-10},{62,10}}))); + AixLib.Fluid.FixedResistances.PlugFlowPipe pip( + redeclare package Medium = Medium, + nPorts=1, + dIns=0.05, + kIns=0.028, + cPip=500, + thickness=0.0032, + rhoPip=8000, + m_flow_nominal=2, + initDelay=true, + length=200, + v_nominal=2, + T_start_in=293.15, + T_start_out=293.15) "Pipe" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + AixLib.Fluid.Sources.MassFlowSource_T sou( + nPorts=1, + redeclare package Medium = Medium, + m_flow=0, + use_m_flow_in=true, + T=303.15) "Flow source" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + + AixLib.Fluid.Sensors.TemperatureTwoPort senTemOut( + redeclare package Medium = Medium, + tau=0, + T_start=323.15, + m_flow_nominal=2) + "Temperature sensor" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + AixLib.Fluid.Sensors.TemperatureTwoPort senTemIn( + redeclare package Medium = Medium, + tau=0, + T_start=323.15, + m_flow_nominal=2) + "Temperature sensor" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); +equation + connect(pip.ports_b[1], senTemOut.port_a) + annotation (Line(points={{20,0},{30,0}}, color={0,127,255})); + connect(senTemOut.port_b, sin.ports[1]) + annotation (Line(points={{50,0},{62,0}}, color={0,127,255})); + connect(sou.ports[1], senTemIn.port_a) + annotation (Line(points={{-40,0},{-30,0}}, color={0,127,255})); + connect(senTemIn.port_b, pip.port_a) + annotation (Line(points={{-10,0},{0,0}}, color={0,127,255})); + connect(m_flow.y, sou.m_flow_in) + annotation (Line(points={{-71,8},{-62,8}}, color={0,0,127})); + annotation ( + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Fluid/FixedResistances/Validation/PlugFlowPipes/FlowReversal.mos" + "Simulate and Plot"), + experiment(StopTime=150, Tolerance=1e-006), + Documentation(info=" ++Validation model in which water flows into the pipe and then the flow is reversed. +
+", revisions=" ++The example contains + +experimental data from a real district heating network. +This data is used to validate this library's + +AixLib.Fluid.FixedResistances.PlugFlowPipe in + +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.PlugFlowAIT. +This model compares its performance with the original Modelica Standard Library +pipes, using one discretization element per unit length of pipe. +For a coarser discretization, please refer to + +MSLAIT2Nodes. +
++Note that these three models are identical, except for the pipe model that is used: +
+nNodes
.
+nNodes=2
.
++This comparison between different discretization levels and pipe models is made +to check the influence of the discretization and pipe model on computation time +and simulation accuracy. +
+The pipes' temperatures are not initialized, thus results of outflow +temperature before approximately the first 10000 seconds should not be considered. +
++
To calculate the length specific thermal resistance R
of the
+pipe, the thermal resistance of the surrounding ground is added.
+R=1/(0.208)+1/(2 lambda_g Modelica.Constants.pi) log(1/0.18)
+
+Where the thermal conductivity of the ground lambda_g
= 2.4 W/(m K).
+
pipVol.
+The example contains + +experimental data from a real district heating network. +This data is used to validate this library's +plug flow pipe model +in +AixLib.Fluid.FixedResistances.Validation.PlugFlowPipes.PlugFlowAIT. +
++Note that these three models are identical, except for the pipe model that is used: +
+nNodes
.
+nNodes=2
.
++This comparison between different discretization levels and pipe models is made +to check the influence of the discretization and pipe model on computation time +and simulation accuracy. +
+The pipes' temperatures are not initialized, thus results of outflow temperature +before approximately the first 10000 seconds should not be considered. +
++
+To calculate the length specific thermal resistance R
of the pipe,
+the thermal resistance of the surrounding ground is added.
+
+R=1/(0.208)+1/(2 lambdag Modelica.Constants.pi) log(1/0.18) +
+
+Where the thermal conductivity of the ground lambda_g
= 2.4 W/(m K).
+
pipVol.
++The example contains +experimental data from a real district heating network. +
+The pipes' temperatures are not initialized. Therefore, results of +outflow temperature before approximately the first 10000 seconds should not be +considered. +
++Note that these three models are identical, except for the pipe model that is used: +
+nNodes
.
+nNodes=2
.
++This comparison between different discretization levels and pipe models is made +to check the influence of the discretization and pipe model on computation time +and simulation accuracy. +
++
+To calculate the length specific thermal resistance R
of the pipe,
+the thermal resistance of the surrounding ground is added, which yields
+R=1/(0.208)+1/(2 lambda_g Modelica.Constants.pi) log(1/0.18),
+where the thermal conductivity of the ground lambda_g
= 2.4 W/(m K).
+
+The example contains +experimental data from a real district heating network. +
++This model compares the results with the original Modelica Standard Library pipes. +
+The pipes' temperatures are not initialized. Therefore, results of +outflow temperature before approximately the first 10000 seconds should not be +considered. +
++
+There are some uncertainties about the heat loss coefficient between pipe and
+surrounding air as well as regarding the heat conductivity of the insulation
+material.
+With the
+given data, the length specific thermal resistance is R = 2.164
+
((m K)/W), calculated as follows:
+
+R=((1/(2*pipe.kIns)*log((0.0603+2*pipe.dIns)/(0.0603)))+1/(5*(0.0603+2*pipe.dIns)))/Modelica.Constants.pi
++U = 1/R = 0.462 W/(m K)
+", revisions=" ++Validation model in which a step input is applied to +the transport of air and water with a species concentration. +
+", revisions=" ++This package contains models that validate the pipe models against measured data +from real district heating networks. + +
+")); +end PlugFlowPipes; diff --git a/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/package.order b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/package.order new file mode 100644 index 0000000000..2912e6e055 --- /dev/null +++ b/AixLib/Fluid/FixedResistances/Validation/PlugFlowPipes/package.order @@ -0,0 +1,7 @@ +FlowReversal +MSLAIT +MSLAIT2Nodes +PlugFlowAIT +PlugFlowULg +TransportWaterAir +Data diff --git a/AixLib/Fluid/FixedResistances/Validation/package.order b/AixLib/Fluid/FixedResistances/Validation/package.order index b6f0c96efc..2b0edbd9b7 100644 --- a/AixLib/Fluid/FixedResistances/Validation/package.order +++ b/AixLib/Fluid/FixedResistances/Validation/package.order @@ -5,3 +5,4 @@ PressureDropsExplicit PressureDropsExplicitLinearized PressureDropsParallel PressureDropsSeries +PlugFlowPipes diff --git a/AixLib/Fluid/FixedResistances/package.order b/AixLib/Fluid/FixedResistances/package.order index 5bff79da10..0c65d0220a 100644 --- a/AixLib/Fluid/FixedResistances/package.order +++ b/AixLib/Fluid/FixedResistances/package.order @@ -2,6 +2,9 @@ HydraulicDiameter HydraulicResistance Junction LosslessPipe +Pipe +PlugFlowPipe PressureDrop Examples Validation +BaseClasses diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/BaseClasses/Examples/DerivateCubicSpline.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/BaseClasses/Examples/DerivateCubicSpline.mo index 2f5451a854..480d0e32dc 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/BaseClasses/Examples/DerivateCubicSpline.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/BaseClasses/Examples/DerivateCubicSpline.mo @@ -15,8 +15,8 @@ equation Documentation(info="The example tests the implementation of - -AixLib.Fluid.HeatExchangers.ActiveBeams.BaseClasses.DerivatesCubicSpline. + +AixLib.Fluid.HeatExchangers.ActiveBeams.BaseClasses.DerivativesCubicSpline. Default vectors are: x=[0,0.5,1] and y=[0,0.75,1]. Input to the model is the simulation time.
diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingAndHeating.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingAndHeating.mo index de4536ed38..cee1763fe5 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingAndHeating.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingAndHeating.mo @@ -132,9 +132,9 @@ equation connect(beaCooHea.heaPor, vol.heatPort) annotation (Line(points={{40,48},{40, 48},{40,16},{40,-60},{50,-60}}, color={191,0,0})); connect(conCoo.y, pumCoo.m_flow_in) annotation (Line(points={{-49,30},{-40,30}, - {-40,108},{-20,108}}, color={0,0,127})); + {-40,108},{-22,108}}, color={0,0,127})); connect(conHea.y, pumHea.m_flow_in) annotation (Line(points={{-49,-10},{-32, - -10},{-32,68},{-20,68}}, color={0,0,127})); + -10},{-32,68},{-22,68}}, color={0,0,127})); connect(pumCoo.ports[1], beaCooHea.watCoo_a) annotation (Line(points={{0,100}, {12,100},{20,100},{20,66},{26,66}}, color={0,127,255})); connect(pumHea.ports[1], beaCooHea.watHea_a) diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingOnly.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingOnly.mo index 23e973ee35..87b6d8f56e 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingOnly.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/CoolingOnly.mo @@ -101,7 +101,7 @@ equation {12,-80},{62,-80},{62,-70}}, color={0,127,255})); connect(pum.ports[1], beaCoo.watCoo_a) annotation (Line(points={{-2,66},{12,66},{26,66}}, color={0,127,255})); - connect(pum.m_flow_in, conPID.y) annotation (Line(points={{-22,74},{-40,74},{ + connect(pum.m_flow_in, conPID.y) annotation (Line(points={{-24,74},{-40,74},{ -40,-10},{-49,-10}}, color={0,0,127})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120, -120},{120,120}})),experiment(Tolerance=1e-6, StopTime=172800), diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/HeatingOnly.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/HeatingOnly.mo index 3398edbf88..1cdb1b6264 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/HeatingOnly.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/Examples/HeatingOnly.mo @@ -116,7 +116,7 @@ equation 54},{12,-80},{62,-80},{62,-70}}, color={0,127,255})); connect(pumHea.ports[1], beaCooHea.watHea_a) annotation (Line(points={{0,60},{0,60},{26,60}}, color={0,127,255})); - connect(pumHea.m_flow_in, conPID.y) annotation (Line(points={{-20,68},{-40,68}, + connect(pumHea.m_flow_in, conPID.y) annotation (Line(points={{-22,68},{-40,68}, {-40,-10},{-49,-10}}, color={0,0,127})); annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-120, -120},{120,120}})),experiment(Tolerance=1e-6, StopTime=172800),__Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Fluid/HeatExchangers/ActiveBeams/Examples/HeatingOnly.mos" diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/Validation/NumberOfBeams.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/Validation/NumberOfBeams.mo index 457faa5c7e..8ac7cace6f 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/Validation/NumberOfBeams.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/Validation/NumberOfBeams.mo @@ -164,14 +164,14 @@ equation {28,-74},{28,78},{60,78}}, color={0,127,255})); connect(beaCooHea10.watHea_b, sin_2.ports[2]) annotation (Line(points={{14,-80}, {28,-80},{40,-80},{40,38},{60,38}}, color={0,127,255})); - connect(step.y, pumChiWat.m_flow_in) annotation (Line(points={{-159,100},{-108, - 100},{-50.2,100},{-50.2,92}}, color={0,0,127})); - connect(step1.y, pumHotWat.m_flow_in) annotation (Line(points={{-159,60},{-110, - 60},{-50.2,60},{-50.2,52}}, color={0,0,127})); + connect(step.y, pumChiWat.m_flow_in) annotation (Line(points={{-159,100},{ + -108,100},{-50,100},{-50,92}},color={0,0,127})); + connect(step1.y, pumHotWat.m_flow_in) annotation (Line(points={{-159,60},{ + -110,60},{-50,60},{-50,52}},color={0,0,127})); connect(step3.y, pumChiWat10.m_flow_in) annotation (Line(points={{-159,-20},{ - -104,-20},{-50.2,-20},{-50.2,-28}}, color={0,0,127})); + -104,-20},{-50,-20},{-50,-28}}, color={0,0,127})); connect(step2.y, pumHotWat10.m_flow_in) annotation (Line(points={{-159,-60},{ - -104,-60},{-50.2,-60},{-50.2,-68}}, color={0,0,127})); + -104,-60},{-50,-60},{-50,-68}}, color={0,0,127})); connect(step4.y, prescribedTemperature.T) annotation (Line(points={{-99,-150},{-62,-150}}, color={0,0,127})); connect(prescribedTemperature.port, beaCooHea10.heaPor) annotation (Line( diff --git a/AixLib/Fluid/HeatExchangers/ActiveBeams/package.mo b/AixLib/Fluid/HeatExchangers/ActiveBeams/package.mo index d253fd812a..36ac0c320d 100644 --- a/AixLib/Fluid/HeatExchangers/ActiveBeams/package.mo +++ b/AixLib/Fluid/HeatExchangers/ActiveBeams/package.mo @@ -1,5 +1,5 @@ within AixLib.Fluid.HeatExchangers; -package ActiveBeams +package ActiveBeams "Package with active beams" extends Modelica.Icons.VariantsPackage; annotation (Documentation(info=" diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatCapacityPerArea.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatCapacityPerArea.mo new file mode 100644 index 0000000000..9199ced408 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatCapacityPerArea.mo @@ -0,0 +1,3 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls.BaseClasses; +type HeatCapacityPerArea = Real (final quantity="HeatCapacityPerArea", + final unit="J/(m2.K)") "Unit type for heat capacity per area"; diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatConductionSegment.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatConductionSegment.mo new file mode 100644 index 0000000000..ae0a066d49 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/HeatConductionSegment.mo @@ -0,0 +1,96 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls.BaseClasses; +model HeatConductionSegment + +parameter Modelica.SIunits.ThermalConductance kA + "Constant thermal conductance of material"; +parameter Modelica.SIunits.HeatCapacity mc_p + "Heat capacity of element (= cp*m)"; +parameter Modelica.SIunits.Temperature T0 "Initial Temperature of element"; + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + annotation (Placement(transformation(extent={{-108,-8},{-74,26}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b + annotation (Placement(transformation(extent={{74,-8},{108,26}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor thermalConductor1(G=2*kA) + annotation (Placement(transformation(extent={{-46,0},{-26,20}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor + thermalConductor2( G= + 2*kA) annotation (Placement(transformation(extent={{28,-2},{48,18}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor + heatCapacitor( T(start= + T0), C=mc_p) + annotation (Placement(transformation(extent={{-12,34},{8,54}}))); +equation + connect(port_a, thermalConductor1.port_a) annotation (Line( + points={{-91,9},{-46,9},{-46,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermalConductor1.port_b, heatCapacitor.port) annotation (Line( + points={{-26,10},{-24,10},{-24,28},{-2,28},{-2,34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermalConductor2.port_a, heatCapacitor.port) annotation (Line( + points={{28,8},{20,8},{20,28},{-2,28},{-2,34}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(thermalConductor2.port_b, port_b) annotation (Line( + points={{48,8},{86,8},{86,10},{88,10},{88,9},{91,9}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}}), graphics), Icon(graphics={ + Rectangle( + extent={{-100,-45.5},{100,45.5}}, + lineColor={166,166,166}, + pattern=LinePattern.None, + fillColor={190,190,190}, + fillPattern=FillPattern.Solid, + origin={0.5,0}, + rotation=90), + Rectangle( + extent={{100,30},{-100,-30}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid, + origin={-70,0}, + rotation=270), + Rectangle( + extent={{100,30},{-100,-30}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={156,156,156}, + fillPattern=FillPattern.Solid, + origin={76,0}, + rotation=270), + Line( + points={{-72,-1},{72,-1}}, + color={255,0,0}, + thickness=0.5, + arrow={Arrow.None,Arrow.Filled}, + origin={4,47}, + rotation=360), + Line( + points={{-72,-1},{72,-1}}, + color={255,0,0}, + thickness=0.5, + arrow={Arrow.None,Arrow.Filled}, + origin={2,-33}, + rotation=180)}), + Documentation(info=" +Model for heat conduction using elements from the MSL.
+", + revisions=" +Model for a panel heating element, consisting of a water volume, heat conduction upwards and downwards through the wall layers, convection and radiation exchange at the room facing side.
+")); +end PanelHeatingSegment; diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/PressureDropPH.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/PressureDropPH.mo new file mode 100644 index 0000000000..2ef6e2f6fa --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/PressureDropPH.mo @@ -0,0 +1,120 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls.BaseClasses; +model PressureDropPH + "Calculates the pressure drop in a radiator according to manufacturer data" + extends Modelica.Fluid.Interfaces.PartialTwoPortTransport; + + parameter Real m = 2131 + "Pressure drop coefficient, delta_p[Pa] = tubeLength*m*m_flow[kg/s]^n"; + parameter Real n = 1.7 + "Pressure drop exponent, delta_p[Pa] = tubeLength*m*m_flow[kg/s]^n"; + parameter Modelica.SIunits.Length tubeLength = 10 "total length of tube"; + +equation + // Isenthalpic state transformation (no storage and no loss of energy) + port_a.h_outflow = inStream(port_b.h_outflow); + port_b.h_outflow = inStream(port_a.h_outflow); + + //Hydraulic Part: pressure drop works in both directions now + +port_b.p = if noEvent(port_a.m_flow>=0) then port_a.p - tubeLength*m*(port_a.m_flow)^n else port_a.p + tubeLength*m*(port_b.m_flow)^n; + + annotation ( + Documentation(info=" +Model for calculating the pressure drop.
+The pressure drop is calculated according to the following equation [1].
+ +In order to determine K, manufacturer data is used and :
+ +With the help onf the Matlab Curve Fit Toolbox a curve y = K*x^2 is fitted through several selected points.
+Source:
+Calculation of the logarithmic over temperature.
+")); +end logDT; diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.mo new file mode 100644 index 0000000000..df8a3dcd0c --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.mo @@ -0,0 +1,5 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls; +package BaseClasses + extends Modelica.Icons.BasesPackage; + +end BaseClasses; diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.order b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.order new file mode 100644 index 0000000000..dcc1ad0676 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/BaseClasses/package.order @@ -0,0 +1,5 @@ +HeatCapacityPerArea +HeatConductionSegment +PanelHeatingSegment +PressureDropPH +logDT diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/Distributor.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/Distributor.mo new file mode 100644 index 0000000000..968a41a2cf --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/Distributor.mo @@ -0,0 +1,205 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls; +model Distributor +replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium + "Medium in the component" annotation(Dialog(group="Medium"),choicesAllMatching=true); + + Modelica.Fluid.Interfaces.FluidPort_a MAIN_FLOW(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{-112,10},{-92,30}}))); + Modelica.Fluid.Interfaces.FluidPort_b MAIN_RETURN(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{-110,-30},{-90,-10}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_1(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-72,40},{-52,60}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_2(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_3(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{-8,40},{12,60}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_4(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{22,40},{42,60}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_5(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{54,40},{74,60}}))); + Modelica.Fluid.Interfaces.FluidPort_b Flow_6(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{82,40},{102,60}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_1(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-72,-62},{-52,-42}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_2(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-40,-62},{-20,-42}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_3(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{-8,-62},{12,-42}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_4(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{22,-62},{42,-42}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_5(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{52,-62},{72,-42}}))); + Modelica.Fluid.Interfaces.FluidPort_a Return_6(redeclare package Medium = + Medium) + annotation (Placement(transformation(extent={{78,-62},{98,-42}}))); + Modelica.Fluid.Vessels.ClosedVolume volume( + redeclare package Medium = Medium, + use_portsData=false, + V=0.001, + nPorts=7) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=180, + origin={-72,10}))); + Modelica.Fluid.Vessels.ClosedVolume volume1( + redeclare package Medium = Medium, + use_portsData=false, + V=0.001, + nPorts=7) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=0, + origin={-72,-10}))); +equation + connect(MAIN_RETURN, volume1.ports[1]) annotation (Line( + points={{-100,-20},{-75.4286,-20}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(MAIN_FLOW, volume.ports[1]) annotation (Line( + points={{-102,20},{-68.5714,20}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[2], Flow_1) annotation (Line( + points={{-69.7143,20},{-62,20},{-62,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[3], Flow_2) annotation (Line( + points={{-70.8571,20},{-30,20},{-30,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[4], Flow_3) annotation (Line( + points={{-72,20},{2,20},{2,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[5], Flow_4) annotation (Line( + points={{-73.1429,20},{32,20},{32,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[6], Flow_5) annotation (Line( + points={{-74.2857,20},{63.8572,20},{63.8572,50},{64,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume.ports[7], Flow_6) annotation (Line( + points={{-75.4286,20},{90,20},{90,50},{92,50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[2], Return_6) annotation (Line( + points={{-74.2857,-20},{-74.2857,-28},{88,-28},{88,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[3], Return_5) annotation (Line( + points={{-73.1429,-20},{-73.1429,-28},{62,-28},{62,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[4], Return_4) annotation (Line( + points={{-72,-20},{-72,-28},{32,-28},{32,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[5], Return_3) annotation (Line( + points={{-70.8571,-20},{-70.8571,-28},{4,-28},{4,-52},{2,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[6], Return_2) annotation (Line( + points={{-69.7143,-20},{-69.7143,-28},{-30,-28},{-30,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(volume1.ports[7], Return_1) annotation (Line( + points={{-68.5714,-20},{-74,-20},{-74,-28},{-62,-28},{-62,-52}}, + color={0,127,255}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -50},{100,50}}), + graphics), Icon(coordinateSystem(preserveAspectRatio=true, + extent={{-100,-50},{100,50}}), graphics={ + Line( + points={{-98,20},{94,20},{98,20}}, + color={255,0,0}, + smooth=Smooth.None, + thickness=5), + Line( + points={{-62,46},{-62,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{-30,46},{-30,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{2,46},{2,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{32,46},{32,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{64,46},{64,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{92,42},{92,20}}, + color={255,0,0}, + thickness=4, + smooth=Smooth.None), + Line( + points={{-62,-18},{-62,-44}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None), + Line( + points={{-98,-20},{94,-20},{98,-20}}, + color={0,0,255}, + smooth=Smooth.None, + thickness=5), + Line( + points={{-30,-20},{-30,-46}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None), + Line( + points={{2,-20},{2,-46}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None), + Line( + points={{34,-22},{34,-48}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None), + Line( + points={{62,-22},{62,-48}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None), + Line( + points={{88,-20},{88,-46}}, + color={0,0,255}, + thickness=4, + smooth=Smooth.None)}), + Documentation(revisions=" +Model for a contributor for different floor heating circuits in a house.
+The contributor is built to connect six floor heating circuits together. The volume is used for nummerical reasons, to have a point where all the flows mix together.
+AixLib.Fluid.HeatExchangers.Examples.ActiveWalls.ActiveWalls_Test
+")); +end Distributor; diff --git a/AixLib/Fluid/HeatExchangers/ActiveWalls/Examples/PanelHeatingMultiple.mo b/AixLib/Fluid/HeatExchangers/ActiveWalls/Examples/PanelHeatingMultiple.mo new file mode 100644 index 0000000000..1c505bbd1d --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/ActiveWalls/Examples/PanelHeatingMultiple.mo @@ -0,0 +1,217 @@ +within AixLib.Fluid.HeatExchangers.ActiveWalls.Examples; +model PanelHeatingMultiple + extends Modelica.Icons.Example; + replaceable package Medium = + Modelica.Media.Water.ConstantPropertyLiquidWater "Medium in the system" annotation(choicesAllMatching = true); + + parameter Modelica.SIunits.Area panelHeatingArea = 10 "Area of heating panels"; + + Distributor distributor(redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{-44,-20},{36,20}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis1(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,64},{84,76}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis2(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,34},{84,46}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis3(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,6},{84,18}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis4(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,-22},{84,-10}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis5(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,-52},{84,-40}}))); + AixLib.Fluid.HeatExchangers.ActiveWalls.PanelHeating panelheating_1D_Dis6(redeclare + package Medium = Medium, A= + panelHeatingArea) + annotation (Placement(transformation(extent={{56,-80},{84,-68}}))); + Modelica.Fluid.Sources.MassFlowSource_T boundary( + nPorts=1, + use_T_in=false, + redeclare package Medium = Medium, + m_flow=0.5, + T=313.15) annotation (Placement(transformation(extent={{-80,2},{-60,22}}))); + Modelica.Fluid.Sources.Boundary_pT boundary1( nPorts=1, + redeclare package Medium = Medium) + annotation (Placement(transformation(extent={{10,-10},{-10,10}}, + rotation=180, + origin={-70,-14}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature FixedTemp(T=293.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-30,90}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature FixedTemp1( + T=293.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={18,90}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature FixedTemp2( + T=293.15) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-4,-90}))); +equation + connect(boundary.ports[1],distributor. MAIN_FLOW) annotation (Line( + points={{-60,12},{-54,12},{-54,8},{-44.8,8}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(boundary1.ports[1],distributor. MAIN_RETURN) annotation (Line( + points={{-60,-14},{-54,-14},{-54,-8},{-44,-8}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_1, panelheating_1D_Dis1.port_a) annotation (Line( + points={{-28.8,20},{-26,20},{-26,69},{56,69}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_2, panelheating_1D_Dis2.port_a) annotation (Line( + points={{-16,20},{-16,39},{56,39}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_3, panelheating_1D_Dis3.port_a) annotation (Line( + points={{-3.2,20},{-4,20},{-4,30},{46,30},{46,11},{56,11}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_4, panelheating_1D_Dis4.port_a) annotation (Line( + points={{8.8,20},{8,20},{8,0},{46,0},{46,-17},{56,-17}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_5, panelheating_1D_Dis5.port_a) annotation (Line( + points={{21.6,20},{21.6,-4},{42,-4},{42,-47},{56,-47}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Flow_6, panelheating_1D_Dis6.port_a) annotation (Line( + points={{32.8,20},{40,20},{40,-75},{56,-75}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_1, panelheating_1D_Dis1.port_b) annotation (Line( + points={{-28.8,-20.8},{-28.8,-34},{94,-34},{94,69},{84,69}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_2, panelheating_1D_Dis2.port_b) annotation (Line( + points={{-16,-20.8},{-16,-30},{90,-30},{90,39},{84,39}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_3, panelheating_1D_Dis3.port_b) annotation (Line( + points={{-3.2,-20.8},{-3.2,-42},{98,-42},{98,11},{84,11}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_4, panelheating_1D_Dis4.port_b) annotation (Line( + points={{8.8,-20.8},{8.8,-28},{88,-28},{88,-17},{84,-17}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_5, panelheating_1D_Dis5.port_b) annotation (Line( + points={{20.8,-20.8},{20.8,-58},{94,-58},{94,-47},{84,-47}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(distributor.Return_6, panelheating_1D_Dis6.port_b) annotation (Line( + points={{31.2,-20.8},{31.2,-88},{94,-88},{94,-75},{84,-75}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis2.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,47},{71.96,52},{50,52},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis1.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,77},{50,77},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis3.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,19},{71.96,24},{50,24},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis4.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,-9},{71.96,-4},{50,-4},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis5.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,-39},{71.96,-32},{50,-32},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis6.thermConv, FixedTemp.port) annotation (Line( + points={{71.96,-67},{71.96,-62},{50,-62},{50,78},{-30,78},{-30,100}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis1.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,76.6},{68.32,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis2.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,46.6},{52,46.6},{52,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis3.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,18.6},{52,18.6},{52,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis4.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,-9.4},{52,-9.4},{52,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis5.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,-39.4},{52,-39.4},{52,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis6.starRad, FixedTemp1.port) annotation (Line( + points={{68.32,-67.4},{52,-67.4},{52,100},{18,100}}, + color={95,95,95}, + pattern=LinePattern.None, + smooth=Smooth.None)); + connect(panelheating_1D_Dis2.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,33.4},{48,33.4},{48,64},{-86,63.4},{-86,-70},{-4,-70},{ + -4,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis1.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,63.4},{48,64},{-86,63.4},{-86,-70},{-4,-70},{-4,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis3.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,5.4},{48,5.4},{48,64},{-86,63.4},{-86,-70},{-4,-70},{-4, + -80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis4.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,-22.6},{48,-22.6},{48,64},{-86,63.4},{-86,-70},{-4,-70}, + {-4,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis5.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,-52.6},{48,-52.6},{48,64},{-86,63.4},{-86,-70},{-4,-70}, + {-4,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(panelheating_1D_Dis6.ThermDown, FixedTemp2.port) annotation (Line( + points={{71.12,-80.6},{48,-80.6},{48,64},{-86,63.4},{-86,-70},{-4,-70}, + {-4,-80}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -100},{100,100}})), Documentation(info=" +A simple example to test the models panelheating_1D_Dis1 and contributor.
+", + revisions=" +A simple test for AixLib.Fluid.HeatExchangers.ActiveWalls.Panel_Dis1D
+Notice how the cahnge in flow temperature, amrking the change between heating and cooling mode is sudden, in order to prevent the mode from getting stuck.
+", revisions=" +Model for floor heating, with one pipe running through the whole floor.
+The assumption is made that there is one pipe that runs thorugh the whole floor. Which means that a discretisation of the floor heating is done, the discretisation elements will be connected in series: the flow temperature of one element is the return temperature of the element before.
+The pressure drop is calculated at the end for the whole length of the pipe.
+Source:
+AixLib.Fluid.HeatExchangers.Examples.ActiveWalls.ActiveWalls_Test
+", + revisions=" ++ Test model for + AixLib.Fluid.HeatExchanger.BaseClassess.HACoilInside. +
+ ", revisions=" ++ Test model for + AixLib.Fluid.HeatExchangers.BaseClasses.HANaturalCylinder. +
+ ")); +end HANaturalCylinder; diff --git a/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.mo b/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.mo new file mode 100644 index 0000000000..8ce4cb7a19 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.mo @@ -0,0 +1,13 @@ +within AixLib.Fluid.HeatExchangers.BaseClasses; +package Examples "Collection of models that illustrate model use and test models" + extends Modelica.Icons.ExamplesPackage; + + +annotation (preferredView="info", Documentation(info=" ++This package contains examples for the use of models that can be found in + +AixLib.Fluid.HeatExchangers.BaseClasses. +
+")); +end Examples; diff --git a/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.order b/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.order new file mode 100644 index 0000000000..2de1040537 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/BaseClasses/Examples/package.order @@ -0,0 +1,2 @@ +HACoilInside +HANaturalCylinder diff --git a/AixLib/Fluid/HeatExchangers/BaseClasses/HACoilInside.mo b/AixLib/Fluid/HeatExchangers/BaseClasses/HACoilInside.mo new file mode 100644 index 0000000000..7ea9742538 --- /dev/null +++ b/AixLib/Fluid/HeatExchangers/BaseClasses/HACoilInside.mo @@ -0,0 +1,123 @@ +within AixLib.Fluid.HeatExchangers.BaseClasses; +model HACoilInside "Calculates the hA value for water inside a coil" + extends Modelica.Blocks.Icons.Block; + + parameter Modelica.SIunits.MassFlowRate m_flow_nominal "Water mass flow rate" + annotation(Dialog(tab="General", group="Nominal condition")); + + Modelica.Blocks.Interfaces.RealInput m_flow(unit="kg/s") "Mass flow rate" + annotation (Placement(transformation(extent={{-120,-50},{-100,-30}}))); + Modelica.Blocks.Interfaces.RealInput T(unit="K") "Temperature" + annotation (Placement(transformation(extent={{-120,30},{-100,50}}))); + + Modelica.Blocks.Interfaces.RealOutput hA(unit="W/K") + "Inside convective heat transfer" annotation (Placement(transformation( + extent={{100,-10},{120,10}}))); + + parameter Modelica.SIunits.ThermalConductance hA_nominal(min=0) + "Convective heat transfer coefficient" + annotation(Dialog(tab="General", group="Nominal condition")); + parameter Real n(min=0, max=1)=0.85 + "Water-side exponent for convective heat transfer coefficient, h proportional to m_flow^n"; + parameter Modelica.SIunits.Temperature T_nominal= + Modelica.SIunits.Conversions.from_degC(20) + "Nominal water temperature" + annotation(Dialog(tab="General", group="Nominal condition")); + parameter Boolean flowDependent=true + "Set to false to make hA independent of mass flow rate" + annotation(Dialog(tab="Advanced", group="Modeling detail"), Evaluate=true); + parameter Boolean temperatureDependent = true + "Set to false to make hA independent of temperature" + annotation(Dialog(tab="Advanced", group="Modeling detail"), Evaluate=true); + +protected + Real x(min=0) + "Factor for temperature dependent variation of heat transfer coefficient"; + parameter Real s(min=0, fixed=false) + "Coefficient for temperature dependence of heat transfer coefficient"; + Real fm "Fraction of actual to nominal mass flow rate"; + +initial equation + s = if temperatureDependent then + 0.014/(1+0.014*Modelica.SIunits.Conversions.to_degC(T_nominal)) else + 1; +equation + fm = if flowDependent then m_flow / m_flow_nominal else 1; + x = if temperatureDependent then 1 + s * (T-T_nominal) else 1; + if flowDependent and temperatureDependent then + hA = x * hA_nominal * AixLib.Utilities.Math.Functions.regNonZeroPower(fm, n, 0.1); + elseif flowDependent then + hA = hA_nominal * AixLib.Utilities.Math.Functions.regNonZeroPower(fm, n, 0.1); + elseif temperatureDependent then + hA = x * hA_nominal; + else + hA = hA_nominal; + end if; + +annotation ( defaultComponentName="HASin", +Documentation(info=" ++Model for convective heat transfer coefficients inside a coil. +Optionally, the convective heat transfer coefficient can +be computed as a function of temperature and mass flow rate. +
+", +revisions=" ++ This model calculates the convection coefficient h for natural convection + from a cylinder submerged in fluid. h is calcualted using Eq 9.34 from + Incropera and DeWitt (1996). + Output of the block is the hA value. +
++ The Nusselt number is computed as +
++ NuD = (0.6 + (0.387 RaD(1/6))/(1+(0.559 Pr) + (9/16))(8/27))2); +
+
+ where NuD is the Nusselt number, RaD is the
+ Rayleigh number and
+ Pr is the Prandtl number.
+ This correclation is accurate for RaD less than 1012.
+
+ h is then calculated from the Nusselt number. The equation is +
++ h = NuD k/D +
++ where k is the thermal conductivity of the fluid and D is the diameter + of the submerged cylinder. +
++ Fundamentals of Heat and Mass Transfer (Fourth Edition), Frank Incropera and David + DeWitt, John Wiley and Sons, 1996 +
+ ", revisions=" +hA_nominal
as a parameter, and compute the
+associated surface area A
. This revision was required to have a consistent
+computation of the hA
values inside and outside of the coil in the
+heat exchanger model of the water tank.
++Function that internally solves a scalar equation. +
+", +revisions=" +flowRegime
from
+AixLib.Fluid.Types.HeatExchangerFlowRegime
+to Integer
.
+Modelica.Media.Common.OneNonLinearEquation
instead of
+Buildings.Utilities.Math.BaseClasses.OneNonLinearEquation
.
+epsilon_ntuZ
computes NTU^(-0.22)
.
+QMax_flow > 0
.
", revisions="
prescribedHeatFlowRate1=true
and
+prescribedHeatFlowRate2=true
.T_in1
and T_in2
to Medium1.Temperature
and Medium2.Temperature
to avoid an error because of conflicting start values if
-
+
Buildings.Examples.ChillerPlant.BaseClasses.Controls.Examples.ChillerSetPointControl
is translated using pedantic mode in Dymola 2016.
This is for
diff --git a/AixLib/Fluid/HeatExchangers/BaseClasses/PartialHeatGen.mo b/AixLib/Fluid/HeatExchangers/BaseClasses/PartialHeatGen.mo
deleted file mode 100644
index f1d3f35447..0000000000
--- a/AixLib/Fluid/HeatExchangers/BaseClasses/PartialHeatGen.mo
+++ /dev/null
@@ -1,52 +0,0 @@
-within AixLib.Fluid.HeatExchangers.BaseClasses;
-partial model PartialHeatGen
- "Base Class for modelling heat generation equipment of different types"
- extends AixLib.Fluid.Interfaces.PartialTwoPortInterface;
-
- parameter Modelica.SIunits.Temperature T_ref = 293.15;
- Fluid.MixingVolumes.MixingVolume
- volume(
- m_flow_nominal=0.01,
- V=0.01,
- nPorts=2) annotation(Placement(transformation(extent={{-10,0},{10,20}})));
-
- Fluid.Sensors.TemperatureTwoPort
- T_in(
- m_flow_nominal=0.01) annotation(Placement(transformation(extent = {{-80, -10}, {-60, 10}})));
- Fluid.Sensors.MassFlowRate
- massFlowSensor annotation(Placement(transformation(extent = {{-50, -10}, {-30, 10}})));
-equation
- connect(port_a, T_in.port_a) annotation (Line(
- points={{-100,0},{-80,0}},
- color={0,127,255}));
- connect(T_in.port_b, massFlowSensor.port_a) annotation (Line(
- points={{-60,0},{-50,0}},
- color={0,127,255}));
- connect(massFlowSensor.port_b, volume.ports[1]) annotation (Line(
- points={{-30,0},{-2,0}},
- color={0,127,255}));
- connect(volume.ports[2], port_b) annotation (Line(
- points={{2,0},{100,0}},
- color={0,127,255}));
- annotation(Documentation(info = "
- This partial model is a base class for modelling all heat generation - equipment. It includes the necessary fluid port and a fluid volume with a - thermal connector for heating the fluid.
-This model is just a start and is likely to change in order to be suitable - for all heat generation equipment within the lecture.
- ", revisions=" -+This function is used to identify the dynamic viscosity of water at a given temperature. +The function used is a fourth order polynomial fit to data from Incropera and Dewitt (1996). +
++Fundamentals of Heat and Mass Transfer (Fourth Edition), Frank Incropera and David P. Dewitt, +John Wiley & Sons, 1996 +
+", +revisions=" ++This function computes the heat exchanger effectiveness for a given number of transfer units, capacity flow ratio and heat exchanger flow regime. +The different options for the flow regime are declared in + +AixLib.Fluid.Types.HeatExchangerFlowRegime. +
+", +revisions=" +flowRegime
from
+AixLib.Fluid.Types.HeatExchangerFlowRegime
+to Integer
.
+This was required because this argument is passed in Dymola 2015 in the function
+
+AixLib.Fluid.HeatExchangers.BaseClasses.epsilon_C
+as an integer. Without this change, a translation warning occurs.
+assert
statement as OpenModelica
+had an error when comparing enumerations with integers.
++This function is used to identify the isobaric expansion coefficient of water at a +given temperature. The function used is a fourth order polynomial fit to data from +Incropera and Dewitt (1996). +
++Fundamentals of Heat and Mass Transfer (Fourth Edition), Frank Incropera and David P. +Dewitt, John Wiley & Sons, 1996 +
+", +revisions=" ++This function computes the number of transfer units for a given heat exchanger effectiveness, +capacity flow ratio and heat exchanger flow regime. +The different options for the flow regime are declared in + +AixLib.Fluid.Types.HeatExchangerFlowRegime. +
+
+Note that for the flow regime CrossFlowUnmixed
, computing the
+function requires the numerical solution of an equation in one variable.
+This is handled internally and not exposed to the global solver.
+
flowRegime
from
+AixLib.Fluid.Types.HeatExchangerFlowRegime
+to Integer
.
+This was done to have the same argument list as
+
+AixLib.Fluid.HeatExchangers.BaseClasses.epsilon_ntuZ,
+in which the type had to be changed.
+Internal.solve
+to avoid a warning during model check in Dymola 2015.
+Modelica.Media.Common.OneNonLinearEquation
instead of
+Buildings.Utilities.Math.BaseClasses.OneNonLinearEquation
.
++This function is used to identify the Prandtl number of water at a given temperature. +The function used is a fourth order polynomial fit to data from Incropera and Dewitt +(1996). +
++Fundamentals of Heat and Mass Transfer (Fourth Edition), Frank Incropera and David P. +Dewitt, John Wiley & Sons, 1996 +
+", +revisions=" ++Model for a constant temperature evaporator or condenser based on a ε-NTU +heat exchanger model. +
++The heat exchanger effectiveness is calculated from the number of transfer units +(NTU): +
++ε = 1 - exp(UA ⁄ (ṁ cp)) +
+
+Optionally, this model can have a flow resistance.
+If no flow resistance is requested, set dp_nominal=0
.
+
+This model does not consider any superheating or supercooling on the refrigerant +side. The refrigerant is considered to exchange heat at a constant temperature +throughout the heat exchanger. +
+", +revisions=" +port_b
.
This model forces the outlet temperature at port_b
to be equal to the temperature
of the input signal TSet
, subject to optional limits on the
heating or cooling capacity QMax_flow ≥ 0
and QMin_flow ≤ 0
.
-Similarly than for the temperature,
+Similarly than for the temperature,
this model also forces the outlet water mass fraction at port_b
to be
no lower than the
input signal X_wSet
, subject to optional limits on the
diff --git a/AixLib/Fluid/HeatExchangers/Radiators/BaseClasses/package.order b/AixLib/Fluid/HeatExchangers/Radiators/BaseClasses/package.order
index 6074b2932d..e1338c0e42 100644
--- a/AixLib/Fluid/HeatExchangers/Radiators/BaseClasses/package.order
+++ b/AixLib/Fluid/HeatExchangers/Radiators/BaseClasses/package.order
@@ -1,7 +1,8 @@
CalcExcessTemp
-calcHeaterExcessTemp
HeatConvRadiator
MultiLayerThermalDelta
PressureDropRadiator
RadiatorTypes
RadiatorWall
+calcHeaterExcessTemp
+RadiatorTypes
diff --git a/AixLib/Fluid/HeatExchangers/Validation/EvaporatorCondenser.mo b/AixLib/Fluid/HeatExchangers/Validation/EvaporatorCondenser.mo
new file mode 100644
index 0000000000..5d4a345c37
--- /dev/null
+++ b/AixLib/Fluid/HeatExchangers/Validation/EvaporatorCondenser.mo
@@ -0,0 +1,91 @@
+within AixLib.Fluid.HeatExchangers.Validation;
+model EvaporatorCondenser "Test model for the evaporator or condenser model"
+ extends Modelica.Icons.Example;
+
+ package Medium = AixLib.Media.Water "Medium model";
+
+ parameter Modelica.SIunits.MassFlowRate m_flow_nominal = 0.01
+ "Nominal mass flow rate";
+
+ Modelica.Thermal.HeatTransfer.Sources.FixedTemperature ref(T=283.15)
+ "Refrigerant temperature"
+ annotation (Placement(transformation(extent={{-64,-60},{-44,-40}})));
+
+ Modelica.Thermal.HeatTransfer.Sensors.HeatFlowSensor heaFlo
+ "Heat flow rate sensor"
+ annotation (Placement(transformation(extent={{-30,-60},{-10,-40}})));
+ Modelica.Fluid.Sources.MassFlowSource_T sou(
+ nPorts=1,
+ redeclare package Medium = Medium,
+ m_flow=0.1,
+ use_m_flow_in=true,
+ T=323.15) "Flow source"
+ annotation (Placement(transformation(extent={{-44,-10},{-24,10}})));
+
+ Modelica.Fluid.Sources.FixedBoundary sin(
+ redeclare package Medium = Medium,
+ p=0,
+ nPorts=1) "Sink"
+ annotation (Placement(transformation(extent={{78,-10},{58,10}})));
+
+ AixLib.Fluid.HeatExchangers.EvaporatorCondenser eva(
+ redeclare package Medium = Medium,
+ m_flow(start=0.1),
+ dp(start=10),
+ UA=100,
+ massDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
+ dp_nominal=0,
+ tau=5,
+ energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
+ m_flow_nominal=m_flow_nominal) "Evaporator"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+
+ Modelica.Blocks.Sources.Ramp m_flow(
+ duration=100,
+ height=9*m_flow_nominal,
+ offset=m_flow_nominal) "Mass flow rate"
+ annotation (Placement(transformation(extent={{-88,-2},{-68,18}})));
+ AixLib.Fluid.Sensors.TemperatureTwoPort senTem(
+ m_flow_nominal=m_flow_nominal,
+ redeclare package Medium = Medium,
+ tau=0.01,
+ initType=Modelica.Blocks.Types.Init.SteadyState) "Temperature sensor"
+ annotation (Placement(transformation(extent={{24,-10},{44,10}})));
+equation
+ connect(ref.port, heaFlo.port_a)
+ annotation (Line(points={{-44,-50},{-37,-50},{-30,-50}}, color={191,0,0}));
+ connect(heaFlo.port_b, eva.port_ref)
+ annotation (Line(points={{-10,-50},{0,-50},{0,-6}}, color={191,0,0}));
+ connect(sou.ports[1], eva.port_a)
+ annotation (Line(points={{-24,0},{-10,0}}, color={0,127,255}));
+ connect(m_flow.y, sou.m_flow_in)
+ annotation (Line(points={{-67,8},{-44,8}}, color={0,0,127}));
+ connect(eva.port_b, senTem.port_a)
+ annotation (Line(points={{10,0},{18,0},{24,0}}, color={0,127,255}));
+ connect(senTem.port_b, sin.ports[1])
+ annotation (Line(points={{44,0},{52,0},{58,0}}, color={0,127,255}));
+ annotation ( __Dymola_Commands(file= "modelica://AixLib/Resources/Scripts/Dymola/Fluid/HeatExchangers/Validation/EvaporatorCondenser.mos"
+ "Simulate and plot"),
+ experiment(
+ Tolerance=1e-6, StopTime=100),
+ Documentation(info="
++Model that demonstrates the use of the + +AixLib.Fluid.HeatExchangers.EvaporatorCondenser model. +
++The fluid flow rate is increased from ṁ = 0.01 kg/s to +ṁ = 0.10 kg/s over 100 seconds. As a result, the heat exchanger +effectiveness and the fluid temperature difference in the heat exchanger +decrease. +
+", revisions=" ++Partial model for a water to water heat pump, as detailed in Jin (2002). The +model for the compressor is a partial model and needs to be replaced by one of the +compressor models in + +AixLib.Fluid.HeatPumps.Compressors. +
++H. Jin. + +Parameter estimation based models of water source heat pumps. + +PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. +
+", revisions=" +energyDynamics=DynamicFreeInitial
.
+See
+#769.
++This package contains base classes that are used to construct the models in +AixLib.Fluid.HeatPumps. +
+")); end BaseClasses; diff --git a/AixLib/Fluid/HeatPumps/BaseClasses/package.order b/AixLib/Fluid/HeatPumps/BaseClasses/package.order index 168e05c6fe..7fe7202901 100644 --- a/AixLib/Fluid/HeatPumps/BaseClasses/package.order +++ b/AixLib/Fluid/HeatPumps/BaseClasses/package.order @@ -1,2 +1,3 @@ CycleHP +PartialWaterToWater Functions diff --git a/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/PartialWaterToWater.mo b/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/PartialWaterToWater.mo new file mode 100644 index 0000000000..62c50b918b --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/PartialWaterToWater.mo @@ -0,0 +1,119 @@ +within AixLib.Fluid.HeatPumps.Calibration.BaseClasses; +model PartialWaterToWater + "Partial model for calibration of water to water heat pumps" + + replaceable package Medium1 = Modelica.Media.Interfaces.PartialMedium + "Medium model at the condenser side"; + + replaceable package Medium2 = Modelica.Media.Interfaces.PartialMedium + "Medium model at the evaporator side"; + + replaceable package ref = AixLib.Media.Refrigerants.R410A + "Refrigerant model"; + + parameter Modelica.SIunits.MassFlowRate m1_flow_nominal + "Nominal mass flow rate on condenser side"; + parameter Modelica.SIunits.MassFlowRate m2_flow_nominal + "Nominal mass flow rate on evaporator side"; + + parameter Modelica.SIunits.Pressure dp1_nominal = 1000 + "Pressure drop at nominal mass flow rate on condenser side"; + parameter Modelica.SIunits.Pressure dp2_nominal = 1000 + "Pressure drop at nominal mass flow rate on evaporator side"; + + parameter Modelica.SIunits.ThermalConductance UACon + "Thermal conductance of condenser"; + + parameter Modelica.SIunits.ThermalConductance UAEva + "Thermal conductance of evaporator"; + + Modelica.Blocks.Sources.CombiTimeTable calDat( + tableOnFile=true, + columns=2:5) + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + + Modelica.Blocks.Routing.DeMultiplex4 splDat + "De-multiplex" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + + AixLib.Fluid.Sources.FixedBoundary sin2(redeclare final package Medium = + Medium2, nPorts=1) "Boundary condition" annotation (Placement( + transformation(extent={{-10,-10},{10,10}}, origin={-50,-40}))); + Modelica.Fluid.Sources.MassFlowSource_T Sou( + redeclare final package Medium = Medium2, + nPorts=1, + use_m_flow_in=true, + use_T_in=true) + "Mass flow source" + annotation (Placement(transformation(extent={{60,-16},{40,4}}))); + AixLib.Fluid.Sources.FixedBoundary sin1(redeclare final package Medium = + Medium1, nPorts=1) "Pressure boundary condition" annotation (Placement( + transformation(extent={{10,-10},{-10,10}}, origin={50,30}))); + + Modelica.Fluid.Sources.MassFlowSource_T loa( + redeclare final package Medium = Medium1, + nPorts=1, + use_m_flow_in=true, + use_T_in=true) "Mass flow source" + annotation (Placement(transformation(extent={{-60,-2},{-40,18}}))); + + replaceable AixLib.Fluid.HeatPumps.BaseClasses.PartialWaterToWater heaPum + constrainedby AixLib.Fluid.HeatPumps.BaseClasses.PartialWaterToWater( + redeclare final package Medium1 = Medium1, + redeclare final package Medium2 = Medium2, + redeclare final package ref = ref, + final m1_flow_nominal=m1_flow_nominal, + final m2_flow_nominal=m2_flow_nominal, + final dp1_nominal=dp1_nominal, + final dp2_nominal=dp2_nominal, + enable_variable_speed=false, + show_T=true) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + + Modelica.Blocks.Sources.IntegerConstant isOn(k=1) + "Control signal" + annotation (Placement(transformation(extent={{-50,-16},{-38,-4}}))); + +equation + connect(calDat.y, splDat.u) + annotation (Line(points={{-119,10},{-119,10},{-102,10}}, color={0,0,127})); + connect(splDat.y1[1], Sou.T_in) annotation (Line(points={{-79,19},{-76,19},{-76, + 84},{92,84},{92,-2},{62,-2}}, color={0,0,127})); + connect(splDat.y3[1], Sou.m_flow_in) annotation (Line(points={{-79,7},{-72,7}, + {-72,80},{88,80},{88,2},{60,2}}, color={0,0,127})); + connect(splDat.y4[1],loa.m_flow_in) annotation (Line(points={{-79,1},{-75.5,1}, + {-75.5,16},{-60,16}}, color={0,0,127})); + connect(loa.ports[1], heaPum.port_a1) annotation (Line(points={{-40,8},{-40,8}, + {-30,8},{-20,8},{-20,6},{-10,6}}, color={0,127,255})); + connect(sin2.ports[1], heaPum.port_b2) annotation (Line(points={{-40,-40},{ + -20,-40},{-20,-6},{-10,-6}}, + color={0,127,255})); + connect(Sou.ports[1], heaPum.port_a2) + annotation (Line(points={{40,-6},{26,-6},{10,-6}}, color={0,127,255})); + connect(sin1.ports[1], heaPum.port_b1) annotation (Line(points={{40,30},{20, + 30},{20,6},{10,6}}, + color={0,127,255})); + connect(splDat.y2[1],loa.T_in) annotation (Line(points={{-79,13},{-70.5,13},{ + -70.5,12},{-62,12}}, color={0,0,127})); + + connect(isOn.y, heaPum.stage) annotation (Line(points={{-37.4,-10},{-24,-10}, + {-24,3},{-12,3}}, color={255,127,0})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-140, + -100},{100,100}})), Diagram( + coordinateSystem(preserveAspectRatio=false, extent={{-140,-100},{100, + 100}})), preferredView="info",Documentation(info=" ++Base class for the calibration of water to water heat pump models. +
++Source and load temperatures and flow rates are read from an external time table. +
+", revisions=" ++This package contains base classes that are used to construct the models in + +AixLib.Fluid.HeatPumps.Calibration. +
+")); +end BaseClasses; diff --git a/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/package.order b/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/package.order new file mode 100644 index 0000000000..407307198e --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Calibration/BaseClasses/package.order @@ -0,0 +1 @@ +PartialWaterToWater diff --git a/AixLib/Fluid/HeatPumps/Calibration/ScrollWaterToWater.mo b/AixLib/Fluid/HeatPumps/Calibration/ScrollWaterToWater.mo new file mode 100644 index 0000000000..e4d3d06158 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Calibration/ScrollWaterToWater.mo @@ -0,0 +1,89 @@ +within AixLib.Fluid.HeatPumps.Calibration; +model ScrollWaterToWater + "Calibration model for scroll water to water heat pump" + extends Modelica.Icons.Example; + extends AixLib.Fluid.HeatPumps.Calibration.BaseClasses.PartialWaterToWater( + redeclare package Medium1 = AixLib.Media.Water, + redeclare package Medium2 = AixLib.Media.Water, + redeclare AixLib.Fluid.HeatPumps.ScrollWaterToWater heaPum( + datHeaPum( + etaEle=etaEle, + PLos=PLos, + dTSup=dTSup, + UACon=UACon, + UAEva=UAEva, + volRat=volRat, + V_flow_nominal=V_flow_nominal, + leaCoe=leaCoe), + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + enable_temperature_protection=false), + calDat(tableName="ManufacturerData", + fileName=Modelica.Utilities.Files.loadResource( + "modelica://AixLib/Resources/src/fluid/heatpumps/calibration/manufacturerData.txt")), + UACon = 12000.0, + UAEva = 12000.0, + m1_flow_nominal=1.42, + m2_flow_nominal=1.42); + + parameter Real volRat(min = 1.0, unit = "1") = 2.0 + "Built-in volume ratio"; + + parameter Modelica.SIunits.VolumeFlowRate V_flow_nominal(min = 0) = 0.009 + "Refrigerant volume flow rate at suction"; + + parameter Modelica.SIunits.MassFlowRate leaCoe(min = 0) = 0.03 + "Leakage coefficient"; + + parameter Modelica.SIunits.Efficiency etaEle = 0.696 + "Electro-mechanical efficiency of the compressor"; + + parameter Modelica.SIunits.Power PLos(min = 0) = 500.0 + "Constant part of the compressor power losses"; + + parameter Modelica.SIunits.TemperatureDifference dTSup(min = 0) = 10.0 + "Superheating at compressor suction"; + + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-140,-100}, + {100,100}})), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-140,-100},{100,100}}), + graphics={Text(extent={{-88,92},{-64,90}}, + lineColor={28,108,200})}), + preferredView="info", + __Dymola_Commands(file= "modelica://AixLib/Resources/Scripts/Dymola/Fluid/HeatPumps/Calibration/ScrollWaterToWater.mos" + "Simulate and plot"), + experiment(Tolerance=1e-6, StopTime=142), +Documentation(info=" ++Calibration model for the calibration of models for water to water heat pump +with scroll compressor. +
++Source and load temperatures and flow rates are read from an external time +table. +
++This model is called from the Python code that computes heat pump model +parameters from the performance data. +Heat pump model parameters are obtained through an optimization procedure that +minimizes the difference between the modeled and tabulated (from the +manufacturers) capacity and power input of the heat pump. +
++The optimization is done using a Python implementation of the heat pump model, +found in AixLib/Resources/src/fluid/heatpumps/calibration/. +Heat pump model parameters are verified using this modelica model after their +evaluation by the Python code. +
+
+Documentation for the Python code is in the directory
+AixLib/Resources/src/fluid/heatpumps/calibration/doc/build/html
.
+
+This package contains runnable models that are used to calibrate the heat pump models in +AixLib.Fluid.HeatPumps. +
+")); +end Calibration; diff --git a/AixLib/Fluid/HeatPumps/Calibration/package.order b/AixLib/Fluid/HeatPumps/Calibration/package.order new file mode 100644 index 0000000000..f919b4a656 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Calibration/package.order @@ -0,0 +1,2 @@ +ScrollWaterToWater +BaseClasses diff --git a/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/PartialCompressor.mo b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/PartialCompressor.mo new file mode 100644 index 0000000000..34ce8572bc --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/PartialCompressor.mo @@ -0,0 +1,170 @@ +within AixLib.Fluid.HeatPumps.Compressors.BaseClasses; +partial model PartialCompressor "Partial compressor model" + + replaceable package ref = AixLib.Media.Refrigerants.R410A + "Refrigerant in the component" + annotation (choicesAllMatching = true); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port_a + "Refrigerant connector a (corresponding to the evaporator)" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b port_b + "Refrigerant connector b (corresponding to the condenser)" + annotation (Placement(transformation(extent={{110,-10},{90,10}}))); + + Modelica.Blocks.Interfaces.RealInput y(final unit = "1") + "Modulating signal for compressor frequency, equal to 1 at full load conditions" + annotation (Placement( + transformation( + extent={{-120,70},{-100,50}}, + rotation = -90))); + + Modelica.Blocks.Interfaces.RealOutput P( + final quantity="Power", + final unit="W") "Electric power consumed by compressor" + annotation (Placement(transformation(extent={{100,50},{120,70}}, + rotation=-90))); + + Modelica.SIunits.SpecificEnthalpy hEva + "Specific enthalpy of saturated vapor at evaporator temperature"; + + Modelica.SIunits.SpecificEnthalpy hCon + "Specific enthalpy of saturated liquid at condenser temperature"; + + Modelica.SIunits.AbsolutePressure pEva(start = 100e3) + "Pressure of saturated vapor at evaporator temperature"; + + Modelica.SIunits.AbsolutePressure pCon(start = 1000e3) + "Pressure of saturated liquid at condenser temperature"; + + Modelica.SIunits.AbsolutePressure pDis(start = 1000e3) + "Discharge pressure of the compressor"; + + Modelica.SIunits.AbsolutePressure pSuc(start = 100e3) + "Suction pressure of the compressor"; + + Modelica.SIunits.Temperature TSuc + "Temperature at suction of the compressor"; + + Boolean isOn(fixed=false) + "State of the compressor, true if turned on"; + + Modelica.SIunits.SpecificVolume vSuc(start = 1e-4, min = 0) + "Specific volume of the refrigerant at suction of the compressor"; + +protected + Real PR(min = 0.0, unit = "1", start = 2.0) + "Pressure ratio"; + +initial equation + pre(isOn) = if y > 0.01 then true else false; + +equation + isOn = not pre(isOn) and y > 0.01 or pre(isOn) and y >= 0.005; + + PR = max(pDis/pSuc, 0); + + // The specific volume at suction of the compressor is calculated + // from the Martin-Hou equation of state + vSuc = ref.specificVolumeVap_pT(pSuc, TSuc); + + // Saturation pressure of refrigerant vapor at condenser temperature + pCon = ref.pressureSatVap_T(port_b.T); + + // Specific enthaply of saturated liquid refrigerant at condenser temperature + hCon = ref.enthalpySatLiq_T(port_b.T); + + // Saturation pressure of refrigerant vapor at evaporator temperature + pEva = ref.pressureSatVap_T(port_a.T); + + // Specific enthaply of saturated refrigerant vapor at evaporator temperature + hEva = ref.enthalpySatVap_T(port_a.T); + + // Assert statements to verify that the refrigerant temperatures are within + // bounds of the property data in the refrigerant package + assert(port_b.T > ref.T_min and port_b.T < ref.TCri, + "Condensing temperature must be above the minimum refrigerant temperature + and below the critical temperature."); + assert(port_a.T > ref.T_min and port_a.T < ref.TCri, + "Evaporating temperature must be above the minimum refrigerant temperature + and below the critical temperature."); + + annotation ( + Icon(coordinateSystem(preserveAspectRatio=false,extent={{-100,-100}, + {100,100}}), graphics={ + Text(extent={{62,-82},{72,-98}}, textString="P", + lineColor={0,0,127}), + Text(extent={{62,98},{72,82}}, + lineColor={0,0,127}, + textString="y"), + Polygon( + points={{-70,-80},{-70,80},{70,60},{70,-60},{-70,-80}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-100,-5},{100,5}}, + lineColor={255,0,0}, + pattern=LinePattern.None, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid), + Line(points={{60,-58},{60,-100}}, color={0,0,255}), + Line(points={{60,58},{60,100}}, color={0,0,0}), + Text( + extent={{-149,-114},{151,-154}}, + lineColor={0,0,255}, + textString="%name")}), + defaultComponentName="com", + Documentation(info=" ++This is the base class for the compressor model. +
+
+The model evaluates the evaporating pressure of the refrigerant peva,
+the specific enthalpy of the evaporating saturated refrigerant vapor heva,
+the condensing pressure of the refrigerant pcon
+and the specific enthalpy of the condensing saturated liquid refrigerant hcond
+at the evaporating temperature Teva = port_a.T
+and condensing temperature Tcon = port_b.T
.
+
+Thermodynamic properties are evaluated from functions contained in the specified refrigerant package. +
++The model assumes isothermal condensation and evaporation, therefore +refrigerant mass flow is not accounted for and heat ports are used instead of fluid ports. +
+", revisions=" +pressure_error
as
+this is replaced by
+
+AixLib.Fluid.HeatPumps.Compressors.BaseClasses.TemperatureProtection.
+See #769.
+isOn
to use the same construct as the hysteresis block,
+and to work around a JModelica limitation.when
conditions and moved common assignments
+to this base class.+Temperature protection block for heat pumps. +This block overrides the heat pump control +signal when the condenser temperature is too high, +the evaporator temperature is too low, +or the temperature difference between +the condenser and evaporator is negative. +
+
+Temperature bounds are set using TConMax
+and TEvaMin
.
+
+Parameter dTHys
may be used
+to change the hysteresis interval.
+
+Model that tests temperature protection functionality. +
+", revisions=" ++This package contains validation models for the classes in + +AixLib.Fluid.HeatPumps.Compressors.BaseClasses. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/Validation/package.order b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/Validation/package.order new file mode 100644 index 0000000000..eacdd6c972 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/Validation/package.order @@ -0,0 +1 @@ +TemperatureProtection diff --git a/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.mo b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.mo new file mode 100644 index 0000000000..7f769b54b5 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.mo @@ -0,0 +1,13 @@ +within AixLib.Fluid.HeatPumps.Compressors; +package BaseClasses "Package with base classes for compressors" + extends Modelica.Icons.BasesPackage; + + + annotation (preferredView="info", Documentation(info=" ++This package contains base classes that are used to construct the models in + +AixLib.Fluid.HeatPumps.Compressors. +
+")); +end BaseClasses; diff --git a/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.order b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.order new file mode 100644 index 0000000000..4e706757f8 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/BaseClasses/package.order @@ -0,0 +1,3 @@ +PartialCompressor +TemperatureProtection +Validation diff --git a/AixLib/Fluid/HeatPumps/Compressors/ReciprocatingCompressor.mo b/AixLib/Fluid/HeatPumps/Compressors/ReciprocatingCompressor.mo new file mode 100644 index 0000000000..79c2190206 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/ReciprocatingCompressor.mo @@ -0,0 +1,129 @@ +within AixLib.Fluid.HeatPumps.Compressors; +model ReciprocatingCompressor + "Model for a reciprocating compressor, based on Jin (2002)" + extends AixLib.Fluid.HeatPumps.Compressors.BaseClasses.PartialCompressor; + + parameter Modelica.SIunits.VolumeFlowRate pisDis + "Piston displacement"; + + parameter Real cleFac( + min = 0, + final unit = "1") + "Clearance factor"; + + parameter Modelica.SIunits.Efficiency etaEle + "Electro-mechanical efficiency of the compressor"; + + parameter Modelica.SIunits.Power PLos(min = 0) + "Constant part of the compressor power losses"; + + parameter Modelica.SIunits.AbsolutePressure pDro + "Pressure drop at suction and discharge of the compressor"; + + parameter Modelica.SIunits.TemperatureDifference dTSup(min = 0) + "Superheating at compressor suction"; + + Modelica.SIunits.MassFlowRate m_flow + "Refrigerant mass flow rate"; + + Modelica.SIunits.Power PThe + "Theoretical power consumed by the compressor"; + + Modelica.SIunits.Efficiency COP + "Heating COP of the compressor"; + +protected + Modelica.SIunits.IsentropicExponent k(start = 1.2) + "Isentropic exponent of the refrigerant"; + + Real pisDis_norm + "Normalized piston displacement at part load conditions"; + +equation + // Limit compressor speed to the full load speed + pisDis_norm = AixLib.Utilities.Math.Functions.smoothLimit(y, 0.0, 1.0, 0.001); + + if isOn then + // Suction pressure + pSuc = AixLib.Utilities.Math.Functions.smoothMin(pEva - pDro, pCon - pDro, 0.01*ref.pCri); + // Discharge pressure + pDis = pCon + pDro; + // Refrigerant mass flow rate + k = ref.isentropicExponentVap_Tv(TSuc, vSuc); + m_flow = pisDis_norm*pisDis/vSuc*(1 + cleFac + - cleFac*(PR)^(1/k)); + // Theoretical power of the compressor + PThe = k/(k-1) * m_flow*pSuc*vSuc*((PR)^((k-1)/k)-1); + // Power consumed by the compressor + P = PThe/etaEle + PLos; + // Temperature at suction of the compressor + TSuc = port_a.T + dTSup; + // Energy balance of the compressor + port_a.Q_flow = m_flow * (hEva - hCon); + port_b.Q_flow = - (port_a.Q_flow + P); + -port_b.Q_flow = P * COP; + else + // Heat pump is turned off + k = 1.0; + pSuc = pEva; + pDis = pCon; + m_flow = 0; + PThe = 0; + P = 0; + TSuc = port_a.T; + port_a.Q_flow = 0; + port_b.Q_flow = 0; + COP = 1.0; + end if; + + annotation ( defaultComponentName="scrCom", + Documentation(info=" ++Model for a reciprocating processor, as detailed in Jin (2002). The rate of heat transferred to the evaporator is given by: +
++Q̇Eva = ṁref ( hVap(TEva) - hLiq(TCon) ). +
++The power consumed by the compressor is given by a linear efficiency relation: +
++P = PTheoretical / η + PLoss,constant. +
++Variable speed is acheived by multiplying the full load piston displacement +by the normalized compressor speed. The power and heat transfer rates are forced +to zero if the resulting heat pump state has higher evaporating pressure than +condensing pressure. +
++The compression process is assumed isentropic. The thermal energy +of superheating is ignored in the evaluation of the heat transferred to the refrigerant +in the evaporator. There is no supercooling. +
++H. Jin. + +Parameter estimation based models of water source heat pumps. + +PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. +
+", revisions=" +pressure_error
as
+this is replaced by
+
+AixLib.Fluid.HeatPumps.Compressors.BaseClasses.TemperatureProtection.
+See #769.
++Model for a scroll processor, as detailed in Jin (2002). The rate of heat transferred to the evaporator is given by: +
++Q̇Eva = ṁref ( hVap(TEva) - hLiq(TCon) ). +
++The power consumed by the compressor is given by a linear efficiency relation: +
++P = PTheoretical / η + PLoss,constant. +
++Variable speed is achieved by multiplying the full load suction volume flow rate +by the normalized compressor speed. The power and heat transfer rates are forced +to zero if the resulting heat pump state has higher evaporating pressure than +condensing pressure. +
++The compression process is assumed isentropic. The thermal energy +of superheating is ignored in the evaluation of the heat transferred to the refrigerant +in the evaporator. There is no supercooling. +
++H. Jin. + +Parameter estimation based models of water source heat pumps. + +PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. +
+", revisions=" +pressure_error
as
+this is replaced by
+
+AixLib.Fluid.HeatPumps.Compressors.BaseClasses.TemperatureProtection.
+See #769.
++Model that demonstrates the use of the ReciprocatingCompressor model. +
++The compressor power, condenser heat transfer rate and evaporator heat transfer rate are calculated for given refrigerant temperatures. +
+", revisions=" ++Model that demonstrates the use of the ReciprocatingCompressor model. +
++The compressor power, condenser heat transfer rate and evaporator heat transfer +rate are calculated for zero control input to compressor. +
+", revisions=" ++Model that demonstrates the use of the ScrollCompressor model. +
++The compressor power, condenser heat transfer rate and evaporator heat transfer rate are calculated for given refrigerant temperatures. +
+", revisions=" ++Model that demonstrates the use of the ScrollCompressor model. +
++The compressor power, condenser heat transfer rate and evaporator heat transfer +rate are calculated for zero control input to compressor. +
+", revisions=" ++This package contains validation models for the classes in + +AixLib.Fluid.HeatPumps.Compressors. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); + +end Validation; diff --git a/AixLib/Fluid/HeatPumps/Compressors/Validation/package.order b/AixLib/Fluid/HeatPumps/Compressors/Validation/package.order new file mode 100644 index 0000000000..3c3d12f241 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/Validation/package.order @@ -0,0 +1,4 @@ +ReciprocatingCompressor +ReciprocatingCompressor_ZeroInput +ScrollCompressor +ScrollCompressor_ZeroInput diff --git a/AixLib/Fluid/HeatPumps/Compressors/package.mo b/AixLib/Fluid/HeatPumps/Compressors/package.mo new file mode 100644 index 0000000000..c324cb39f8 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/package.mo @@ -0,0 +1,11 @@ +within AixLib.Fluid.HeatPumps; +package Compressors "Package with compressor models" + extends Modelica.Icons.VariantsPackage; + + annotation (preferredView="info", Documentation(info=" ++ This package contains components models for compressors. +
+ ")); + +end Compressors; diff --git a/AixLib/Fluid/HeatPumps/Compressors/package.order b/AixLib/Fluid/HeatPumps/Compressors/package.order new file mode 100644 index 0000000000..2906b80896 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Compressors/package.order @@ -0,0 +1,4 @@ +ReciprocatingCompressor +ScrollCompressor +Validation +BaseClasses diff --git a/AixLib/Fluid/HeatPumps/Data/BaseClasses/HeatPumps.mo b/AixLib/Fluid/HeatPumps/Data/BaseClasses/HeatPumps.mo new file mode 100644 index 0000000000..42dc0466de --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/BaseClasses/HeatPumps.mo @@ -0,0 +1,55 @@ +within AixLib.Fluid.HeatPumps.Data.BaseClasses; +partial record HeatPumps + "Base record for calibrated heat pump models" + extends Modelica.Icons.Record; + + parameter Modelica.SIunits.Efficiency etaEle + "Electro-mechanical efficiency of the compressor" + annotation (Dialog(group="Compressor")); + + parameter Modelica.SIunits.Power PLos(min = 0) + "Constant part of the compressor power losses" + annotation (Dialog(group="Compressor")); + + parameter Modelica.SIunits.TemperatureDifference dTSup(min = 0) + "Superheating at compressor suction" + annotation (Dialog(group="Evaporator")); + + parameter Modelica.SIunits.ThermalConductance UACon + "Thermal conductance of condenser between water and refrigerant" + annotation (Dialog(group="Condenser")); + + parameter Modelica.SIunits.ThermalConductance UAEva + "Thermal conductance of evaporator between water and refrigerant" + annotation (Dialog(group="Evaporator")); + + annotation ( + defaultComponentName="datHeaPum", + preferredView="info", + Documentation(info=" ++This is the base record for heat pump models. +
+", +revisions=" ++This is the base record for reciprocating water to water heat pump models. +
+", +revisions=" ++Package with data for water to water heat pump models + +AixLib.Fluid.HeatPumps.ReciprocatingWaterToWater +with reciprocating compressor. +
+")); +end ReciprocatingWaterToWater; diff --git a/AixLib/Fluid/HeatPumps/Data/ReciprocatingWaterToWater/package.order b/AixLib/Fluid/HeatPumps/Data/ReciprocatingWaterToWater/package.order new file mode 100644 index 0000000000..8470d61195 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ReciprocatingWaterToWater/package.order @@ -0,0 +1 @@ +Generic diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Generic.mo b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Generic.mo new file mode 100644 index 0000000000..3144112519 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Generic.mo @@ -0,0 +1,37 @@ +within AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater; +record Generic "Record for scroll water to water heat pump" + extends BaseClasses.HeatPumps; + + parameter Real volRat( + min = 1.0, + unit = "1") + "Built-in volume ratio" + annotation (Dialog(group="Compressor")); + + parameter Modelica.SIunits.VolumeFlowRate V_flow_nominal(min=0) + "Refrigerant volume flow rate at suction" + annotation (Dialog(group="Compressor")); + + parameter Modelica.SIunits.MassFlowRate leaCoe(min = 0) + "Leakage coefficient" + annotation (Dialog(group="Compressor")); + + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName="datHeaPum", + preferredView="info", + Documentation(info=" ++This is the base record for scroll water to water heat pump models. +
+", +revisions=" ++Calibrated parameters for Carrier 50PSW122. +
+", revisions=" ++Calibrated parameters for Carrier 50PSW180. +
+", revisions=" ++Calibrated parameters for Carrier 50PSW210. +
+", revisions=" ++Calibrated parameters for Carrier 50PSW240. +
+", revisions=" ++Calibrated parameters for Carrier 50PSW360. +
+", revisions=" ++Calibrated parameters for Carrier 50PSW420. +
+", revisions=" ++Calibrated parameters for ClimateMaster TMW036. +
+", revisions=" ++Calibrated parameters for ClimateMaster TMW060. +
+", revisions=" ++Calibrated parameters for ClimateMaster TMW120. +
+", revisions=" ++Calibrated parameters for ClimateMaster TMW170. +
+", revisions=" ++Calibrated parameters for ClimateMaster TMW340. +
+", revisions=" ++Calibrated parameters for Daikin WRA036. +
+", revisions=" ++Calibrated parameters for Daikin WRA048. +
+", revisions=" ++Calibrated parameters for Daikin WRA060. +
+", revisions=" ++Calibrated parameters for Daikin WRA072. +
+", revisions=" ++Calibrated parameters for Daikin WRA120. +
+", revisions=" ++Calibrated parameters for Daikin WRA150. +
+", revisions=" ++Calibrated parameters for Daikin WRA180. +
+", revisions=" ++Calibrated parameters for Daikin WRA240. +
+", revisions=" ++Calibrated parameters for Daikin WRA300. +
+", revisions=" ++Calibrated parameters for Daikin WRA360. +
+", revisions=" ++Calibrated parameters for Daikin WRA420. +
+", revisions=" ++Calibrated parameters for Trane EXW060. +
+", revisions=" ++Calibrated parameters for Trane EXW120. +
+", revisions=" ++Calibrated parameters for Trane EXW240. +
+", revisions=" ++Generated by Filip Jorissen on 2017-05-19. +
+")); diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A29_37kW_6_0COP_R410A.mo b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A29_37kW_6_0COP_R410A.mo new file mode 100644 index 0000000000..51cb68feb4 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A29_37kW_6_0COP_R410A.mo @@ -0,0 +1,21 @@ +within AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater.Heating; +record Viessmann_BW301A29_37kW_6_0COP_R410A = + AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater.Generic ( + volRat = 2.17993091357, + V_flow_nominal = 0.00519094827579, + leaCoe = 0.00125206659019, + etaEle = 0.796906164099, + PLos = 99.9278169331, + dTSup = 0.532774492232, + UACon = 27989.764814, + UAEva = 58762.7503506) + "Calibrated parameters for Viessmann Vitocal 300G BW 301.A29" + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName="datHeaPum", + preferredView="info", + Documentation(info=" ++Generated by Filip Jorissen on 2017-05-19. +
+")); diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A45_58kW_5_50COP_R410A.mo b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A45_58kW_5_50COP_R410A.mo new file mode 100644 index 0000000000..828789df93 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/Viessmann_BW301A45_58kW_5_50COP_R410A.mo @@ -0,0 +1,21 @@ +within AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater.Heating; +record Viessmann_BW301A45_58kW_5_50COP_R410A = + AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater.Generic ( + volRat = 2.4538775738, + V_flow_nominal = 0.00755495224539, + leaCoe = 0.00208728004583, + etaEle = 0.742721606102, + PLos = 3.97958870109e-15, + dTSup = 0.0, + UACon = 66989.2819213, + UAEva = 147854.290996) + "Calibrated parameters for Viessmann Vitocal 300G BW 301.A45" + annotation ( + defaultComponentPrefixes = "parameter", + defaultComponentName="datHeaPum", + preferredView="info", + Documentation(info=" ++Generated by Filip Jorissen on 2017-05-19. +
+")); diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.mo b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.mo new file mode 100644 index 0000000000..f7e2126d2e --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.mo @@ -0,0 +1,13 @@ +within AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater; +package Heating "Records for scroll water to water heat pumps in heating mode" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" ++Package with data for heating performance of water to water heat pump models + +AixLib.Fluid.HeatPumps.ScrollWaterToWater +with scroll compressor. +
+")); +end Heating; diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.order b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.order new file mode 100644 index 0000000000..131116205c --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/Heating/package.order @@ -0,0 +1,28 @@ +Carrier_50PSW122_38kW_4_29COP_R410A +Carrier_50PSW180_52kW_4_50COP_R410A +Carrier_50PSW210_70kW_4_40COP_R410A +Carrier_50PSW240_93kW_4_40COP_R410A +Carrier_50PSW360_105kW_4_50COP_R410A +Carrier_50PSW420_140kW_4_40COP_R410A +ClimateMaster_TMW036_12kW_4_90COP_R410A +ClimateMaster_TMW060_21kW_4_60COP_R410A +ClimateMaster_TMW120_42kW_4_50COP_R410A +ClimateMaster_TMW170_48kW_4_30COP_R410A +ClimateMaster_TMW340_98kW_4_40COP_R410A +Daikin_WRA036_13kW_4_50COP_R410A +Daikin_WRA048_16kW_4_60COP_R410A +Daikin_WRA060_19kW_4_50COP_R410A +Daikin_WRA072_24kW_4_30COP_R410A +Daikin_WRA120_37kW_4_40COP_R410A +Daikin_WRA150_49kW_4_70COP_R410A +Daikin_WRA180_63kW_4_50COP_R410A +Daikin_WRA240_79kW_4_40COP_R410A +Daikin_WRA300_93kW_4_60COP_R410A +Daikin_WRA360_116kW_4_60COP_R410A +Daikin_WRA420_137kW_4_50COP_R410A +Trane_EXW060_21kW_4_30COP_R410A +Trane_EXW120_40kW_3_90COP_R410A +Trane_EXW240_76kW_4_10COP_R410A +Viessmann_BW301A21_28kW_5_94COP_R410A +Viessmann_BW301A29_37kW_6_0COP_R410A +Viessmann_BW301A45_58kW_5_50COP_R410A diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.mo b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.mo new file mode 100644 index 0000000000..e0b93ca7ef --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.mo @@ -0,0 +1,13 @@ +within AixLib.Fluid.HeatPumps.Data; +package ScrollWaterToWater "Package with model parameters for scroll water to water heat pumps" + extends Modelica.Icons.MaterialPropertiesPackage; + +annotation (Documentation(info=" ++Package with data for water to water heat pump models + +AixLib.Fluid.HeatPumps.ScrollWaterToWater +with scroll compressor. +
+")); +end ScrollWaterToWater; diff --git a/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.order b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.order new file mode 100644 index 0000000000..7f88c3e180 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/ScrollWaterToWater/package.order @@ -0,0 +1,2 @@ +Generic +Heating diff --git a/AixLib/Fluid/HeatPumps/Data/package.mo b/AixLib/Fluid/HeatPumps/Data/package.mo new file mode 100644 index 0000000000..1aac99391a --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/package.mo @@ -0,0 +1,8 @@ +within AixLib.Fluid.HeatPumps; +package Data "Package with model parameters for heat pumps" + extends Modelica.Icons.MaterialPropertiesPackage; + + annotation (preferredView="info", Documentation(info=" + Package with data for heat pump models. +")); +end Data; diff --git a/AixLib/Fluid/HeatPumps/Data/package.order b/AixLib/Fluid/HeatPumps/Data/package.order new file mode 100644 index 0000000000..6f007b1209 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Data/package.order @@ -0,0 +1,3 @@ +ReciprocatingWaterToWater +ScrollWaterToWater +BaseClasses diff --git a/AixLib/Fluid/HeatPumps/Examples/Carnot_TCon.mo b/AixLib/Fluid/HeatPumps/Examples/Carnot_TCon.mo index 18f3d5c276..e83f1548d2 100644 --- a/AixLib/Fluid/HeatPumps/Examples/Carnot_TCon.mo +++ b/AixLib/Fluid/HeatPumps/Examples/Carnot_TCon.mo @@ -93,7 +93,7 @@ equation -20,9},{-12,9}}, color={0,0,127})); connect(mEva_flow.y, sou2.m_flow_in) annotation (Line(points={{55,-78},{74, - -78},{74,-10},{74,2},{60,2}}, color={0,0,127})); + -78},{74,-10},{74,2},{62,2}}, color={0,0,127})); connect(QEva_flow.u1, heaPum.QCon_flow) annotation (Line(points={{30,-32},{20, -32},{20,9},{11,9}}, color={0,0,127})); connect(QEva_flow.u2, heaPum.P) annotation (Line(points={{30,-44},{16,-44},{16, diff --git a/AixLib/Fluid/HeatPumps/Examples/ScrollWaterToWater_OneRoomRadiator.mo b/AixLib/Fluid/HeatPumps/Examples/ScrollWaterToWater_OneRoomRadiator.mo new file mode 100644 index 0000000000..395715c977 --- /dev/null +++ b/AixLib/Fluid/HeatPumps/Examples/ScrollWaterToWater_OneRoomRadiator.mo @@ -0,0 +1,327 @@ +within AixLib.Fluid.HeatPumps.Examples; +model ScrollWaterToWater_OneRoomRadiator + "Heat pump with scroll compressor connected to a simple room model with radiator" + extends Modelica.Icons.Example; + replaceable package MediumA = + AixLib.Media.Air "Medium model for air"; + replaceable package MediumW = + AixLib.Media.Water "Medium model for water"; + + parameter Modelica.SIunits.HeatFlowRate Q_flow_nominal = 20000 + "Nominal heat flow rate of radiator"; + parameter Modelica.SIunits.Temperature TRadSup_nominal = 273.15+50 + "Radiator nominal supply water temperature"; + parameter Modelica.SIunits.Temperature TRadRet_nominal = 273.15+45 + "Radiator nominal return water temperature"; + + parameter Modelica.SIunits.MassFlowRate mHeaPum_flow_nominal= + Q_flow_nominal/4200/5 + "Heat pump nominal mass flow rate"; +//------------------------------------------------------------------------------// + + AixLib.Fluid.MixingVolumes.MixingVolume vol( + redeclare package Medium = MediumA, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mA_flow_nominal, + V=V) + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor theCon(G=20000/40) + "Thermal conductance with the ambient" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + parameter Modelica.SIunits.Volume V=6*10*3 "Room volume"; + parameter Modelica.SIunits.MassFlowRate mA_flow_nominal = V*6/3600 + "Nominal mass flow rate"; + parameter Modelica.SIunits.HeatFlowRate QRooInt_flow = 4000 + "Internal heat gains of the room"; + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHea + "Prescribed heat flow" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCap(C=2*V*1.2*1006) + "Heat capacity for furniture and walls" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + Modelica.Blocks.Sources.CombiTimeTable timTab( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, + smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments, + table=[-6*3600, 0; + 8*3600, QRooInt_flow; + 18*3600, 0]) "Time table for internal heat gain" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + AixLib.Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + Q_flow_nominal=Q_flow_nominal, + T_a_nominal=TRadSup_nominal, + T_b_nominal=TRadRet_nominal, + m_flow_nominal=mHeaPum_flow_nominal, + T_start=TRadSup_nominal) "Radiator" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + AixLib.Fluid.Sensors.TemperatureTwoPort temSup( + redeclare package Medium = MediumW, + m_flow_nominal=mHeaPum_flow_nominal, + T_start=TRadSup_nominal) "Supply water temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-20}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temRoo + "Room temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + origin={-40,30}))); + +//----------------------------------------------------------------------------// + + AixLib.Fluid.Movers.FlowControlled_m_flow pumHeaPum( + redeclare package Medium = MediumW, + m_flow_nominal=mHeaPum_flow_nominal, + y_start=1, + m_flow_start=0.85, + T_start=TRadSup_nominal, + nominalValuesDefineDefaultPressureCurve=true, + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump for radiator side" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-100}))); +//----------------------------------------------------------------------------// + + AixLib.Fluid.Sources.FixedBoundary preSou(redeclare package Medium = MediumW, + nPorts=1, + T=TRadSup_nominal) + "Source for pressure and to account for thermal expansion of water" + annotation (Placement(transformation(extent={{90,-140},{70,-120}}))); + AixLib.Fluid.Sensors.TemperatureTwoPort temRet(redeclare package Medium = + MediumW, m_flow_nominal=mHeaPum_flow_nominal, + T_start=TRadSup_nominal) "Return water temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={58,-20}))); + +//------------------------------------------------------------------------------------// + + AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + Modelica.Utilities.Files.loadResource( + "modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data reader" + annotation (Placement(transformation(extent={{-220,40},{-200,60}}))); + AixLib.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-160,40},{-140,60}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut + "Outside temperature" + annotation (Placement(transformation(extent={{-20,40},{0,60}}))); + +//--------------------------------------------------------------------------------------// + + ScrollWaterToWater heaPum( + redeclare package Medium1 = MediumW, + redeclare package Medium2 = MediumW, + redeclare package ref = AixLib.Media.Refrigerants.R410A, + dp1_nominal=2000, + dp2_nominal=2000, + tau1=15, + tau2=15, + show_T=true, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m1_flow_nominal=mHeaPum_flow_nominal, + m2_flow_nominal=mHeaPum_flow_nominal, + datHeaPum=Data.ScrollWaterToWater.Heating.Daikin_WRA072_24kW_4_30COP_R410A(), + T1_start=TRadSup_nominal) + "Heat pump" + annotation (Placement(transformation(extent={{34,-146},{14,-126}}))); + + AixLib.Fluid.Sources.FixedBoundary sou( + redeclare package Medium = MediumW, + use_T=true, + nPorts=1, + T=281.15) "Fluid source on source side" + annotation (Placement(transformation(extent={{-38,-208},{-18,-188}}))); + AixLib.Fluid.Sources.FixedBoundary sin( + redeclare package Medium = MediumW, + use_T=true, + nPorts=1, + T=283.15) "Fluid sink on source side" + annotation (Placement(transformation(extent={{88,-210},{68,-190}}))); + AixLib.Fluid.Movers.FlowControlled_m_flow pumHeaPumSou( + redeclare package Medium = MediumW, + y_start=1, + m_flow_start=0.85, + m_flow_nominal=mHeaPum_flow_nominal, + nominalValuesDefineDefaultPressureCurve=true, + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) + "Pump for heat pump source side" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={2,-178}))); + Modelica.Blocks.Logical.Hysteresis hysteresis( + uLow=273.15 + 19, + uHigh=273.15 + 21) "Hysteresis controller" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + origin={-190,-50}))); + Modelica.Blocks.Logical.Not not2 "Negate output of hysteresis" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + origin={-150,-50}))); + Modelica.Blocks.Math.BooleanToReal booToReaPum(realTrue=1, y(start=0)) + "Pump signal" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + rotation=180, + origin={-110,-100}))); + Modelica.Blocks.Logical.And and1 + annotation (Placement(transformation(extent={{6,-82},{16,-72}}))); + Modelica.Blocks.Logical.And and2 + annotation (Placement(transformation(extent={{26,-56},{38,-44}}))); + Modelica.Blocks.Math.BooleanToReal booToReaPum1( + realTrue=1, + y(start=0)) + "Pump signal" annotation (Placement(transformation( + extent={{5,-5},{-5,5}}, + rotation=90, + origin={41,-79}))); + Modelica.Blocks.Logical.Hysteresis tesConHea( + uHigh=0.25*mHeaPum_flow_nominal, + uLow=0.20*mHeaPum_flow_nominal) "Test for flow rate of condenser pump" + annotation (Placement(transformation( + extent={{5,-5},{-5,5}}, + rotation=180, + origin={-31,-77}))); + Modelica.Blocks.Logical.Hysteresis tesEvaPum( + uLow=0.20*mHeaPum_flow_nominal, + uHigh=0.25*mHeaPum_flow_nominal) "Test for flow rate of evaporator pump" + annotation (Placement(transformation( + extent={{6,-6},{-6,6}}, + rotation=-90, + origin={0,-102}))); +equation + connect(theCon.port_b, vol.heatPort) annotation (Line( + points={{40,50},{50,50},{50,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(preHea.port, vol.heatPort) annotation (Line( + points={{40,80},{50,80},{50,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(heaCap.port, vol.heatPort) annotation (Line( + points={{70,50},{50,50},{50,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(timTab.y[1], preHea.Q_flow) annotation (Line( + points={{1,80},{20,80}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(temSup.port_b, rad.port_a) annotation (Line( + points={{-50,-10},{-5.55112e-016,-10}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(temRoo.port, vol.heatPort) annotation (Line( + points={{-30,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rad.heatPortCon, vol.heatPort) annotation (Line( + points={{8,-2.8},{8,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rad.heatPortRad, vol.heatPort) annotation (Line( + points={{12,-2.8},{12,30},{60,30}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(weaDat.weaBus, weaBus) annotation (Line( + points={{-200,50},{-150,50}}, + color={255,204,51}, + thickness=0.5, + smooth=Smooth.None), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaBus.TDryBul, TOut.T) annotation (Line( + points={{-150,50},{-22,50}}, + color={255,204,51}, + thickness=0.5, + smooth=Smooth.None), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(TOut.port, theCon.port_a) annotation (Line( + points={{0,50},{20,50}}, + color={191,0,0}, + smooth=Smooth.None)); + + connect(temRet.port_b, heaPum.port_a1) annotation (Line(points={{58,-30},{58,-30}, + {58,-130},{34,-130}}, color={0,127,255})); + connect(preSou.ports[1], temRet.port_b) annotation (Line(points={{70,-130},{58, + -130},{58,-30}}, color={0,127,255})); + connect(sou.ports[1], pumHeaPumSou.port_a) annotation (Line(points={{-18,-198}, + {2,-198},{2,-188}}, color={0,127,255})); + connect(pumHeaPumSou.port_b, heaPum.port_a2) annotation (Line(points={{2,-168}, + {2,-168},{2,-142},{14,-142}}, color={0,127,255})); + connect(sin.ports[1], heaPum.port_b2) annotation (Line(points={{68,-200},{42,-200}, + {42,-142},{34,-142}}, color={0,127,255})); + connect(hysteresis.y, not2.u) annotation (Line(points={{-179,-50},{-179,-50},{ + -162,-50}}, color={255,0,255})); + connect(temRoo.T, hysteresis.u) + annotation (Line(points={{-50,30},{-220,30},{-220,30},{-220,-50},{-202,-50}, + {-202,-50}}, color={0,0,127})); + connect(pumHeaPum.port_b, temSup.port_a) + annotation (Line(points={{-50,-90},{-50,-30}}, color={0,127,255})); + connect(temRet.port_a, rad.port_b) + annotation (Line(points={{58,-10},{42,-10},{20,-10}}, color={0,127,255})); + connect(and2.u2, and1.y) annotation (Line(points={{24.8,-54.8},{18,-54.8},{18, + -77},{16.5,-77}}, + color={255,0,255})); + connect(booToReaPum1.y, heaPum.y) annotation (Line(points={{41,-84.5},{41, + -84.5},{41,-133},{36,-133}}, color={0,0,127})); + connect(booToReaPum1.u, and2.y) annotation (Line(points={{41,-73},{41,-73},{41, + -50},{38.6,-50}}, color={255,0,255})); + connect(tesConHea.y, and1.u1) + annotation (Line(points={{-25.5,-77},{5,-77}}, color={255,0,255})); + connect(tesEvaPum.y, and1.u2) annotation (Line(points={{1.11022e-15,-95.4},{0, + -95.4},{0,-81},{5,-81}}, color={255,0,255})); + connect(pumHeaPum.m_flow_actual, tesConHea.u) annotation (Line(points={{-55,-89}, + {-52,-89},{-52,-78},{-52,-77},{-44,-77},{-37,-77}}, color={0,0,127})); + connect(pumHeaPumSou.m_flow_actual, tesEvaPum.u) annotation (Line(points={{-3,-167}, + {0,-167},{0,-109.2},{-1.33227e-15,-109.2}}, color={0,0,127})); + connect(heaPum.port_b1, pumHeaPum.port_a) annotation (Line(points={{14,-130},{ + -10,-130},{-50,-130},{-50,-110}}, color={0,127,255})); + connect(booToReaPum.y, pumHeaPum.m_flow_in) annotation (Line(points={{-99,-100}, + {-62,-100},{-62,-100}}, color={0,0,127})); + connect(booToReaPum.y, pumHeaPumSou.m_flow_in) annotation (Line(points={{-99,-100}, + {-80,-100},{-80,-178},{-10,-178}}, color={0,0,127})); + connect(not2.y, and2.u1) annotation (Line(points={{-139,-50},{24.8,-50},{24.8, + -50}}, color={255,0,255})); + connect(not2.y, booToReaPum.u) annotation (Line(points={{-139,-50},{-130,-50}, + {-130,-100},{-122,-100}}, color={255,0,255})); + annotation (Documentation(info=" ++Example that simulates one room equipped with a radiator. Hot water is produced +by a 24 kW nominal capacity heat pump. The source side water temperature to the +heat pump is constant at 10°C. +
++The heat pump is turned on when the room temperature falls below +19°C and turned +off when the room temperature rises above 21°C. +
+", revisions=" +See AixLib.Fluid.HeatExchangers.Examples.TestHeatPump
+See AixLib.Fluid.HeatPumps.Examples.HeatPumpDetailed
", revisions="Simple model of an on/off-controlled heat pump. The refrigerant circuit is a black-box model represented by tables which calculate the electric power and heat flows of the condenser depending on the source and sink temperature.
-- AixLib.HVAC.HeatGeneration.Examples.HeatPumpSystem
-- AixLib.HVAC.HeatGeneration.Examples.HeatPumpSystem2
++ AixLib.Fluid.HeatPumps.Examples.HeatPumpSimple
", revisions="+Model for a water to water heat pump with a reciprocating compressor, as +described in Jin (2002). The thermodynamic heat pump cycle is represented below. +
++ +
++The rate of heat transferred to the evaporator is given by: +
++Q̇Eva = ṁref ( hVap(TEva) - hLiq(TCon) ). +
++The power consumed by the compressor is given by a linear efficiency relation: +
++P = PTheoretical / η + PLoss,constant. +
++Heat transfer in the evaporator and condenser is calculated using an +ε-NTU method, assuming constant refrigerant temperature and constant heat +transfer coefficient between fluid and refrigerant. +
++Variable speed is acheived by multiplying the full load piston displacement +by the normalized compressor speed. The power and heat transfer rates are forced +to zero if the resulting heat pump state has higher evaporating pressure than +condensing pressure. +
+
+Parameters TConMax
and TEvaMin
+may be used to set an upper or lower bound for the
+condenser and evaporator.
+The compressor is disabled when these conditions
+are not satisfied, or when the
+evaporator temperature is larger
+than the condenser temperature.
+This mimics the temperature protection
+of heat pumps and moreover it avoids
+non-converging algebraic loops of equations,
+or freezing of evaporator medium.
+This option can be disabled by setting
+enable_temperature_protection = false
.
+
+The compression process is assumed isentropic. The thermal energy +of superheating is ignored in the evaluation of the heat transferred to the refrigerant +in the evaporator. There is no supercooling. +
++H. Jin. + +Parameter estimation based models of water source heat pumps. + +PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. +
+", revisions=" ++Model for a water to water heat pump with a scroll compressor, as described +in Jin (2002). The thermodynamic heat pump cycle is represented below. +
++ +
++The rate of heat transferred to the evaporator is given by: +
++Q̇Eva = ṁref ( hVap(TEva) - hLiq(TCon) ). +
++The power consumed by the compressor is given by a linear efficiency relation: +
++P = PTheoretical / η + PLoss,constant. +
++Heat transfer in the evaporator and condenser is calculated using an +ε-NTU method, assuming constant refrigerant temperature and constant heat +transfer coefficient between fluid and refrigerant. +
++Variable speed is achieved by multiplying the full load suction volume flow rate +by the normalized compressor speed. The power and heat transfer rates are forced +to zero if the resulting heat pump state has higher evaporating pressure than +condensing pressure. +
++The model parameters are obtained by calibration of the heat pump model to +manufacturer performance data. Calibrated model parameters for various heat +pumps from different manufacturers are found in + +AixLib.Fluid.HeatPumps.Data.ScrollWaterToWater. The calibrated model is +located in + +AixLib.Fluid.HeatPumps.Calibration.ScrollWaterToWater. +
+
+Parameters TConMax
and TEvaMin
+may be used to set an upper or lower bound for the
+condenser and evaporator.
+The compressor is disabled when these conditions
+are not satisfied, or when the
+evaporator temperature is larger
+than the condenser temperature.
+This mimics the temperature protection
+of heat pumps and moreover it avoids
+non-converging algebraic loops of equations,
+or freezing of evaporator medium.
+This option can be disabled by setting
+enable_temperature_protection = false
.
+
+The compression process is assumed isentropic. The thermal energy +of superheating is ignored in the evaluation of the heat transferred to the refrigerant +in the evaporator. There is no supercooling. +
++H. Jin. + +Parameter estimation based models of water source heat pumps. + +PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. This +validation case also tests the stage input to the heat pump models. +
++With constant inlet source and load water temperatures, the heat pumps cycle on +and off. The apparent capacity of the dynamic model is compared to the +steady-state model and to the condenser heat transfer rate. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. This +validation case also tests the stage input to the heat pump models. +
++With constant inlet source and load water temperatures, the heat pumps cycle on +and off. The capacity of the scaled heat pump model is compared to the +capacity of the non-scaled heat pump model. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. +
++The heat pump power, condenser heat transfer rate and evaporator heat transfer +rate are calculated for given water temperatures and flow rates on the +evaporator and condenser sides. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ReciprocatingWaterToWater heat pump model. +
++With constant inlet source and load water temperatures, the compressor frequency +is increased linearly to its full load value and then ramped down to zero. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ScrollWaterToWater heat pump model. This +validation case also tests the stage input to the heat pump models. +
++With constant inlet source and load water temperatures, the heat pumps cycle on +and off. The apparent capacity of the dynamic model is compared to the +steady-state model and to the condenser heat transfer rate. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ScrollWaterToWater heat pump model. This +validation case also tests the stage input to the heat pump models. +
++With constant inlet source and load water temperatures, the heat pumps cycle on +and off. The capacity of the scaled heat pump model is compared to the +capacity of the non-scaled heat pump model. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ScrollWaterToWater heat pump model. +
++The heat pump power, condenser heat transfer rate and evaporator heat transfer +rate are calculated for given water temperatures and flow rates on the +evaporator and condenser sides. +
+", revisions=" ++Model that demonstrates the temperature protection implementation of the + +AixLib.Fluid.HeatPumps.ScrollWaterToWater heat pump model. +
++The heat pump is disabled when the evaporator and condenser temperature +requirements are not satisfied. +
+", revisions=" ++Model that demonstrates the use of the + +AixLib.Fluid.HeatPumps.ScrollWaterToWater heat pump model. +
++With constant inlet source and load water temperatures, the compressor frequency +is increased linearly to its full load value. +
+", revisions=" +prescribedHeatFlowRate=true
.
diff --git a/AixLib/Fluid/Humidifiers/Validation/SteamHumidifier_X.mo b/AixLib/Fluid/Humidifiers/Validation/SteamHumidifier_X.mo
index b56ca52e2d..376d8742b4 100644
--- a/AixLib/Fluid/Humidifiers/Validation/SteamHumidifier_X.mo
+++ b/AixLib/Fluid/Humidifiers/Validation/SteamHumidifier_X.mo
@@ -1,7 +1,6 @@
within AixLib.Fluid.Humidifiers.Validation;
model SteamHumidifier_X
"Model that demonstrates the steam humidifier model, configured as steady-state model"
- import AixLib;
extends AixLib.Fluid.Humidifiers.Validation.SprayAirWasher_X(
redeclare AixLib.Fluid.Humidifiers.SteamHumidifier_X hum(
mWatMax_flow=mWat_flow_nominal,
@@ -19,6 +18,11 @@ that is added to the air stream.
", revisions="
import
statement.start
attributes.constant
to a parameter
.stateSelect
for mass m
.stateSelect.prefer
for temperature.
This is for
#160.
mFactor
to increase the thermal capacity.
Q_flow
input.
September 17, 2013 by Michael Wetter:hOut
.
i_w
.Medium.ExtraProperty C[Medium.nC](each nominal=C_nominal)
@@ -618,6 +641,7 @@ Also removed the reference to Modelica.Fluid.System
.
Moved parameters and medium to
AixLib.Fluid.Interfaces.LumpedVolumeDeclarations.
+massDynamics
.
Xi
.
+Buildings
library, based on model from
Text(
extent={{-155,-120},{145,-160}},
lineColor={0,0,255},
- textString="%name")}),
- Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{
- 100,100}})));
+ textString="%name")}));
end ConservationEquation;
diff --git a/AixLib/Fluid/Interfaces/Examples/BaseClasses/PrescribedOutletState.mo b/AixLib/Fluid/Interfaces/Examples/BaseClasses/PrescribedOutletState.mo
index d0cdee91f8..4c028a0619 100644
--- a/AixLib/Fluid/Interfaces/Examples/BaseClasses/PrescribedOutletState.mo
+++ b/AixLib/Fluid/Interfaces/Examples/BaseClasses/PrescribedOutletState.mo
@@ -113,13 +113,13 @@ partial model PrescribedOutletState "Test model for prescribed outlet state"
equation
connect(m_flow.y, sou1.m_flow_in) annotation (Line(
- points={{-109,8},{-100,8},{-100,94},{-90,94}},
+ points={{-109,8},{-100,8},{-100,94},{-92,94}},
color={0,0,127}));
connect(m_flow.y, sou2.m_flow_in) annotation (Line(
- points={{-109,8},{-90,8}},
+ points={{-109,8},{-92,8}},
color={0,0,127}));
connect(m_flow.y, sou3.m_flow_in) annotation (Line(
- points={{-109,8},{-100,8},{-100,-52},{-90,-52}},
+ points={{-109,8},{-100,8},{-100,-52},{-92,-52}},
color={0,0,127}));
connect(sou1.ports[1], heaHigPow.port_a) annotation (Line(
points={{-70,86},{-10,86}},
@@ -139,8 +139,8 @@ equation
connect(heaHigPow.port_b, sin.ports[3]) annotation (Line(
points={{10,86},{50,86},{50,1},{90,1}},
color={0,127,255}));
- connect(m_flow.y, sou4.m_flow_in) annotation (Line(points={{-109,8},{-100,8},{
- -100,-82},{-90,-82}}, color={0,0,127}));
+ connect(m_flow.y, sou4.m_flow_in) annotation (Line(points={{-109,8},{-100,8},
+ {-100,-82},{-92,-82}},color={0,0,127}));
connect(sou4.ports[1], steSta.port_a) annotation (Line(points={{-70,-90},{-40,
-90},{-10,-90}}, color={0,127,255}));
connect(steSta.port_b, sin.ports[4]) annotation (Line(points={{10,-90},{54,-90},
diff --git a/AixLib/Fluid/Interfaces/Examples/ConservationEquation.mo b/AixLib/Fluid/Interfaces/Examples/ConservationEquation.mo
index 1d55f92911..48db12cdaf 100644
--- a/AixLib/Fluid/Interfaces/Examples/ConservationEquation.mo
+++ b/AixLib/Fluid/Interfaces/Examples/ConservationEquation.mo
@@ -2,8 +2,9 @@ within AixLib.Fluid.Interfaces.Examples;
model ConservationEquation "Model that tests the conservation equation"
extends Modelica.Icons.Example;
package Medium = AixLib.Media.Water "Medium model";
- AixLib.Fluid.Interfaces.ConservationEquation dyn(redeclare package Medium =
- Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
+ AixLib.Fluid.Interfaces.ConservationEquation dyn(
+ redeclare package Medium = Medium,
+ energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
nPorts=2,
fluidVolume=0.01,
use_mWat_flow=true) "Dynamic conservation equation"
@@ -13,6 +14,7 @@ extends Modelica.Icons.Example;
redeclare package Medium = Medium,
m_flow_nominal=0.01,
show_T=true,
+ prescribedHeatFlowRate=true,
use_mWat_flow=true) "Steady-state conservation equation"
annotation (Placement(transformation(extent={{-10,-70},{10,-50}})));
@@ -98,6 +100,11 @@ for the heat and mass balance.
revisions="
prescribedHeatFlowRate=true
since
+this model prescribes the heat flow rate.
+use_mWat_flow
rather than sensibleOnly
.
diff --git a/AixLib/Fluid/Interfaces/Examples/FourPortHeatMassExchanger.mo b/AixLib/Fluid/Interfaces/Examples/FourPortHeatMassExchanger.mo
index f4c8a958f6..62aa754d4b 100644
--- a/AixLib/Fluid/Interfaces/Examples/FourPortHeatMassExchanger.mo
+++ b/AixLib/Fluid/Interfaces/Examples/FourPortHeatMassExchanger.mo
@@ -55,12 +55,10 @@ equation
connect(sou2.ports[1], fouPor.port_a2) annotation (Line(points={{40,10},{20,
10},{20,4},{10,4}}, color={0,127,255}));
connect(ram_m_flow.y, sou1.m_flow_in) annotation (Line(points={{-69,40},{-66,
- 40},{-66,18},{-60,18}}, color={0,0,127}));
+ 40},{-66,18},{-62,18}}, color={0,0,127}));
connect(ram_T.y, sou1.T_in) annotation (Line(points={{-69,0},{-66,0},{-66,14},
{-62,14}}, color={0,0,127}));
- annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
- coordinateSystem(preserveAspectRatio=false)),
- Documentation(info="
+ annotation ( Documentation(info="
This example model demonstrates the used of the FourPortHeatMassExchanger model. diff --git a/AixLib/Fluid/Interfaces/FourPortHeatMassExchanger.mo b/AixLib/Fluid/Interfaces/FourPortHeatMassExchanger.mo index e4f882e370..e0c954a95a 100644 --- a/AixLib/Fluid/Interfaces/FourPortHeatMassExchanger.mo +++ b/AixLib/Fluid/Interfaces/FourPortHeatMassExchanger.mo @@ -68,45 +68,48 @@ model FourPortHeatMassExchanger Modelica.SIunits.HeatFlowRate Q2_flow = vol2.heatPort.Q_flow "Heat flow rate into medium 2"; - AixLib.Fluid.MixingVolumes.MixingVolume vol1( - redeclare final package Medium = Medium1, - nPorts = 2, - V=m1_flow_nominal*tau1/rho1_nominal, - final allowFlowReversal=allowFlowReversal1, - final m_flow_nominal=m1_flow_nominal, - energyDynamics=if tau1 > Modelica.Constants.eps + replaceable AixLib.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPort vol1 + constrainedby + AixLib.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPort( + redeclare final package Medium = Medium1, + nPorts = 2, + V=m1_flow_nominal*tau1/rho1_nominal, + final allowFlowReversal=allowFlowReversal1, + final m_flow_nominal=m1_flow_nominal, + energyDynamics=if tau1 > Modelica.Constants.eps then energyDynamics else Modelica.Fluid.Types.Dynamics.SteadyState, - massDynamics=if tau1 > Modelica.Constants.eps + massDynamics=if tau1 > Modelica.Constants.eps then massDynamics else Modelica.Fluid.Types.Dynamics.SteadyState, - final p_start=p1_start, - final T_start=T1_start, - final X_start=X1_start, - final C_start=C1_start, - final C_nominal=C1_nominal, - mSenFac=1) "Volume for fluid 1" + final p_start=p1_start, + final T_start=T1_start, + final X_start=X1_start, + final C_start=C1_start, + final C_nominal=C1_nominal, + mSenFac=1) "Volume for fluid 1" annotation (Placement(transformation(extent={{-10,70}, {10,50}}))); replaceable AixLib.Fluid.MixingVolumes.MixingVolume vol2 - constrainedby AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume( - redeclare final package Medium = Medium2, - nPorts = 2, - V=m2_flow_nominal*tau2/rho2_nominal, - final allowFlowReversal=allowFlowReversal2, - mSenFac=1, - final m_flow_nominal = m2_flow_nominal, - energyDynamics=if tau2 > Modelica.Constants.eps + constrainedby + AixLib.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPort( + redeclare final package Medium = Medium2, + nPorts = 2, + V=m2_flow_nominal*tau2/rho2_nominal, + final allowFlowReversal=allowFlowReversal2, + mSenFac=1, + final m_flow_nominal = m2_flow_nominal, + energyDynamics=if tau2 > Modelica.Constants.eps then energyDynamics else Modelica.Fluid.Types.Dynamics.SteadyState, - massDynamics=if tau2 > Modelica.Constants.eps + massDynamics=if tau2 > Modelica.Constants.eps then massDynamics else Modelica.Fluid.Types.Dynamics.SteadyState, - final p_start=p2_start, - final T_start=T2_start, - final X_start=X2_start, - final C_start=C2_start, - final C_nominal=C2_nominal) "Volume for fluid 2" + final p_start=p2_start, + final T_start=T2_start, + final X_start=X2_start, + final C_start=C2_start, + final C_nominal=C2_nominal) "Volume for fluid 2" annotation (Placement(transformation( origin={2,-60}, extent={{-10,10},{10,-10}}, @@ -155,7 +158,7 @@ protected parameter Modelica.SIunits.SpecificEnthalpy h2_outflow_start = Medium2.specificEnthalpy(sta2_start) "Start value for outflowing enthalpy"; -initial algorithm +initial equation // Check for tau1 assert((energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState) or tau1 > Modelica.Constants.eps, @@ -180,9 +183,10 @@ initial algorithm You need to set massDynamics == Modelica.Fluid.Types.Dynamics.SteadyState to model steady-state. Received tau2 = " + String(tau2) + "\n"); + equation connect(vol1.ports[2], port_b1) annotation (Line( - points={{2,70},{20,70},{20,60},{100,60}}, + points={{0,70},{20,70},{20,60},{100,60}}, color={0,127,255})); connect(vol2.ports[2], port_b2) annotation (Line( points={{2,-70},{-30,-70},{-30,-60},{-100,-60}}, @@ -191,7 +195,7 @@ equation points={{-100,60},{-90,60},{-90,80},{-80,80}}, color={0,127,255})); connect(preDro1.port_b, vol1.ports[1]) annotation (Line( - points={{-60,80},{-2,80},{-2,70}}, + points={{-60,80},{0,80},{0,70}}, color={0,127,255})); connect(port_a2, preDro2.port_a) annotation (Line( points={{100,-60},{90,-60},{90,-80},{80,-80}}, @@ -226,6 +230,11 @@ Modelica.Fluid.Examples.HeatExchanger.BaseClasses.BasicHX. ", revisions="
vol1
replaceable. This is required for
+Buildings, issue 1013.
+use_dh
is no longer a parameter in the pressure drop model.stateSelect=StateSelect.always
for temperature of volume 1.
Changed temperature sensor from Celsius to Kelvin.
Unit conversion should be made during output
processing.
+Delays.DelayFirstOrder
with instances of
diff --git a/AixLib/Fluid/Interfaces/PartialFourPort.mo b/AixLib/Fluid/Interfaces/PartialFourPort.mo
index 5aedff259a..a0855f58e0 100644
--- a/AixLib/Fluid/Interfaces/PartialFourPort.mo
+++ b/AixLib/Fluid/Interfaces/PartialFourPort.mo
@@ -18,26 +18,26 @@ partial model PartialFourPort "Partial model with four ports"
Modelica.Fluid.Interfaces.FluidPort_a port_a1(
redeclare final package Medium = Medium1,
m_flow(min=if allowFlowReversal1 then -Modelica.Constants.inf else 0),
- h_outflow(start = Medium1.h_default))
+ 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}})));
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))
+ 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}})));
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))
+ 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}})));
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))
+ 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}})));
@@ -69,6 +69,11 @@ are not implemented.
", revisions="
h_outflow
in FluidPorts
.
+See #977.
+FourPort
to
PartialFourPort
.
diff --git a/AixLib/Fluid/Interfaces/PartialFourPortInterface.mo b/AixLib/Fluid/Interfaces/PartialFourPortInterface.mo
index 3ae2eabfcc..e3a1923379 100644
--- a/AixLib/Fluid/Interfaces/PartialFourPortInterface.mo
+++ b/AixLib/Fluid/Interfaces/PartialFourPortInterface.mo
@@ -120,7 +120,7 @@ In the computation of sta_a1
,
sta_a2
, sta_b1
and sta_b2
,
removed the branch that uses the homotopy operator.
The rational is that these variables are conditionally enables (because
-of ... if show_T
. Therefore, the Modelica Language Specification
+of ... if show_T
). Therefore, the Modelica Language Specification
does not allow for these variables to be used in any equation. Hence,
the use of the homotopy operator is not needed here.
+This model defines an interface for components with four ports
+in which flows occur in parallel.
+The parameters allowFlowReversal1
and allowFlowReversal2
+may be used by models that extend this model to treat flow reversal.
+
+This model is identical to +Modelica.Fluid.Interfaces.PartialTwoPort, +except for the following:
+showDesignFlowDirection
is not implemented.
+h_outflow
in FluidPorts
.
+See #977.
+h_outflow
in FluidPorts
.
+See #977.
+port_a_exposesState
and
diff --git a/AixLib/Fluid/Interfaces/PartialTwoPortInterface.mo b/AixLib/Fluid/Interfaces/PartialTwoPortInterface.mo
index 94c056c41b..17e4a28342 100644
--- a/AixLib/Fluid/Interfaces/PartialTwoPortInterface.mo
+++ b/AixLib/Fluid/Interfaces/PartialTwoPortInterface.mo
@@ -111,7 +111,7 @@ November 10, 2013 by Michael Wetter:sta_a
and sta_b
,
removed the branch that uses the homotopy operator.
The rational is that these variables are conditionally enables (because
-of ... if show_T
. Therefore, the Modelica Language Specification
+of ... if show_T
). Therefore, the Modelica Language Specification
does not allow for these variables to be used in any equation. Hence,
the use of the homotopy operator is not needed here.
+This partial model defines an interface for components with two ports, +of which one is vectorized. +
+
+The treatment of the design flow direction and of flow reversal are
+determined based on the parameter allowFlowReversal
.
+The component may transport fluid and may have internal storage.
+
+This model is similar to
+
+Modelica.Fluid.Interfaces.PartialTwoPort
+but it does not use the outer system
declaration.
+This declaration is omitted as in building energy simulation,
+many models use multiple media, and in practice,
+users have not used this global definition to assign parameters.
+
h_outflow
in FluidPorts
.
+See #977.
+port_a_exposesState
and
+port_b_exposesState
+for #351
+and
+showDesignFlowDirection
+for #349.
+start
attribute for leaving
+enthalpy at port_a
and port_b
.
+This was done to make the model similar to
+
+AixLib.Fluid.Interfaces.PartialFourPort.
+final
.
+port_b
.
", revisions="
TSet
and X_wSet
+simultaneously.X_wSet
as an input.getInstanceName()
in asserts to facilitate
+debugging.hOut
, XiOut
and
COut
to no longer declare that it is continuous.
The declaration of continuity, i.e, the
-smooth(0, if (port_a.m_flow >= 0) then ...
declaration,
+smooth(0, if (port_a.m_flow >= 0) then ...)
declaration,
was required for Dymola 2012 to simulate, but it is no longer needed
for Dymola 2012 FD01.
hOut
, XiOut
and
COut
to no longer declare that it is continuous.
The declaration of continuity, i.e, the
-smooth(0, if (port_a.m_flow >= 0) then ...
declaration,
+smooth(0, if (port_a.m_flow >= 0) then ...)
declaration,
was required for Dymola 2012 to simulate, but it is no longer needed
for Dymola 2012 FD01.
final prescribedHeatFlowRate1=true
and
+final prescribedHeatFlowRate2=true
.Q1_flow
did not include latent heat flow rate.+This model tests whether +ConstantEffectiveness +works correctly at zero flow if one stream is zero. +
+"), experiment(Tolerance=1e-06, StopTime=1), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Fluid/MassExchangers/Validation/ConstantEffectivenessZeroFlow.mos" + "Simulate and plot")); +end ConstantEffectivenessZeroFlow; diff --git a/AixLib/Fluid/MassExchangers/Validation/ConstantEffectivenessZeroFlowBothStreams.mo b/AixLib/Fluid/MassExchangers/Validation/ConstantEffectivenessZeroFlowBothStreams.mo new file mode 100644 index 0000000000..a9ddeceaec --- /dev/null +++ b/AixLib/Fluid/MassExchangers/Validation/ConstantEffectivenessZeroFlowBothStreams.mo @@ -0,0 +1,29 @@ +within AixLib.Fluid.MassExchangers.Validation; +model ConstantEffectivenessZeroFlowBothStreams + "Zero flow test for constants effectiveness mass exchanger" + extends AixLib.Fluid.MassExchangers.Examples.ConstantEffectiveness( + PSin_1( + height=0, + offset=1E5), + PIn( + height=0, + offset=101325)); + annotation (Documentation(revisions=" ++This model tests whether +AixLib.Fluid.MassExchangers.ConstantEffectiveness +works correctly at zero flow if both streams are zero. +
+"), experiment(Tolerance=1e-06, StopTime=1), + __Dymola_Commands(file= + "Resources/Scripts/Dymola/Fluid/MassExchangers/Validation/ConstantEffectivenessZeroFlowBothStreams.mos" + "Simulate and plot")); +end ConstantEffectivenessZeroFlowBothStreams; diff --git a/AixLib/Fluid/MassExchangers/Validation/package.mo b/AixLib/Fluid/MassExchangers/Validation/package.mo new file mode 100644 index 0000000000..97604e41e9 --- /dev/null +++ b/AixLib/Fluid/MassExchangers/Validation/package.mo @@ -0,0 +1,20 @@ +within AixLib.Fluid.MassExchangers; +package Validation "Validation examples" + extends Modelica.Icons.ExamplesPackage; + +annotation (Documentation(info=" ++This package contains validation models for the classes in + +AixLib.Fluid.MassExchangers. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Fluid/MassExchangers/Validation/package.order b/AixLib/Fluid/MassExchangers/Validation/package.order new file mode 100644 index 0000000000..8536fe5976 --- /dev/null +++ b/AixLib/Fluid/MassExchangers/Validation/package.order @@ -0,0 +1,2 @@ +ConstantEffectivenessZeroFlow +ConstantEffectivenessZeroFlowBothStreams diff --git a/AixLib/Fluid/MassExchangers/package.mo b/AixLib/Fluid/MassExchangers/package.mo index 113ac98701..c9670e3683 100644 --- a/AixLib/Fluid/MassExchangers/package.mo +++ b/AixLib/Fluid/MassExchangers/package.mo @@ -3,9 +3,11 @@ package MassExchangers "Package with mass exchanger models" extends Modelica.Icons.VariantsPackage; annotation (preferredView="info", Documentation(info=" +This package contains models for mass exchangers. For heat exchanger models without humidity transfer, see the package AixLib.Fluid.HeatExchangers. +
")); end MassExchangers; diff --git a/AixLib/Fluid/MassExchangers/package.order b/AixLib/Fluid/MassExchangers/package.order index eac8965c58..7d113d0317 100644 --- a/AixLib/Fluid/MassExchangers/package.order +++ b/AixLib/Fluid/MassExchangers/package.order @@ -1,2 +1,3 @@ ConstantEffectiveness Examples +Validation diff --git a/AixLib/Fluid/MixingVolumes/BaseClasses/MixingVolumeHeatMoisturePort.mo b/AixLib/Fluid/MixingVolumes/BaseClasses/MixingVolumeHeatMoisturePort.mo new file mode 100644 index 0000000000..d12f765d94 --- /dev/null +++ b/AixLib/Fluid/MixingVolumes/BaseClasses/MixingVolumeHeatMoisturePort.mo @@ -0,0 +1,77 @@ +within AixLib.Fluid.MixingVolumes.BaseClasses; +model MixingVolumeHeatMoisturePort + "Mixing volume with heat and moisture port and initialize_p not set to final" + extends AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume( + dynBal( + final use_mWat_flow = true), + steBal( + final use_mWat_flow = true)); + + Modelica.Blocks.Interfaces.RealInput mWat_flow(final quantity="MassFlowRate", + final unit = "kg/s") + "Water flow rate added into the medium" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + Modelica.Blocks.Interfaces.RealOutput X_w(final unit="kg/kg") + "Species composition of medium" + annotation (Placement(transformation(extent={{100,-60},{140,-20}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort( + T(start=T_start)) "Heat port for heat exchange with the control volume" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); +protected + parameter Real s[Medium.nXi] = { + if Modelica.Utilities.Strings.isEqual(string1=Medium.substanceNames[i], + string2="Water", + caseSensitive=false) then 1 else 0 + for i in 1:Medium.nXi} + "Vector with zero everywhere except where species is"; + + Modelica.Blocks.Sources.RealExpression XLiq(y=s*Xi) + "Species composition of the medium" + annotation (Placement(transformation(extent={{72,-52},{94,-28}}))); + +equation + connect(mWat_flow, steBal.mWat_flow) annotation (Line( + points={{-120,80},{-120,80},{4,80},{4,14},{18,14}}, + color={0,0,127})); + connect(mWat_flow, dynBal.mWat_flow) annotation (Line( + points={{-120,80},{-50,80},{52,80},{52,12},{58,12}}, + color={0,0,127})); + connect(XLiq.y, X_w) annotation (Line( + points={{95.1,-40},{120,-40}}, + color={0,0,127})); + connect(heaFloSen.port_a, heatPort) + annotation (Line(points={{-90,0},{-100,0}}, color={191,0,0})); + annotation ( + defaultComonentName="vol", + Documentation(info=" ++Mixing volume with a heat port. +
++This model is identical to + +AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume, +except that it has a heat and a moisture port. +
+
+Note that this model is typically only used to implement new component models that
+have staggered volumes.
+In contrast to
+
+AixLib.Fluid.MixingVolumes.MixingVolumeMoistAir, it does
+not set initialize_p
to final
in order
+for this model to be usable in staggered volumes which require one
+pressure to be set to initialize_p = not Medium.singleState
+and all others to false
.
+
+Mixing volume with a heat port. +
++This model is identical to + +AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume, +except that it has a heat port. +
+
+Note that this model is typically only used to implement new component models that
+have staggered volumes.
+In contrast to
+
+AixLib.Fluid.MixingVolumes.MixingVolume, it does
+not set initialize_p
to final
in order
+for this model to be usable in staggered volumes which require one
+pressure to be set to initialize_p = not Medium.singleState
+and all others to false
.
+
constant
to a parameter
.partial
keyword as this model is not partial.C_flow
and use_C_flow
to child classes.+Model that validates that the initial conditions are uniquely set +and not overdetermined. +
+", revisions=" ++Model that validates that the initial conditions are uniquely set +and not overdetermined for water. +
+", revisions=" ++Model that validates that the initial conditions are uniquely set +and not overdetermined. +
+", revisions=" ++This package contains validation models for the classes in + +AixLib.Fluid.MixingVolumes.BaseClasses. +
++Note that most validation models contain simple input data +which may not be realistic, but for which the correct +output can be obtained through an analytic solution. +The examples plot various outputs, which have been verified against these +solutions. These model outputs are stored as reference data and +used for continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Fluid/MixingVolumes/BaseClasses/Validation/package.order b/AixLib/Fluid/MixingVolumes/BaseClasses/Validation/package.order new file mode 100644 index 0000000000..626e0dbb47 --- /dev/null +++ b/AixLib/Fluid/MixingVolumes/BaseClasses/Validation/package.order @@ -0,0 +1,3 @@ +MixingVolumeHeatMoisturePort +MixingVolumeHeatPortAir +MixingVolumeHeatPortWater diff --git a/AixLib/Fluid/MixingVolumes/BaseClasses/package.order b/AixLib/Fluid/MixingVolumes/BaseClasses/package.order index 59121ec2c1..118ce5013c 100644 --- a/AixLib/Fluid/MixingVolumes/BaseClasses/package.order +++ b/AixLib/Fluid/MixingVolumes/BaseClasses/package.order @@ -1 +1,4 @@ +MixingVolumeHeatMoisturePort +MixingVolumeHeatPort PartialMixingVolume +Validation diff --git a/AixLib/Fluid/MixingVolumes/Examples/MixingVolumeMoistAir.mo b/AixLib/Fluid/MixingVolumes/Examples/MixingVolumeMoistAir.mo index 7db3ca5bfb..92150a65ba 100644 --- a/AixLib/Fluid/MixingVolumes/Examples/MixingVolumeMoistAir.mo +++ b/AixLib/Fluid/MixingVolumes/Examples/MixingVolumeMoistAir.mo @@ -184,7 +184,7 @@ This is for issueHWat_flow(y=vol1.HWat_flow
to
+HWat_flow(y=vol1.HWat_flow)
to
QLat_flow(y=vol1.QLat_flow.y)
and
QWat
to QLat
.
diff --git a/AixLib/Fluid/MixingVolumes/MixingVolume.mo b/AixLib/Fluid/MixingVolumes/MixingVolume.mo
index cd524f6f81..385abbfc9a 100644
--- a/AixLib/Fluid/MixingVolumes/MixingVolume.mo
+++ b/AixLib/Fluid/MixingVolumes/MixingVolume.mo
@@ -1,14 +1,30 @@
within AixLib.Fluid.MixingVolumes;
model MixingVolume
"Mixing volume with inlet and outlet ports (flow reversal is allowed)"
- extends AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume;
+ extends AixLib.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume(
+ final initialize_p = not Medium.singleState,
+ steBal(final use_C_flow = use_C_flow),
+ dynBal(final use_C_flow = use_C_flow));
+
+ parameter Boolean use_C_flow = false
+ "Set to true to enable input connector for trace substance"
+ annotation(Evaluate=true, Dialog(tab="Advanced"));
Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort(
T(start=T_start)) "Heat port for heat exchange with the control volume"
annotation (Placement(transformation(extent={{-110,-10},{-90,10}})));
+
+ Modelica.Blocks.Interfaces.RealInput[Medium.nC] C_flow if use_C_flow
+ "Trace substance mass flow rate added to the medium"
+ annotation (Placement(transformation(extent={{-140,-80},{-100,-40}})));
+
equation
connect(heaFloSen.port_a, heatPort)
annotation (Line(points={{-90,0},{-96,0},{-100,0}}, color={191,0,0}));
+ connect(C_flow, steBal.C_flow) annotation (Line(points={{-120,-60},{-80,-60},
+ {12,-60},{12,6},{18,6}}, color={0,0,127}));
+ connect(C_flow, dynBal.C_flow) annotation (Line(points={{-120,-60},{-52,-60},
+ {52,-60},{52,6},{58,6}}, color={0,0,127}));
annotation (
defaultComponentName="vol",
Documentation(info="
@@ -105,6 +121,14 @@ AixLib.Fluid.Humidifiers.Humidifier_u.
", revisions="
initialize_p
to final
so that it does not
+appear as a user-selectable parameter. This is done because
+initialize_p
has been changed from a constant
+to a parameter
for
+Buildings, issue 1013.
+@@ -106,6 +122,14 @@ for an example. ", revisions="
initialize_p
to final
so that it does not
+appear as a user-selectable parameter. This is done because
+initialize_p
has been changed from a constant
+to a parameter
for
+Buildings, issue 1013.
+This model is reconfigured to a steady state or dynamic check for conservation of trace substances. diff --git a/AixLib/Fluid/MixingVolumes/Validation/CoupledVolumesAir.mo b/AixLib/Fluid/MixingVolumes/Validation/CoupledVolumesAir.mo new file mode 100644 index 0000000000..d69cb79d87 --- /dev/null +++ b/AixLib/Fluid/MixingVolumes/Validation/CoupledVolumesAir.mo @@ -0,0 +1,31 @@ +within AixLib.Fluid.MixingVolumes.Validation; +model CoupledVolumesAir + "Validation model for two coupled volumes with air" + extends AixLib.Fluid.MixingVolumes.Validation.CoupledVolumesWater( + redeclare package Medium = AixLib.Media.Air); + + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +
+Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" ++Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" ++Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" ++Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" ++Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" ++Validation model for two directly coupled volumes. +
++This tests whether a Modelica translator can perform the index reduction. +
+", revisions=" +This test checks if the trace substance flow rate is @@ -106,7 +102,6 @@ First implementation.
This test checks if the trace substance flow rate is conserved
diff --git a/AixLib/Fluid/MixingVolumes/Validation/package.order b/AixLib/Fluid/MixingVolumes/Validation/package.order
index 018c87bc04..3c4b18718d 100644
--- a/AixLib/Fluid/MixingVolumes/Validation/package.order
+++ b/AixLib/Fluid/MixingVolumes/Validation/package.order
@@ -1,3 +1,9 @@
+CoupledVolumesAir
+CoupledVolumesGlycol47
+CoupledVolumesSpecializedAirPerfectGas
+CoupledVolumesSpecializedWaterConstantProperties_pT
+CoupledVolumesSpecializedWaterTemperatureDependentDensity
+CoupledVolumesWater
MixingVolume
MixingVolumeAdiabaticCooling
MixingVolumeHeatReverseFlow
diff --git a/AixLib/Fluid/Movers/BaseClasses/FlowMachineInterface.mo b/AixLib/Fluid/Movers/BaseClasses/FlowMachineInterface.mo
index 70efb77dcd..184df1c2b4 100644
--- a/AixLib/Fluid/Movers/BaseClasses/FlowMachineInterface.mo
+++ b/AixLib/Fluid/Movers/BaseClasses/FlowMachineInterface.mo
@@ -1,7 +1,7 @@
within AixLib.Fluid.Movers.BaseClasses;
model FlowMachineInterface
"Partial model with performance curves for fans or pumps"
- extends Modelica.Blocks.Interfaces.BlockIcon;
+ extends Modelica.Blocks.Icons.Block;
import cha = AixLib.Fluid.Movers.BaseClasses.Characteristics;
@@ -762,7 +762,5 @@ March 23 2010, by Michael Wetter:
First implementation.
control_dp
+Implemented option to set control_dp
independently from control_m_flow
.
This is
for #770.
diff --git a/AixLib/Fluid/Movers/BaseClasses/PartialFlowMachine.mo b/AixLib/Fluid/Movers/BaseClasses/PartialFlowMachine.mo
index 3d427ffd5b..d2fabc9f34 100644
--- a/AixLib/Fluid/Movers/BaseClasses/PartialFlowMachine.mo
+++ b/AixLib/Fluid/Movers/BaseClasses/PartialFlowMachine.mo
@@ -164,7 +164,6 @@ protected
annotation (
Placement(transformation(
extent={{-10,-10},{10,10}},
- rotation=0,
origin={-10,50})));
AixLib.Fluid.Delays.DelayFirstOrder vol(
@@ -607,7 +606,5 @@ Redesigned model to fix bug in medium balance.
First implementation.
Simple validation model for the flow machine interface model. diff --git a/AixLib/Fluid/Movers/BaseClasses/Validation/PowerInterface.mo b/AixLib/Fluid/Movers/BaseClasses/Validation/PowerInterface.mo index 60318e90f0..b5be3eb0c5 100644 --- a/AixLib/Fluid/Movers/BaseClasses/Validation/PowerInterface.mo +++ b/AixLib/Fluid/Movers/BaseClasses/Validation/PowerInterface.mo @@ -37,8 +37,6 @@ equation connect(PEle.y, powNonCoo.PEle) annotation (Line(points={{-39,-70},{-20,-70},{ -20,-30},{-12,-30}}, color={0,0,127})); annotation ( - Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100, - 100}})), Documentation(info="
Simple validation model for the power interface model. diff --git a/AixLib/Fluid/Movers/Data/Generic.mo b/AixLib/Fluid/Movers/Data/Generic.mo index 9a68ba3775..d074ed08db 100644 --- a/AixLib/Fluid/Movers/Data/Generic.mo +++ b/AixLib/Fluid/Movers/Data/Generic.mo @@ -46,15 +46,15 @@ record Generic "Generic data record for movers" parameter Real speed_nominal( final min=0, final unit="1") = 1 "Nominal rotational speed for flow characteristic" - annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm")); + annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm)")); parameter Real constantSpeed(final min=0, final unit="1") = constantSpeed_rpm/speed_rpm_nominal "Normalized speed set point, used if inputType = AixLib.Fluid.Types.InputType.Constant" - annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm")); + annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm)")); parameter Real[:] speeds(each final min = 0, each final unit="1") = speeds_rpm/speed_rpm_nominal "Vector of normalized speed set points, used if inputType = AixLib.Fluid.Types.InputType.Stages" - annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm")); + annotation (Dialog(group="Normalized speeds (used in model, default values assigned from speeds in rpm)")); parameter Modelica.SIunits.Conversions.NonSIunits.AngularVelocity_rpm speed_rpm_nominal=1500 "Nominal rotational speed for flow characteristic" diff --git a/AixLib/Fluid/Movers/Data/Pumps/Wilo/CronolineIL80slash220dash4slash4.mo b/AixLib/Fluid/Movers/Data/Pumps/Wilo/CronolineIL80slash220dash4slash4.mo index fa819e533e..d31f0f9c72 100644 --- a/AixLib/Fluid/Movers/Data/Pumps/Wilo/CronolineIL80slash220dash4slash4.mo +++ b/AixLib/Fluid/Movers/Data/Pumps/Wilo/CronolineIL80slash220dash4slash4.mo @@ -10,11 +10,16 @@ record CronolineIL80slash220dash4slash4 defaultComponentPrefixes="parameter", defaultComponentName="per", Documentation(info=" -
Data from: http://productfinder.wilo.com/nl/BE/product/000000100002c2550002003a/fc_product_datasheet
+See AixLib.Fluid.Movers.Data.Pumps.Wilo.Stratos25slash1to6 for more information about how the data is derived.
", revisions="See AixLib.Fluid.Movers.Data.Pumps.Wilo.Stratos25slash1to6for more information about how the data is derived.
+", revisions=" +Data from: http://productfinder.wilo.com/nl/BE/product/0000001d000149e80001003a/fc_product_datasheet
+See AixLib.Fluid.Movers.Data.Pumps.Wilo.Stratos25slash1to6 for more information about how the data is derived.
", revisions="
This example demonstrates the use of a RealInput
diff --git a/AixLib/Fluid/Movers/Examples/MoverParameter.mo b/AixLib/Fluid/Movers/Examples/MoverParameter.mo
index fc529fd608..04efde2150 100644
--- a/AixLib/Fluid/Movers/Examples/MoverParameter.mo
+++ b/AixLib/Fluid/Movers/Examples/MoverParameter.mo
@@ -86,8 +86,6 @@ equation
connect(pump_Nrpm.port_b, sin.ports[4]) annotation (Line(points={{10,40},{24,40},
{60,40},{60,-3}}, color={0,127,255}));
annotation (
- Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100,-100},{100,
- 100}})),
__Dymola_Commands(file=
"modelica://AixLib/Resources/Scripts/Dymola/Fluid/Movers/Examples/MoverParameter.mos"
"Simulate and plot"),
diff --git a/AixLib/Fluid/Movers/Examples/MoverStages.mo b/AixLib/Fluid/Movers/Examples/MoverStages.mo
index 2fd4e3e50c..11ef5719ac 100644
--- a/AixLib/Fluid/Movers/Examples/MoverStages.mo
+++ b/AixLib/Fluid/Movers/Examples/MoverStages.mo
@@ -28,8 +28,6 @@ equation
annotation (Line(points={{-39,80},{-30,80},{-30,-60},{0,-60},{0,-68}},
color={255,127,0}));
annotation (
- Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-100,-100},{100,
- 100}})),
__Dymola_Commands(file=
"modelica://AixLib/Resources/Scripts/Dymola/Fluid/Movers/Examples/MoverStages.mos"
"Simulate and plot"),
diff --git a/AixLib/Fluid/Movers/FlowControlled_dp.mo b/AixLib/Fluid/Movers/FlowControlled_dp.mo
index a9102b8faa..92d4299ed0 100644
--- a/AixLib/Fluid/Movers/FlowControlled_dp.mo
+++ b/AixLib/Fluid/Movers/FlowControlled_dp.mo
@@ -143,10 +143,10 @@ full speed.
Parameter prescribeSystemPressure
can be used to control the mover such that the pressure
difference set point is obtained across two points
-in the system, instead of across the fan.
-This allows an efficient implementation of
+in the system, instead of across the fan.
+This allows an efficient implementation of
static pressure reset controllers.
-A measurement of the pressure difference between the
+A measurement of the pressure difference between the
two points in system then needs to be connected
to RealInput dpMea
.
This functionality is demonstrated in
@@ -158,7 +158,7 @@ AixLib.Fluid.Movers.Validation.FlowControlled_dpSystem.
prescribeSystemPressure
.prescribeSystemPressure
has
-to be enabled and a differential pressure measurement
+to be enabled and a differential pressure measurement
must be connected to
the pump input dpMea
.
-This functionality is demonstrated in
+This functionality is demonstrated in
AixLib.Fluid.Movers.Validation.FlowControlled_dpSystem.
diff --git a/AixLib/Fluid/Movers/Validation/FlowControlled_dpSystem.mo b/AixLib/Fluid/Movers/Validation/FlowControlled_dpSystem.mo
index bab01d3f91..af46e10e47 100644
--- a/AixLib/Fluid/Movers/Validation/FlowControlled_dpSystem.mo
+++ b/AixLib/Fluid/Movers/Validation/FlowControlled_dpSystem.mo
@@ -198,7 +198,6 @@ equation
50,-80},{50,-88}}, color={0,0,127}));
annotation (
Diagram(coordinateSystem(preserveAspectRatio=true,
- initialScale=0.1,
extent={{-120,-120},{120,120}})),
experiment(StopTime=1, Tolerance=1e-06),
__Dymola_Commands(file=
@@ -206,10 +205,10 @@ __Dymola_Commands(file=
"Simulate and plot"),
Documentation(info="
-This example demonstrates and tests the use of
+This example demonstrates and tests the use of
AixLib.Fluid.Movers.Validation.FlowControlled_dp
-movers that use parameter
+movers that use parameter
prescribeSystemPressure
.
@@ -225,5 +224,5 @@ This is for
transferHeat = true
, then heat transfer with the ambient is
approximated and T converges towards the fixed ambient
temperature TAmb using a first order approximation
-with a time constant of tauHeaTra
.
+with a time constant of tauHeaTra
+when the flow rate is small.
Note that no energy is exchanged with the fluid as the
sensor does not influence the fluid temperature.
@@ -153,6 +156,12 @@ the mass flow rate on should set transferHeat=false
.
", revisions="
transferHeat=true
.
+See #840.
+tauInv
since this now exists in
diff --git a/AixLib/Fluid/Sensors/Velocity.mo b/AixLib/Fluid/Sensors/Velocity.mo
index 68b5fea9bd..2da94508a4 100644
--- a/AixLib/Fluid/Sensors/Velocity.mo
+++ b/AixLib/Fluid/Sensors/Velocity.mo
@@ -105,8 +105,8 @@ channel crossSection
must be specified in m2
diameter, the
cross sectional area can be specified as crossSection = diameter *
diameter / 4 * Modelica.Constants.pi
. See
-
-AixLib.Fluid.Sensors.Examples.FlowVelocity for an example implementation
+
+AixLib.Fluid.Sensors.Examples.Velocity for an example implementation
with diameter = 0.1
.
", revisions="
diff --git a/AixLib/Fluid/Sensors/package.mo b/AixLib/Fluid/Sensors/package.mo
index fe77cf23db..6a70f598f8 100644
--- a/AixLib/Fluid/Sensors/package.mo
+++ b/AixLib/Fluid/Sensors/package.mo
@@ -21,6 +21,7 @@ library.
PV model is based on manufactory data and performance factor including the -NOC
-
-Assumptions
PV model is based on manufactory data and performance factor.
-PV system data (DataBase Records) can be found:
-
-Source of literature for the calculation of the pv cell efficiency:
Thermal modelling to analyze the effect of cell temperature on PV
-modules energy efficiency
by Romary, Florian et al.
AixLib.Fluid.Solar.Electric.Examples.Testing_PV
-",revisions=" -Model for the efficiency of a solar thermal collector. Inputs are outdoor air temperature, fluid temperature and solar irradiation. Based on these values @@ -25,7 +48,19 @@ equation to the fluid circuit. We assume that the fluid temperature is equal to the collector temperature.
", revisions=" -15.12.2016, Moritz Lauster: moved
-19.11.2013, Marcus Fuchs: implemented
- ")); +This test demonstrates the solar thermal collector model. Different types of collectors can be tested at fixed boundary conditions. To test the collectors at different fluid temperatures, adjust h at left boundary accordung to this table:
-T in °C | h in J/kg
-20 | 84007
-30 | 125823
-40 | 167616
-50 | 209418
-60 | 251249
-70 | 293123
-80 | 335055
-90 | 377063
-(values are according to wolframalpha.com for water at p = 1 atm )
- ", revisions=" -Overview
+This test demonstrates the solar thermal collector model. Different types of collectors can be tested at fixed boundary conditions.
+", revisions=" +
Model of a solar thermal collector. Inputs are outdoor air temperature and solar irradiation. Based on these values and the collector properties from database, this model creates a heat flow to the fluid circuit.
The model maps solar collector efficiency based on the equation
- -Example Results
-AixLib.HVAC.HeatGeneration.Examples.SolarThermalCollector
- ", revisions=" -Overview
+Model of a solar thermal collector. Inputs are outdoor air temperature and solar irradiation. Based on these values and the collector properties from database, this model creates a heat flow to the fluid circuit.
+Concept
+The model maps solar collector efficiency based on the equation
++
Known Limitations
+Example Results
+AixLib.HVAC.HeatGeneration.Examples.SolarThermalCollector
+Furbo1996 (Optimum solar collector fluid flow rates) suggests a default volume flow rate of approx. 0.2 l/(min.m2) to 0.4 l/(min.m2). Taken from a panel manufacturer's manual (SunMaxx Technical Manual.pdf) the standard volume flow rate seems to be around 1.5 l/(min.m2). This is 3 l/min for collectors of size 0.93 m2 up to 2.79 m2.
+unit |
+SunMaxx |
+Furbo1996 |
+
l/(min.m2) |
+1.5 |
+0.3 |
+
m3/(h.m2) |
+0.091 |
+0.018 |
+
m3/(s.m2) |
+2.5e-5 |
+5.0e-6 |
+
gpm/m2 |
+0.40 |
+0.079 |
+
Assuming a default size for a unit of 2 m2 we get pressure losses for a module as in the following table (vfr=0.79 gpm):
Collector |
+pressure drop in psi |
+pressure drop in Pa |
+
Titan Power Plus SU2 |
+0.28 |
+1900 |
+
SunMaxx-VHP 30 (40 % Glycol) |
+0.43 |
+3000 |
+
The pressureloss factor should therefore be around 2500 Pa / (2*2.5e-5 m3/s)^2 = 1e12.
connect(solarThermalEfficiency.Q_flow, convertRelHeatFlow2absHeatFlow.u)
X_in_internal = zeros()
to be X_in_internal = ones()
.
-This is for
+This is for
#787.
+Model that changes the properties, +but not the mass flow rate, +of the fluid that passes through it. +
+
+If allowFlowReversal=true
, then the properties are changed for both flow directions,
+i.e., from port_a
to port_b
and
+from port_b
to port_a
.
+
+This model has no dynamics. +
+", +revisions=" +
+Partial model for a fluid source that either prescribes
+pressure or mass flow rate.
+Models that extend this partial model need to prescribe the outflowing
+specific enthalpy, composition and trace substances.
+This partial model only declares the ports
+and ensures that the pressures at all ports are equal.
+
+If the parameter verifyInputs
is set to true
,
+then a protected instance of medium base properties is enabled.
+This instance verifies that the
+medium temperature is within the bounds T_min
and T_max
,
+where T_min
and T_max
are constants of the Medium
.
+If the temperature is outside these bounds, the simulation will stop with an error.
+
+Partial model that defines
+ports.h_outflow
using an optional input for
+the temperature.
+Otherwise the parameter value is used.
+
+Partial model that defines outflowing properties
+ports.Xi_outflow
and ports.C_outflow
+using an optional input for both.
+Otherwise the parameter value is used.
+
Xi_in
.
+This is for
+#882.
+
+Partial model that defines
+ports.h_outflow
using an optional input for
+the specific enthalpy.
+Otherwise the parameter value is used.
+
+Partial model that defines the sum of
+ports.m_flow
using an optional input for
+the total mass flow rate.
+All port pressures are assumed equal.
+Otherwise the parameter value is used.
+
+Partial model that defines
+ports.p
using an optional input for
+the pressure.
+Otherwise the parameter value is used.
+
This package contains base classes that are used to construct the models in -Buildings.Fluid.Sources. +AixLib.Fluid.Sources.
")); end BaseClasses; diff --git a/AixLib/Fluid/Sources/BaseClasses/package.order b/AixLib/Fluid/Sources/BaseClasses/package.order index 5f9f183335..1e895d47ad 100644 --- a/AixLib/Fluid/Sources/BaseClasses/package.order +++ b/AixLib/Fluid/Sources/BaseClasses/package.order @@ -1 +1,8 @@ Outside +PartialPropertySource +PartialSource +PartialSource_T +PartialSource_Xi_C +PartialSource_h +PartialSource_m_flow +PartialSource_p diff --git a/AixLib/Fluid/Sources/Boundary_pT.mo b/AixLib/Fluid/Sources/Boundary_pT.mo index 13e899feff..46c6230430 100644 --- a/AixLib/Fluid/Sources/Boundary_pT.mo +++ b/AixLib/Fluid/Sources/Boundary_pT.mo @@ -1,153 +1,10 @@ within AixLib.Fluid.Sources; model Boundary_pT "Boundary with prescribed pressure, temperature, composition and trace substances" - extends Modelica.Fluid.Sources.BaseClasses.PartialSource; - parameter Boolean use_p_in = false - "Get the pressure from the input connector" - annotation(Evaluate=true, HideResult=true); - parameter Boolean use_T_in= false - "Get the temperature from the input connector" - annotation(Evaluate=true, HideResult=true); - parameter Boolean use_X_in = false - "Get the composition from the input connector" - annotation(Evaluate=true, HideResult=true); - parameter Boolean use_C_in = false - "Get the trace substances from the input connector" - annotation(Evaluate=true, HideResult=true); - - parameter Medium.AbsolutePressure p = Medium.p_default - "Fixed value of pressure" - annotation (Dialog(enable = not use_p_in)); - parameter Medium.Temperature T = Medium.T_default - "Fixed value of temperature" - annotation (Dialog(enable = not use_T_in)); - parameter Medium.MassFraction X[Medium.nX]( - final quantity=Medium.substanceNames) = Medium.X_default - "Fixed value of composition" - annotation (Dialog(enable = (not use_X_in) and Medium.nXi > 0)); - parameter Medium.ExtraProperty C[Medium.nC]( - final quantity=Medium.extraPropertiesNames) = fill(0, Medium.nC) - "Fixed values of trace substances" - annotation (Dialog(enable = (not use_C_in) and Medium.nC > 0)); - Modelica.Blocks.Interfaces.RealInput p_in(final unit="Pa") if use_p_in - "Prescribed boundary pressure" - annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); - Modelica.Blocks.Interfaces.RealInput T_in(final unit="K", - displayUnit="degC") if use_T_in - "Prescribed boundary temperature" - annotation (Placement(transformation(extent={{-140,20},{-100,60}}))); - Modelica.Blocks.Interfaces.RealInput X_in[Medium.nX]( - each final unit = "kg/kg", - final quantity=Medium.substanceNames) if use_X_in - "Prescribed boundary composition" - annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}))); - Modelica.Blocks.Interfaces.RealInput C_in[Medium.nC]( - final quantity=Medium.extraPropertiesNames) if use_C_in - "Prescribed boundary trace substances" - annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); -protected - Modelica.Blocks.Interfaces.RealInput p_in_internal(final unit="Pa") - "Needed to connect to conditional connector"; - Modelica.Blocks.Interfaces.RealInput T_in_internal(final unit="K", - displayUnit="degC") - "Needed to connect to conditional connector"; - Modelica.Blocks.Interfaces.RealInput X_in_internal[Medium.nX]( - each final unit = "kg/kg", - final quantity=Medium.substanceNames) - "Needed to connect to conditional connector"; - Modelica.Blocks.Interfaces.RealInput C_in_internal[Medium.nC]( - final quantity=Medium.extraPropertiesNames) - "Needed to connect to conditional connector"; - -initial equation - if not use_X_in then - Modelica.Fluid.Utilities.checkBoundary(Medium.mediumName, Medium.substanceNames, - Medium.singleState, true, X_in_internal, "Boundary_pT"); - end if; - -equation - if use_X_in then - Modelica.Fluid.Utilities.checkBoundary(Medium.mediumName, Medium.substanceNames, - Medium.singleState, true, X_in_internal, "Boundary_pT"); - end if; - connect(p_in, p_in_internal); - connect(T_in, T_in_internal); - connect(X_in, X_in_internal); - connect(C_in, C_in_internal); - if not use_p_in then - p_in_internal = p; - end if; - if not use_T_in then - T_in_internal = T; - end if; - if not use_X_in then - X_in_internal = X; - end if; - if not use_C_in then - C_in_internal = C; - end if; - medium.p = p_in_internal; - medium.T = T_in_internal; - medium.Xi = X_in_internal[1:Medium.nXi]; - ports.C_outflow = fill(C_in_internal, nPorts); + extends AixLib.Fluid.Sources.BaseClasses.PartialSource_p; + extends AixLib.Fluid.Sources.BaseClasses.PartialSource_T; + extends AixLib.Fluid.Sources.BaseClasses.PartialSource_Xi_C; annotation (defaultComponentName="bou", - Icon(coordinateSystem( - preserveAspectRatio=false, - extent={{-100,-100},{100,100}}, - grid={2,2}), graphics={ - Ellipse( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillPattern=FillPattern.Sphere, - fillColor={0,127,255}), - Text( - extent={{-150,110},{150,150}}, - textString="%name", - lineColor={0,0,255}), - Line( - visible=use_p_in, - points={{-100,80},{-58,80}}, - color={0,0,255}), - Line( - visible=use_T_in, - points={{-100,40},{-92,40}}, - color={0,0,255}), - Line( - visible=use_X_in, - points={{-100,-40},{-92,-40}}, - color={0,0,255}), - Line( - visible=use_C_in, - points={{-100,-80},{-60,-80}}, - color={0,0,255}), - Text( - visible=use_p_in, - extent={{-152,134},{-68,94}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="p"), - Text( - visible=use_X_in, - extent={{-164,4},{-62,-36}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="X"), - Text( - visible=use_C_in, - extent={{-164,-90},{-62,-130}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="C"), - Text( - visible=use_T_in, - extent={{-162,34},{-60,-6}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - textString="T")}), Documentation(info="Defines prescribed values for boundary conditions: @@ -157,9 +14,35 @@ Defines prescribed values for boundary conditions:
If use_p_in
is false (default option), the p
parameter
-is used as boundary pressure, and the p_in
input connector is disabled; if use_p_in
is true, then the p
parameter is ignored, and the value provided by the input connector is used instead.
The same applies to the temperature, composition and trace substances.
+
+If use_p_in
is false (default option),
+the p
parameter is used as boundary pressure,
+and the p_in
input connector is disabled;
+if use_p_in
is true, then the p
+parameter is ignored, and the value provided by the
+input connector is used instead.
+
+The same applies to the temperature T, composition Xi or X and trace substances C. +
+
+Instead of using Xi_in
(the independent composition fractions),
+the advanced tab provides an option for setting all
+composition fractions using X_in
.
+use_X_in
and use_Xi_in
cannot be used
+at the same time.
+
+Parameter verifyInputs
can be set to true
+to enable a check that verifies the validity of the used temperatures
+and pressures.
+This removes the corresponding overhead from the model, which is
+a substantial part of the overhead of this model.
+See #882
+for more information.
+
Note, that boundary temperature, mass fractions and trace substances have only an effect if the mass flow @@ -171,6 +54,11 @@ with exception of boundary pressure, do not have an effect. revisions="
medium
conditional and refactored inputs.
+See #882.
+checkBoundary
implementation
such that it is run as an initial equation
diff --git a/AixLib/Fluid/Sources/Boundary_ph.mo b/AixLib/Fluid/Sources/Boundary_ph.mo
index 7ed0f16667..701eae69cb 100644
--- a/AixLib/Fluid/Sources/Boundary_ph.mo
+++ b/AixLib/Fluid/Sources/Boundary_ph.mo
@@ -1,166 +1,50 @@
within AixLib.Fluid.Sources;
model Boundary_ph
"Boundary with prescribed pressure, specific enthalpy, composition and trace substances"
- extends Modelica.Fluid.Sources.BaseClasses.PartialSource;
- parameter Boolean use_p_in = false
- "Get the pressure from the input connector"
- annotation(Evaluate=true, HideResult=true);
- parameter Boolean use_h_in= false
- "Get the specific enthalpy from the input connector"
- annotation(Evaluate=true, HideResult=true);
- parameter Boolean use_X_in = false
- "Get the composition from the input connector"
- annotation(Evaluate=true, HideResult=true);
- parameter Boolean use_C_in = false
- "Get the trace substances from the input connector"
- annotation(Evaluate=true, HideResult=true);
-
- parameter Medium.AbsolutePressure p = Medium.p_default
- "Fixed value of pressure"
- annotation (Dialog(enable = not use_p_in));
- parameter Medium.SpecificEnthalpy h = Medium.h_default
- "Fixed value of specific enthalpy"
- annotation (Dialog(enable = not use_h_in));
- parameter Medium.MassFraction X[Medium.nX](
- final quantity=Medium.substanceNames) = Medium.X_default
- "Fixed value of composition"
- annotation (Dialog(enable = (not use_X_in) and Medium.nXi > 0));
- parameter Medium.ExtraProperty C[Medium.nC](
- final quantity=Medium.extraPropertiesNames)=fill(0, Medium.nC)
- "Fixed values of trace substances"
- annotation (Dialog(enable = (not use_C_in) and Medium.nC > 0));
-
- Modelica.Blocks.Interfaces.RealInput p_in(final unit="Pa") if use_p_in
- "Prescribed boundary pressure"
- annotation (Placement(transformation(extent={{-140,60},{-100,100}})));
- Modelica.Blocks.Interfaces.RealInput h_in(final unit="J/kg") if use_h_in
- "Prescribed boundary specific enthalpy"
- annotation (Placement(transformation(extent={{-140,20},{-100,60}})));
- Modelica.Blocks.Interfaces.RealInput X_in[Medium.nX](
- each final unit = "kg/kg",
- final quantity=Medium.substanceNames) if use_X_in
- "Prescribed boundary composition"
- annotation (Placement(transformation(extent={{-140,-60},{-100,-20}})));
- Modelica.Blocks.Interfaces.RealInput C_in[Medium.nC](
- final quantity=Medium.extraPropertiesNames) if use_C_in
- "Prescribed boundary trace substances"
- annotation (Placement(transformation(extent={{-140,-100},{-100,-60}})));
-protected
- Modelica.Blocks.Interfaces.RealInput p_in_internal(final unit="Pa")
- "Needed to connect to conditional connector";
- Modelica.Blocks.Interfaces.RealInput h_in_internal(final unit="J/kg")
- "Needed to connect to conditional connector";
- Modelica.Blocks.Interfaces.RealInput X_in_internal[Medium.nX](
- each final unit = "kg/kg",
- final quantity=Medium.substanceNames)
- "Needed to connect to conditional connector";
- Modelica.Blocks.Interfaces.RealInput C_in_internal[Medium.nC](
- final quantity=Medium.extraPropertiesNames)
- "Needed to connect to conditional connector";
-
-initial equation
- if not use_X_in then
- Modelica.Fluid.Utilities.checkBoundary(Medium.mediumName, Medium.substanceNames,
- Medium.singleState, true, X_in_internal, "Boundary_ph");
- end if;
-
-equation
- if use_X_in then
- Modelica.Fluid.Utilities.checkBoundary(Medium.mediumName, Medium.substanceNames,
- Medium.singleState, true, X_in_internal, "Boundary_ph");
- end if;
- connect(p_in, p_in_internal);
- connect(h_in, h_in_internal);
- connect(X_in, X_in_internal);
- connect(C_in, C_in_internal);
- if not use_p_in then
- p_in_internal = p;
- end if;
- if not use_h_in then
- h_in_internal = h;
- end if;
- if not use_X_in then
- X_in_internal = X;
- end if;
- if not use_C_in then
- C_in_internal = C;
- end if;
- medium.p = p_in_internal;
- medium.h = h_in_internal;
- medium.Xi = X_in_internal[1:Medium.nXi];
- ports.C_outflow = fill(C_in_internal, nPorts);
+ extends AixLib.Fluid.Sources.BaseClasses.PartialSource_p;
+ extends AixLib.Fluid.Sources.BaseClasses.PartialSource_h;
+ extends AixLib.Fluid.Sources.BaseClasses.PartialSource_Xi_C;
annotation (defaultComponentName="bou",
- Icon(coordinateSystem(
- preserveAspectRatio=false,
- extent={{-100,-100},{100,100}},
- grid={2,2}), graphics={
- Ellipse(
- extent={{-100,100},{100,-100}},
- lineColor={0,0,0},
- fillPattern=FillPattern.Sphere,
- fillColor={0,127,255}),
- Text(
- extent={{-150,110},{150,150}},
- textString="%name",
- lineColor={0,0,255}),
- Line(
- visible=use_p_in,
- points={{-100,80},{-60,80}},
- color={0,0,255}),
- Line(
- visible=use_h_in,
- points={{-100,40},{-92,40}},
- color={0,0,255}),
- Line(
- visible=use_X_in,
- points={{-100,-40},{-92,-40}},
- color={0,0,255}),
- Line(
- visible=use_C_in,
- points={{-100,-80},{-60,-80}},
- color={0,0,255}),
- Text(
- visible=use_p_in,
- extent={{-150,134},{-72,94}},
- lineColor={0,0,0},
- fillColor={255,255,255},
- fillPattern=FillPattern.Solid,
- textString="p"),
- Text(
- visible=use_h_in,
- extent={{-166,34},{-64,-6}},
- lineColor={0,0,0},
- fillColor={255,255,255},
- fillPattern=FillPattern.Solid,
- textString="h"),
- Text(
- visible=use_X_in,
- extent={{-164,4},{-62,-36}},
- lineColor={0,0,0},
- fillColor={255,255,255},
- fillPattern=FillPattern.Solid,
- textString="X"),
- Text(
- visible=use_C_in,
- extent={{-164,-90},{-62,-130}},
- lineColor={0,0,0},
- fillColor={255,255,255},
- fillPattern=FillPattern.Solid,
- textString="C")}),
Documentation(info="
Defines prescribed values for boundary conditions:
If use_p_in
is false (default option), the p
parameter
-is used as boundary pressure, and the p_in
input connector is disabled; if use_p_in
is true, then the p
parameter is ignored, and the value provided by the input connector is used instead.
The same applies to the temperature, composition and trace substances.
+
-Note, that boundary temperature,
+If use_p_in
is false (default option),
+the p
parameter is used as boundary pressure,
+and the p_in
input connector is disabled;
+if use_p_in
is true, then the p
+parameter is ignored, and the value provided by the
+input connector is used instead.
+
+The same applies to the specific enthalpy h, composition Xi or X and trace substances C. +
+
+Instead of using Xi_in
(the independent composition fractions),
+the advanced tab provides an option for setting all
+composition fractions using X_in
.
+use_X_in
and use_Xi_in
cannot be used
+at the same time.
+
+Parameter verifyInputs
can be set to true
+to enable a check that verifies the validity of the used specific enthalpy
+and pressures.
+This removes the corresponding overhead from the model, which is
+a substantial part of the overhead of this model.
+See #882
+for more information.
+
+Note, that boundary specific enthalpy, mass fractions and trace substances have only an effect if the mass flow is from the boundary into the port. If mass is flowing from the port into the boundary, the boundary definitions, @@ -170,6 +54,11 @@ with exception of boundary pressure, do not have an effect. revisions="
medium
conditional and refactored inputs.
+See #882.
+checkBoundary
implementation
such that it is run as an initial equation
diff --git a/AixLib/Fluid/Sources/Examples/MassFlowSource_WeatherData.mo b/AixLib/Fluid/Sources/Examples/MassFlowSource_WeatherData.mo
index 091de592cc..af657d4f84 100644
--- a/AixLib/Fluid/Sources/Examples/MassFlowSource_WeatherData.mo
+++ b/AixLib/Fluid/Sources/Examples/MassFlowSource_WeatherData.mo
@@ -5,12 +5,12 @@ model MassFlowSource_WeatherData
package Medium = AixLib.Media.Air "Medium model for air";
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
annotation (Placement(transformation(extent={{-100,-10},{-80,10}})));
AixLib.Fluid.Sources.MassFlowSource_WeatherData sin_with_h(
redeclare package Medium = Medium,
m_flow=-1,
- nPorts=1) "Mass flow source model receiving h and X from weather data through
+ nPorts=1) "Mass flow source model receiving h and X from weather data through
weather bus"
annotation (Placement(transformation(extent={{96,-10},{76,10}})));
AixLib.Fluid.Sources.Outside bou(redeclare package Medium = Medium, nPorts=1)
diff --git a/AixLib/Fluid/Sources/Examples/Outside.mo b/AixLib/Fluid/Sources/Examples/Outside.mo
index cf2ce73ab2..78c8774473 100644
--- a/AixLib/Fluid/Sources/Examples/Outside.mo
+++ b/AixLib/Fluid/Sources/Examples/Outside.mo
@@ -8,7 +8,7 @@ model Outside
nPorts=1) "Model with outside conditions"
annotation (Placement(transformation(extent={{-50,20},{-30,40}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
- "modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
+ Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
annotation (Placement(transformation(extent={{-80,20},{-60,40}})));
AixLib.Fluid.Sources.MassFlowSource_T sin(
redeclare package Medium = Medium,
diff --git a/AixLib/Fluid/Sources/Examples/Outside_CpLowRise.mo b/AixLib/Fluid/Sources/Examples/Outside_CpLowRise.mo
index d63ee0d712..457a2c66ac 100644
--- a/AixLib/Fluid/Sources/Examples/Outside_CpLowRise.mo
+++ b/AixLib/Fluid/Sources/Examples/Outside_CpLowRise.mo
@@ -10,7 +10,7 @@ model Outside_CpLowRise
Cp0=0.6) "Model with outside conditions"
annotation (Placement(transformation(extent={{-40,0},{-20,20}})));
AixLib.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
- filNam="modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos")
+ filNam=Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
annotation (Placement(transformation(extent={{-80,0},{-60,20}})));
AixLib.Fluid.Sources.Outside_CpLowRise north(
redeclare package Medium = Medium,
diff --git a/AixLib/Fluid/Sources/Examples/PropertySource_T.mo b/AixLib/Fluid/Sources/Examples/PropertySource_T.mo
new file mode 100644
index 0000000000..3be723a9d7
--- /dev/null
+++ b/AixLib/Fluid/Sources/Examples/PropertySource_T.mo
@@ -0,0 +1,132 @@
+within AixLib.Fluid.Sources.Examples;
+model PropertySource_T "Model that illustrates the use of PropertySource_T"
+ extends Modelica.Icons.Example;
+ package Medium = AixLib.Media.Air(extraPropertiesNames={"CO2"});
+
+ AixLib.Fluid.Sources.PropertySource_T proSouXi(
+ redeclare package Medium = Medium,
+ use_Xi_in=true)
+ "Property source that prescribes Xi"
+ annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
+ AixLib.Fluid.Sources.MassFlowSource_T bouXi(
+ redeclare package Medium = Medium,
+ nPorts=1,
+ use_m_flow_in=true)
+ "Boundary for Xi test"
+ annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
+
+ AixLib.Fluid.Sources.Boundary_ph sin(
+ redeclare package Medium = Medium,
+ nPorts=3)
+ "Sink model"
+ annotation (Placement(transformation(extent={{80,-10},{60,10}})));
+ AixLib.Fluid.Sources.PropertySource_T proSouT(
+ redeclare package Medium = Medium,
+ use_T_in=true)
+ "Property source that prescribes the temperature"
+ annotation (Placement(transformation(extent={{-10,30},{10,50}})));
+ AixLib.Fluid.Sources.PropertySource_T proSouC(
+ redeclare package Medium = Medium,
+ use_C_in=true)
+ "Property source that prescribes C"
+ annotation (Placement(transformation(extent={{-10,-50},{10,-30}})));
+ AixLib.Fluid.Sources.MassFlowSource_T bouT(
+ redeclare package Medium = Medium,
+ nPorts=1,
+ use_m_flow_in=true)
+ "Boundary for temperature test"
+ annotation (Placement(transformation(extent={{-60,30},{-40,50}})));
+ AixLib.Fluid.Sources.MassFlowSource_T bouC(
+ redeclare package Medium = Medium,
+ nPorts=1,
+ use_m_flow_in=true)
+ "Boundary for C test"
+ annotation (Placement(transformation(extent={{-60,-50},{-40,-30}})));
+ Modelica.Blocks.Sources.Constant T(k=Medium.T_default + 1)
+ "Fixed temperature value"
+ annotation (Placement(transformation(extent={{-40,50},{-20,70}})));
+ Modelica.Blocks.Sources.Constant Xi(k=0.0123)
+ "Fixed Xi value"
+ annotation (Placement(transformation(extent={{-40,10},{-20,30}})));
+ Modelica.Blocks.Sources.Constant C(k=0.1)
+ "Fixed C value"
+ annotation (Placement(transformation(extent={{-40,-30},{-20,-10}})));
+ Modelica.Blocks.Sources.Ramp ramp(
+ height=-2,
+ duration=1,
+ offset=1)
+ "Ramp for mass flow rate"
+ annotation (Placement(transformation(extent={{-100,60},{-80,80}})));
+ AixLib.Fluid.Sensors.TemperatureTwoPort senTemT(
+ redeclare package Medium = Medium,
+ m_flow_nominal=1,
+ tau=0)
+ "Temperature sensor for when using temperature input"
+ annotation (Placement(transformation(extent={{20,30},{40,50}})));
+ AixLib.Fluid.Sensors.TemperatureTwoPort senTemXi(
+ redeclare package Medium = Medium,
+ m_flow_nominal=1,
+ tau=0)
+ "Temperature sensor for when using Xi input"
+ annotation (Placement(transformation(extent={{20,-10},{40,10}})));
+ AixLib.Fluid.Sensors.TemperatureTwoPort senTemC(
+ redeclare package Medium = Medium,
+ m_flow_nominal=1,
+ tau=0)
+ "Temperature sensor for when using C input"
+ annotation (Placement(transformation(extent={{20,-50},{40,-30}})));
+equation
+ connect(bouXi.ports[1], proSouXi.port_a)
+ annotation (Line(points={{-40,0},{-10,0}}, color={0,127,255}));
+ connect(bouC.ports[1], proSouC.port_a)
+ annotation (Line(points={{-40,-40},{-10,-40}}, color={0,127,255}));
+ connect(bouT.ports[1], proSouT.port_a)
+ annotation (Line(points={{-40,40},{-10,40}}, color={0,127,255}));
+ connect(Xi.y, proSouXi.Xi_in[1])
+ annotation (Line(points={{-19,20},{0,20},{0,12}}, color={0,0,127}));
+ connect(C.y, proSouC.C_in[1])
+ annotation (Line(points={{-19,-20},{4,-20},{4,-28}}, color={0,0,127}));
+ connect(bouT.m_flow_in, ramp.y) annotation (Line(points={{-62,48},{-72,48},{-72,
+ 70},{-79,70}}, color={0,0,127}));
+ connect(ramp.y, bouXi.m_flow_in) annotation (Line(points={{-79,70},{-72,70},{-72,
+ 8},{-62,8}}, color={0,0,127}));
+ connect(ramp.y, bouC.m_flow_in) annotation (Line(points={{-79,70},{-72,70},{-72,
+ -32},{-62,-32}}, color={0,0,127}));
+ connect(T.y, proSouT.T_in)
+ annotation (Line(points={{-19,60},{-4,60},{-4,52}}, color={0,0,127}));
+ connect(proSouC.port_b, senTemC.port_a)
+ annotation (Line(points={{10,-40},{20,-40}}, color={0,127,255}));
+ connect(senTemC.port_b, sin.ports[1]) annotation (Line(points={{40,-40},{60,
+ -40},{60,2.66667}}, color={0,127,255}));
+ connect(senTemXi.port_b, sin.ports[2]) annotation (Line(points={{40,0},{50,0},
+ {50,-2.22045e-16},{60,-2.22045e-16}}, color={0,127,255}));
+ connect(senTemT.port_b, sin.ports[3]) annotation (Line(points={{40,40},{60,40},
+ {60,-2.66667}}, color={0,127,255}));
+ connect(proSouT.port_b, senTemT.port_a)
+ annotation (Line(points={{10,40},{20,40}}, color={0,127,255}));
+ connect(proSouXi.port_b, senTemXi.port_a)
+ annotation (Line(points={{10,0},{20,0}}, color={0,127,255}));
+ annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
+ coordinateSystem(preserveAspectRatio=false)),
+ Documentation(info="
++Example model that illustrates the use of +the +AixLib.Fluid.Sources.PropertySource_T model. +
+", revisions=" ++Example model that illustrates the use of +the +AixLib.Fluid.Sources.PropertySource_h model. +
+", revisions=" +Models an ideal flow source, with prescribed values of flow rate, temperature, composition and trace substances: @@ -169,9 +14,34 @@ Models an ideal flow source, with prescribed values of flow rate, temperature, c
If use_m_flow_in
is false (default option), the m_flow
parameter
-is used as boundary pressure, and the m_flow_in
input connector is disabled; if use_m_flow_in
is true, then the m_flow
parameter is ignored, and the value provided by the input connector is used instead.
The same applies to the temperature, composition and trace substances.
+
+If use_m_flow_in
is false (default option),
+the m_flow
parameter
+is used as boundary pressure, and the m_flow_in
+input connector is disabled; if use_m_flow_in
+is true, then the m_flow
parameter is ignored,
+and the value provided by the input connector is used instead.
+
+The same applies to the temperature T, composition Xi or X and trace substances C. +
+
+Instead of using Xi_in
(the independent composition fractions),
+the advanced tab provides an option for setting all
+composition fractions using X_in
.
+use_X_in
and use_Xi_in
cannot be used
+at the same time.
+
+Parameter verifyInputs
can be set to true
+to enable a check that verifies the validity of the used temperature
+and pressures.
+This removes the corresponding overhead from the model, which is
+a substantial part of the overhead of this model.
+See #882
+for more information.
+
Note, that boundary temperature, mass fractions and trace substances have only an effect if the mass flow @@ -183,6 +53,11 @@ with exception of boundary flow rate, do not have an effect. revisions="
medium
conditional and refactored inputs.
+See #882.
+checkBoundary
implementation
such that it is run as an initial equation
diff --git a/AixLib/Fluid/Sources/MassFlowSource_WeatherData.mo b/AixLib/Fluid/Sources/MassFlowSource_WeatherData.mo
index 440c913b1c..d8c9ec611c 100644
--- a/AixLib/Fluid/Sources/MassFlowSource_WeatherData.mo
+++ b/AixLib/Fluid/Sources/MassFlowSource_WeatherData.mo
@@ -1,6 +1,6 @@
within AixLib.Fluid.Sources;
model MassFlowSource_WeatherData
- "Ideal flow source that produces a prescribed mass flow with prescribed
+ "Ideal flow source that produces a prescribed mass flow with prescribed
trace substances, outside specific enthalpy and mass fraction "
extends Modelica.Fluid.Sources.BaseClasses.PartialSource;
parameter Boolean use_m_flow_in = false
@@ -148,7 +148,7 @@ equation
textString="C")}),
Documentation(info="
-Models an ideal flow source, with prescribed values of flow rate and trace +Models an ideal flow source, with prescribed values of flow rate and trace substances, with temperature and specific enthalpy from outside:
If use_m_flow_in
is false (default option), the m_flow
-
parameter is used as boundary flow rate, and the m_flow_in
-input connector is disabled;
-if use_m_flow_in
is true, then the m_flow
parameter
+ parameter is used as boundary flow rate, and the m_flow_in
+input connector is disabled;
+if use_m_flow_in
is true, then the m_flow
parameter
is ignored, and the value provided by the input connector is used instead.
The same applies to the trace substances.
The
-AixLib.Utilities.Psychrometrics.X_pTphi block is used with the input data
-including pAtm
, TDryBul
, relHum
from
+AixLib.Utilities.Psychrometrics.X_pTphi block is used with the input data
+including pAtm
, TDryBul
, relHum
from
weather bus weaBus
, to calculate X
.
The same applies to the specific enthalpy.
@@ -181,7 +181,7 @@ revisions="
-Models an ideal flow source, with prescribed values of flow rate, temperature and composition: +Models an ideal flow source, with prescribed values of flow rate, specific enthalpy, composition and trace substances:
If use_m_flow_in
is false (default option), the m_flow
parameter
-is used as boundary pressure, and the m_flow_in
input connector is disabled; if use_m_flow_in
is true, then the m_flow
parameter is ignored, and the value provided by the input connector is used instead.
The same applies to the temperature, composition and trace substances.
-Note, that boundary temperature,
+If use_m_flow_in
is false (default option),
+the m_flow
parameter
+is used as boundary pressure, and the m_flow_in
+input connector is disabled; if use_m_flow_in
+is true, then the m_flow
parameter is ignored,
+and the value provided by the input connector is used instead.
+
+The same applies to the specific enthalpy h, composition Xi or X and trace substances C. +
+
+Instead of using Xi_in
(the independent composition fractions),
+the advanced tab provides an option for setting all
+composition fractions using X_in
.
+use_X_in
and use_Xi_in
cannot be used
+at the same time.
+
+Parameter verifyInputs
can be set to true
+to enable a check that verifies the validity of the used specific enthalpy
+and pressures.
+This removes the corresponding overhead from the model, which is
+a substantial part of the overhead of this model.
+See #882
+for more information.
+
+Note, that boundary specific enthalpy, mass fractions and trace substances have only an effect if the mass flow is from the boundary into the port. If mass is flowing from the port into the boundary, the boundary definitions, @@ -184,6 +53,11 @@ with exception of boundary flow rate, do not have an effect. revisions="
medium
conditional and refactored inputs.
+See #882.
+checkBoundary
implementation
such that it is run as an initial equation
diff --git a/AixLib/Fluid/Sources/Outside_CpLowRise.mo b/AixLib/Fluid/Sources/Outside_CpLowRise.mo
index 674b883ae4..48bf8db8f9 100644
--- a/AixLib/Fluid/Sources/Outside_CpLowRise.mo
+++ b/AixLib/Fluid/Sources/Outside_CpLowRise.mo
@@ -47,8 +47,8 @@ equation
This model describes boundary conditions for
pressure, enthalpy, and species concentration that can be obtained
from weather data. The model is identical to
-
-Buildings.Fluid.Sources.Outside,
+
+AixLib.Fluid.Sources.Outside,
except that it adds the wind pressure to the
pressure at the fluid port ports
.
The correlation that is used to compute the wind pressure is based
@@ -56,8 +56,8 @@ on Swami and Chandra (1987) and valid for low-rise buildings
with rectangular shape.
The same correlation is also implemented in CONTAM (Persily and Ivy, 2001).
For other buildings, the model
-
-Buildings.Fluid.Sources.Outside_Cp should be used that takes
+
+AixLib.Fluid.Sources.Outside_Cp should be used that takes
the wind pressure coefficient as an input or parameter.
@@ -90,7 +90,7 @@ all low-rise buildings as this represents the average of various values reported in the literature. The computation of the actual wind pressure coefficient Cp is explained in the function - + Buildings.Airflow.Multizone.BaseClasses.windPressureLowRise that is called by this model.
diff --git a/AixLib/Fluid/Sources/PropertySource_T.mo b/AixLib/Fluid/Sources/PropertySource_T.mo new file mode 100644 index 0000000000..b4e84d07d4 --- /dev/null +++ b/AixLib/Fluid/Sources/PropertySource_T.mo @@ -0,0 +1,82 @@ +within AixLib.Fluid.Sources; +model PropertySource_T + "Model for overriding fluid properties that flow through the component, using temperature input" + // The parameter declaration is before 'extends', + // since this affects the parameter order in the parameters window. + parameter Boolean use_T_in= false + "Set to true to get the leaving fluid temperature from the input connector" + annotation(Evaluate=true, Dialog(group="Inputs")); + extends AixLib.Fluid.Sources.BaseClasses.PartialPropertySource; + Modelica.Blocks.Interfaces.RealInput T_in if use_T_in + "Prescribed value for leaving fluid temperature" annotation (Placement( + transformation( + extent={{-20,-20},{20,20}}, + rotation=270, + origin={-40,120}))); +protected + Modelica.Blocks.Interfaces.RealOutput T_in_internal(unit="K") + "Internal connector for leaving fluid temperature"; + Modelica.Blocks.Interfaces.RealOutput h_T_a= + Medium.specificEnthalpy( + Medium.setState_pTX(port_a.p, T_in_internal, port_a.Xi_outflow)) if use_T_in + "Conditional connector for enthalpy leaving port a"; + Modelica.Blocks.Interfaces.RealOutput h_T_b= + Medium.specificEnthalpy( + Medium.setState_pTX(port_b.p, T_in_internal, port_b.Xi_outflow)) if use_T_in + "Conditional connector for enthalpy leaving port b"; + +equation + connect(h_internal_a, h_T_a); + connect(h_internal_b, h_T_b); + if use_T_in then + connect(T_in_internal, T_in); + else + T_in_internal = 293.15; + connect(h_internal_a, h_in_b); + connect(h_internal_b, h_in_a); + end if; +annotation (defaultComponentName="proSou", + Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, + -100},{100,100}}), graphics={ + Text( + visible=use_T_in, + extent={{-90,98},{12,58}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="T")}), + Documentation(info=" ++Model that changes the properties, +but not the mass flow rate, +of the fluid that passes through it. +
+
+If allowFlowReversal=true
, then the properties are changed for both flow directions,
+i.e., from port_a
to port_b
and
+from port_b
to port_a
.
+
+The fluid properties h
, Xi
and C
+are only modified when the corresponding boolean parameter
+use_T_in
, use_Xi_in
or use_C_in
+is set to true
.
+
+This model has no dynamics. +
+", +revisions=" ++Model that changes the properties, +but not the mass flow rate, +of the fluid that passes through it. +
+
+If allowFlowReversal=true
, then the properties are changed for both flow directions,
+i.e., from port_a
to port_b
and
+from port_b
to port_a
.
+
+The fluid properties h
, Xi
and C
+are only modified when the corresponding boolean parameter
+use_h_in
, use_Xi_in
or use_C_in
+is set to true
.
+
+This model has no dynamics. +
+", +revisions=" +diff --git a/AixLib/Fluid/Sources/package.order b/AixLib/Fluid/Sources/package.order index f1a2df997b..141c28efd1 100644 --- a/AixLib/Fluid/Sources/package.order +++ b/AixLib/Fluid/Sources/package.order @@ -6,6 +6,8 @@ MassFlowSource_WeatherData MassFlowSource_h Outside Outside_CpLowRise +PropertySource_T +PropertySource_h TraceSubstancesFlowSource Examples BaseClasses diff --git a/AixLib/Fluid/Storage/BaseClasses/Buoyancy.mo b/AixLib/Fluid/Storage/BaseClasses/Buoyancy.mo new file mode 100644 index 0000000000..d65a6455f5 --- /dev/null +++ b/AixLib/Fluid/Storage/BaseClasses/Buoyancy.mo @@ -0,0 +1,119 @@ +within AixLib.Fluid.Storage.BaseClasses; +model Buoyancy + "Model to add buoyancy if there is a temperature inversion in the tank" + extends Modelica.Blocks.Icons.Block; + + replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium model" annotation ( + choicesAllMatching = true); + parameter Modelica.SIunits.Volume V "Volume"; + parameter Integer nSeg(min=2) = 2 "Number of volume segments"; + parameter Modelica.SIunits.Time tau(min=0) "Time constant for mixing"; + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a[nSeg] heatPort + "Heat input into the volumes" + annotation (Placement(transformation(extent={{90,-10},{110,10}}))); + + Modelica.SIunits.HeatFlowRate[nSeg-1] Q_flow + "Heat flow rate from segment i+1 to i"; +protected + parameter Medium.ThermodynamicState sta_default = Medium.setState_pTX(T=Medium.T_default, + p=Medium.p_default, X=Medium.X_default[1:Medium.nXi]) + "Medium state at default properties"; + parameter Modelica.SIunits.Density rho_default=Medium.density(sta_default) + "Density, used to compute fluid mass"; + parameter Modelica.SIunits.SpecificHeatCapacity cp_default=Medium.specificHeatCapacityCp(sta_default) + "Specific heat capacity"; + parameter Real k(unit="W/K") = V*rho_default*cp_default/tau/nSeg + "Proportionality constant, since we use dT instead of dH"; + Modelica.SIunits.TemperatureDifference dT[nSeg-1] + "Temperature difference between adjoining volumes"; +equation + for i in 1:nSeg-1 loop + dT[i] = heatPort[i+1].T-heatPort[i].T; + Q_flow[i] = k*noEvent(smooth(1, if dT[i]>0 then dT[i]^2 else 0)); + end for; + + heatPort[1].Q_flow = -Q_flow[1]; + for i in 2:nSeg-1 loop + heatPort[i].Q_flow = -Q_flow[i]+Q_flow[i-1]; + end for; + heatPort[nSeg].Q_flow = Q_flow[nSeg-1]; + annotation (Documentation(info=" +
+This model outputs a heat flow rate that can be added to fluid volumes +in order to emulate buoyancy during a temperature inversion. +For simplicity, this model does not compute a buoyancy induced mass flow rate, +but rather a heat flow that has the same magnitude as the enthalpy flow +associated with the buoyancy induced mass flow rate. +
+", revisions=" +noEvent(...)
to
+Q_flow[i] = k*smooth(1, if dT[i]>0 then dT[i]^2 else 0);
+since the equation returns the same value to the left and right of
+dT[i]>0
.
+Q_flow[i] = k*max(heatPort[i+1].T-heatPort[i].T, 0);
to
+Q_flow[i] = k*smooth(1, if dT[i]>0 then dT[i]^2 else 0);
.
+The previous implementation was not differentiable. In modeling a solar system, this
+change reduced the computing time by a factor of 20 during the time when the pumps
+were almost switched off and colder temperature was fed from the collector to the tank.
+
+This model provides an example of how the
+
+AixLib.Fluid.Storage.BaseClasses.IndirectTankHeatExchanger
+model is used. In the model water flows from a flow source through
+the heat exchanger to a low pressure environment. The stagnant fluid on the outside
+of the heat exchanger is modeled as a constant temperature.
+
Modelica.Fluid.System
+to address issue
+#311.
++This package contains examples for models found in +AixLib.Fluid.Storage.BaseClasses. +
+")); +end Examples; diff --git a/AixLib/Fluid/Storage/BaseClasses/Examples/package.order b/AixLib/Fluid/Storage/BaseClasses/Examples/package.order new file mode 100644 index 0000000000..580292349d --- /dev/null +++ b/AixLib/Fluid/Storage/BaseClasses/Examples/package.order @@ -0,0 +1 @@ +IndirectTankHeatExchanger diff --git a/AixLib/Fluid/Storage/BaseClasses/IndirectTankHeatExchanger.mo b/AixLib/Fluid/Storage/BaseClasses/IndirectTankHeatExchanger.mo new file mode 100644 index 0000000000..3c574a6b46 --- /dev/null +++ b/AixLib/Fluid/Storage/BaseClasses/IndirectTankHeatExchanger.mo @@ -0,0 +1,354 @@ +within AixLib.Fluid.Storage.BaseClasses; +model IndirectTankHeatExchanger + "Heat exchanger typically submerged in a fluid with a second fluid circulating through it" + + replaceable package MediumHex = Modelica.Media.Interfaces.PartialMedium + "Heat transfer fluid flowing through the heat exchanger"; + replaceable package MediumTan = Modelica.Media.Interfaces.PartialMedium + "Heat transfer fluid inside the tank"; + + extends AixLib.Fluid.Interfaces.TwoPortFlowResistanceParameters; + extends AixLib.Fluid.Interfaces.LumpedVolumeDeclarations( + redeclare final package Medium = MediumHex); + extends AixLib.Fluid.Interfaces.PartialTwoPortInterface( + redeclare final package Medium = MediumHex, + final show_T=false); + + parameter Integer nSeg(min=2) "Number of segments in the heat exchanger"; + parameter Modelica.SIunits.HeatCapacity CHex + "Capacitance of the heat exchanger"; + parameter Modelica.SIunits.Volume volHexFlu + "Volume of heat transfer fluid in the heat exchanger"; + parameter Modelica.SIunits.HeatFlowRate Q_flow_nominal + "Heat transfer at nominal conditions" + annotation(Dialog(tab="General", group="Nominal condition")); + + final parameter Modelica.SIunits.ThermalConductance UA_nominal= + abs(Q_flow_nominal/(THex_nominal-TTan_nominal)) + "Nominal UA value for the heat exchanger"; + parameter Modelica.SIunits.Temperature TTan_nominal + "Temperature of fluid inside the tank at UA_nominal" + annotation(Dialog(tab="General", group="Nominal condition")); + parameter Modelica.SIunits.Temperature THex_nominal + "Temperature of fluid inside the heat exchanger at UA_nominal" + annotation(Dialog(tab="General", group="Nominal condition")); + parameter Real r_nominal(min=0, max=1)=0.5 + "Ratio between coil inside and outside convective heat transfer" + annotation(Dialog(tab="General", group="Nominal condition")); + + parameter Modelica.SIunits.Diameter dExtHex + "Exterior diameter of the heat exchanger pipe"; + + parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial + "Formulation of energy balance for heat exchanger internal fluid mass" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Equations")); + parameter Modelica.Fluid.Types.Dynamics energyDynamicsSolid=energyDynamics + "Formulation of energy balance for heat exchanger solid mass" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Equations")); + parameter Modelica.Fluid.Types.Dynamics massDynamics=energyDynamics + "Formulation of mass balance for heat exchanger" + annotation(Evaluate=true, Dialog(tab = "Dynamics", group="Equations")); + + parameter Boolean homotopyInitialization = true "= true, use homotopy method" + annotation(Evaluate=true, Dialog(tab="Advanced")); + + parameter Boolean hA_flowDependent = true + "Set to false to make the convective heat coefficient calculation of the fluid inside the coil independent of mass flow rate" + annotation(Dialog(tab="Advanced", group="Modeling detail"), Evaluate=true); + parameter Boolean hA_temperatureDependent = true + "Set to false to make the convective heat coefficient calculation of the fluid inside the coil independent of temperature" + annotation(Dialog(tab="Advanced", group="Modeling detail"), Evaluate=true); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a port[nSeg] + "Heat port connected to water inside the tank" + annotation (Placement(transformation(extent={{-10,-160},{10,-140}}), + iconTransformation(extent={{-10,-108},{10,-88}}))); + + AixLib.Fluid.FixedResistances.PressureDrop res( + redeclare final package Medium = MediumHex, + final dp_nominal=dp_nominal, + final m_flow_nominal=m_flow_nominal, + final allowFlowReversal=allowFlowReversal, + final homotopyInitialization=homotopyInitialization, + final show_T=show_T, + final from_dp=from_dp, + final linearized=linearizeFlowResistance) + "Calculates the flow resistance and pressure drop through the heat exchanger" + annotation (Placement(transformation(extent={{46,-60},{66,-40}}))); + + AixLib.Fluid.MixingVolumes.MixingVolume vol[nSeg]( + redeclare each package Medium = MediumHex, + each nPorts=2, + each m_flow_nominal=m_flow_nominal, + each V=volHexFlu/nSeg, + each energyDynamics=energyDynamics, + each massDynamics=massDynamics, + each p_start=p_start, + each T_start=T_start, + each X_start=X_start, + each C_start=C_start, + each C_nominal=C_nominal, + each final prescribedHeatFlowRate=false, + each final allowFlowReversal=allowFlowReversal) "Heat exchanger fluid" + annotation (Placement(transformation(extent={{-32,-40},{-12,-20}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor cap[nSeg]( + each C=CHex/nSeg, + T(each start=T_start, + each fixed=(energyDynamicsSolid == Modelica.Fluid.Types.Dynamics.FixedInitial)), + der_T( + each fixed=(energyDynamicsSolid == Modelica.Fluid.Types.Dynamics.SteadyStateInitial))) if + not energyDynamicsSolid == Modelica.Fluid.Types.Dynamics.SteadyState + "Thermal mass of the heat exchanger" + annotation (Placement(transformation(extent={{-6,6},{14,26}}))); +protected + AixLib.Fluid.Sensors.MassFlowRate senMasFlo( + redeclare package Medium = MediumHex, + allowFlowReversal=allowFlowReversal) + "Mass flow rate of the heat transfer fluid" + annotation (Placement(transformation(extent={{-80,-40},{-60,-60}}))); + Modelica.Thermal.HeatTransfer.Components.Convection htfToHex[nSeg] + "Convection coefficient between the heat transfer fluid and heat exchanger" + annotation (Placement(transformation(extent={{-10,12},{-30,-8}}))); + Modelica.Thermal.HeatTransfer.Components.Convection HexToTan[nSeg] + "Convection coefficient between the heat exchanger and the surrounding medium" + annotation (Placement(transformation(extent={{20,12},{40,-8}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSenHex[nSeg] + "Temperature of the heat transfer fluid" + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + origin={-20,-70}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSenWat[nSeg] + "Temperature sensor of the fluid surrounding the heat exchanger" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={68,40}))); + Modelica.Blocks.Routing.Replicator rep(nout=nSeg) + "Replicates senMasFlo signal from 1 seg to nSeg" + annotation (Placement(transformation(extent={{-44,-108},{-24,-88}}))); + AixLib.Fluid.HeatExchangers.BaseClasses.HACoilInside hAPipIns[nSeg]( + each m_flow_nominal=m_flow_nominal, + each hA_nominal=UA_nominal/nSeg*(r_nominal + 1)/r_nominal, + each T_nominal=THex_nominal, + each final flowDependent=hA_flowDependent, + each final temperatureDependent=hA_temperatureDependent) + "Computation of convection coefficients inside the coil" annotation ( + Placement(transformation(extent={{-10,-10},{10,10}}, origin={20,-80}))); + AixLib.Fluid.HeatExchangers.BaseClasses.HANaturalCylinder hANatCyl[nSeg]( + redeclare each final package Medium = Medium, + each final ChaLen=dExtHex, + each final hA_nominal=UA_nominal/nSeg*(1 + r_nominal), + each final TFlu_nominal=TTan_nominal, + each final TSur_nominal=TTan_nominal - (r_nominal/(1 + r_nominal))*( + TTan_nominal - THex_nominal)) + "Calculates an hA value for each side of the heat exchanger" annotation ( + Placement(transformation(extent={{-10,-10},{10,10}}, origin={10,110}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSenSur[nSeg] + "Temperature at the external surface of the heat exchanger" + annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={20,42}))); + +equation + for i in 1:(nSeg - 1) loop + connect(vol[i].ports[2], vol[i + 1].ports[1]); + end for; + + connect(rep.u,senMasFlo. m_flow) annotation (Line( + points={{-46,-98},{-70,-98},{-70,-61}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(port,HexToTan. fluid) annotation (Line( + points={{4.44089e-16,-150},{88,-150},{88,2},{40,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(vol[1].ports[1],senMasFlo.port_b) annotation (Line( + points={{-24,-40},{-24,-50},{-60,-50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(cap.port,HexToTan.solid) annotation (Line( + points={{4,6},{4,2},{20,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(vol.heatPort,htfToHex. fluid) annotation (Line( + points={{-32,-30},{-36,-30},{-36,2},{-30,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(htfToHex.solid,HexToTan. solid) annotation (Line( + points={{-10,2},{20,2}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temSenHex.T, hAPipIns.T) annotation (Line( + points={{-10,-70},{0,-70},{0,-76},{9,-76}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(hAPipIns.hA, htfToHex.Gc) annotation (Line( + points={{31,-80},{32,-80},{32,-18},{-20,-18},{-20,-8}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(HexToTan.solid,temSenSur. port) annotation (Line( + points={{20,2},{20,32}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temSenWat.port, port) annotation (Line( + points={{68,30},{68,2},{88,2},{88,-150},{4.44089e-16,-150}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(temSenSur.T, hANatCyl.TSur) + annotation (Line( + points={{20,52},{20,70},{-40,70},{-40,114},{-2,114}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(hANatCyl.TFlu, temSenWat.T) + annotation (Line( + points={{-2,106},{-36,106},{-36,76},{68,76},{68,50}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(port_a, senMasFlo.port_a) annotation (Line( + points={{-100,0},{-90,0},{-90,-50},{-80,-50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(vol[nSeg].ports[2], res.port_a) annotation (Line( + points={{-20,-40},{-20,-50},{46,-50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(res.port_b, port_b) annotation (Line( + points={{66,-50},{84,-50},{84,4.44089e-16},{100,4.44089e-16}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(temSenHex.port, vol.heatPort) annotation (Line( + points={{-30,-70},{-36,-70},{-36,-30},{-32,-30}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(rep.y, hAPipIns.m_flow) annotation (Line( + points={{-23,-98},{0,-98},{0,-84},{9,-84}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(hANatCyl.hA,HexToTan. Gc) annotation (Line( + points={{21,110},{50,110},{50,-14},{30,-14},{30,-8}}, + color={0,0,127}, + smooth=Smooth.None)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, + -150},{100,150}}), graphics), Icon(coordinateSystem( + preserveAspectRatio=false, extent={{-100,-150},{100,150}}), graphics={ + Rectangle( + extent={{-66,64},{74,-96}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-100,5},{101,-5}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-66,-12},{74,-18}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-36,64},{-32,-96}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{2,64},{6,-96}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{40,64},{44,-96}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + defaultComponentName="indTanHex", + Documentation(info = " ++ This model is a heat exchanger with a moving fluid on one side and a stagnant fluid on the other. + It is intended for use when a heat exchanger is submerged in a stagnant fluid. + For example, the heat exchanger in a storage tank which is part of a solar thermal system. +
++ This component models the fluid in the heat exchanger, convection between the fluid and + the heat exchanger, and convection from the heat exchanger to the surrounding fluid. +
++ The model is based on + AixLib.Fluid.HeatExchangers.BaseClasses.HACoilInside and + + AixLib.Fluid.HeatExchangers.BaseClasses.HANaturalCylinder. +
++ The fluid ports are intended to be connected to a circulated heat transfer fluid + while the heat port is intended to be connected to a stagnant fluid. +
+ ", + revisions=" +flowDependent
and temperatureDependent
+in hAPipIns
.
+This is for issue
+#454.
+fixed
attribute in cap.T
to avoid
+unspecified initial conditions.
+prescribedHeatFlowRate=false
in control volume.
+energyDynamicsSolid
.
+This is for
+
+#434.
+allowFlowReversal
.
+MediumTan
for the tank medium, and assigned Medium
+ to be equal to MediumHex
.
+ This is to correct issue
+ #271.
+ cap
, and renamed this instance from
+ Cap
to cap
.
+ This was done to avoid a warning during translation, and to comply with
+ the coding convention.
+ show_V_flow
.
+ +This is a partial model of a stratified storage tank. +
++See the + +AixLib.Fluid.Storage.UsersGuide +for more information. +
++This model does not include the ports that connect to the fluid from +the outside, because these ports cannot be used for the models that +contain the + +AixLib.Fluid.Storage.BaseClasses.ThirdOrderStratifier. +
+", revisions=" +allowFlowReversal
and m_flow_small
+and set mSenFac=1
.
+hA_flow
to H_a_flow
,
+hB_flow
to H_b_flow
and
+hVol_flow
to H_vol_flow
+as they output enthalpy flow rate, and not specific enthalpy.
+Made various models protected
.
+final
to tau = 0
in EnthalpyFlowRate
.
+These sensors do not need dynamics as the enthalpy flow rate
+is used to compute a heat flow which is then added to the volume of the tank.
+Thus, if there were high frequency oscillations of small mass flow rates,
+then they have a small effect on H_flow
, and they are
+not used in any control loop. Rather, the oscillations are further damped
+by the differential equation of the fluid volume.
+tau = 0
in EnthalpyFlowRate
+sensors for increased simulation speed.
+Medium.lambda_const
with
+Medium.thermalConductivity(sta_default)
as
+lambda_const
is not declared for all media.
+This avoids a translation error if certain media are used.
+system
declaration.
+use_T_start
and h_start
.
++This model reduces the numerical dissipation that is introduced +by the standard first-order upwind discretization scheme which is +created when connecting fluid volumes in series. +
++The model is used in conjunction with + +AixLib.Fluid.Storage.Stratified. +It computes a heat flux that needs to be added to each volume of +AixLib.Fluid.Storage.Stratified in order to give the results that a third-order upwind discretization scheme (QUICK) would give. +
++The QUICK method can cause oscillations in the tank temperatures since the high order method introduces numerical dispersion. +There are two ways to reduce the oscillations:
+alpha
when adding the heat flux into the volume.
+hOut[2]
and hOut[nSeg]
. Note: Using it requires nSeg ≥ 4
.
++Both approaches are implemented in the model. +
++The model is used by + +AixLib.Fluid.Storage.StratifiedEnhanced. +
+
+The model requires at least 4 fluid segments. Hence, set nSeg
to 4 or higher.
+
sta0
and cp0
.
++This package contains base classes that are used to construct the models in +AixLib.Fluid.Storage. +
+")); end BaseClasses; diff --git a/AixLib/Fluid/Storage/BaseClasses/package.order b/AixLib/Fluid/Storage/BaseClasses/package.order index 30f17d8fbf..6325270ad7 100644 --- a/AixLib/Fluid/Storage/BaseClasses/package.order +++ b/AixLib/Fluid/Storage/BaseClasses/package.order @@ -1,11 +1,16 @@ Bouyancy +Buoyancy HeatTransferBuoyancyWetter HeatTransferLambdaEff HeatTransferLambdaEffSmooth HeatTransferLambdaSimple HeatTransferOnlyConduction HeatingCoil +IndirectTankHeatExchanger PartialHeatTransferLayers +PartialStratified StorageCover StorageMantle StorageWall +ThirdOrderStratifier +Examples diff --git a/AixLib/Fluid/Storage/BufferStorage.mo b/AixLib/Fluid/Storage/BufferStorage.mo index ae63121d56..5bbd6758e1 100644 --- a/AixLib/Fluid/Storage/BufferStorage.mo +++ b/AixLib/Fluid/Storage/BufferStorage.mo @@ -1,727 +1,757 @@ -within AixLib.Fluid.Storage; -model BufferStorage - "Buffer Storage Model with support for heating rod and two heating coils" - import SI = Modelica.SIunits; - - replaceable package Medium = - Modelica.Media.Interfaces.PartialMedium "Medium model" - annotation (Dialog(group="Medium"),choicesAllMatching = true); - - replaceable package MediumHC1 = - Modelica.Media.Interfaces.PartialMedium "Medium model for HC1" - annotation (choicesAllMatching = true, Dialog(group="Medium")); - - replaceable package MediumHC2 = - Modelica.Media.Interfaces.PartialMedium "Medium model for HC2" - annotation (choicesAllMatching = true, Dialog(group="Medium")); - - parameter Boolean useHeatingCoil1=true "Use Heating Coil1?" annotation(Dialog(tab="Heating Coils and Rod")); - parameter Boolean useHeatingCoil2=true "Use Heating Coil2?" annotation(Dialog(tab="Heating Coils and Rod")); - parameter Boolean useHeatingRod=true "Use Heating Rod?" annotation(Dialog(tab="Heating Coils and Rod")); - - parameter SI.Temperature TStart=298.15 "Start Temperature of fluid" annotation (Dialog(tab="Initialisation")); - - parameter AixLib.DataBase.Storage.BufferStorageBaseDataDefinition data= - AixLib.DataBase.Storage.Generic_500l() - "Data record for Storage" - annotation (choicesAllMatching); - - parameter Integer n(min=3)=5 " Model assumptions Number of Layers"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////CONVECTION///////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - - parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaInside=100 - "Model assumptions Coefficient of Heat Transfer water <-> wall"; - parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaOutside=10 - "Model assumptions Coefficient of Heat Transfer insulation <-> air"; - parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaHC1=100 - "Model assumptions Coefficient of Heat Transfer HC1 <-> Heating Water" annotation(Dialog(enable = useHeatingCoil1,tab="Heating Coils and Rod")); - parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaHC2=100 - " Model assumptions Coefficient of Heat Transfer HC2 <-> Heating Water" annotation(Dialog(enable = useHeatingCoil2,tab="Heating Coils and Rod")); - parameter Boolean upToDownHC1 = true - "Heating Coil 1 orientation from up to down?" - annotation(Dialog(enable = useHeatingCoil1,tab="Heating Coils and Rod")); - parameter Boolean upToDownHC2 = true - "Heating Coil 2 orientation from up to down?" - annotation(Dialog(enable = useHeatingCoil2,tab="Heating Coils and Rod")); - - parameter Modelica.SIunits.Temperature TStartWall=293.15 - "Starting Temperature of wall in K" annotation(Dialog(tab="Initialisation")); - parameter Modelica.SIunits.Temperature TStartIns=293.15 - "Starting Temperature of insulation in K" annotation(Dialog(tab="Initialisation")); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -////////////final parameters//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - final parameter Integer nHC1Up=integer(AixLib.Utilities.Math.Functions.round(data.hHC1Up/(data.hTank/n) + 0.5,0)); - final parameter Integer nHC1Low=integer(AixLib.Utilities.Math.Functions.round(data.hHC1Low/(data.hTank/n) + 0.5,0)); - final parameter Integer disHC1 = nHC1Up-nHC1Low+1; - - final parameter Integer nHC2Up=integer(AixLib.Utilities.Math.Functions.round(data.hHC2Up/(data.hTank/n) + 0.5,0)); - final parameter Integer nHC2Low=integer(AixLib.Utilities.Math.Functions.round(data.hHC2Low/(data.hTank/n) + 0.5,0)); - final parameter Integer disHC2 = nHC2Up-nHC2Low+1; - - final parameter Integer nHR=integer(AixLib.Utilities.Math.Functions.round(data.hHR/(data.hTank/n) + 0.5,0)); - - final parameter Integer nTS1=integer(AixLib.Utilities.Math.Functions.round(data.hTS1/(data.hTank/n) + 0.5,0)); - final parameter Integer nTS2=integer(AixLib.Utilities.Math.Functions.round(data.hTS2/(data.hTank/n) + 0.5,0)); - - constant Integer nLowerPorts=integer(max(AixLib.Utilities.Math.Functions.round(data.hLowerPorts/(data.hTank/n) + 0.5,0),1)); - constant Integer nUpperPorts=integer(min(AixLib.Utilities.Math.Functions.round(data.hUpperPorts/(data.hTank/n) + 0.5,0),n)); - constant Boolean inpLowLay=(nLowerPorts == 1); //if there is an input at the lowest layer - constant Boolean inpHigLay=(nUpperPorts == n); - - constant Integer[n] inpActLay = cat(1,{if (nLowerPorts==k) then (if (nUpperPorts==k) then 2 else 1) else (if (nUpperPorts==k) then 1 else 0) for k in 1:n}); - constant Integer[n] portsLayer=cat(1,{if inpActLay[1]==1 then 3 else 1},{inpActLay[k]*2+2 for k in 2:n-1},{if inpActLay[n]==1 then 3 else 1}); -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////components///////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatportOutside "Outer heat port" - annotation (Placement(transformation(extent={{68,-4},{88,16}},rotation=0), - iconTransformation(extent={{68,-4},{88,16}}))); - Modelica.Blocks.Interfaces.RealOutput TTop "Temperature at the top" - annotation (Placement(transformation( - origin={-77,81}, - extent={{-5,5},{5,-5}}, - rotation=0), iconTransformation( - extent={{-5,5},{5,-5}}, - rotation=0, - origin={-80,88}))); - Modelica.Blocks.Interfaces.RealOutput TBottom "Temperature at the Bottom" - annotation (Placement(transformation( - origin={-77,-77}, - extent={{-5,5},{5,-5}}, - rotation=0), iconTransformation( - extent={{-5,5},{5,-5}}, - rotation=0, - origin={-80,-80}))); - Modelica.Fluid.Interfaces.FluidPort_a fluidportTop1( redeclare final package - Medium = - Medium) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-38,92},{-18,110}},rotation= - 0), iconTransformation(extent={{-38,92},{-18,110}}))); - Modelica.Fluid.Interfaces.FluidPort_a fluidportBottom2(redeclare final - package Medium = - Medium) - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{14,-110},{32,-92}},rotation= - 0), iconTransformation(extent={{14,-110},{32,-92}}))); - Modelica.Fluid.Interfaces.FluidPort_b fluidportBottom1( redeclare final - package Medium = - Medium) - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-36,-112},{-18,-92}}, - rotation=0), iconTransformation(extent={{-36,-112},{-18,-92}}))); - Modelica.Fluid.Interfaces.FluidPort_b fluidportTop2(redeclare final package - Medium = - Medium) - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{14,92},{36,110}},rotation=0), - iconTransformation(extent={{14,92},{36,110}}))); - - HeatTransfer heatTransfer "Heat transfer model" annotation (Placement(transformation(extent={{-34,0}, - {-14,20}}, rotation=0))); - - AixLib.Fluid.MixingVolumes.MixingVolume layer[n]( - V=fill(data.hTank/n*Modelica.Constants.pi/4*data.dTank^2,n), - nPorts = portsLayer, - T_start=fill(TStart,n), - redeclare package Medium = Medium, - m_flow_nominal=0.05) - "Layer volumes" - annotation (Placement(transformation(extent={{-6,0},{14,20}}))); - replaceable model HeatTransfer = - AixLib.Fluid.Storage.BaseClasses.HeatTransferOnlyConduction - constrainedby AixLib.Fluid.Storage.BaseClasses.PartialHeatTransferLayers(n=n, - redeclare package Medium = Medium, data=data) - "Heat Transfer Model between fluid layers" annotation (choicesAllMatching= - true); - -/////////////////////////////////////////////////////////////////////////////////////// -/////HEATING COILS AND RODS///////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////////////////// -/////HEATING COIL 1 //////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - - Modelica.Fluid.Interfaces.FluidPort_a portHC1In(redeclare package Medium = - MediumHC1) if useHeatingCoil1 - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-92,36},{-72,56}}), - iconTransformation(extent={{-90,50},{-74,64}}))); - Modelica.Fluid.Interfaces.FluidPort_b portHC1Out(redeclare package Medium = - MediumHC1) if useHeatingCoil1 - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-90,2},{-70,22}}), - iconTransformation(extent={{-88,20},{-74,32}}))); - -////////////////////////////////////////////////////////////////////////////////////////// -/////HEATING COIL 2 //////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - - Modelica.Fluid.Interfaces.FluidPort_a portHC2In(redeclare package Medium = - MediumHC2) if useHeatingCoil2 - "Fluid connector a (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-92,-30},{-72,-10}}), - iconTransformation(extent={{-88,-32},{-74,-18}}))); - Modelica.Fluid.Interfaces.FluidPort_b portHC2Out(redeclare package Medium = - MediumHC2) if useHeatingCoil2 - "Fluid connector b (positive design flow direction is from port_a to port_b)" - annotation (Placement(transformation(extent={{-92,-68},{-72,-48}}), - iconTransformation(extent={{-88,-64},{-74,-50}}))); - -////////////////////////////////////////////////////////////////////////////////////////// -/////HEATING ROD //////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - - Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatingRod if - useHeatingRod annotation ( - Placement(transformation(extent={{-86,-6},{-74,6}}, rotation=0))); - -////////////////////////////////////////////////////////////////////////////////////////// -/////COVER / INSULATION //////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - - AixLib.Fluid.Storage.BaseClasses.StorageCover topCover( - lambdaWall=data.lambdaWall, - lambdaIns=data.lambdaIns, - alphaInside=alphaInside, - alphaOutside=alphaOutside, - TStartWall=TStartWall, - TStartIns=TStartIns, - rhoIns=data.rhoIns, - cIns=data.cIns, - rhoWall=data.rhoWall, - cWall=data.cWall, - D1=data.dTank, - sWall=data.sWall, - sIns=data.sIns) annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={8,56}))); - AixLib.Fluid.Storage.BaseClasses.StorageMantle storageMantle[n]( - each lambdaWall=data.lambdaWall, - each lambdaIns=data.lambdaIns, - each TStartWall=TStartWall, - each TStartIns=TStartIns, - each rhoIns=data.rhoIns, - each cIns=data.cIns, - each rhoWall=data.rhoWall, - each cWall=data.cWall, - each height=data.hTank/n, - each D1=data.dTank, - each sWall=data.sWall, - each sIns=data.sIns, - each alphaInside=alphaInside, - each alphaOutside=alphaOutside) - annotation (Placement(transformation(extent={{20,-2},{40,18}}))); - AixLib.Fluid.Storage.BaseClasses.StorageCover bottomCover( - lambdaWall=data.lambdaWall, - lambdaIns=data.lambdaIns, - alphaInside=alphaInside, - alphaOutside=alphaOutside, - TStartWall=TStartWall, - TStartIns=TStartIns, - rhoIns=data.rhoIns, - cIns=data.cIns, - rhoWall=data.rhoWall, - cWall=data.cWall, - D1=data.dTank, - sWall=data.sWall, - sIns=data.sIns) annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={6,-44}))); - - AixLib.Fluid.Storage.BaseClasses.HeatingCoil heatingCoil1( - disHC=disHC1, - alphaHC=alphaHC1, - redeclare package Medium = MediumHC1, - lengthHC=data.lengthHC1, - pipeHC=data.pipeHC1, - allowFlowReversal=true, - m_flow_nominal=0.05, - TStart=TStart) if useHeatingCoil1 annotation (Placement( - transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={-58,29}))); - AixLib.Fluid.Storage.BaseClasses.HeatingCoil heatingCoil2( - disHC=disHC2, - lengthHC=data.lengthHC2, - alphaHC=alphaHC2, - pipeHC=data.pipeHC2, - redeclare package Medium = MediumHC2, - allowFlowReversal=true, - m_flow_nominal=0.05, - TStart=TStart) if useHeatingCoil2 annotation ( - Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={-56,-39}))); -equation -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connection of Heating Coils////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - if useHeatingCoil1 then - - for i in nHC1Low:nHC1Up loop - - if upToDownHC1 == true then - connect(heatingCoil1.Therm1[nHC1Up+1-i], layer[i].heatPort); - else - connect(heatingCoil1.Therm1[i-nHC1Low+1], layer[i].heatPort); - end if; - -end for; - -connect(portHC1In, heatingCoil1.port_a) annotation (Line( - points={{-82,46},{-58,46},{-58,39}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(portHC1Out, heatingCoil1.port_b) annotation (Line( - points={{-80,12},{-59,12},{-59,19},{-58,19}}, - color={0,127,255}, - smooth=Smooth.None)); - -end if; - - if useHeatingCoil2 then - - for i in nHC2Low:nHC2Up loop - - if upToDownHC2 == true then - connect(heatingCoil2.Therm1[nHC2Up+1-i], layer[i].heatPort); - else - connect(heatingCoil2.Therm1[i-nHC2Low+1], layer[i].heatPort); - end if; - end for; - - connect(portHC2In, heatingCoil2.port_a) annotation (Line( - points={{-82,-20},{-55,-20},{-55,-29},{-56,-29}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(portHC2Out, heatingCoil2.port_b) annotation (Line( - points={{-82,-58},{-56,-58},{-56,-49}}, - color={0,127,255}, - smooth=Smooth.None)); - - end if; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connection of Heating Rod////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////////////////// - -if useHeatingRod then - -connect(heatingRod, layer[nHR].heatPort); -end if; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////// connection of Temperature Sensor/////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - if nTS1 <= 1 then - TBottom = layer[1].heatPort.T; - elseif nTS1 >= n then - TBottom = layer[n].heatPort.T; - else - TBottom = layer[nTS1].heatPort.T; - end if; - if nTS2 <= 1 then - TTop = layer[1].heatPort.T; - elseif nTS2 >= n then - TTop = layer[n].heatPort.T; - else - TTop = layer[nTS2].heatPort.T; - end if; -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connection of volumes and walls////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - for i in 1:n loop - connect(layer[i].heatPort, storageMantle[i].heatportInner); - connect(storageMantle[i].heatportOuter, heatportOutside); - end for; - connect(layer[1].heatPort, bottomCover.heatportInner); - connect(layer[n].heatPort,topCover.heatportInner); - - connect(bottomCover.heatportOuter, heatportOutside); - connect(topCover.heatportOuter, heatportOutside); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connections of inner layers////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - for i in 2:(n-1) loop - if nLowerPorts == i then - connect(layer[i].ports[3], fluidportBottom1); - connect(layer[i].ports[4], fluidportBottom2); - if nUpperPorts == i then - connect(layer[i].ports[5],fluidportTop1); - connect(layer[i].ports[6],fluidportTop2); - end if; - elseif nUpperPorts ==i then - connect(layer[i].ports[3],fluidportTop1); - connect(layer[i].ports[4],fluidportTop2); - end if; - - connect(layer[i].ports[2],layer[i+1].ports[1]); - end for; -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connections of upper and lower layer///////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - if nLowerPorts == 1 then - connect(layer[1].ports[2],fluidportBottom1); - connect(layer[1].ports[3],fluidportBottom2); - end if; - connect(layer[1].ports[1],layer[2].ports[1]); - - if nUpperPorts == n then - connect(layer[n].ports[2],fluidportTop1); - connect(layer[n].ports[3],fluidportTop2); - end if; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////connections of heat transfer model/////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// - connect(heatTransfer.therm, layer.heatPort); - - annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-80,-100}, - {80,100}}), graphics={ - Rectangle( - extent={{-80,-71},{80,71}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - fillColor={85,170,255}, - fillPattern=FillPattern.Solid, - origin={0,-29}, - rotation=360), - Polygon( - points={{-24,-3},{-20,-9},{-10,-9},{6,-9},{18,-11},{38,-19},{68,-19},{ - 106,-15},{136,1},{136,39},{-24,35},{-24,-3}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={170,213,255}, - fillPattern=FillPattern.Solid, - origin={-56,19}, - rotation=360), - Polygon( - points={{-39,-4},{-31,-18},{-11,-28},{25,-34},{67,-32},{93,-28},{121,-8}, - {121,24},{-39,26},{-39,-4}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={255,170,170}, - fillPattern=FillPattern.Solid, - origin={-41,60}, - rotation=360), - Polygon( - points={{-80,100},{-80,78},{-62,62},{-32,58},{30,62},{62,72},{80,82},{ - 80,100},{-80,100}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={255,62,62}, - fillPattern=FillPattern.Solid, - origin={0,0}, - rotation=360), - Polygon( - points={{-154,3},{-134,-3},{-110,1},{-84,-1},{-56,-5},{-30,-11},{6,-3}, - {6,-41},{-154,-41},{-154,3}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={14,110,255}, - fillPattern=FillPattern.Solid, - origin={74,-27}, - rotation=360), - Polygon( - points={{-154,3},{-136,-7},{-110,-3},{-84,-7},{-48,-5},{-18,-9},{6,-3}, - {6,-41},{-154,-41},{-154,3}}, - lineColor={0,0,255}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={0,0,255}, - fillPattern=FillPattern.Solid, - origin={74,-59}, - rotation=360), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-28,83}, - rotation=180, - visible = true), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={26,83}, - rotation=360, - visible = true), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-26,-83}, - rotation=180, - visible = true), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={24,-83}, - rotation=360, - visible = true), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-66,57}, - rotation=270, - visible=useHeatingCoil1), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-66,25}, - rotation=90, - visible = useHeatingCoil1), - Rectangle( - extent={{-80,100},{80,-100}}, - lineColor={0,0,0}, - lineThickness=1), - Line( - points={{-46,57},{56,57}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{-46,25},{56,25}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{-46,50},{56,57}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{56,42},{-46,50}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{-46,34},{56,42}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{56,26},{-46,34}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil1), - Line( - points={{-57,25},{-46,58}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - arrow={Arrow.Filled,Arrow.None}, - visible = (useHeatingCoil1 and not - (upToDownHC1))), - Line( - points={{-57,58},{-46,25}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - arrow={Arrow.None,Arrow.Filled}, - visible = (useHeatingCoil1 and not - (upToDownHC1))), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - origin={-48,57}, - rotation=270, - visible = (useHeatingCoil1 and upToDownHC1)), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - origin={-50,25}, - rotation=270, - visible = (useHeatingCoil1 and upToDownHC1)), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-66,-25}, - rotation=270, - visible=useHeatingCoil2), - Line( - points={{-46,-25},{56,-25}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{-46,-32},{56,-25}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{56,-40},{-46,-32}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{-46,-48},{56,-40}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{56,-56},{-46,-48}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{-46,-57},{56,-57}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - visible = useHeatingCoil2), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - origin={-50,-57}, - rotation=270, - visible = (useHeatingCoil2 and upToDownHC2)), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - arrow={Arrow.Filled,Arrow.None}, - origin={-66,-57}, - rotation=90, - visible = useHeatingCoil2), - Line( - points={{0,9},{0,-9}}, - color={0,0,0}, - smooth=Smooth.Bezier, - thickness=1, - origin={-48,-25}, - rotation=270, - visible = (useHeatingCoil2 and upToDownHC2)), - Line( - points={{-57,-24},{-46,-57}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - arrow={Arrow.None,Arrow.Filled}, - visible = (useHeatingCoil2 and not - (upToDownHC2))), - Line( - points={{-57,-57},{-46,-24}}, - color={0,0,0}, - thickness=1, - smooth=Smooth.Bezier, - arrow={Arrow.Filled,Arrow.None}, - visible = (useHeatingCoil2 and not - (upToDownHC2))), - Line( - points={{-76,-1},{26,-1}}, - color={0,0,0}, - smooth=Smooth.Bezier, - visible = useHeatingRod, - thickness=2)}), - Diagram(coordinateSystem(preserveAspectRatio=false, - extent={{-80,-100},{80,100}})), - Documentation(revisions=" -Buffer Storage Model with support for heating rod and two heating coils.
-It represents a buffer storage stratified into n layers where 1 represents -the bottom layer and n represents the top layer. The layers are connected to -each other allowing heat and fluid transfer.The heat transfer between the layers -can be selected to model the conductance between the layers or different models -that additionally represent the buoyancy:
-HeatTransferOnlyConduction: Model for heat transfer between buffer -storage layers. Models conductance of water. An effective heat conductivity is -therefore calculated. Used in BufferStorage model.
-HeatTransferLambdaSimple: Model for heat transfer between buffer -storage layers. Models conductance of water and additional effective -conductivity (in case the above layer is colder than the lower layer). Used in -BufferStorage model.
-HeatTransferLambdaEff: Model for heat transfer between buffer storage -layers. Models conductance of water and buoyancy according to Viskanta et al., -1997. An effective heat conductivity is therefore calculated. Used in -BufferStorage model.
-HeatTransferLambdaEffSmooth: Same as HeatTransfer_lambda_eff. In -addition, the smooth() expression is used for the transition of the -buoyancy model.
-HeatTransferLambdaEffTanh: Same as HeatTransfer_lambda_eff. In -addition, a tanh function is used for the transition of the buoyancy model -(VariableTransition model). Attention: the initial value of the FullTransition -model is 0.5. This may lead to a mixture of the storage at the beginning of the -simulation.
-HeatTransferBuoyancyWetter: Model for heat transfer between buffer -storage layers. Models buoyancy according to -Buildings.Fluid.Storage.BaseClasses.Buoyancy model of Buildings library, cf. -https://simulationresearch.lbl.gov/modelica. No conduction is implemented apart -from when buoyancy occurs.
The geometrical data for the storage is read -by records in the DataBase package. The model also includes heat losses over the -storage walls (wall, top and bottom). No pressure losses are included. Thus -external pressure loss models are required for the use of the model.
-AixLib.Fluid.Storage.Examples.BufferStorageCharging
-")); -end BufferStorage; +within AixLib.Fluid.Storage; +model BufferStorage + "Buffer Storage Model with support for heating rod and two heating coils" + import SI = Modelica.SIunits; + + replaceable package Medium = + Modelica.Media.Interfaces.PartialMedium "Medium model" + annotation (Dialog(group="Medium"),choicesAllMatching = true); + + replaceable package MediumHC1 = + Modelica.Media.Interfaces.PartialMedium "Medium model for HC1" + annotation (choicesAllMatching = true, Dialog(group="Medium")); + + replaceable package MediumHC2 = + Modelica.Media.Interfaces.PartialMedium "Medium model for HC2" + annotation (choicesAllMatching = true, Dialog(group="Medium")); + + parameter Boolean useHeatingCoil1=true "Use Heating Coil1?" annotation(Dialog(tab="Heating Coils and Rod")); + parameter Boolean useHeatingCoil2=true "Use Heating Coil2?" annotation(Dialog(tab="Heating Coils and Rod")); + parameter Boolean useHeatingRod=true "Use Heating Rod?" annotation(Dialog(tab="Heating Coils and Rod")); + + parameter SI.Temperature TStart=298.15 "Start Temperature of fluid" annotation (Dialog(tab="Initialisation")); + + parameter AixLib.DataBase.Storage.BufferStorageBaseDataDefinition data= + AixLib.DataBase.Storage.Generic_New_2000l() + "Data record for Storage" + annotation (choicesAllMatching); + + parameter Integer n(min=3)=5 " Model assumptions Number of Layers"; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////CONVECTION///////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaInside=100 + "Model assumptions Coefficient of Heat Transfer water <-> wall"; + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaOutside=10 + "Model assumptions Coefficient of Heat Transfer insulation <-> air"; + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaHC1=100 + "Model assumptions Coefficient of Heat Transfer HC1 <-> Heating Water" annotation(Dialog(enable = useHeatingCoil1,tab="Heating Coils and Rod")); + parameter Modelica.SIunits.CoefficientOfHeatTransfer alphaHC2=100 + " Model assumptions Coefficient of Heat Transfer HC2 <-> Heating Water" annotation(Dialog(enable = useHeatingCoil2,tab="Heating Coils and Rod")); + parameter Boolean upToDownHC1 = true + "Heating Coil 1 orientation from up to down?" + annotation(Dialog(enable = useHeatingCoil1,tab="Heating Coils and Rod")); + parameter Boolean upToDownHC2 = true + "Heating Coil 2 orientation from up to down?" + annotation(Dialog(enable = useHeatingCoil2,tab="Heating Coils and Rod")); + + parameter Modelica.SIunits.Temperature TStartWall=293.15 + "Starting Temperature of wall in K" annotation(Dialog(tab="Initialisation")); + parameter Modelica.SIunits.Temperature TStartIns=293.15 + "Starting Temperature of insulation in K" annotation(Dialog(tab="Initialisation")); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +////////////final parameters//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + final parameter Integer nHC1Up=integer(ceil(data.hHC1Up/(data.hTank/n))); + final parameter Integer nHC1Low=integer(floor(data.hHC1Low/(data.hTank/n))+1); + final parameter Integer disHC1 = nHC1Up-nHC1Low+1; + + final parameter Integer nHC2Up=integer(ceil(data.hHC2Up/(data.hTank/n))); + final parameter Integer nHC2Low=integer(floor(data.hHC2Low/(data.hTank/n))+1); + final parameter Integer disHC2 = nHC2Up-nHC2Low+1; + + final parameter Integer nHR=integer(AixLib.Utilities.Math.Functions.round(data.hHR/(data.hTank/n) + 0.5,0)); + + final parameter Integer nTS1=integer(AixLib.Utilities.Math.Functions.round(data.hTS1/(data.hTank/n) + 0.5,0)); + final parameter Integer nTS2=integer(AixLib.Utilities.Math.Functions.round(data.hTS2/(data.hTank/n) + 0.5,0)); + + final parameter Integer nLowerPorts=integer(max(AixLib.Utilities.Math.Functions.round(data.hLowerPorts/(data.hTank/n) + 0.5,0),1)); + final parameter Integer nUpperPorts=integer(min(AixLib.Utilities.Math.Functions.round(data.hUpperPorts/(data.hTank/n) + 0.5,0),n)); + final parameter Boolean inpLowLay=(nLowerPorts == 1); //if there is an input at the lowest layer + final parameter Boolean inpHigLay=(nUpperPorts == n); + + final parameter Integer[n] inpActLay = cat(1,{if (nLowerPorts==k) then (if (nUpperPorts==k) then 2 else 1) else (if (nUpperPorts==k) then 1 else 0) for k in 1:n}); + final parameter Integer[n] portsLayer=cat(1,{if inpActLay[1]==1 then 3 else 1},{inpActLay[k]*2+2 for k in 2:n-1},{if inpActLay[n]==1 then 3 else 1}); +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////components///////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatportOutside "Outer heat port" + annotation (Placement(transformation(extent={{68,-4},{88,16}},rotation=0), + iconTransformation(extent={{68,-4},{88,16}}))); + Modelica.Blocks.Interfaces.RealOutput TTop( + final quantity="ThermodynamicTemperature", + final unit = "K", + min=0, + displayUnit = "degC") + "Temperature at the top" + annotation (Placement(transformation( + origin={-77,81}, + extent={{-5,5},{5,-5}}, + rotation=0), iconTransformation( + extent={{-5,5},{5,-5}}, + rotation=0, + origin={-80,88}))); + Modelica.Blocks.Interfaces.RealOutput TBottom( + final quantity="ThermodynamicTemperature", + final unit = "K", + min=0, + displayUnit = "degC") + "Temperature at the Bottom" + annotation (Placement(transformation( + origin={-77,-77}, + extent={{-5,5},{5,-5}}, + rotation=0), iconTransformation( + extent={{-5,5},{5,-5}}, + rotation=0, + origin={-80,-80}))); + Modelica.Fluid.Interfaces.FluidPort_a fluidportTop1( redeclare final package + Medium = + Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-38,92},{-18,110}},rotation= + 0), iconTransformation(extent={{-38,92},{-18,110}}))); + Modelica.Fluid.Interfaces.FluidPort_a fluidportBottom2(redeclare final + package Medium = + Medium) + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{14,-110},{32,-92}},rotation= + 0), iconTransformation(extent={{14,-110},{32,-92}}))); + Modelica.Fluid.Interfaces.FluidPort_b fluidportBottom1( redeclare final + package Medium = + Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-36,-112},{-18,-92}}, + rotation=0), iconTransformation(extent={{-36,-112},{-18,-92}}))); + Modelica.Fluid.Interfaces.FluidPort_b fluidportTop2(redeclare final package + Medium = + Medium) + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{14,92},{36,110}},rotation=0), + iconTransformation(extent={{14,92},{36,110}}))); + + HeatTransfer heatTransfer(final n=n, + redeclare final package Medium = Medium, + final data=data) + "Heat transfer model" annotation (Placement(transformation(extent={{-34,0}, + {-14,20}}, rotation=0))); + + AixLib.Fluid.MixingVolumes.MixingVolume layer[n]( + final V=fill(data.hTank/n*Modelica.Constants.pi/4*data.dTank^2,n), + final nPorts = portsLayer, + final T_start=fill(TStart,n), + redeclare each final package Medium = Medium, + each m_flow_nominal=0.05) + "Layer volumes" + annotation (Placement(transformation(extent={{-6,0},{14,20}}))); + replaceable model HeatTransfer = + AixLib.Fluid.Storage.BaseClasses.HeatTransferOnlyConduction + constrainedby AixLib.Fluid.Storage.BaseClasses.PartialHeatTransferLayers + "Heat Transfer Model between fluid layers" annotation (choicesAllMatching= + true); + +/////////////////////////////////////////////////////////////////////////////////////// +/////HEATING COILS AND RODS///////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////////// +/////HEATING COIL 1 //////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// + + Modelica.Fluid.Interfaces.FluidPort_a portHC1In(redeclare final package Medium = + MediumHC1) if useHeatingCoil1 + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-92,36},{-72,56}}), + iconTransformation(extent={{-90,50},{-74,64}}))); + Modelica.Fluid.Interfaces.FluidPort_b portHC1Out(redeclare final package Medium = + MediumHC1) if useHeatingCoil1 + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-90,2},{-70,22}}), + iconTransformation(extent={{-88,20},{-74,32}}))); + +////////////////////////////////////////////////////////////////////////////////////////// +/////HEATING COIL 2 //////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// + + Modelica.Fluid.Interfaces.FluidPort_a portHC2In(redeclare final package Medium = + MediumHC2) if useHeatingCoil2 + "Fluid connector a (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-92,-30},{-72,-10}}), + iconTransformation(extent={{-88,-32},{-74,-18}}))); + Modelica.Fluid.Interfaces.FluidPort_b portHC2Out(redeclare final package Medium = + MediumHC2) if useHeatingCoil2 + "Fluid connector b (positive design flow direction is from port_a to port_b)" + annotation (Placement(transformation(extent={{-92,-68},{-72,-48}}), + iconTransformation(extent={{-88,-64},{-74,-50}}))); + +////////////////////////////////////////////////////////////////////////////////////////// +/////HEATING ROD //////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatingRod if + useHeatingRod annotation ( + Placement(transformation(extent={{-86,-6},{-74,6}}, rotation=0))); + +////////////////////////////////////////////////////////////////////////////////////////// +/////COVER / INSULATION //////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// + + AixLib.Fluid.Storage.BaseClasses.StorageCover topCover( + lambdaWall=data.lambdaWall, + lambdaIns=data.lambdaIns, + alphaInside=alphaInside, + alphaOutside=alphaOutside, + TStartWall=TStartWall, + TStartIns=TStartIns, + rhoIns=data.rhoIns, + cIns=data.cIns, + rhoWall=data.rhoWall, + cWall=data.cWall, + D1=data.dTank, + sWall=data.sWall, + sIns=data.sIns) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={8,56}))); + AixLib.Fluid.Storage.BaseClasses.StorageMantle storageMantle[n]( + each lambdaWall=data.lambdaWall, + each lambdaIns=data.lambdaIns, + each TStartWall=TStartWall, + each TStartIns=TStartIns, + each rhoIns=data.rhoIns, + each cIns=data.cIns, + each rhoWall=data.rhoWall, + each cWall=data.cWall, + each height=data.hTank/n, + each D1=data.dTank, + each sWall=data.sWall, + each sIns=data.sIns, + each alphaInside=alphaInside, + each alphaOutside=alphaOutside) + annotation (Placement(transformation(extent={{20,-2},{40,18}}))); + AixLib.Fluid.Storage.BaseClasses.StorageCover bottomCover( + lambdaWall=data.lambdaWall, + lambdaIns=data.lambdaIns, + alphaInside=alphaInside, + alphaOutside=alphaOutside, + TStartWall=TStartWall, + TStartIns=TStartIns, + rhoIns=data.rhoIns, + cIns=data.cIns, + rhoWall=data.rhoWall, + cWall=data.cWall, + D1=data.dTank, + sWall=data.sWall, + sIns=data.sIns) annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={6,-44}))); + + AixLib.Fluid.Storage.BaseClasses.HeatingCoil heatingCoil1( + disHC=disHC1, + alphaHC=alphaHC1, + redeclare package Medium = MediumHC1, + lengthHC=data.lengthHC1, + pipeHC=data.pipeHC1, + allowFlowReversal=true, + m_flow_nominal=0.05, + TStart=TStart) if useHeatingCoil1 annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-58,29}))); + AixLib.Fluid.Storage.BaseClasses.HeatingCoil heatingCoil2( + disHC=disHC2, + lengthHC=data.lengthHC2, + alphaHC=alphaHC2, + pipeHC=data.pipeHC2, + redeclare package Medium = MediumHC2, + allowFlowReversal=true, + m_flow_nominal=0.05, + TStart=TStart) if useHeatingCoil2 annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={-56,-39}))); + +initial equation + assert(data.hHC1Up<=data.hTank and data.hHC1Up>=0.0 and + data.hHC1Low<=data.hTank and data.hHC1Low>=0.0, + "Storage coil 1 inlet and outlet must be within tank's height.", + level = AssertionLevel.error); + assert(data.hHC1Up>data.hHC1Low, + "Storage coil 1 upper port must be higher than lower port.", + level = AssertionLevel.error); + + assert(data.hHC2Up<=data.hTank and data.hHC2Up>=0.0 and + data.hHC2Low<=data.hTank and data.hHC2Low>=0.0, + "Storage coil 2 inlet and outlet must be within tank's height.", + level = AssertionLevel.error); + assert(data.hHC2Up>data.hHC2Low, + "Storage coil 2 upper port must be higher than lower port.", + level = AssertionLevel.error); + +equation +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connection of Heating Coils////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + if useHeatingCoil1 then + + for i in nHC1Low:nHC1Up loop + + if upToDownHC1 == true then + connect(heatingCoil1.Therm1[nHC1Up+1-i], layer[i].heatPort); + else + connect(heatingCoil1.Therm1[i-nHC1Low+1], layer[i].heatPort); + end if; + +end for; + +connect(portHC1In, heatingCoil1.port_a) annotation (Line( + points={{-82,46},{-58,46},{-58,39}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(portHC1Out, heatingCoil1.port_b) annotation (Line( + points={{-80,12},{-59,12},{-59,19},{-58,19}}, + color={0,127,255}, + smooth=Smooth.None)); + +end if; + + if useHeatingCoil2 then + + for i in nHC2Low:nHC2Up loop + + if upToDownHC2 == true then + connect(heatingCoil2.Therm1[nHC2Up+1-i], layer[i].heatPort); + else + connect(heatingCoil2.Therm1[i-nHC2Low+1], layer[i].heatPort); + end if; + end for; + + connect(portHC2In, heatingCoil2.port_a) annotation (Line( + points={{-82,-20},{-55,-20},{-55,-29},{-56,-29}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(portHC2Out, heatingCoil2.port_b) annotation (Line( + points={{-82,-58},{-56,-58},{-56,-49}}, + color={0,127,255}, + smooth=Smooth.None)); + + end if; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connection of Heating Rod////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +if useHeatingRod then + +connect(heatingRod, layer[nHR].heatPort); +end if; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////// connection of Temperature Sensor/////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + if nTS1 <= 1 then + TBottom = layer[1].heatPort.T; + elseif nTS1 >= n then + TBottom = layer[n].heatPort.T; + else + TBottom = layer[nTS1].heatPort.T; + end if; + if nTS2 <= 1 then + TTop = layer[1].heatPort.T; + elseif nTS2 >= n then + TTop = layer[n].heatPort.T; + else + TTop = layer[nTS2].heatPort.T; + end if; +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connection of volumes and walls////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + for i in 1:n loop + connect(layer[i].heatPort, storageMantle[i].heatportInner); + connect(storageMantle[i].heatportOuter, heatportOutside); + end for; + connect(layer[1].heatPort, bottomCover.heatportInner); + connect(layer[n].heatPort,topCover.heatportInner); + + connect(bottomCover.heatportOuter, heatportOutside); + connect(topCover.heatportOuter, heatportOutside); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connections of inner layers////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + for i in 2:(n-1) loop + if nLowerPorts == i then + connect(layer[i].ports[3], fluidportBottom1); + connect(layer[i].ports[4], fluidportBottom2); + if nUpperPorts == i then + connect(layer[i].ports[5],fluidportTop1); + connect(layer[i].ports[6],fluidportTop2); + end if; + elseif nUpperPorts ==i then + connect(layer[i].ports[3],fluidportTop1); + connect(layer[i].ports[4],fluidportTop2); + end if; + + connect(layer[i].ports[2],layer[i+1].ports[1]); + end for; +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connections of upper and lower layer///////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + if nLowerPorts == 1 then + connect(layer[1].ports[2],fluidportBottom1); + connect(layer[1].ports[3],fluidportBottom2); + end if; + connect(layer[1].ports[1],layer[2].ports[1]); + + if nUpperPorts == n then + connect(layer[n].ports[2],fluidportTop1); + connect(layer[n].ports[3],fluidportTop2); + end if; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////connections of heat transfer model/////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + connect(heatTransfer.therm, layer.heatPort); + + annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-80,-100}, + {80,100}}), graphics={ + Rectangle( + extent={{-80,-71},{80,71}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + fillColor={85,170,255}, + fillPattern=FillPattern.Solid, + origin={0,-29}, + rotation=360), + Polygon( + points={{-24,-3},{-20,-9},{-10,-9},{6,-9},{18,-11},{38,-19},{68,-19},{ + 106,-15},{136,1},{136,39},{-24,35},{-24,-3}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid, + origin={-56,19}, + rotation=360), + Polygon( + points={{-39,-4},{-31,-18},{-11,-28},{25,-34},{67,-32},{93,-28},{121,-8}, + {121,24},{-39,26},{-39,-4}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,170,170}, + fillPattern=FillPattern.Solid, + origin={-41,60}, + rotation=360), + Polygon( + points={{-80,100},{-80,78},{-62,62},{-32,58},{30,62},{62,72},{80,82},{ + 80,100},{-80,100}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,62,62}, + fillPattern=FillPattern.Solid, + origin={0,0}, + rotation=360), + Polygon( + points={{-154,3},{-134,-3},{-110,1},{-84,-1},{-56,-5},{-30,-11},{6,-3}, + {6,-41},{-154,-41},{-154,3}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={14,110,255}, + fillPattern=FillPattern.Solid, + origin={74,-27}, + rotation=360), + Polygon( + points={{-154,3},{-136,-7},{-110,-3},{-84,-7},{-48,-5},{-18,-9},{6,-3}, + {6,-41},{-154,-41},{-154,3}}, + lineColor={0,0,255}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + origin={74,-59}, + rotation=360), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-28,83}, + rotation=180, + visible = true), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={26,83}, + rotation=360, + visible = true), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-26,-83}, + rotation=180, + visible = true), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={24,-83}, + rotation=360, + visible = true), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-66,57}, + rotation=270, + visible=useHeatingCoil1), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-66,25}, + rotation=90, + visible = useHeatingCoil1), + Rectangle( + extent={{-80,100},{80,-100}}, + lineColor={0,0,0}, + lineThickness=1), + Line( + points={{-46,57},{56,57}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{-46,25},{56,25}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{-46,50},{56,57}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{56,42},{-46,50}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{-46,34},{56,42}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{56,26},{-46,34}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil1), + Line( + points={{-57,25},{-46,58}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + arrow={Arrow.Filled,Arrow.None}, + visible = (useHeatingCoil1 and not + (upToDownHC1))), + Line( + points={{-57,58},{-46,25}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + arrow={Arrow.None,Arrow.Filled}, + visible = (useHeatingCoil1 and not + (upToDownHC1))), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + origin={-48,57}, + rotation=270, + visible = (useHeatingCoil1 and upToDownHC1)), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + origin={-50,25}, + rotation=270, + visible = (useHeatingCoil1 and upToDownHC1)), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-66,-25}, + rotation=270, + visible=useHeatingCoil2), + Line( + points={{-46,-25},{56,-25}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{-46,-32},{56,-25}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{56,-40},{-46,-32}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{-46,-48},{56,-40}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{56,-56},{-46,-48}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{-46,-57},{56,-57}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + visible = useHeatingCoil2), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + origin={-50,-57}, + rotation=270, + visible = (useHeatingCoil2 and upToDownHC2)), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + arrow={Arrow.Filled,Arrow.None}, + origin={-66,-57}, + rotation=90, + visible = useHeatingCoil2), + Line( + points={{0,9},{0,-9}}, + color={0,0,0}, + smooth=Smooth.Bezier, + thickness=1, + origin={-48,-25}, + rotation=270, + visible = (useHeatingCoil2 and upToDownHC2)), + Line( + points={{-57,-24},{-46,-57}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + arrow={Arrow.None,Arrow.Filled}, + visible = (useHeatingCoil2 and not + (upToDownHC2))), + Line( + points={{-57,-57},{-46,-24}}, + color={0,0,0}, + thickness=1, + smooth=Smooth.Bezier, + arrow={Arrow.Filled,Arrow.None}, + visible = (useHeatingCoil2 and not + (upToDownHC2))), + Line( + points={{-76,-1},{26,-1}}, + color={0,0,0}, + smooth=Smooth.Bezier, + visible = useHeatingRod, + thickness=2)}), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-80,-100},{80,100}})), + Documentation(revisions=" +Buffer Storage Model with support for heating rod and two heating coils.
+It represents a buffer storage stratified into n layers where 1 represents +the bottom layer and n represents the top layer. The layers are connected to +each other allowing heat and fluid transfer.The heat transfer between the layers +can be selected to model the conductance between the layers or different models +that additionally represent the buoyancy:
+HeatTransferOnlyConduction: Model for heat transfer between buffer +storage layers. Models conductance of water. An effective heat conductivity is +therefore calculated. Used in BufferStorage model.
+HeatTransferLambdaSimple: Model for heat transfer between buffer +storage layers. Models conductance of water and additional effective +conductivity (in case the above layer is colder than the lower layer). Used in +BufferStorage model.
+HeatTransferLambdaEff: Model for heat transfer between buffer storage +layers. Models conductance of water and buoyancy according to Viskanta et al., +1997. An effective heat conductivity is therefore calculated. Used in +BufferStorage model.
+HeatTransferLambdaEffSmooth: Same as HeatTransfer_lambda_eff. In +addition, the smooth() expression is used for the transition of the +buoyancy model.
+HeatTransferLambdaEffTanh: Same as HeatTransfer_lambda_eff. In +addition, a tanh function is used for the transition of the buoyancy model +(VariableTransition model). Attention: the initial value of the FullTransition +model is 0.5. This may lead to a mixture of the storage at the beginning of the +simulation.
+HeatTransferBuoyancyWetter: Model for heat transfer between buffer +storage layers. Models buoyancy according to +Buildings.Fluid.Storage.BaseClasses.Buoyancy model of Buildings library, cf. +https://simulationresearch.lbl.gov/modelica. No conduction is implemented apart +from when buoyancy occurs.
The geometrical data for the storage is read +by records in the DataBase package. The model also includes heat losses over the +storage walls (wall, top and bottom). No pressure losses are included. Thus +external pressure loss models are required for the use of the model.
+AixLib.Fluid.Storage.Examples.BufferStorageCharging
+")); +end BufferStorage; diff --git a/AixLib/Fluid/Storage/Examples/BufferStorageCharging.mo b/AixLib/Fluid/Storage/Examples/BufferStorageCharging.mo index 47dc0a0871..87ad6def1e 100644 --- a/AixLib/Fluid/Storage/Examples/BufferStorageCharging.mo +++ b/AixLib/Fluid/Storage/Examples/BufferStorageCharging.mo @@ -9,7 +9,7 @@ model BufferStorageCharging AixLib.Fluid.Storage.BufferStorage storage_Aixlib( n=10, redeclare package Medium = Medium, - data=AixLib.DataBase.Storage.Generic_500l(), + data=AixLib.DataBase.Storage.Generic_New_2000l(), useHeatingCoil1=false, useHeatingCoil2=false, upToDownHC1=false, @@ -21,8 +21,7 @@ model BufferStorageCharging redeclare package MediumHC2 = Medium, TStart=303.15) annotation (Placement(transformation(extent={{0,0},{-20,24}}))); - Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemperature(T=283.15) - annotation(Placement(transformation(extent={{-58,4}, + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature fixedTemperature(T=283.15) annotation(Placement(transformation(extent={{-58,4}, {-38,24}}))); AixLib.Fluid.Sources.MassFlowSource_T boundary( m_flow=0.2, diff --git a/AixLib/Fluid/Storage/Examples/Stratified.mo b/AixLib/Fluid/Storage/Examples/Stratified.mo new file mode 100644 index 0000000000..0479dbeaee --- /dev/null +++ b/AixLib/Fluid/Storage/Examples/Stratified.mo @@ -0,0 +1,164 @@ +within AixLib.Fluid.Storage.Examples; +model Stratified "Test model for stratified tank" + extends Modelica.Icons.Example; + + package Medium = AixLib.Media.Water "Medium model"; + + AixLib.Fluid.Storage.Stratified tanSim( + redeclare package Medium = Medium, + hTan=3, + dIns=0.3, + nSeg=10, + m_flow_nominal=0.1, + VTan=3) "Tank" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + Modelica.Blocks.Sources.TimeTable TWat(table=[0,273.15 + 40; 3600,273.15 + + 40; 3600,273.15 + 20; 7200,273.15 + 20]) "Water temperature" + annotation (Placement(transformation(extent={{-100,2},{-80,22}}))); + AixLib.Fluid.Sources.Boundary_pT sou_1( + p=300000 + 5000, + T=273.15 + 50, + redeclare package Medium = Medium, + use_T_in=true, + nPorts=2) annotation (Placement(transformation(extent={{-60,-2}, + {-40,18}}))); + AixLib.Fluid.Sources.Boundary_pT sin_1( + redeclare package Medium = Medium, + T=273.15 + 20, + use_p_in=true, + p=300000, + nPorts=2) annotation (Placement(transformation(extent={{90,-2}, + {70,18}}))); + AixLib.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}}))); + AixLib.Fluid.Storage.StratifiedEnhanced tanEnh( + redeclare package Medium = Medium, + hTan=3, + dIns=0.3, + nSeg=10, + m_flow_nominal=0.1, + VTan=3) "Tank" + annotation (Placement(transformation(extent={{-18,-38},{2,-18}}))); + AixLib.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}}))); + AixLib.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}}))); + AixLib.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}}))); + Modelica.Blocks.Continuous.Integrator dH + "Differenz in enthalpy (should be zero at steady-state)" + annotation (Placement(transformation(extent={{68,30},{88,50}}))); + Modelica.Blocks.Math.Add add(k2=-1) annotation (Placement(transformation( + extent={{32,30},{52,50}}))); + Modelica.Blocks.Sources.TimeTable P(table=[0,300000; 4200,300000; 4200, + 305000; 7200,305000; 7200,310000; 10800,310000; 10800,305000]) + "Pressure boundary condition" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + Modelica.Blocks.Sources.Sine sine( + freqHz=1/86400, + amplitude=10, + offset=273.15 + 20) annotation (Placement(transformation(extent={{-90,62},{ + -70,82}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TBCSid2 + "Boundary condition for tank" annotation (Placement(transformation(extent={ + {-40,50},{-28,62}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TBCSid1 + "Boundary condition for tank" annotation (Placement(transformation(extent={ + {-40,84},{-28,96}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TBCTop1 + "Boundary condition for tank" annotation (Placement(transformation(extent={ + {-40,66},{-28,78}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TBCTop2 + "Boundary condition for tank" annotation (Placement(transformation(extent={ + {-40,32},{-28,44}}))); +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(HOut_flow.port_b, res_1.port_a) + annotation (Line(points={{22,10},{30,10},{36,10}}, + color={0,127,255})); + connect(tanEnh.port_b, HOut_flow1.port_a) + annotation (Line(points={{2,-28},{2,-28},{18,-28}}, + 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(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}, + {30,34}}, color={0,0,127})); + connect(P.y, sin_1.p_in) annotation (Line( + points={{41,70},{100,70},{100,16},{92,16}}, + 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})); + connect(sine.y, TBCTop1.T) annotation (Line(points={{-69,72},{-41.2,72}}, + color={0,0,127})); + connect(sine.y, TBCSid2.T) annotation (Line(points={{-69,72},{-56,72},{-56,56}, + {-41.2,56}}, color={0,0,127})); + 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})); + connect(TBCTop2.port, tanEnh.heaPorTop) annotation (Line(points={{-28,38},{ + -26,38},{-26,-14},{-6,-14},{-6,-20.6}}, color={191,0,0})); + connect(sin_1.ports[1], res_1.port_b) annotation (Line( + points={{70,10},{56,10}}, + 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}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(sou_1.ports[1], tanSim.port_a) annotation (Line( + points={{-40,10},{-20,10}}, + 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}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(TBCSid1.port, tanSim.heaPorSid) annotation (Line( + points={{-28,90},{-4.4,90},{-4.4,10}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TBCTop1.port, tanSim.heaPorTop) annotation (Line( + points={{-28,72},{-8,72},{-8,17.4}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation(experiment(Tolerance=1e-08, StopTime=10800), +__Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Fluid/Storage/Examples/Stratified.mos" + "Simulate and plot"), + Documentation(info=" +This test model compares two tank models. The only difference between +the two tank models is that one uses the third order upwind discretization +scheme that reduces numerical diffusion that is induced when connecting +volumes in series. +", revisions=" ++This model provides an example for the + +AixLib.Fluid.Storage.StratifiedEnhancedInternalHex model. +There are three tanks. +In the tank on top, the fluid in the heat exchanger and the metal of the +heat exchanger use a steady-state energy balance. +In the middle tank, both use a dynamic balance. +In the bottom tank, the fluid uses a steady-state heat balance +but the metal of the heat exchanger uses a dynamic balance. +
++Each tank starts at the same water temperature, and there is no +water flow through the tank. +The glycol that flows through the heat exchanger starts with zero +mass flow rate, and is set to its design flow rate at t=300 seconds. +
+", +revisions=" +Modelica.Fluid.System
+to address issue
+#311.
++Example for tank model that has three outlets, each with a valve. +The valve at the bottom opens when the temperature in that tank segment +is sufficiently warm to serve the load. +The tank in the middle also opens when its tank temperature is sufficiently high, +but only if the valve below is closed. +Finally, the valve at the top only opens if no other valve is open. +Hence, there is always exactly one valve open. +On the right-hand side of the model is a heater that adds heat to the bottom of the +tank if the top tank segment is below the set point temperature. +
+", revisions=" ++This is a model of a stratified storage tank. +
++See the + +AixLib.Fluid.Storage.UsersGuide +for more information. +
++For a model with enhanced stratification, use + +AixLib.Fluid.Storage.StratifiedEnhanced. +
+", revisions=" +allowFlowReversal
and m_flow_small
+and set mSenFac=1
.
+hA_flow
to H_a_flow
,
+hB_flow
to H_b_flow
and
+hVol_flow
to H_vol_flow
+as they output enthalpy flow rate, and not specific enthalpy.
+Made various models protected
.
+final
to tau = 0
in EnthalpyFlowRate
.
+These sensors do not need dynamics as the enthalpy flow rate
+is used to compute a heat flow which is then added to the volume of the tank.
+Thus, if there were high frequency oscillations of small mass flow rates,
+then they have a small effect on H_flow
, and they are
+not used in any control loop. Rather, the oscillations are further damped
+by the differential equation of the fluid volume.
+tau = 0
in EnthalpyFlowRate
+sensors for increased simulation speed.
+Medium.lambda_const
with
+Medium.thermalConductivity(sta_default)
as
+lambda_const
is not declared for all media.
+This avoids a translation error if certain media are used.
+system
declaration.
+use_T_start
and h_start
.
++This is a model of a stratified storage tank for thermal energy storage. +
++See the + +AixLib.Fluid.Storage.UsersGuide +for more information. +
+
+The model requires at least 4 fluid segments. Hence, set nSeg
to 4 or higher.
+
+This is a model of a stratified storage tank for thermal energy storage with built-in heat exchanger. +
++See the + +AixLib.Fluid.Storage.UsersGuide +for more information. +
+
+The model requires at least 4 fluid segments. Hence, set nSeg
to 4 or higher.
+
hHex_a < hHex_b
, e.g., the port a of the heat exchanger
+is below the port b.
+This closes
+issue 531.
+energyDynamicsHexSolid=energyDynamicsHex
+rather than
+energyDynamicsHexSolid=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial
+as users are not likely to want different settings.
+energyDynamicsHexSolid
.
+This is for
+
+#434.
+allowFlowReversal
and m_flow_small
.
+abs()
function in the assignment of the parameter
+nSegHexTan
as the return value of abs()
+is a Real
which causes a type error during model check.
+botHexSeg
.
+Without this function, this parameter can take on zero, which is wrong
+because the Modelica uses one-based arrays.
+
+Revised the model as the old version required the porta
+of the heat exchanger to be located higher than portb.
+This makes sense if the heat exchanger is used to heat up the tank,
+but not if it is used to cool down a tank, such as in a cooling plant.
+The following parameters were changed:
+hexTopHeight
to hHex_a
.hexBotHeight
to hHex_b
.topHexSeg
to segHex_a
,
+ and made it protected as this is deduced from hHex_a
.botHexSeg
to segHex_b
,
+ and made it protected as this is deduced from hHex_b
.port_a1
to portHex_a
.port_b1
to portHex_b
.m_flow_nominal_tank
which was not used.
++This user's guide describes the storage tank models. +There are three storage tank models in the this package. +
+Model name | Description |
---|---|
+ +AixLib.Fluid.Storage.Stratified + | +
+ +This is a model of a stratified storage tank as shown in the figure below. + ++ + ++The tank uses several volumes to model the stratification. +Heat conduction is modeled between the volumes through the fluid, +and between the volumes and the ambient. + +
+The heat port
+Similarly, the fluid port
+The tank has
+The heat ports outside the tank insulation can be
+used to specify an ambient temperature.
+Leave these ports unconnected to force adiabatic boundary conditions.
+Note, however, that all heat conduction elements through the tank wall (but not the top and bottom) are connected to the
+heat port |
+
+ +AixLib.Fluid.Storage.StratifiedEnhanced + | +
+ +The model is identical to + +AixLib.Fluid.Storage.Stratified, +except for the following: + +
+The correction uses a third order upwind scheme to compute the +outlet temperatures of the segments in the tank. This model +is implemented in + +AixLib.Fluid.Storage.BaseClasses.ThirdOrderStratifier. + + |
+
+ +AixLib.Fluid.Storage.StratifiedEnhancedInternalHex + | +
+ +This model is identical to + +AixLib.Fluid.Storage.StratifiedEnhanced +except that it adds a heat exchanger to the tank. + ++The modifications consist of adding a heat exchanger +and fluid ports to connect to the heat exchanger. +The modifications allow to run a fluid through the tank causing heat transfer to the stored fluid. +A typical example is a storage tank in a solar hot water system. + ++The heat exchanger model assumes flow through the inside of a helical coil heat exchanger, +and stagnant fluid on the outside. Parameters are used to describe the +heat transfer on the inside of the heat exchanger at nominal conditions, and +geometry of the outside of the heat exchanger. This information is used to compute +an hA-value for each side of the coil. +Convection calculations are then performed to identify heat transfer +between the heat transfer fluid and the fluid in the tank. + +
+The location of the heat exchanger can be parameterized as follows:
+The parameters + + +
+Optionally, this model computes a dynamic response of the heat exchanger.
+This can be configured using the parameters
+
+Setting +The heat exchanger is implemented in + +AixLib.Fluid.Storage.BaseClasses.IndirectTankHeatExchanger. + + |
+
+This validation model compares two tank models. The only difference between
+the two tank models is that tan_aTop
has the hot water inlet
+for the heat exchanger above its outlet, whereas tan_bTop
+has the hot water inlet below its outlet. In both models, the heat exchanger
+extends from element 9 to element 11.
+
+This package contains models that validate the storage models. +These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Fluid/Storage/Validation/package.order b/AixLib/Fluid/Storage/Validation/package.order new file mode 100644 index 0000000000..59146949b4 --- /dev/null +++ b/AixLib/Fluid/Storage/Validation/package.order @@ -0,0 +1,3 @@ +HeatExchangerDynamics +HeatExchangerLocation +StratifiedLoadingUnloading diff --git a/AixLib/Fluid/Storage/package.order b/AixLib/Fluid/Storage/package.order index 7bc53d30e2..ee26d586a8 100644 --- a/AixLib/Fluid/Storage/package.order +++ b/AixLib/Fluid/Storage/package.order @@ -1,5 +1,10 @@ +UsersGuide BufferStorage ExpansionVessel Storage +Stratified +StratifiedEnhanced +StratifiedEnhancedInternalHex Examples +Validation BaseClasses diff --git a/AixLib/Media/Air.mo b/AixLib/Media/Air.mo index a9cdb89322..45be9c6d23 100644 --- a/AixLib/Media/Air.mo +++ b/AixLib/Media/Air.mo @@ -30,7 +30,6 @@ package Air redeclare record extends ThermodynamicState "ThermodynamicState record for moist air" end ThermodynamicState; - // There must not be any stateSelect=StateSelect.prefer for // the pressure. // Otherwise, translateModel("Buildings.Fluid.FMI.ExportContainers.Examples.FMUs.ResistanceVolume") @@ -736,7 +735,6 @@ algorithm Modelica.SIunits.Conversions.to_degC(state.T)); annotation(LateInline=true); end thermalConductivity; - ////////////////////////////////////////////////////////////////////// // Protected classes. // These classes are only of use within this medium model. @@ -776,7 +774,6 @@ First implementation.This medium package models moist air using a gas law in which pressure and temperature @@ -1059,7 +1055,7 @@ when models are checked in Dymola 2014 in the pedenatic mode.
each
to Xi(stateSelect=...
.
+Added keyword each
to Xi(stateSelect=...)
.
+Record that is used by media packages in + +AixLib.Media.Antifreeze to implement the thermophysical properties +based on Melinder (2010). +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++This package contains base classes that are used to construct the models in + +AixLib.Media.Antifreeze. +
+")); +end BaseClasses; diff --git a/AixLib/Media/Antifreeze/BaseClasses/package.order b/AixLib/Media/Antifreeze/BaseClasses/package.order new file mode 100644 index 0000000000..86a986d22f --- /dev/null +++ b/AixLib/Media/Antifreeze/BaseClasses/package.order @@ -0,0 +1 @@ +PropertyCoefficients diff --git a/AixLib/Media/Antifreeze/PropyleneGlycolWater.mo b/AixLib/Media/Antifreeze/PropyleneGlycolWater.mo new file mode 100644 index 0000000000..0ae7369d10 --- /dev/null +++ b/AixLib/Media/Antifreeze/PropyleneGlycolWater.mo @@ -0,0 +1,462 @@ +within AixLib.Media.Antifreeze; +package PropyleneGlycolWater + "Package with model for propylene glycol - water with constant properties" + extends Modelica.Media.Interfaces.PartialSimpleMedium( + mediumName="PropyleneGlycolWater(X_a = " + + String(X_a) + ", property_T = " + + String(property_T) + ")", + final cp_const=specificHeatCapacityCp_TX_a(T = property_T, X_a = X_a), + final cv_const=cp_const, + final d_const=density_TX_a(T = property_T, X_a = X_a), + final eta_const=dynamicViscosity_TX_a(T = property_T, X_a = X_a), + final lambda_const=thermalConductivity_TX_a(T = property_T, X_a = X_a), + a_const=1484, + final T_min=fusionTemperature_TX_a(T = property_T, X_a = X_a), + final T_max=Modelica.SIunits.Conversions.from_degC(100), + T0=273.15, + MM_const=(X_a/simplePropyleneGlycolWaterConstants[1].molarMass + (1 + - X_a)/0.018015268)^(-1), + fluidConstants=simplePropyleneGlycolWaterConstants, + p_default=300000, + reference_p=300000, + reference_T=273.15, + reference_X={1}, + AbsolutePressure(start=p_default), + Temperature(start=T_default), + Density(start=d_const)); + + constant Modelica.SIunits.Temperature property_T + "Temperature for evaluation of constant fluid properties"; + constant Modelica.SIunits.MassFraction X_a + "Mass fraction of propylene glycol in water"; + + redeclare model BaseProperties "Base properties" + Temperature T(stateSelect= + if preferredMediumStates then StateSelect.prefer else StateSelect.default) + "Temperature of medium"; + + InputAbsolutePressure p "Absolute pressure of medium"; + InputMassFraction[nXi] Xi=fill(0, 0) + "Structurally independent mass fractions"; + InputSpecificEnthalpy h "Specific enthalpy of medium"; + Modelica.SIunits.SpecificInternalEnergy u + "Specific internal energy of medium"; + Modelica.SIunits.Density d=d_const "Density of medium"; + Modelica.SIunits.MassFraction[nX] X={1} + "Mass fractions (= (component mass)/total mass m_i/m)"; + final Modelica.SIunits.SpecificHeatCapacity R=0 + "Gas constant (of mixture if applicable)"; + final Modelica.SIunits.MolarMass MM=MM_const + "Molar mass (of mixture or single fluid)"; + ThermodynamicState state + "Thermodynamic state record for optional functions"; + parameter Boolean preferredMediumStates=false + "= true if StateSelect.prefer shall be used for the independent property variables of the medium" + annotation(Evaluate=true, Dialog(tab="Advanced")); + final parameter Boolean standardOrderComponents=true + "If true, and reducedX = true, the last element of X will be computed from the other ones"; + Modelica.SIunits.Conversions.NonSIunits.Temperature_degC T_degC= + Modelica.SIunits.Conversions.to_degC(T) + "Temperature of medium in [degC]"; + Modelica.SIunits.Conversions.NonSIunits.Pressure_bar p_bar= + Modelica.SIunits.Conversions.to_bar(p) + "Absolute pressure of medium in [bar]"; + + // Local connector definition, used for equation balancing check + connector InputAbsolutePressure = input Modelica.SIunits.AbsolutePressure + "Pressure as input signal connector"; + connector InputSpecificEnthalpy = input Modelica.SIunits.SpecificEnthalpy + "Specific enthalpy as input signal connector"; + connector InputMassFraction = input Modelica.SIunits.MassFraction + "Mass fraction as input signal connector"; + + equation + assert(T >= T_min and T <= T_max, " +Temperature T (= " + String(T) + " K) is not +in the allowed range (" + String(T_min) + " K <= T <= " + String(T_max) + " K) +required from medium model \"" + mediumName + "\". +"); + assert(X_a >= X_a_min and X_a <= X_a_max, " + Mass fraction X_a (= " + String(X_a) + " ) is not +in the allowed range (" + String(X_a_min) + " <= X_a <= " + String(X_a_max) + " ) +required from medium model \"" + mediumName + "\". +"); + + h = cp_const*(T-reference_T); + u = h; + state.T = T; + state.p = p; + + annotation(Documentation(info=" +
+ This base properties model is identical to
+
+ Modelica.Media.Water.ConstantPropertyLiquidWater,
+ except that the equation
+ u = cv_const*(T - reference_T)
+ has been replaced by u=h
because
+ cp_const=cv_const
.
+ Also, the model checks if the mass fraction of the mixture is within the
+ allowed limits.
+
+ Density of propylene antifreeze-water mixture at specified mass fraction + and temperature, based on Melinder (2010). +
++ Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary + Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: + IIR/IIF. +
+ ", + revisions=" ++Dynamic viscosity of antifreeze-water mixture at specified mass fraction and +temperature, based on Melinder (2010). +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++Fusion temperature of antifreeze-water mixture at specified mass fraction and +temperature, based on Melinder (2010). +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++Evaluates a thermophysical property of a mixture, based on correlations proposed +by Melinder (2010). +
++The polynomial has the form +
++f = a1 (x-xm)0(y-ym)0 ++ a2 (x-xm)0(y-ym)1 ++ ... + +any[1] (x-xm)0(y-ym)ny[1]-1 ++ ... + +any[1])+1 (x-xm)1(y-ym)0 ++ ... + +any[1]+ny[2] (x-xm)1(y-ym)ny[2]-1 ++ ... +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++Specific heat capacity of antifreeze-water mixture at specified mass fraction +and temperature, based on Melinder (2010). +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++Thermal conductivity of antifreeze-water mixture at specified mass fraction and +temperature, based on Melinder (2010). +
++Melinder, Åke. 2010. Properties of Secondary Working Fluids (Secondary +Refrigerants or Coolants, Heat Transfer Fluids) for Indirect Systems. Paris: +IIR/IIF. +
+", revisions=" ++This medium package models propylene glycol - water mixtures. +
++The mass density, specific heat capacity, thermal conductivity and viscosity +are assumed constant and evaluated at a set temperature and mass fraction of +propylene glycol within the mixture. The dependence of the four properties +are shown on the figure below. +
++ +
++The accuracy of the thermophysical properties is dependent on the temperature +variations encountered during simulations. +The figure below shows the relative error of the the four properties over a +10 °C range around the temperature used to evaluate the constant +properties. The maximum errors are 0.8 % for mass density, 1.5 % +for specific heat capacity, 3.2 % for thermal conductivity and 250 +% for dynamic viscosity. +
++ +
++The figure below shows the relative error of the the four properties over a +20 °C range around the temperature used to evaluate the constant +proepties. The maximum errors are 1.6 % for mass density, 3.0 % +for specific heat capacity, 6.2 % for thermal conductivity and 950 +% for dynamic viscosity. +
++ +
++The enthalpy is computed using the convention that h=0 +if T=0 °C. +
++Density, specific heat capacity, thermal conductivity and viscosity are constant. +The propylene glycol/water mixture is modeled as an incompressible liquid. +There are no phase changes. The medium is limited to temperatures below +100 °C and mass fractions below 0.60. +As is the case for AixLib.Media.Water, this medium package should not be used if +the simulation relies on the dynamic viscosity. +
++The temperature and mass fraction must be specified for the evaluation of the +constant thermophysical properties. A typical use of the package is (e.g. for +a temperature of 20 °C and a mass fraction of 0.40): +
+
+Medium = AixLib.Media.Antifreeze.PropyleneGlycolWater(property_T=293.15, X_a=0.40)
+
+This example checks the implementation of functions that evaluate the +temperature- and concentration-dependent thermophysical properties of the +medium. +
++Thermophysical properties (density, specific heat capacity, thermal conductivity +and dynamic viscosity) are shown as 0 if the temperature is below the fusion +temperature. +
+", +revisions=" ++Function that makes + +AixLib.Media.Antifreeze.density_TX_a +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", revisions=" ++Function that makes + +AixLib.Media.Antifreeze.dynamicViscosity_TX_a +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", revisions=" ++Function that makes + +AixLib.Media.Antifreeze.fusionTemperature_TX_a +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", revisions=" ++Function that makes + +AixLib.Media.Antifreeze.specificHeatCapacityCp_TX_a +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", revisions=" ++Function that makes + +AixLib.Media.Antifreeze.thermalConductivity_TX_a +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", revisions=" ++Media implementation that extends + +AixLib.Media.Antifreeze +in order to make its thermophysical property functions +publicly accessible as needed for the validation model + +AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties. +
+", + revisions=" ++This package contains base classes that are used to construct the models in + +AixLib.Media.Antifreeze.Validation. +
+")); +end BaseClasses; diff --git a/AixLib/Media/Antifreeze/Validation/BaseClasses/package.order b/AixLib/Media/Antifreeze/Validation/BaseClasses/package.order new file mode 100644 index 0000000000..c8893dedff --- /dev/null +++ b/AixLib/Media/Antifreeze/Validation/BaseClasses/package.order @@ -0,0 +1,2 @@ +FluidProperties +PropyleneGlycolWater diff --git a/AixLib/Media/Antifreeze/Validation/PropyleneGlycolWater.mo b/AixLib/Media/Antifreeze/Validation/PropyleneGlycolWater.mo new file mode 100644 index 0000000000..3346ef5b6e --- /dev/null +++ b/AixLib/Media/Antifreeze/Validation/PropyleneGlycolWater.mo @@ -0,0 +1,39 @@ +within AixLib.Media.Antifreeze.Validation; +model PropyleneGlycolWater + "Model that tests the implementation of propylene glycol-water properties" + extends Modelica.Icons.Example; + extends AixLib.Media.Antifreeze.Validation.BaseClasses.FluidProperties( + redeclare package Medium = + AixLib.Media.Antifreeze.Validation.BaseClasses.PropyleneGlycolWater ( + property_T=300, + X_a=0.05), + nX_a=7, + X_a={0.05,0.10,0.20,0.30,0.40,0.50,0.60}, + T_min=223.15, + T_max=373.15); + + annotation(experiment(Tolerance=1e-6, StopTime=1.0), +__Dymola_Commands(file="modelica://AixLib/Resources/Scripts/Dymola/Media/Antifreeze/Validation/PropyleneGlycolWater.mos" + "Simulate and plot"), + Documentation(info=" ++This example checks the implementation of functions that evaluate the +temperature- and concentration-dependent thermophysical properties of the +medium. +
++Thermophysical properties (density, specific heat capacity, thermal conductivity +and dynamic viscosity) are shown as 0 if the temperature is below the fusion +temperature. +
+", +revisions=" ++This package contains validation cases that test the media packages in + +AixLib.Media.Antifreeze. +
+")); +end Validation; diff --git a/AixLib/Media/Antifreeze/Validation/package.order b/AixLib/Media/Antifreeze/Validation/package.order new file mode 100644 index 0000000000..8b34d73f3e --- /dev/null +++ b/AixLib/Media/Antifreeze/Validation/package.order @@ -0,0 +1,2 @@ +PropyleneGlycolWater +BaseClasses diff --git a/AixLib/Media/Antifreeze/package.mo b/AixLib/Media/Antifreeze/package.mo new file mode 100644 index 0000000000..7bf2441181 --- /dev/null +++ b/AixLib/Media/Antifreeze/package.mo @@ -0,0 +1,12 @@ +within AixLib.Media; +package Antifreeze "Medium packages of secondary working fluids" + + annotation (preferredView="info", Documentation(info=" +
+This package contains media models for liquid mixtures used in HVAC
+applications. The media models evaluate the thermophysical
+properties at a user-specifiable temperature property_T
,
+and the thermophysical properties are then kept constant during the simulation.
+
+This example checks whether the function derivative +is implemented correctly. If the derivative implementation +is not correct, the model will stop with an assert statement. +
+", revisions=" ++This example checks thermophysical properties of the medium. +
+", +revisions=" ++This model tests whether the inversion of temperature and enthalpy +is implemented correctly. +If T ≠ T(h(T)), the model stops with an error. +
+", revisions=" ++This is a simple test for the medium model. It uses the test model described in + +Modelica.Media.UsersGuide.MediumDefinition.TestOfMedium. +
+", revisions=" ++Function that calculates the derivative of the Martin-Hou equation of for R410A +state with regards to specific volume. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the derivative of the Martin-Hou equation of for R410A +state with regards to temperature. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the derivatives of + +AixLib.Media.Refrigerants.R410A.specificVolumeVap_pT +
+", revisions=" ++Function that calculates the enthalpy of saturated liquid R410A based on +temperature. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the specific enthalpy of saturated R410A vapor based +on temperature. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the isentropic exponent of R410A vapor based on temperature and specific volume. The isentropic exponent is equal to the ratio of specific heat capacities: +
++k = cp/cv +
++F. de Monte. (2002). +Calculation of thermodynamic properties of R407C and +R410A by the Martin–Hou equation of state — part I: +theoretical development. + +International Journal of Refrigeration. + +25. 306-313. +
++
+Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++This package contains function definitions for thermodynamic properties of R410A +based on data for commercial refrigerant Dupont Suva 410A. The methodology used +to evaluate the isentropic exponent is taken from de Monte (2002). +
++F. de Monte. (2002). +Calculation of thermodynamic properties of R407C and +R410A by the Martin–Hou equation of state — part I: +theoretical development. + +International Journal of Refrigeration. + +25. 306-313. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the pressure of saturated liquid R410A based on temperature. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the pressure of saturated R410A vapor based on temperature. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the pressure R410A vapor based on temperature and +specific volume. The pressure is calculated from the Martin-Hou equation of +state. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the specific isobaric heat capacity (cp) of R410A vapor based on temperature and specific volume. +
++The specific isobaric heat capacity is evaluated from the partial derivatives of the Martin-Hou equation of state. +
++F. de Monte. (2002). +Calculation of thermodynamic properties of R407C and +R410A by the Martin–Hou equation of state — part I: +theoretical development. + +International Journal of Refrigeration. + +25. 306-313. +
++
+Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the specific isochoric heat capacity +(cv) of R410A vapor based on temperature and specific volume. +
++The specific isochoric heat capacity is evaluated from the partial derivatives +of the Martin-Hou equation of state. +
++F. de Monte. (2002). +Calculation of thermodynamic properties of R407C and +R410A by the Martin–Hou equation of state — part I: +theoretical development. + +International Journal of Refrigeration. + +25. 306-313. +
++
+Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Function that calculates the specific volume R410A vapor based on pressure and +temperature. The specific volume is evaluated iteratively by succesive +evaluations of the vapor pressure. +
++The initial guess is estimated by the first term in the Martin-Hou equation of +state. +
++Thermodynamic properties of DuPont Suva 410A: + +https://www.chemours.com/Refrigerants/en_US/assets/downloads/h64423_Suva410A_thermo_prop_si.pdf + +
+", revisions=" ++Validation case for evaluation of derivatives of the Martin-Hou equation of +state with regards to pressure and temperature. +
++The analytical implementation of derivatives is compared to a numerical +evaluation of the derivatives. +
+", revisions=" ++This package contains models that validate the implementation of refrigerant +routines for the evaluation of thermodynamic properties. +
++These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +
+")); +end Validation; diff --git a/AixLib/Media/Refrigerants/Validation/package.order b/AixLib/Media/Refrigerants/Validation/package.order new file mode 100644 index 0000000000..b750ee8d23 --- /dev/null +++ b/AixLib/Media/Refrigerants/Validation/package.order @@ -0,0 +1 @@ +R410A_dSpecificVolumeVap_pT diff --git a/AixLib/Media/Refrigerants/package.mo b/AixLib/Media/Refrigerants/package.mo new file mode 100644 index 0000000000..cb90bd936b --- /dev/null +++ b/AixLib/Media/Refrigerants/package.mo @@ -0,0 +1,51 @@ +within AixLib.Media; +package Refrigerants "Package with functions for refrigerant properties" + extends Modelica.Icons.Package; + + + +annotation (preferredView="info",Documentation(info=" ++This library contains function definitions for refrigerant properties used in +compressor models contained in package + +AixLib.Fluid.HeatPumps.Compressors. +
+", revisions=" +This package contains a thermally perfect model of moist air. @@ -660,7 +653,7 @@ when models are checked in Dymola 2014 in the pedenatic mode.
each
to Xi(stateSelect=...
.
+Added keyword each
to Xi(stateSelect=...)
.
+Generated by Mr Modeler on 2017-01-26. +
+")); diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/__init__.py b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/__init__.py new file mode 100644 index 0000000000..d940a65edd --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/__init__.py @@ -0,0 +1,4 @@ +from __future__ import division, print_function, absolute_import + +from . import dummy_performance_data +from . import example_calibration diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/dummy_performance_data.py b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/dummy_performance_data.py new file mode 100644 index 0000000000..2c447f7956 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/dummy_performance_data.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +""" Example use of the heat pump model to generate performance data. + +This script demonstrates the use of the heat pump model to generate performance +data. Data is generated for a heat pump with a scroll compressor and some +combinations of inlet water temperatures and mass flow rates on the source +and load sides. The resulting performance data is written to a text file. + +""" +from __future__ import division, print_function, absolute_import + +import os +import sys + + +def main(): + # Add parent directory to system path + parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + sys.path.insert(1, parent_dir) + # Import Heat pump and calibration module + import PythonModel as hp + # Change working directory to current directory + os.chdir(os.path.dirname(__file__)) + # Set to True if calibrating for cooling mode + CoolingMode = False + # File name for performance data + tableFileName = 'somePerformanceData.txt' + + # Initialize the heat pump model + P_nominal = 17.5e3 # Nominal heat pump power input (W). + COP_nominal = 4.0 # Nominal COP of the heat pump (-) + Q_nominal = P_nominal*COP_nominal # Nominal heat pump capacity (W). + + # Model parameters + volRat = 2.365 # Volume ratio (-). + V_flow_nominal = 0.00288 # Nominal refrigerant volume flow rate (kg/s). + leaCoe = 0.0041 # Leakage coefficient (kg/s) + etaEle = 0.924 # Elctro-mechanical efficiency (-). + PLos = 396.1 # Constant part of the power losses (W). + dTSup = 6.84 # Degree of superheating (K). + UACon = 7007.7 # Condenser heat transfer coefficient (W/K). + UAEva = 29990.9 # Evaporator heat transfer coefficient (W/K). + + # Boundary conditions + # Source-side water mass flow rates (L/s) + mSou_flow = [0.6, 0.9, 1.2] + # Load-side water mass flow rates (L/s) + mLoa_flow = [0.6, 0.9, 1.2] + # Source-side entering water temperatures (K) + TSou = [273.15, 278.15, 283.15, 288.15, 293.15, 298.15] + # Load-side entering water temperatures (K) + TLoa = [288.15, 298.15, 308.15, 318.15] + + # ------------------------------------------------------------------------- + # Initialize all models using given parameters values. + # ------------------------------------------------------------------------- + # Compressor model (Scroll) + com = hp.compressors.ScrollCompressor([volRat, + V_flow_nominal, + leaCoe, + etaEle, + PLos, + dTSup]) + # Condenser model + con = hp.heatexchangers.EvaporatorCondenser([UACon]) + # Evaporator model + eva = hp.heatexchangers.EvaporatorCondenser([UAEva]) + # Refrigerant model + ref = hp.refrigerants.R410A() + # Fluid model on condenser side + fluCon = hp.fluids.ConstantPropertyWater() + # Fluid model on evaporator side + fluEva = hp.fluids.ConstantPropertyWater() + # Heat pump model + heaPum = hp.heatpumps.SingleStageHeatPump( + com, con, eva, ref, fluCon, fluEva, Q_nominal, P_nominal, CoolingMode) + + # ------------------------------------------------------------------------- + # Evaluate heat pump peformance at all combinations of boundary conditions. + # ------------------------------------------------------------------------- + with open(tableFileName, 'w') as f: + for TS in TSou: + for mS in mSou_flow: + for TL in TLoa: + for mL in mLoa_flow: + # Evaluate capacity, source-side heat transfer rate and + # power input. + Cap = heaPum.get_Capacity(TS, TL, mS, mL)/1e3 + HR = heaPum.get_SourceSideTransferRate(TS, TL, mS, mL)/1e3 + Power = heaPum.get_Power(TS, TL, mS, mL)/1e3 + # Write to text file. + f.write('{}\t{}\t{}\t{}\t{}\t{}\t{}\n'.format( + TS, TL, mS, mL, Cap, HR, Power)) + return + +# Main function +if __name__ == '__main__': + main() diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/example_calibration.py b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/example_calibration.py new file mode 100644 index 0000000000..3fe48e67d1 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/example_calibration.py @@ -0,0 +1,184 @@ +# -*- coding: utf-8 -*- +""" Example calibration of the heat pump model. + +This script demonstrates the use of the calibration module to obtain parameters +of the heat pump model. Data is loaded from a performance file generated in +dummy_performance_data.py. Once heat pump parameters are identified, the +results are verified by running the model in Dymola. A modelica record of the +heat pump parameters is generated. + +""" +from __future__ import division, print_function, absolute_import + +import numpy as np +import os +import sys +import datetime + + +def main(): + # Add parent directory to system path + parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + sys.path.insert(1, parent_dir) + # Import Heat pump and calibration module + import PythonModel as hp + # Change working directory to current directory + os.chdir(os.path.dirname(__file__)) + # Author info for record generation + author = 'Mr Modeler' + # Make and model of the heat pump + manufacturer = 'SomeManufacturer' + model = 'ABC060' + # Set to True if calibrating for cooling mode + CoolingMode = False + # File name and table name for manufacturer data in modelica + tableFileName = 'manufacturerData.txt' + tableName = 'ManufacturerData' + # File name for performance data + performanceData = 'somePerformanceData.txt' + + # Load manufacturer data + data = hp.calibrate.ManufacturerData(manufacturer, model, CoolingMode) + with open(performanceData, 'r') as f: + for line in f: + dataPoint = line[0:-2].split('\t') + EWT_Source = float(dataPoint[0]) # Entering water temperature evaporator (K) + EWT_Load = float(dataPoint[1]) # Entering water temperature condenser (K) + flowSource = float(dataPoint[2]) # Entering water flow rate evaporator (kg/s) + flowLoad = float(dataPoint[3]) # Entering water flow rate condenser (kg/s) + Capacity = float(dataPoint[4]) # Heat transfer rate on the load side (kW). + HR = float(dataPoint[5]) # Heat transfer rate on the source side (kW). + Power = float(dataPoint[6]) # Electrical power input to heat pump (kW) + # Add data point to Data object + data.add_data_point(EWT_Source, EWT_Load, flowSource, + flowLoad, Capacity, HR, Power) + + # Data points used in calibration + calData = data.calibration_data_16_points() + + # Initialize the heat pump model + P_nominal = 17.5e3 + COP_nominal = 4.0 + Q_nominal = P_nominal*COP_nominal + + # ------------------------------------------------------------------------- + # Initialize all models using a value of 0. for all parameters. Parameters + # will be replaced by guess values at the start of the calibration process. + # ------------------------------------------------------------------------- + # Compressor model (Scroll) + com = hp.compressors.ScrollCompressor([0., 0., 0., 0., 0., 0.]) + # Condenser model + con = hp.heatexchangers.EvaporatorCondenser([0.]) + # Evaporator model + eva = hp.heatexchangers.EvaporatorCondenser([0.]) + # Refrigerant model + ref = hp.refrigerants.R410A() + # Fluid model on condenser side + fluCon = hp.fluids.ConstantPropertyWater() + # Fluid model on evaporator side + fluEva = hp.fluids.ConstantPropertyWater() + # Heat pump model + heaPum = hp.heatpumps.SingleStageHeatPump(com, con, eva, ref, fluCon, + fluEva, Q_nominal, P_nominal, + CoolingMode) + + # Lauch the calibration of the heat pump model. + optPar, optRes, gueRes = hp.calibrate.calibrate_model(heaPum, calData, + data, plot=True) + + # Write the results into a record for use in Modelica + write_record_scroll(author, manufacturer, model, CoolingMode, + 'R410A', Q_nominal, COP_nominal, + optPar) + + # ------------------------------------------------------------------------- + # Calculate heat pump performance for full dataset in Dymola using the + # calibrated parameters. + # ------------------------------------------------------------------------- + dymRes = hp.calibrate.simulate_in_dymola(heaPum, data, tableName, + tableFileName) + SSE = hp.calibrate.compare_data_sets(dymRes, data, plot=True, + fname=data.name + '_dymola') + print('----------------------------------------------------------------\n') + print('Sum of square errors (dymola) : ' + str(SSE) + ' \n') + print('----------------------------------------------------------------\n') + + # Compare the results of the Python code with the results from Dymola. + SSE = hp.calibrate.compare_data_sets(dymRes, optRes, plot=True, + fname='modelVerification') + return optRes, dymRes + + +def write_record_scroll(author, manufacturer, model, CoolingMode, + refrigerant, Q_nominal, COP_nominal, + optPar): + # Evaluate current date + date = str(datetime.date.today()) + + # Extract heat pump parameters from optimized results + volRat = optPar[0] # Built-in volume ratio (-) + v_flow = optPar[1] # Volume flow rate at suction (m3/s) + leaCoe = optPar[2] # Leakage coefficient (kg/s) + etaEle = optPar[3] # Electro-mechanical efficiency (-) + PLos = optPar[4] # Constant part of the power losses (W) + dTSup = optPar[5] # Amplitude of superheating (K) + UACon = optPar[6] # Thermal conductance of the condenser (W/K) + UAEva = optPar[7] # Thermal conductance of the evaporator (W/K) + + # Operation mode + if CoolingMode: + mode = 'Cooling' + else: + mode = 'Heating' + + # Build string for nominal capacity. If less than 10kW, the nominal + # capacity is printed with the first decimal (ex. 9.1kW -> 9_1kW) + # otherwise the capacity is rounded (ex. 10.6kW - > 11kW). + if Q_nominal < 10.0e3: + Q_str = (str(int(Q_nominal/1.0e3)) + + '_' + + str(int(round(10.*(Q_nominal-np.floor(Q_nominal))/1.0e3)))) + else: + Q_str = str(int(Q_nominal/1.0e3)) + + # Build the full name of the record, including the manufacturer, model, + # nominal capacity, nominal COP (keeping 2 decimals) and refrigerant type. + name = '_'.join([manufacturer, + model, + Q_str + 'kW', + str(int(COP_nominal)), + str(int(round(100.*(COP_nominal + -np.floor(COP_nominal))))) + 'COP', + refrigerant]) + path = name + '.mo' + + # Print the record in Modelica format. + with open(path, 'w') as f: + f.write('within IBPSA.Fluid.HeatPumps.Data.ScrollWaterToWater.' + + mode + ';\n') + f.write('record ' + name + ' =\n') + f.write(' IBPSA.Fluid.HeatPumps.Data.ScrollWaterToWater.Generic (' + + '\n') + f.write(' volRat = ' + str(volRat) + ',\n') + f.write(' V_flow_nominal = ' + str(v_flow) + ',\n') + f.write(' leaCoe = ' + str(leaCoe) + ',\n') + f.write(' etaEle = ' + str(etaEle) + ',\n') + f.write(' PLos = ' + str(PLos) + ',\n') + f.write(' dTSup = ' + str(dTSup) + ',\n') + f.write(' UACon = ' + str(UACon) + ',\n') + f.write(' UAEva = ' + str(UAEva) + ')\n\n') + + f.write(' annotation (\n') + f.write(' defaultComponentPrefixes = "parameter",\n') + f.write(' defaultComponentName="datHeaPum",\n') + f.write(' preferredView="info",\n') + f.write(' Documentation(info="\n') + f.write('\n') + f.write('Generated by ' + author + ' on ' + date + '.\n') + f.write('
\n') + f.write('"));') + return + +# Main function +if __name__ == "__main__": + main() diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/package.order b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/package.order new file mode 100644 index 0000000000..85aee5a461 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/package.order @@ -0,0 +1 @@ +SomeManufacturer_ABC060_70kW_4_0COP_R410A diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/somePerformanceData.txt b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/somePerformanceData.txt new file mode 100644 index 0000000000..334e0c286c --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Examples/somePerformanceData.txt @@ -0,0 +1,216 @@ +273.15 288.15 0.6 0.6 14.2221387746 11.8888808759 2.33325735522 +273.15 288.15 0.6 0.9 14.3327110564 12.0799230292 2.2527875208 +273.15 288.15 0.6 1.2 14.3835995743 12.16679249 2.21680560489 +273.15 298.15 0.6 0.6 13.5422443291 10.635264509 2.90697917668 +273.15 298.15 0.6 0.9 13.6415279898 10.8278064726 2.81372093854 +273.15 298.15 0.6 1.2 13.6872703886 10.9153243121 2.77194552585 +273.15 308.15 0.6 0.6 12.9063753212 9.30585054758 3.60052400835 +273.15 308.15 0.6 0.9 12.9943460183 9.50081761421 3.49352773857 +273.15 308.15 0.6 1.2 13.034865151 9.58932909924 3.44553543015 +273.15 318.15 0.6 0.6 12.3124362942 7.88190865872 4.43052674338 +273.15 318.15 0.6 0.9 12.3916551907 8.08281647538 4.30883795767 +273.15 318.15 0.6 1.2 12.4279411307 8.17375328617 4.25418714726 +273.15 288.15 0.9 0.6 14.9278267217 12.5746182387 2.35320809128 +273.15 288.15 0.9 0.9 15.0607360868 12.7921378429 2.26859705448 +273.15 288.15 0.9 1.2 15.1219644777 12.8912227088 2.23074056386 +273.15 298.15 0.9 0.6 14.1462524866 11.2189384561 2.92731356616 +273.15 298.15 0.9 0.9 14.2661532895 11.4363182284 2.82983371542 +273.15 298.15 0.9 1.2 14.32143337 11.5353008841 2.78613114621 +273.15 308.15 0.9 0.6 13.4067769891 9.786298762 3.62047767517 +273.15 308.15 0.9 0.9 13.5138362505 10.004460081 3.50937565371 +273.15 308.15 0.9 1.2 13.5631682623 10.1036767424 3.45949002043 +273.15 318.15 0.9 0.6 12.7058009524 8.2567493825 4.44905093403 +273.15 318.15 0.9 0.9 12.8030268505 8.47937619112 4.32365007519 +273.15 318.15 0.9 1.2 12.847583154 8.58032387867 4.26725871531 +273.15 288.15 1.2 0.6 15.3171247479 12.9526628486 2.36446100621 +273.15 288.15 1.2 0.9 15.4635251832 13.1859488951 2.27757532692 +273.15 288.15 1.2 1.2 15.5310183609 13.2923305066 2.23868684626 +273.15 298.15 1.2 0.6 14.4770678666 11.5384105845 2.93865693174 +273.15 298.15 1.2 0.9 14.6092707491 11.7703905488 2.83887910756 +273.15 298.15 1.2 1.2 14.6702592052 11.8761337645 2.7941243152 +273.15 308.15 1.2 0.6 13.6786922042 10.0472063549 3.63148543134 +273.15 308.15 1.2 0.9 13.7969862179 10.2788139141 3.51817105399 +273.15 308.15 1.2 1.2 13.8515186615 10.3842570678 3.46726032799 +273.15 318.15 1.2 0.6 12.9176138354 8.45846394705 4.45914940967 +273.15 318.15 1.2 0.9 13.0252630599 8.6934897249 4.3317719362 +273.15 318.15 1.2 1.2 13.0746217314 8.80017130401 4.27444902508 +278.15 288.15 0.6 0.6 16.3850480015 13.9887962698 2.39625123317 +278.15 288.15 0.6 0.9 16.5274415848 14.225337693 2.30210249655 +278.15 288.15 0.6 1.2 16.5929703098 14.3328825039 2.26008643998 +278.15 298.15 0.6 0.6 15.6169301528 12.6380377909 2.97889178366 +278.15 298.15 0.6 0.9 15.7478654714 12.8779532584 2.86991066359 +278.15 298.15 0.6 1.2 15.8081307817 12.9869671312 2.82116215766 +278.15 308.15 0.6 0.6 14.8757832377 11.1944077006 3.68137486963 +278.15 308.15 0.6 0.9 14.9963748792 11.4396831457 3.55669114373 +278.15 308.15 0.6 1.2 15.0517625038 11.5509527123 3.50080815863 +278.15 318.15 0.6 0.6 14.145303591 9.62584576558 4.51945708597 +278.15 318.15 0.6 0.9 14.2609574014 9.88244671413 4.37851004059 +278.15 318.15 0.6 1.2 14.3136018618 9.99840811355 4.3151919922 +278.15 288.15 0.9 0.6 17.2783247155 14.854414731 2.42390893701 +278.15 288.15 0.9 0.9 17.4523194388 15.1279137526 2.32440461959 +278.15 288.15 0.9 1.2 17.532501096 15.2525326111 2.27996740115 +278.15 298.15 0.9 0.6 16.3858935874 13.3788207441 3.00707164893 +278.15 298.15 0.9 0.9 16.5462720848 13.6536439984 2.89262690432 +278.15 298.15 0.9 1.2 16.620175664 13.7787906445 2.84138383641 +278.15 308.15 0.9 0.6 15.517431497 11.8083243357 3.70910670011 +278.15 308.15 0.9 0.9 15.6656327172 12.0865265836 3.57910482687 +278.15 308.15 0.9 1.2 15.7337717726 12.2130081625 3.52076231942 +278.15 318.15 0.9 0.6 14.654064573 10.1086917239 4.54537235118 +278.15 318.15 0.9 0.9 14.796226034 10.3966047632 4.39961987398 +278.15 318.15 0.9 1.2 14.8610374935 10.5270018586 4.33403426231 +278.15 288.15 1.2 0.6 17.7758212454 15.3360761365 2.43974432872 +278.15 288.15 1.2 0.9 17.9692816749 15.6320034157 2.33727741684 +278.15 288.15 1.2 1.2 18.0585215513 15.7670245783 2.29149608775 +278.15 298.15 1.2 0.6 16.810779443 13.7877676364 3.02301091787 +278.15 298.15 1.2 0.9 16.9890547055 14.0834796174 2.90557415473 +278.15 298.15 1.2 1.2 17.0712803872 14.2183200657 2.85295935512 +278.15 308.15 1.2 0.6 15.8688613775 12.144261286 3.72459909131 +278.15 308.15 1.2 0.9 16.0335958079 12.4418777373 3.59171704106 +278.15 308.15 1.2 1.2 16.1094013392 12.5773636038 3.53203668233 +278.15 318.15 1.2 0.6 14.9298408442 10.3701840372 4.55965575743 +278.15 318.15 1.2 0.9 15.0875873058 10.6762486436 4.41133757565 +278.15 318.15 1.2 1.2 15.159583284 10.8150476855 4.34453448899 +283.15 288.15 0.6 0.6 18.6975313104 16.2276114719 2.46991938465 +283.15 288.15 0.6 0.9 18.8796649348 16.5189914353 2.36067222162 +283.15 288.15 0.6 1.2 18.9634640412 16.6514507839 2.31201200201 +283.15 298.15 0.6 0.6 17.8280997306 14.7658279914 3.06227122395 +283.15 298.15 0.6 0.9 17.9990680382 15.0630029603 2.9360636823 +283.15 298.15 0.6 1.2 18.0776713405 15.1979846059 2.87968538313 +283.15 308.15 0.6 0.6 16.9665132778 13.1921015628 3.77441113828 +283.15 308.15 0.6 0.9 17.1289726652 13.4984594156 3.63051173562 +283.15 308.15 0.6 1.2 17.2033835518 13.6373285501 3.56605355344 +283.15 318.15 0.6 0.6 16.0809054561 11.4597801808 4.62112466841 +283.15 318.15 0.6 0.9 16.2440110177 11.7845291357 4.45948029692 +283.15 318.15 0.6 1.2 16.3178573237 11.9310349983 4.38682081537 +283.15 288.15 0.9 0.6 19.8116518302 17.3037668672 2.50788403782 +283.15 288.15 0.9 0.9 20.0378440908 17.6460391154 2.39180402488 +283.15 288.15 0.9 1.2 20.1421020697 17.8020450087 2.34005609141 +283.15 298.15 0.9 0.6 18.7910842958 15.6901805317 3.10090273705 +283.15 298.15 0.9 0.9 19.003468329 16.0357304186 2.96773687968 +283.15 298.15 0.9 1.2 19.101277477 16.1930985588 2.90817788008 +283.15 308.15 0.9 0.6 17.7737900692 13.9613179006 3.81247105032 +283.15 308.15 0.9 0.9 17.9755266472 14.3137111316 3.6618144093 +283.15 308.15 0.9 1.2 18.0680915602 14.4738689681 3.59422148877 +283.15 318.15 0.9 0.6 16.7239608929 12.0671395034 4.65682026509 +283.15 318.15 0.9 0.9 16.9253526822 12.4362411872 4.48911036638 +283.15 318.15 0.9 1.2 17.0167674545 12.6031993495 4.41356697806 +283.15 288.15 1.2 0.6 20.4381767299 17.9082067645 2.52996928913 +283.15 288.15 1.2 0.9 20.6920428123 18.2819586547 2.41008342269 +283.15 288.15 1.2 1.2 20.8092073882 18.4525985612 2.35660805229 +283.15 298.15 1.2 0.6 19.3279679201 16.2048883556 3.12307881872 +283.15 298.15 1.2 0.9 19.5660055341 16.579922781 2.98608196043 +283.15 298.15 1.2 1.2 19.6757641885 16.7510008454 2.92476251751 +283.15 308.15 1.2 0.6 18.2195116507 14.3854909773 3.83401987107 +283.15 308.15 1.2 0.9 18.445185123 14.7654915709 3.67969270904 +283.15 308.15 1.2 1.2 18.5488652192 14.9384783817 3.61038596652 +283.15 318.15 1.2 0.6 17.0749228483 12.3981942246 4.67672784039 +283.15 318.15 1.2 0.9 17.2991865986 12.7934051778 4.5057805805 +283.15 318.15 1.2 1.2 17.4011496751 12.9724641532 4.42868464918 +288.15 288.15 0.6 0.6 21.1669811663 18.6106360674 2.55634389089 +288.15 288.15 0.6 0.9 21.3980240582 18.9676376707 2.43038522165 +288.15 288.15 0.6 1.2 21.504287471 19.1298987002 2.3743876207 +288.15 298.15 0.6 0.6 20.1840354045 17.0246225423 3.15941153737 +288.15 298.15 0.6 0.9 20.4048324261 17.390565419 3.01426575653 +288.15 298.15 0.6 1.2 20.5062200112 17.5567097163 2.94950907655 +288.15 308.15 0.6 0.6 19.187412059 15.305242719 3.88216791852 +288.15 308.15 0.6 0.9 19.4026498338 15.6853440347 3.71730447465 +288.15 308.15 0.6 1.2 19.5009721744 15.8574833033 3.64348759315 +288.15 318.15 0.6 0.6 18.1278699414 13.389537992 4.73833053814 +288.15 318.15 0.6 0.9 18.3515912348 13.7972557947 4.55433410313 +288.15 318.15 0.6 1.2 18.4523941928 13.9808384442 4.47155445756 +288.15 288.15 0.9 0.6 22.5385171669 19.9304884929 2.60802786345 +288.15 288.15 0.9 0.9 22.8300858046 20.3566377225 2.47344723963 +288.15 288.15 0.9 1.2 22.9644930612 20.5509391284 2.41355306873 +288.15 298.15 0.9 0.6 21.3731012297 18.1611792304 3.21192112394 +288.15 298.15 0.9 0.9 21.6512775689 18.5932495878 3.05802708794 +288.15 298.15 0.9 1.2 21.7793016855 18.7900370068 2.9892637724 +288.15 308.15 0.9 0.6 20.1872336357 16.2533148704 3.93391784777 +288.15 308.15 0.9 0.9 20.4574670695 16.6968616273 3.76060451209 +288.15 308.15 0.9 1.2 20.5812204154 16.8983706623 3.68284881561 +288.15 318.15 0.9 0.6 18.9259474527 14.1389720429 4.78697454145 +288.15 318.15 0.9 0.9 19.2040228355 14.6085405567 4.5954813721 +288.15 318.15 0.9 1.2 19.3297516877 14.8206515374 4.5090992299 +288.15 288.15 1.2 0.6 23.3173243869 20.6787206096 2.63860319578 +288.15 288.15 1.2 0.9 23.647658743 21.1484666934 2.49919141103 +288.15 288.15 1.2 1.2 23.8001867109 21.3630840627 2.43710197219 +288.15 298.15 1.2 0.6 22.0420306841 18.7994898883 3.24254017476 +288.15 298.15 1.2 0.9 22.3564161724 19.2726063472 3.08380915496 +288.15 298.15 1.2 1.2 22.5013404812 19.4885239147 3.01281586353 +288.15 308.15 1.2 0.6 20.7437538449 16.7801109803 3.96364222453 +288.15 308.15 1.2 0.9 21.0480863043 17.2623552599 3.78573035664 +288.15 308.15 1.2 1.2 21.1877005346 17.481886337 3.70581347972 +288.15 318.15 1.2 0.6 19.3644640402 14.5500127743 4.81445067965 +288.15 318.15 1.2 0.9 19.6755268595 15.0565594503 4.61896675903 +288.15 318.15 1.2 1.2 19.8164775092 15.2858322353 4.53064458811 +293.15 288.15 0.6 0.6 23.7989070219 21.1409390775 2.65796685693 +293.15 288.15 0.6 0.9 24.0893462359 21.5758863807 2.51345879475 +293.15 288.15 0.6 1.2 24.2228572598 21.7735223261 2.44933388231 +293.15 298.15 0.6 0.6 22.6909377398 19.4179288334 3.27300774163 +293.15 298.15 0.6 0.9 22.9728823086 19.8659086787 3.1069725141 +293.15 298.15 0.6 1.2 23.1021719182 20.0691881336 3.03298268999 +293.15 308.15 0.6 0.6 21.5449927641 17.5373598008 4.00763175321 +293.15 308.15 0.6 0.9 21.8257724625 18.0059631805 3.81980812979 +293.15 308.15 0.6 1.2 21.9536901309 18.2179557808 3.73573322767 +293.15 318.15 0.6 0.6 20.2921071782 15.4177119732 4.87439406379 +293.15 318.15 0.6 0.9 20.5921045698 15.925951811 4.66615163833 +293.15 318.15 0.6 1.2 20.7266478457 16.1542958482 4.57235089972 +293.15 288.15 0.9 0.6 25.4675039462 22.7396613134 2.72784192788 +293.15 288.15 0.9 0.9 25.8399008563 23.2673492113 2.57255090168 +293.15 288.15 0.9 1.2 26.011569889 23.508019036 2.50355008567 +293.15 298.15 0.9 0.6 24.1408381134 20.7969418667 3.34389550738 +293.15 298.15 0.9 0.9 24.5011213305 21.3341442516 3.16697630966 +293.15 298.15 0.9 1.2 24.6668113664 21.5788220493 3.08798852975 +293.15 308.15 0.9 0.6 22.7664226895 18.6889171728 4.07750477159 +293.15 308.15 0.9 0.9 23.1230530802 19.2438022795 3.87925002426 +293.15 308.15 0.9 1.2 23.2860570206 19.4957728835 3.79028334505 +293.15 318.15 0.9 0.6 21.2671994033 16.3270111757 4.94018756345 +293.15 318.15 0.9 0.9 21.6431584674 16.9203158951 4.72284184835 +293.15 318.15 0.9 1.2 21.8125007225 17.1878927972 4.6246071777 +293.15 288.15 1.2 0.6 26.4241603774 23.654243823 2.76991605921 +293.15 288.15 1.2 0.9 26.8500860257 24.2415305334 2.60855494018 +293.15 288.15 1.2 1.2 27.0468332405 24.5100420806 2.53679057167 +293.15 298.15 1.2 0.6 24.9638126789 21.5778895869 3.38592258016 +293.15 298.15 1.2 0.9 25.374462666 22.1714913858 3.20297071661 +293.15 298.15 1.2 1.2 25.5637076703 22.4425177633 3.12118931085 +293.15 308.15 1.2 0.6 23.4517041159 19.3334483713 4.11825523861 +293.15 308.15 1.2 0.9 23.8562032852 19.9418737017 3.91432902508 +293.15 308.15 1.2 1.2 24.0415016687 20.2188274832 3.82267359598 +293.15 318.15 1.2 0.6 21.8064242622 16.8285689711 4.97785485363 +293.15 318.15 1.2 0.9 22.22922045 17.4735218383 4.75569810835 +293.15 318.15 1.2 1.2 22.420193565 17.7651082509 4.65508369301 +298.15 288.15 0.6 0.6 26.5972576135 23.8195660937 2.77769054511 +298.15 288.15 0.6 0.9 26.9589562081 24.3464346316 2.61252061395 +298.15 288.15 0.6 1.2 27.125111079 24.5857492751 2.53936084416 +298.15 298.15 0.6 0.6 25.3532223083 21.946945782 3.40627550841 +298.15 298.15 0.6 0.9 25.7092720759 22.4921632448 3.2171078392 +298.15 298.15 0.6 1.2 25.8722949369 22.739392669 3.13290128742 +298.15 308.15 0.6 0.6 24.0437199537 19.8893298227 4.15438910897 +298.15 308.15 0.6 0.9 24.4048635601 20.4635573962 3.94130516702 +298.15 308.15 0.6 1.2 24.5689320013 20.7229983059 3.84593271413 +298.15 318.15 0.6 0.6 22.5770262201 17.5436819262 5.03334337994 +298.15 318.15 0.6 0.9 22.9718641825 18.1732006529 4.79866259706 +298.15 318.15 0.6 1.2 23.1481040685 18.4553131591 4.6927899813 +298.15 288.15 0.9 0.6 28.6052970501 25.7336834513 2.87161299014 +298.15 288.15 0.9 0.9 29.0764715022 26.3834184939 2.69305235538 +298.15 288.15 0.9 1.2 29.2936489202 26.6798179391 2.61383030184 +298.15 298.15 0.9 0.6 27.1010309569 23.5995756696 3.50145466909 +298.15 298.15 0.9 0.9 27.5625667425 24.2637063669 3.29885971747 +298.15 298.15 0.9 1.2 27.7746402458 24.5661740443 3.20846552103 +298.15 308.15 0.9 0.6 25.5174924797 21.2692536898 4.248238192 +298.15 308.15 0.9 0.9 25.9817998753 21.9593844033 4.0224148293 +298.15 308.15 0.9 1.2 26.1935916589 22.2725683673 3.92102262715 +298.15 318.15 0.9 0.6 23.7516755196 18.6298075447 5.12186747353 +298.15 318.15 0.9 0.9 24.2511934316 19.374884248 4.87630748471 +298.15 318.15 0.9 1.2 24.475338596 19.7102916071 4.7650451917 +298.15 288.15 1.2 0.6 29.7675207765 26.8382885962 2.92923176371 +298.15 288.15 1.2 0.9 30.3116042521 27.5684939973 2.74310978079 +298.15 288.15 1.2 1.2 30.5630147617 27.9025790314 2.66043522096 +298.15 298.15 1.2 0.6 28.1017528316 24.5428709227 3.55888149312 +298.15 298.15 1.2 0.9 28.6323898405 25.2835449667 3.34884344531 +298.15 298.15 1.2 1.2 28.8768412466 25.6218579844 3.25498172557 +298.15 308.15 1.2 0.6 26.3506429298 22.0467783064 4.30386344587 +298.15 308.15 1.2 0.9 26.8812069297 22.8100619343 4.07114364155 +298.15 308.15 1.2 1.2 27.1238989012 23.1574520937 3.96644534878 +298.15 318.15 1.2 0.6 24.4050756266 19.2317947107 5.17327995271 +298.15 318.15 1.2 0.9 24.9701653162 20.048116042 4.92204811631 +298.15 318.15 1.2 1.2 25.2245916012 20.4166783963 4.80791193574 diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/Makefile b/AixLib/Resources/src/fluid/heatpumps/calibration/Makefile new file mode 100644 index 0000000000..b98b917342 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/Makefile @@ -0,0 +1,26 @@ +CALDOC=doc +CALCOD=PythonModel + +.PHONY: doc clean + +doc: + (cd $(CALDOC); make html linkcheck) + +pep8: + pep8 Examples/*.py \ + PythonModel/*.py + +doctest: + (cd $(CALCOD); \ + python -m doctest \ + calibrate.py \ + compressors.py \ + fluids.py \ + heatexchangers.py \ + heatpumps.py \ + refrigerants.py) + +clean-doc: + (cd $(CALDOC); make clean) + +clean: clean-doc diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/__init__.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/__init__.py new file mode 100644 index 0000000000..5f1e57a572 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/__init__.py @@ -0,0 +1,8 @@ +from __future__ import division, print_function, absolute_import + +from . import calibrate +from . import compressors +from . import fluids +from . import heatexchangers +from . import heatpumps +from . import refrigerants diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/calibrate.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/calibrate.py new file mode 100644 index 0000000000..9f9b6b32eb --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/calibrate.py @@ -0,0 +1,557 @@ +from __future__ import division, print_function, absolute_import + +from builtins import str +import matplotlib.pyplot as plt +import numpy as np +import os +from scipy.optimize import minimize +import time as tm + + +def calibrate_model(heaPum, calData, data, plot=True): + """ Manages the calibration of heat pump models. + + :param heaPum: Heat pump model (object). + :param calData: Subsampled data used for calibration (object). + :param data: Full data used for final comparison (object). + :param plot: Boolean, set to True to draw and save results. + + :return: List of calibrated parameters, + Results from the calibrated model, + Results using the initial guess parameters. + + """ + # Select appropriate guess values for model parameters and bounds for + # calibration + params, bounds = heaPum.initialGuessParameters(data) + heaPum.reinitializeParameters(params) + + # Normalized values of the parameters + scale = params / params + # Normalized bounds for calibration + scale_bounds = [(bounds[i][0]/params[i], bounds[i][1]/params[i]) + if bounds[i][1] is not None + else (bounds[i][0]/params[i], None) + for i in range(len(bounds))] + + tic = tm.time() + # Compare and plot comparison with manufacturer data for guess parameters + gueRes = simulate(heaPum, data) + + if data.CoolingMode: + fname = data.name + '_Cooling' + else: + fname = data.name + '_Heating' + compare_data_sets(gueRes, data, plot, fname=fname + '_opt_start') + + # Calibrate the model parameters + opt = minimize(cost_function, scale, args=(params, heaPum, calData), + method='SLSQP', bounds=scale_bounds, + options={'maxiter': 2000, 'ftol': 1e-8, 'eps': 0.00001}) + + # Compare and plot comparison with manufacturer data for calibrated + # parameters + optPar = opt.x*params + heaPum.reinitializeParameters(optPar) + optRes = simulate(heaPum, data) + compare_data_sets(optRes, data, plot, fname=fname + '_opt_end') + toc = tm.time() - tic + print('Total elapsed time for calibration : %f seconds' % toc) + return optPar, optRes, gueRes + + +def compare_data_sets(data, refData, plot=False, fname='ComparedDataSets'): + """ Compare two sets of data. + + :param data: Performance data (object). + :param refData: Reference performance data (object). + :param plot: Boolean, set to True to draw and save results. + :param fname: Name of the output figure file (no extension). + + :return: Sum of normalized square errors between data sets. + + """ + fname += '.pdf' + + SSE = 0.0 + invalidPoints = 0. + totalPoints = float(len(data.EWT_Source)) + # Evaluate the power and capacity for each data point in provided + # manufacturer data set + for i in range(len(refData.EWT_Load)): + if not (data.Power[i] > 0. and data.Capacity[i] > 0.): + invalidPoints += 1. + print ('Invalid : EWT_Source =', data.EWT_Source[i], + 'EWT_Load = ', data.EWT_Load[i], + 'flowSource = ', data.flowSource[i], + 'flowLoad = ', data.flowLoad[i]) + # Calculate the sum of square errors + SE = ((refData.Power[i]-data.Power[i])/refData.Power[i])**2 \ + + ((refData.Capacity[i]-data.Capacity[i])/refData.Capacity[i])**2 + SSE += SE + print('Number of invalid points :', invalidPoints) + + # Plot the results (optional) + if plot: + fig = plt.figure() + ax = fig.add_subplot(121) + ax.plot(np.array([0, max(refData.Power)]), + np.array([0, 0.9*max(refData.Power)]), 'b--') + ax.plot(np.array([0, max(refData.Power)]), + np.array([0, 1.1*max(refData.Power)]), 'b--') + ax.plot(np.array([0, max(refData.Power)]), + np.array([0, 1*max(refData.Power)]), 'k-') + ax.text(0.75*max(refData.Power), + 0.9*0.75*max(refData.Power), + '-10%', + verticalalignment='top', + horizontalalignment='left', + weight='bold') + ax.text(0.75*max(refData.Power), + 1.1*0.75*max(refData.Power), + '+10%', + verticalalignment='bottom', + horizontalalignment='right', + weight='bold') + ax.plot(refData.Power, data.Power, 'k.') + ax.set_xlabel('Power (' + refData.name + ') [kW]') + ax.set_ylabel('Power (' + data.name + ') [kW]') + ax.grid(True) + ax = fig.add_subplot(122) + ax.plot(np.array([0, max(refData.Capacity)]), + np.array([0, 0.9*max(refData.Capacity)]), 'b--') + ax.plot(np.array([0, max(refData.Capacity)]), + np.array([0, 1.1*max(refData.Capacity)]), 'b--') + ax.plot(np.array([0, max(refData.Capacity)]), + np.array([0, 1*max(refData.Capacity)]), 'k-') + ax.text(0.75*max(refData.Capacity), + 0.9*0.75*max(refData.Capacity), + '-10%', + verticalalignment='top', + horizontalalignment='left', + weight='bold') + ax.text(0.75*max(refData.Capacity), + 1.1*0.75*max(refData.Capacity), + '+10%', + verticalalignment='bottom', + horizontalalignment='right', + weight='bold') + ax.plot(refData.Capacity, data.Capacity, 'k.') + ax.set_xlabel('Capacity (' + refData.name + ') [kW]') + ax.set_ylabel('Capacity (' + data.name + ') [kW]') + ax.grid(True) + plt.savefig(fname) + + return SSE + + +def cost_function(scale, guess, heaPum, data): + """ Evaluate the cost function for optimization. + + :param scale: Array of normalized parameters. + :param guess: Array of guess parameters. + :param heaPum: Heat pump model (object). + :param data: Reference performance data (object). + + :return: Sum of normalized square errors between model and reference data. + + .. note:: Parameters are evaluated by multiplying the corresponding + normalized parameter with its guess value. + + """ + # Scale the normalized parameters back to dimensional values + params = guess*scale + + print('----------------------------------------------------------------\n') + heaPum.reinitializeParameters(params) + heaPum.printParameters() + print('----------------------------------------------------------------\n') + + res = simulate(heaPum, data) + SSE = compare_data_sets(res, data) + + print('Sum of square errors : ' + str(SSE) + ' \n') + print('----------------------------------------------------------------\n') + return SSE + + +def simulate(heaPum, data): + """ Evaluate the heat pump performance from the model. + + :param heaPum: Heat pump model (object). + :param data: Reference performance data (object). + + :return: Performance data of the modeled heat pump (object). + + .. note:: Performance data from the model is evaluated at the same + operating conditions (inlet water temperatures and mass flow + rates at the source and load sides) as in the reference data. + + """ + Capacity = np.zeros(len(data.EWT_Load)) + HR = np.zeros(len(data.EWT_Load)) + P = np.zeros(len(data.EWT_Load)) + # Evaluate the power and capacity for each data point in provided + # manufacturer data set + for i in range(len(data.EWT_Load)): + Capacity[i] = heaPum.get_Capacity(data.EWT_Source[i], + data.EWT_Load[i], + data.flowSource[i], + data.flowLoad[i]) + HR[i] = heaPum.get_SourceSideTransferRate(data.EWT_Source[i], + data.EWT_Load[i], + data.flowSource[i], + data.flowLoad[i]) + P[i] = heaPum.get_Power(data.EWT_Source[i], data.EWT_Load[i], + data.flowSource[i], data.flowLoad[i]) + + res = SimulationResults(data.EWT_Source, data.EWT_Load, data.flowSource, + data.flowLoad, Capacity, HR, P, 'Python model') + return res + + +def simulate_in_dymola(heaPum, data, tableName, tableFileName): + """ Evaluate the heat pump performance from the model in Dymola. + + :param heaPum: Heat pump model (object). + :param data: Reference performance data (object). + :param tableName: Name of the combiTimeTable. + :param tableFileName: Name of the text file containing the combiTimeTable. + + :return: Performance data of the modeled heat pump (object). + + .. note:: Performance data from the model is evaluated at the same + operating conditions (inlet water temperatures and mass flow + rates at the source and load sides) as in the reference data. + + """ + import buildingspy.simulate.Simulator as si + from buildingspy.io.outputfile import Reader + from scipy.interpolate import interp1d + from builtins import str + import getpass + import os + import tempfile + + # Find absolute path to buildings library + packagePath = os.path.normpath( + os.path.join(os.path.normpath(os.path.dirname(__file__)), + '..', '..', '..', '..', '..', '..')) + + # Create temporary directory for simulation files + dirPrefix = tempfile.gettempprefix() + tmpDir = tempfile.mkdtemp(prefix=dirPrefix + '-' + + 'HeatPumpCalibration' + '-' + + getpass.getuser() + '-') + + # Set parameters for simulation in Dymola + calModelPath = heaPum.modelicaCalibrationModelPath() + s = si.Simulator(calModelPath, + 'dymola', + outputDirectory=tmpDir, + packagePath=packagePath) + s = heaPum.set_ModelicaParameters(s) + m1_flow_nominal = min(data.flowSource) + m2_flow_nominal = min(data.flowLoad) + tableFilePath = \ + str(os.path.join(tmpDir, tableFileName).replace(os.sep, '/')) + s.addParameters({'m1_flow_nominal': m1_flow_nominal, + 'm2_flow_nominal': m2_flow_nominal, + 'calDat.fileName': tableFilePath}) + + # Write CombiTimeTable for dymola + data.write_modelica_combiTimeTable(tableName, tmpDir, + tableFileName, heaPum.CoolingMode) + + # Simulation parameters + s.setStopTime(len(data.EWT_Source)) + s.setSolver('dassl') + # Kill the process if it does not finish in 2 minutes + s.setTimeOut(120) + s.showProgressBar(False) + s.printModelAndTime() +# s.showGUI(show=True) +# s.exitSimulator(exitAfterSimulation=False) + s.simulate() + + # Read results + modelName = heaPum.modelicaModelName() + ofr = Reader(os.path.join(tmpDir, modelName), 'dymola') + (time1, QCon) = ofr.values('heaPum.QCon_flow') + (time1, QEva) = ofr.values('heaPum.QEva_flow') + (time1, P) = ofr.values('heaPum.P') + + t = [float(i) + 0.5 for i in range(len(data.EWT_Source))] + + f_P = interp1d(time1, P) + P = f_P(t) + f_QCon = interp1d(time1, QCon) + QCon = f_QCon(t) + f_QEva = interp1d(time1, QEva) + QEva = f_QEva(t) + +# # Clean up +# shutil.rmtree('calibrationModel') + if heaPum.CoolingMode: + Capacity = -QEva + HR = QCon + else: + Capacity = QCon + HR = -QEva + dymRes = SimulationResults(data.EWT_Source, + data.EWT_Load, + data.flowSource, + data.flowLoad, + Capacity, + HR, + P, + 'Modelica') + return dymRes + + +class ManufacturerData(object): + """ Heat pump performance data. + + :param manufacturer: Name of the manufacturer. + :param model: Name of the heat pump model. + :param CoolingMode: Boolean, set to True if heat pump is used in cooling + mode. + + .. note:: An empty heat pump performance object is created. + + """ + def __init__(self, manufacturer, model, CoolingMode=False): + self.EWT_Source = [] + self.EWT_Load = [] + self.flowSource = [] + self.flowLoad = [] + self.Capacity = [] + self.HR = [] + self.Power = [] + self.name = manufacturer + '_' + model + self.CoolingMode = CoolingMode + + def add_data_point(self, EWT_Source, EWT_Load, flowSource, + flowLoad, Capacity, HR, Power): + """ Add a data point to the heat pump performance data. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + :param Capacity: Heat pump capacity (kW). + :param HR: Heat transfer rate on the source side (kW). + :param Power: Power input to the heat pump (kW). + + """ + self.EWT_Source.append(EWT_Source) + self.EWT_Load.append(EWT_Load) + self.flowSource.append(flowSource) + self.flowLoad.append(flowLoad) + self.Capacity.append(Capacity) + self.HR.append(HR) + self.Power.append(Power) + return + + def calibration_data_16_points(self): + """ Find the 16 min/max data points. + + :return: Performance data for calibration (object). + + .. note:: This method returns a subsample of the performance data + corresponding to the combination of minimums and maximums of + the inlet water temperatures and mass flow rates on the + source and load sides. + + """ + # Only the 16 extreme data points for temperature and flow rates + # are used + indexes = range(len(self.EWT_Source)) + variables = [self.flowLoad, self.EWT_Source, + self.EWT_Load, self.flowSource] + li = [indexes] + # Go through the data for each variable and keep indexes corresponding + # to min/max values + for i in range(len(variables)): + jmin = len(li)-(2**(i)) + jmax = len(li) + for j in range(jmin, jmax): + minValue = min([variables[i][k] for k in li[j]]) + maxValue = max([variables[i][k] for k in li[j]]) + li.append([k for k in li[j] if variables[i][k] == minValue]) + li.append([k for k in li[j] if variables[i][k] == maxValue]) + indexes = [] + jmin = len(li)-(2**4) + jmax = len(li) + for j in range(jmin, jmax): + indexes += li[j] + + EWT_Source = np.array([self.EWT_Source[i] for i in indexes]) + EWT_Load = np.array([self.EWT_Load[i] for i in indexes]) + flowSource = np.array([self.flowSource[i] for i in indexes]) + flowLoad = np.array([self.flowLoad[i] for i in indexes]) + Capacity = np.array([self.Capacity[i] for i in indexes]) + HR = np.array([self.HR[i] for i in indexes]) + Power = np.array([self.Power[i] for i in indexes]) + calData = SimulationResults(EWT_Source, EWT_Load, flowSource, + flowLoad, Capacity*1e3, HR*1e3, + Power*1e3, self.name) + return calData + + def calibration_data_min_max_temp(self): + """ Find the data points that correspond to the minimum and maximum + inlet water temperature on the source and load sides. + + :return: Performance data for calibration (object). + + .. note:: This method returns a subsample of the performance data + corresponding to the combination of minimums and maximums of + the inlet water temperatures on the source and load sides. + + """ + # All the data corresponding to min/max source and load temperatures + # are used + indexes = range(len(self.EWT_Source)) + variables = [self.EWT_Source, self.EWT_Load] + li = [indexes] + # Go through the data and keep indexes corresponding + # to min/max values of source and load temperatures + for i in range(len(variables)): + jmin = len(li)-(2**(i)) + jmax = len(li) + for j in range(jmin, jmax): + minValue = min([variables[i][k] for k in li[j]]) + maxValue = max([variables[i][k] for k in li[j]]) + li.append([k for k in li[j] if variables[i][k] == minValue]) + li.append([k for k in li[j] if variables[i][k] == maxValue]) + indexes = [] + jmin = len(li)-(2**2) + jmax = len(li) + for j in range(jmin, jmax): + indexes += li[j] + + EWT_Source = np.array([self.EWT_Source[i] for i in indexes]) + EWT_Load = np.array([self.EWT_Load[i] for i in indexes]) + flowSource = np.array([self.flowSource[i] for i in indexes]) + flowLoad = np.array([self.flowLoad[i] for i in indexes]) + Capacity = np.array([self.Capacity[i] for i in indexes]) + HR = np.array([self.HR[i] for i in indexes]) + Power = np.array([self.Power[i] for i in indexes]) + calData = SimulationResults(EWT_Source, EWT_Load, flowSource, + flowLoad, Capacity*1e3, HR*1e3, + Power*1e3, self.name) + return calData + + def write_modelica_combiTimeTable(self, tableName, tableTempDir, + tableFileName, CoolingMode): + """ Write the combiTimeTable for use by the calibration model in + Modelica. + + :param tableName: Name of the combiTimeTable. + :param tableTempDir: Temporary directory to write the table file. + :param tableFileName: Name of the text file containing the + combiTimeTable. + :param CoolingMode: Boolean, set to True if heat pump is used in + cooling mode. + + """ + if not os.path.exists(tableTempDir): + os.makedirs(tableTempDir) + f = open(os.path.join(tableTempDir, tableFileName), 'w') + f.write('#1\n') + f.write('double ' + + tableName + + '(' + str(2*len(self.EWT_Source)) + ',5)\n') + if CoolingMode: + for i in range(len(self.EWT_Source)): + for j in [i, i + 1]: + f.write('\t' + + str(j) + + '\t' + str(self.EWT_Load[i]) + + '\t' + str(self.EWT_Source[i]) + + '\t' + str(self.flowLoad[i]) + + '\t' + str(self.flowSource[i]) + '\n') + else: + for i in range(len(self.EWT_Source)): + for j in [i, i + 1]: + f.write('\t' + + str(j) + + '\t' + str(self.EWT_Source[i]) + + '\t' + str(self.EWT_Load[i]) + + '\t' + str(self.flowSource[i]) + + '\t' + str(self.flowLoad[i]) + '\n') + f.close() + return + + +class SimulationResults(object): + """ Results from the simulation model. + + :param EWT_Source: Array of entering water temperature on the source + side (K). + :param EWT_Load: Array of entering water temperature on the load + side (K). + :param flowSource: Array of fluid mass flow rate on the source + side (kg/s). + :param flowLoad: Array of fluid mass flow rate on the load + side (kg/s). + :param Capacity: Array of heat pump capacity (W). + :param HR: Array of heat transfer rate on the source side (W). + :param Power: Array of power input to the heat pump (W). + :param name: Name of the heat pump. + + """ + def __init__(self, EWT_Source, EWT_Load, flowSource, flowLoad, + Capacity, HR, Power, name): + self.EWT_Source = EWT_Source + self.EWT_Load = EWT_Load + self.flowSource = flowSource + self.flowLoad = flowLoad + self.Capacity = Capacity*1e-3 + self.HR = HR*1e-3 + self.Power = Power*1e-3 + self.name = name + + +def _convert_FtoK(T): + """ convert Fahrenheit to Kelvin. + + :param T: Temperature (F). + + :return: Temperature (K). + + """ + return (T - 32.0)*5.0/9.0 + 273.15 + + +def _convert_GPMtoLPS(V): + """ convert gal/min to L/s. + + :param V: Volume flow rate (gal/min). + + :return: Volume flow rate (L/s). + + """ + return V / 15.850372483753 + + +def _convert_MBTUHtoKW(Q): + """ convert MBtu/h to kW. + + :param Q: Power (MBtu/h). + + :return: Power (kW). + + """ + return Q * 0.29307107 + + +def _convert_MBTUHtoW(Q): + """ convert MBtu/h to W. + + :param Q: Power (MBtu/h). + + :return: Power (W). + + """ + return Q * 0.29307107e3 diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/compressors.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/compressors.py new file mode 100644 index 0000000000..df4fd0ef50 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/compressors.py @@ -0,0 +1,498 @@ +from __future__ import division, print_function, absolute_import + + +class ReciprocatingCompressor(object): + """ Object for reciprocating compressor model based on Jin (2002): + H. Jin. Parameter estimation based models of water source heat pumps. + PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. + + :param pisDis: Piston displacement (m3/s). + :param cleFac: Clearance factor (-). + :param etaEle: Electro-mechanical efficiency (-). + :param PLos: Constant part of the power losses (W). + :param pDro: Pressure drop at compressor suction and discharge (Pa). + :param dTSup: Degree of superheating (K). + """ + + def __init__(self, parameters): + self.pisDis = parameters[0] + self.cleFac = parameters[1] + self.etaEle = parameters[2] + self.PLos = parameters[3] + self.pDro = parameters[4] + self.dTSup = parameters[5] + self.NPar = 6 + return + + def get_SuctionTemperature(self, TEva): + """ Evaluate the suction temperature. + + :param TEva: Evaporating temperature (K). + + :return: Suction temperature (K). + + Usage: Type + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> '%.2f' % com.get_SuctionTemperature(283.15) + '292.97' + + """ + # Apply superheating to evaporating temperature + TSuc = TEva + self.dTSup + return TSuc + + def get_SuctionPressure(self, pEva): + """ Evaluate the suction pressure. + + :param pEva: Evaporating pressure (Pa). + + :return: Suction pressure (Pa). + + Usage: Type + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> '%.1f' % com.get_SuctionPressure(1.083e6) + '983710.0' + + """ + # Apply pressure drop at compressor suction + pSuc = pEva - self.pDro + return pSuc + + def get_DischargePressure(self, pCon): + """Evaluate the discharge pressure (Pa). + + :param pCon: Condensing pressure (Pa). + + :return: Discharge pressure (Pa). + + Usage: Type + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> '%.1f' % com.get_DischargePressure(1.879e6) + '1978290.0' + + """ + # Apply pressure drop at compressor discharge + pDis = pCon + self.pDro + return pDis + + def get_RefrigerantMassFlowRate(self, vSuc, ref, pDis, pSuc, TSuc, + **kargs): + """Evaluate the refrigerant mass flow rate. + + :param vSuv: Suction specific volume (m3/kg). + :param ref: Refrigerant model. + :param pDis: Discharge pressure (Pa). + :param pSuc: Suction pressure (Pa). + :param TSuc: Suction temperature (K). + + :return: Refrigerant mass flow rate (kg/s). + + Usage: Type + >>> import refrigerants + >>> ref = refrigerants.R410A() + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> '%.8f' % com.get_RefrigerantMassFlowRate(0.0288, ref, 1978290.0, 983710.0, 292.97) + '0.05358166' + + """ + # Evaluate refrigerant mass flow rate + k = ref.get_IsentropicExponent_vT(v=vSuc, T=TSuc) + PR = max(0.0, pDis/pSuc) + m_flow = self.pisDis/vSuc * (1.0 + self.cleFac + - self.cleFac * (PR)**(1.0/k)) + return m_flow + + def get_Power(self, vSuc, ref, pDis, pSuc, TSuc, **kargs): + """ Evaluate the power input to the compressor. + + :param vSuv: Suction specific volume (m3/kg). + :param ref: Refrigerant model. + :param pDis: Discharge pressure (Pa). + :param pSuc: Suction pressure (Pa). + :param TSuc: Suction temperature (K). + + :return: Power input to the compressor (W). + + Usage: Type + >>> import refrigerants + >>> ref = refrigerants.R410A() + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> '%.2f' % com.get_Power(0.0288, ref, 1978290.0, 983710.0, 292.97) + '1765.63' + + """ + # Evaluate compressor power consumption + k = ref.get_IsentropicExponent_vT(v=vSuc, T=TSuc) + PR = max(0.0, pDis/pSuc) + m_flow = self.get_RefrigerantMassFlowRate(vSuc=vSuc, ref=ref, + pDis=pDis, pSuc=pSuc, + TSuc=TSuc) + PThe = k/(k - 1.0) * m_flow * pSuc * vSuc * ((PR)**((k - 1.0)/k) - 1.0) + P = PThe / self.etaEle + self.PLos + return P + + def initialGuessParameters(self, Q_nominal, P_nominal, TSou_nominal, + TLoa_nominal, ref, CoolingMode): + """ Initialize guess parameters for calibration of the heat pump model. + + :param Q_nominal: Nominal heat pump capacity (W). + :param P_nominal: Nominal power input (W). + :param TSou_nominal: Source-side water temperature at + nominal conditions (K). + :param TLoa_nominal: Load-side water temperature at + nominal conditions (K). + :param ref: Refrigerant model. + :param CoolingMode: Boolean, True if heat pump is in cooling mode. + + :return: A list of parameters to the compressor model, a list of tuples + of the bounds of the parameters (min, max) for the calibration + routine. + + """ + # Initialize guess parameters for the reciprocating compressor + # Temperature difference between EWT and evaporating temperature + dTEva = 5.0 + # Temperature difference between EWT and condensing temperature + dTCon = 5.0 + if CoolingMode: + TEva = TLoa_nominal - dTEva + TCon = TSou_nominal + dTCon + QEva = - Q_nominal + else: + TEva = TSou_nominal - dTEva + TCon = TLoa_nominal + dTCon + QEva = P_nominal - Q_nominal + pEva = ref.get_SaturatedVaporPressure(TEva) + pCon = ref.get_SaturatedVaporPressure(TCon) + hA = ref.get_SaturatedVaporEnthalpy(TEva) + hB = ref.get_SaturatedLiquidEnthalpy(TEva) + + cleFac = 0.05 + etaEle = 0.8 + PLos = 0.05 * P_nominal + pDro = 100.0e3 + dTSup = 8.0 + + pDis = pCon + pDro + pSuc = pEva - pDro + TSuc = TEva + dTSup + vSuc = ref.get_VaporSpecificVolume(pSuc, TSuc) + kSuc = ref.get_IsentropicExponent_vT(vSuc, TSuc) + m_flow = -QEva / (hA - hB) + + pisDis = m_flow * vSuc / (1.0 + cleFac + - cleFac * (pDis/pSuc)**(1.0/kSuc)) + + pisDis = 1.5e-7 * Q_nominal + cleFac = 0.05 + etaEle = 0.8 + PLos = 0.1 * P_nominal + pDro = 100e3 + dTSup = 5 + + bounds = [(0., None), (0., 1.), (0., 1.), + (0., 0.2*P_nominal), (0., None), (0., 10.)] + return [pisDis, cleFac, etaEle, PLos, pDro, dTSup], bounds + + def modelicaModelPath(self): + """ Returns the full path to the compressor model in the Buildings + library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> com = ReciprocatingCompressor([0.00162, 0.069, 0.696, 100.0, 99.29e3, 9.82]) + >>> com.modelicaModelPath() + 'IBPSA.Fluid.HeatPumps.Compressors.ReciprocatingCompressor' + + """ + return 'IBPSA.Fluid.HeatPumps.Compressors.ReciprocatingCompressor' + + def printParameters(self): + """ Prints the value of the model parameters. + + """ + print('Piston displacement : ' + str(self.pisDis) + ' m3/s') + print('Clearance factor : ' + str(self.cleFac) + ' ') + print('Electro-mechanical efficiency : ' + str(self.etaEle) + ' ') + print('Constant part of power losses : ' + str(self.PLos) + ' W') + print('Suction and discharge pressure drop : ' + str(self.pDro) + ' Pa') + print('Amplitude of superheating : ' + str(self.dTSup) + ' K\n') + return + + def reinitializeParameters(self, parameters): + """ Reinitializes the compressor using new parameters. + + :param pisDis: Piston displacement (m3/s). + :param cleFac: Clearance factor (-). + :param etaEle: Electro-mechanical efficiency (-). + :param PLos: Constant part of the power losses (W). + :param pDro: Pressure drop at compressor suction and discharge (Pa). + :param dTSup: Degree of superheating (K). + + """ + self.pisDis = parameters[0] + self.cleFac = parameters[1] + self.etaEle = parameters[2] + self.PLos = parameters[3] + self.pDro = parameters[4] + self.dTSup = parameters[5] + return + + +class ScrollCompressor(object): + """ Object for scroll compressor model based on Jin (2002): + H. Jin. Parameter estimation based models of water source heat pumps. + PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. + + :param volRat: Volume ratio (-). + :param v_flow: Nominal Volume flow rate (m3/s). + :param leaCoe: LEakage coefficient (kg/s). + :param etaEle: Electro-mechanical efficiency (-). + :param PLos: Constant part of the power losses (W). + :param dTSup: Degree of superheating (K). + + """ + + def __init__(self, parameters): + self.volRat = parameters[0] + self.v_flow = parameters[1] + self.leaCoe = parameters[2] + self.etaEle = parameters[3] + self.PLos = parameters[4] + self.dTSup = parameters[5] + self.NPar = 6 + return + + def get_SuctionTemperature(self, TEva): + """ Evaluate the suction temperature. + + :param TEva: Evaporating temperature (K). + + :return: Suction temperature (K). + + Usage: Type + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> '%.2f' % com.get_SuctionTemperature(283.15) + '289.64' + + """ + # Apply superheating to evaporating temperature + TSuc = TEva + self.dTSup + return TSuc + + def get_SuctionPressure(self, pEva): + """ Evaluate the suction pressure. + + :param pEva: Evaporating pressure (Pa). + + :return: Suction pressure (Pa). + + Usage: Type + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> '%.1f' % com.get_SuctionPressure(1.083e6) + '1083000.0' + + """ + # No pressure drop at compressor suction + pSuc = pEva + return pSuc + + def get_DischargePressure(self, pCon): + """Evaluate the discharge pressure (Pa). + + :param pCon: Condensing pressure (Pa). + + :return: Discharge pressure (Pa). + + Usage: Type + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> '%.1f' % com.get_DischargePressure(1.879e6) + '1879000.0' + + """ + # No pressure drop at compressor discharge + pDis = pCon + return pDis + + def get_RefrigerantMassFlowRate(self, vSuc, pDis, pSuc, **kargs): + """Evaluate the refrigerant mass flow rate. + + :param vSuv: Suction specific volume (m3/kg). + :param pDis: Discharge pressure (Pa). + :param pSuc: Suction pressure (Pa). + :param TSuc: Suction temperature (K). + + :return: Refrigerant mass flow rate (kg/s). + + Usage: Type + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> '%.6f' % com.get_RefrigerantMassFlowRate(0.025, 1.879e6, 1.083e6) + '0.107687' + + """ + # Evaluate refrigerant mass flwo rate + m_leak = self._leakageMassFlowRate(pDis, pSuc) + m_flow = self.v_flow/vSuc - m_leak + return m_flow + + def get_Power(self, vSuc, ref, pDis, pSuc, TSuc): + """ Evaluate the power input to the compressor. + + :param vSuv: Suction specific volume (m3/kg). + :param ref: Refrigerant model. + :param pDis: Discharge pressure (Pa). + :param pSuc: Suction pressure (Pa). + :param TSuc: Suction temperature (K). + + :return: Power input to the compressor (W). + + Usage: Type + >>> import refrigerants + >>> ref = refrigerants.R410A() + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> '%.2f' % com.get_Power(0.025, ref, 1.879e6, 1.083e6, 289.64) + '2940.26' + + """ + # Evaluate compressor power consumption + k = ref.get_IsentropicExponent_vT(v=vSuc, T=TSuc) + PR = max(0.0, pDis/pSuc) # External pressure ratio + PRInt = self.volRat**k # Built-in pressure ratio + PThe = k/(k - 1.0) * pSuc * self.v_flow \ + * (((k - 1.0)/k) * PR/self.volRat + + 1.0/k * PRInt**((k - 1.0)/k) - 1.0) + P = PThe / self.etaEle + self.PLos + return P + + def set_ModelicaParameters(self, simulator, suffix=''): + """ Set parameter values for simulation in dymola. + + :param simulator: Simulator object (BuildinsPy) + :param suffix: String to add at the end of parameter names. + + :return: Simulator object (BuildingsPy) + + """ + parameters = {'volRat'+suffix: self.volRat, + 'V_flow_nominal'+suffix: self.v_flow, + 'leaCoe'+suffix: self.leaCoe, + 'etaEle'+suffix: self.etaEle, + 'PLos'+suffix: self.PLos, + 'dTSup'+suffix: self.dTSup} + simulator.addParameters(parameters) + return simulator + + def initialGuessParameters(self, Q_nominal, P_nominal, TSou_nominal, + TLoa_nominal, ref, CoolingMode): + """ Initialize guess parameters for calibration of the heat pump model. + + :param Q_nominal: Nominal heat pump capacity (W). + :param P_nominal: Nominal power input (W). + :param TSou_nominal: Source-side water temperature at + nominal conditions (K). + :param TLoa_nominal: Load-side water temperature at + nominal conditions (K). + :param ref: Refrigerant model. + :param CoolingMode: Boolean, True if heat pump is in cooling mode. + + :return: A list of parameters to the compressor model, a list of tuples + of the bounds of the parameters (min, max) for the calibration + routine. + + """ + # Initialize guess parameters for the scroll compressor + dTEva = 5.0 # Temp. difference between EWT and evaporating temp. + dTCon = 5.0 # Temp. difference between EWT and condensing temp. + dTSup = 4.0 + if CoolingMode: + TEva = TLoa_nominal - dTEva + TCon = TSou_nominal + dTCon + QEva = -Q_nominal + else: + TEva = TSou_nominal - dTEva + TCon = TLoa_nominal + dTCon + QEva = (P_nominal - Q_nominal) + pEva = ref.get_SaturatedVaporPressure(TEva) + pCon = ref.get_SaturatedVaporPressure(TCon) + hA = ref.get_SaturatedVaporEnthalpy(TEva) + hB = ref.get_SaturatedLiquidEnthalpy(TEva) + + TSuc = TEva + dTSup + vSuc = ref.get_VaporSpecificVolume(pEva, TSuc) + kSuc = ref.get_IsentropicExponent_vT(vSuc, TSuc) + volRat = (pCon/pEva)**(1.0/kSuc) + + m_flow = -QEva / (hA - hB) + m_leak = 0.01*m_flow + v_flow = (m_flow + m_leak) * vSuc + + PThe = kSuc/(kSuc - 1.0) * pEva * v_flow \ + * ((pCon/pEva)**((kSuc - 1.0)/kSuc) - 1.0) + + etaEle = 0.95 + PLos = max(etaEle * P_nominal - PThe, 0.0) + leaCoe = m_leak / (pCon/pEva) + +# bounds = [(1., None), (0., None), (0., 1.), +# (0., 1.), (0., None), (0., None)] + bounds = [(1.5, 3.5), (0., None), (1.0e-4, 1.), + (0., 1.), (0., 0.25*P_nominal), (0., 10.)] + return [volRat, v_flow, leaCoe, etaEle, PLos, dTSup], bounds + + def modelicaModelPath(self): + """ Returns the full path to the compressor model in the Buildings + library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> com = ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> com.modelicaModelPath() + 'IBPSA.Fluid.HeatPumps.Compressors.ScrollCompressor' + + """ + return 'IBPSA.Fluid.HeatPumps.Compressors.ScrollCompressor' + + def printParameters(self): + """ Prints the value of the model parameters. + + """ + print('Volume ratio : ' + str(self.volRat) + ' ') + print('Volume flow rate : ' + str(self.v_flow) + ' m3/s') + print('Leakage coefficient : ' + str(self.leaCoe) + ' kg/s') + print('Electro-mechanical efficiency : ' + str(self.etaEle) + ' ') + print('Constant part of power losses : ' + str(self.PLos) + ' W') + print('Amplitude of superheating : ' + str(self.dTSup) + ' K\n') + return + + def reinitializeParameters(self, parameters): + """ Reinitializes the compressor using new parameters. + + :param volRat: Volume ratio (-). + :param v_flow: Nominal Volume flow rate (m3/s). + :param leaCoe: LEakage coefficient (kg/s). + :param etaEle: Electro-mechanical efficiency (-). + :param PLos: Constant part of the power losses (W). + :param dTSup: Degree of superheating (K). + + """ + self.volRat = parameters[0] + self.v_flow = parameters[1] + self.leaCoe = parameters[2] + self.etaEle = parameters[3] + self.PLos = parameters[4] + self.dTSup = parameters[5] + return + + def _leakageMassFlowRate(self, pDis, pSuc): + """ Evaluate the leakage mass flow rate. + + :param pDis: Discharge pressure (Pa). + :param pSuc: Suction pressure (Pa). + + :return: Leakage mass flow rate (kg/s). + + """ + m_leak = self.leaCoe*pDis/pSuc + return m_leak diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/fluids.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/fluids.py new file mode 100644 index 0000000000..17dcea0be8 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/fluids.py @@ -0,0 +1,71 @@ +from __future__ import division, print_function, absolute_import + + +class ConstantPropertyWater(object): + """ Object for the evaluation of thermal properties of heat transfer fluid + Water. + """ + + def __init__(self): + # Density (kg/m3) of water at 20 C + self._d = 998.207150468 + # Specific heat capacity at constant pressure (J/(kg.K)) of water + # at 20 C + self._cp = 4184.05092452 + # Specific volume (m3/kg) of water at 20 C + self._v = 0.00100179606961 + + def get_Density(self, **kwargs): + """ Returns the density of water. + + :return: Density of water at 20 C (kg/m3) + + Usage: Type + >>> flu = ConstantPropertyWater() + >>> '%.2f' % flu.get_Density() + '998.21' + + """ + return self._d + + def get_SpecificIsobaricHeatCapacity(self, **kwargs): + """ Returns the specific isobaric heat capacity of water. + + :return: Specific isobaric heat capacity of water at 20 C (J/(kg.K)) + + Usage: Type + >>> flu = ConstantPropertyWater() + >>> '%.2f' % flu.get_SpecificIsobaricHeatCapacity() + '4184.05' + + """ + return self._cp + + def get_SpecificVolume(self, **kwargs): + """ Returns the specific volume of water. + + :return: Specific volume of water at 20 C (m3/kg) + + Usage: Type + >>> flu = ConstantPropertyWater() + >>> '%.8f' % flu.get_SpecificVolume() + '0.00100180' + + """ + return self._v + + def modelicaModelPath(self): + """ Returns the full path to the water model in the IBPSA library. + + :return: Full path to the water model in the IBPSA library. + + .. Note:: The minimum temperature is set to -50 C to avoid the Modelica + model from failing. + + Usage: Type + >>> flu = ConstantPropertyWater() + >>> flu.modelicaModelPath() + 'Modelica.Media.Water.ConstantPropertyLiquidWater(T_min=223.15)' + + """ + return 'Modelica.Media.Water.ConstantPropertyLiquidWater(T_min=223.15)' diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatexchangers.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatexchangers.py new file mode 100644 index 0000000000..89587e2040 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatexchangers.py @@ -0,0 +1,120 @@ +from __future__ import division, print_function, absolute_import + +import numpy as np + + +class EvaporatorCondenser(object): + """ Object for heat exchanger based on epsilon-NTU method for a heat + transfer fluid exchanging heat with refrigerant experiencing constant + temperature phase change. + + :param UA: Heat transfer coefficient of the evaporator or + condenser (W/K). + """ + + def __init__(self, parameters): + self.UA = parameters[0] + self.NPar = 1 + return + + def get_RefrigerantTemperature(self, Q_flow, m_flow, flu, T_in): + """ Evaluate the refrigerant temperature. + + :param Q_flow: Heat transfer rate to the fluid stream (W). + :param m_flow: Fluid mass flow rate (kg/s). + :param flu: Fluid model. + :param T_in: Inlet fluid temperature (K). + + :return: Refrigerant temperature (K). + + Usage: Type + >>> import fluids + >>> flu = fluids.ConstantPropertyWater() + >>> eva = EvaporatorCondenser([21523]) + >>> '%.2f' % eva.get_RefrigerantTemperature(19300, 0.71, flu, 298.75) + '305.25' + + """ + # Evaluate evaporating/condesing temeprature of the refrigerant + cp = flu.get_SpecificIsobaricHeatCapacity(T=T_in) + # Heat exchanger effectiveness + eps = self._heatExchangerEffectiveness(m_flow, cp) + dT = Q_flow / (eps * m_flow * cp) + TRef = T_in + dT + return TRef + + def set_ModelicaParameters(self, simulator, suffix=''): + """ Set parameter values for simulation in dymola. + + :param simulator: Simulator object (BuildinsPy) + :param suffix: String to add at the end of parameter names. + + :return: Simulator object (BuildinsPy) + + """ + parameters = {'UA'+suffix: self.UA} + simulator.addParameters(parameters) + return simulator + + def initialGuessParameters(self, Q_nominal, P_nominal): + """ Initialize guess parameters for calibration of the heat pump model. + + :param Q_nominal: Nominal heat pump capacity (W). + :param P_nominal: Nominal power input (W). + + :return: A list of parameters to the compressor model, a list of tuples + of the bounds of the parameters (min, max) for the calibration + routine. + + """ + # Initialize guess parameters for the evaporator/condenser + # Temperature difference between EWT and refrigerant temperature + dT = 5.0 + UA = Q_nominal / dT + return [UA], [(0., None)] + + def modelicaModelPath(self): + """ Returns the full path to the EvaporatorCondenser model in the + IBPSA library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> eva = EvaporatorCondenser([21523]) + >>> eva.modelicaModelPath() + 'IBPSA.Fluid.HeatExchangers.EvaporatorCondenser' + + """ + return 'IBPSA.Fluid.HeatExchangers.EvaporatorCondenser' + + def printParameters(self): + """ Prints the value of the model parameters. + + """ + print('Thermal conductance of the heat exchanger : ' + + str(self.UA) + ' W/K\n') + return + + def reinitializeParameters(self, parameters): + """ Reinitializes the evaporator or condenser using new parameters. + + :param UA: Heat transfer coefficient (W/K). + + """ + self.UA = parameters[0] + return + + def _heatExchangerEffectiveness(self, m_flow, cp): + """ Evaluate the heat exchanger effectiveness. + + :param m_flow: Fluid mass flow rate (kg/s). + :param cp: Fluid isobaric heat capacity (J/(kgK)). + + :return: Heat exchanger effectiveness (-). + + """ + # Number of transfer units + NTU = self.UA / (m_flow * cp) + # Heat exchanger effectiveness + eps = 1.0 - np.exp(-NTU) + return eps diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatpumps.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatpumps.py new file mode 100644 index 0000000000..1bc97920a0 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/heatpumps.py @@ -0,0 +1,496 @@ +from __future__ import division, print_function, absolute_import + +import numpy as np + + +class SingleStageHeatPump(object): + """ Object for heat pump model based on Jin (2002): + H. Jin. Parameter estimation based models of water source heat pumps. + PhD Thesis. Oklahoma State University. Stillwater, Oklahoma, USA. 2012. + + :param eva: Evaporator model. + :param con: Condenser model. + :param ref: Refrigerant model. + :param fluCon: Fluid model for fluid on the condenser side. + :param fluEva: Fluid model for fluid on the evaporator side. + :param Q_nominal: Nominal heat pump capacity (W). + :param P_nominal: Nominal heat pump power input (W). + :param CoolingMode: Boolean, True if heat pump is in cooling mode. + + """ + def __init__(self, com, con, eva, ref, fluCon, fluEva, + Q_nominal, P_nominal, CoolingMode=False): + self.eva = eva + self.con = con + self.com = com + self.ref = ref + self.fluCon = fluCon + self.fluEva = fluEva + self.Q_nominal = Q_nominal + self.P_nominal = P_nominal + self.CoolingMode = CoolingMode + # Current entering fluid temperature on the evaporator side + self._EWT_Source = 1e99 + # Current entering fluid temperature on the condenser side + self._EWT_Load = 1e99 + # Current fluid flow rate temperature on the evaporator side + self._flowSource = 1e99 + # Current fluid flow rate temperature on the condenser side + self._flowLoad = 1e99 + + def set_State(self, EWT_Source, EWT_Load, flowSource, flowLoad, + tol=1e-6, relax=0.7): + """ Evaluates the current state of the heat pump. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + :param tol: Relative tolerance on the evaluation of the capacity and + heat pump power input (-). + :param relax: Relaxation factor for the iteration procedure (-). + + """ + self._EWT_Source = EWT_Source + self._EWT_Load = EWT_Load + self._flowSource = flowSource + self._flowLoad = flowLoad + + # Initial guesses and fluid temperatures + if self.CoolingMode: + QEva = - self.Q_nominal*0.5 + P = self.P_nominal*0.5 + QCon = P - QEva + TEva_in = EWT_Load + TCon_in = EWT_Source + mEva_flow = flowLoad + mCon_flow = flowSource + else: + QCon = self.Q_nominal*0.5 + P = self.P_nominal*0.5 + QEva = P - QCon + TEva_in = EWT_Source + TCon_in = EWT_Load + mEva_flow = flowSource + mCon_flow = flowLoad + dQCon = 1e99 + dP = 1e99 + i = 0 + # Iterative evaluation of the heat pump state + while (abs(dQCon/QCon) + abs(dP/P)) > tol and i < 1e3: + # Evaluate rerigerant temperatures in the evaporator and condenser + TEva = self.eva.get_RefrigerantTemperature(QEva, mEva_flow, + self.fluEva, TEva_in) + TCon = self.con.get_RefrigerantTemperature(QCon, mCon_flow, + self.fluCon, TCon_in) + TCon = max(TCon, TEva) + # Evaluate refrigerant pressures in the evaporator and condenser + pEva = self.ref.get_SaturatedVaporPressure(TEva) + pCon = self.ref.get_SaturatedVaporPressure(TCon) + # Evaluate specific enthalpies of the refrigerant a the outlet of + # the evaporator and condenser + hA = self.ref.get_SaturatedVaporEnthalpy(TEva) + hB = self.ref.get_SaturatedLiquidEnthalpy(TCon) + # Evaluate the suction and discharge pressures at the compressor + pSuc = self.com.get_SuctionPressure(pEva) + pDis = self.com.get_DischargePressure(pCon) + # Evaluate the suction temperature + TSuc = self.com.get_SuctionTemperature(TEva) + # Evaluate the suction specific volume + vSuc = self.ref.get_VaporSpecificVolume(pSuc, TSuc) + # Evaluate the rerigerant mass flow rate + m_flow = self.com.get_RefrigerantMassFlowRate(vSuc=vSuc, + ref=self.ref, + pDis=pDis, + pSuc=pSuc, + TSuc=TSuc) + # Update the guess values + dP = self.com.get_Power(vSuc=vSuc, ref=self.ref, pDis=pDis, + pSuc=pSuc, TSuc=TSuc) - P + dQEva = -m_flow * (hA - hB) - QEva + QEva = QEva + relax*dQEva + P += relax*dP + dQCon = P - QEva - QCon + QCon += relax*dQCon + # Set the current state of the heat pump + self._TEva = TEva + self._TCon = TCon + self._pEva = pEva + self._pCon = pCon + self._hA = hA + self._hB = hB + self._pSuc = pSuc + self._pDis = pDis + self._TSuc = TSuc + self._vSuc = vSuc + self._m_flow = m_flow + self._QEva = QEva + self._QCon = QCon + self._P = P + self._verify_State() + return + + def get_Capacity(self, EWT_Source, EWT_Load, flowSource, flowLoad): + """ Return heat pump capacity. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + :return: Heat pump capacity (W). + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> '%.2f' % heaPum.get_Capacity(298.8, 311.0, 0.71, 0.71) + '24124.81' + + """ + if self.CoolingMode: + capacity = -self.get_EvaporatorHeatTransferRate(EWT_Source, + EWT_Load, + flowSource, + flowLoad) + else: + capacity = self.get_CondenserHeatTransferRate(EWT_Source, + EWT_Load, + flowSource, + flowLoad) + return capacity + + def get_SourceSideTransferRate(self, EWT_Source, EWT_Load, flowSource, + flowLoad): + """ Return heat pump source side heat transfer rate. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + :return: Heat pump source side heat transfer rate (W). + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> '%.2f' % heaPum.get_SourceSideTransferRate(298.8, 311.0, 0.71, 0.71) + '19413.08' + + """ + if self.CoolingMode: + HR = self.get_CondenserHeatTransferRate(EWT_Source, EWT_Load, + flowSource, flowLoad) + else: + HR = - self.get_EvaporatorHeatTransferRate(EWT_Source, EWT_Load, + flowSource, flowLoad) + return HR + + def get_EvaporatorHeatTransferRate(self, EWT_Source, EWT_Load, + flowSource, flowLoad): + """ Evaluate evaporator heat transfer rate. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + :return: Evaporator heat transfer rate (W). + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> '%.2f' % heaPum.get_EvaporatorHeatTransferRate(298.8, 311.0, 0.71, 0.71) + '-19413.08' + + """ + # Evaluate heat pump state if different from current state + if not self._isCurrentState(EWT_Source, EWT_Load, flowSource, + flowLoad): + self.set_State(EWT_Source, EWT_Load, flowSource, flowLoad) + return self._QEva + + def get_CondenserHeatTransferRate(self, EWT_Source, EWT_Load, flowSource, + flowLoad): + """ Evaluate condenser heat transfer rate. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + :return: condenser heat transfer rate (W). + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> '%.2f' % heaPum.get_CondenserHeatTransferRate(298.8, 311.0, 0.71, 0.71) + '24124.81' + + """ + # Evaluate heat pump state if different from current state + if not self._isCurrentState(EWT_Source, EWT_Load, flowSource, + flowLoad): + self.set_State(EWT_Source, EWT_Load, flowSource, flowLoad) + return self._QCon + + def get_Power(self, EWT_Source, EWT_Load, flowSource, flowLoad): + """ Evaluate heat pump power input. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + :return: Heat pump power input (W). + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> '%.2f' % heaPum.get_Power(298.8, 311.0, 0.71, 0.71) + '4711.73' + + """ + # Evaluate heat pump state if different from current state + if not self._isCurrentState(EWT_Source, EWT_Load, flowSource, + flowLoad): + self.set_State(EWT_Source, EWT_Load, flowSource, flowLoad) + return self._P + + def set_ModelicaParameters(self, simulator): + """ Set parameter values for simulation in dymola. + + :param simulator: Simulator object (BuildingsPy) + + :return: Simulator object (BuildingsPy) + + """ + # Set parameters for the compressor model + simulator = self.com.set_ModelicaParameters(simulator) + # Set parameters for the condenser model + simulator = self.con.set_ModelicaParameters(simulator, 'Con') + # Set parameters for the evaporator model + simulator = self.eva.set_ModelicaParameters(simulator, 'Eva') + # Redeclare packages for fluid and refrigerant + fluConModel = self.fluCon.modelicaModelPath() + fluEvaModel = self.fluEva.modelicaModelPath() + refModel = self.ref.modelicaModelPath() + simulator.addModelModifier('redeclare package Medium1 = ' + + fluConModel) + simulator.addModelModifier('redeclare package Medium2 = ' + + fluEvaModel) + simulator.addModelModifier('redeclare package ref = ' + + refModel) + return simulator + + def initialGuessParameters(self, data): + """ Initialize guess parameters for calibration of the heat pump model. + + :param data: Heat pump performance data. + + :return: A list of parameters to the compressor model, a list of tuples + of the bounds of the parameters (min, max) for the calibration + routine. + + """ + if self.CoolingMode: + i = 0 + else: + i = -1 + TSouGuess = data.EWT_Source[i] + TLoaGuess = data.EWT_Load[i] + QGuess = data.Capacity[i]*1e3 + PGuess = data.Power[i]*1e3 + # Evaluate guess parameters for each heat pump component based on + # nominal capacity and power consumption + parCom, bouCom = self.com.initialGuessParameters(QGuess, + PGuess, + TSouGuess, + TLoaGuess, + self.ref, + self.CoolingMode) + parCon, bouCon = self.con.initialGuessParameters(QGuess, PGuess) + parEva, bouEva = self.eva.initialGuessParameters(QGuess, PGuess) + parameters = parCom + parCon + parEva + bounds = bouCom + bouCon + bouEva + return np.array(parameters), bounds + + def modelicaCalibrationModelPath(self): + """ Returns the full path to the heat pump model for calibration in the + IBPSA library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> heaPum.modelicaCalibrationModelPath() + 'IBPSA.Fluid.HeatPumps.Calibration.ScrollWaterToWater' + + """ + if self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ReciprocatingCompressor": + return "IBPSA.Fluid.HeatPumps.Calibration.ReciprocatingWaterToWater" + elif self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ScrollCompressor": + return "IBPSA.Fluid.HeatPumps.Calibration.ScrollWaterToWater" + + def modelicaModelName(self): + """ Returns the name of the heat pump model for calibration in the + IBPSA library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> heaPum.modelicaModelName() + 'ScrollWaterToWater' + + """ + if self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ReciprocatingCompressor": + return "ReciprocatingWaterToWater" + elif self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ScrollCompressor": + return "ScrollWaterToWater" + + def modelicaModelPath(self): + """ Returns the full path to the heat pump model in the Buildings + library. + + :return: Full path to the compressor model in the IBPSA library. + + Usage: Type + >>> import compressors + >>> import heatexchangers + >>> import fluids + >>> import refrigerants + >>> com = compressors.ScrollCompressor([2.362, 0.00287, 0.0041, 0.922, 398.7, 6.49]) + >>> eva = heatexchangers.EvaporatorCondenser([21523]) + >>> con = heatexchangers.EvaporatorCondenser([2840.4]) + >>> flu = fluids.ConstantPropertyWater() + >>> ref = refrigerants.R410A() + >>> heaPum = SingleStageHeatPump(com, con, eva, ref, flu, flu, 19300.0, 4289.0) + >>> heaPum.modelicaModelPath() + 'IBPSA.Fluid.HeatPumps.ScrollWaterToWater' + + """ + if self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ReciprocatingCompressor": + return "IBPSA.Fluid.HeatPumps.ReciprocatingWaterToWater" + elif self.com.modelicaModelPath() == "IBPSA.Fluid.HeatPumps.Compressors.ScrollCompressor": + return "IBPSA.Fluid.HeatPumps.ScrollWaterToWater" + + def printParameters(self): + """ Prints the value of the model parameters. + + """ + print('Compressor:\n' + + '-----------') + self.com.printParameters() + print('Condenser:\n' + + '-----------') + self.con.printParameters() + print('Evaporator:\n' + + '-----------') + self.eva.printParameters() + return + + def reinitializeParameters(self, parameters): + """ Reinitializes the heat pump using new parameters. + + :param parameters: Heat pump parameters. + + """ + # Replace current component parameters and reset heat pump state + self._EWT_Source = 1e99 + self._EWT_Load = 1e99 + self._flowSource = 1e99 + self._flowLoad = 1e99 + NParCom = self.com.NPar + NParCon = self.con.NPar + NParEva = self.eva.NPar + self.com.reinitializeParameters(parameters[0:NParCom]) + self.con.reinitializeParameters(parameters[NParCom:NParCom + NParCon]) + self.eva.reinitializeParameters(parameters[NParCom + NParCon:NParCom + + NParCon + NParEva]) + return + + def _isCurrentState(self, EWT_Source, EWT_Load, flowSource, + flowLoad, tol=1e-6): + """ Check if the current state is the same as the requested state. + + :param EWT_Source: Entering water temperature on the source side (K). + :param EWT_Load: Entering water temperature on the load side (K). + :param flowSource: Fluid mass flow rate on the source side (kg/s). + :param flowLoad: Fluid mass flow rate on the load side (kg/s). + + """ + isCurrentState = (abs((EWT_Source-self._EWT_Source)/self._EWT_Source) < tol and + abs((EWT_Load-self._EWT_Load)/self._EWT_Load) < tol and + abs((flowSource-self._flowSource)/self._flowSource) < tol and + abs((flowLoad-self._flowLoad)/self._flowLoad) < tol) + return isCurrentState + + def _verify_State(self): + """ Verify if the calculated state is a valid heat pump state. + """ + if (self._TCon > self.ref.TCri or + self._TEva < self.ref.T_min or + self._m_flow < 0.0): + + self._QEva = 0.0 + self._QCon = 0.0 + self._P = -abs(self._P)*0. + return diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/refrigerants.py b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/refrigerants.py new file mode 100644 index 0000000000..d44bf38927 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/PythonModel/refrigerants.py @@ -0,0 +1,301 @@ +from __future__ import division, print_function, absolute_import + +import numpy as np + + +class R410A(object): + """ Class for the evaluation of properties of refrigerant R410A. + + Properties are based on commercial refrigerant Dupont Suva 410A. + """ + + def __init__(self): + self.TCri = 345.25 # Critical temperature (K) + self.pCri = 4926.1e3 # Critical pressure (Pa) + self.vCri = 0.00205 # Critical volume (m3/kg) + self._k = 1.273 # Isentropic exponent (-) + # Minimum temperature for property evaluation (K) + self.T_min = 173.15 + + def get_IsentropicExponent_vT(self, v, T): + """ Evaluate the isentropic exponent. + + :param v: Specific volume of the refrigerant (m3/kg). + :param T: Temperature of the refrigerant (K). + + :return: Isentropic exponent (-). + + Usage: Type + >>> ref = R410A() + >>> '%.4f' % ref.get_IsentropicExponent_vT(0.025, 289.64) + '1.3862' + + """ + cp = self.get_SpecificIsobaricHeatCapacity_vT(v, T) + cv = self.get_SpecificIsochoricHeatCapacity_vT(v, T) + k = cp / cv + return k + + def get_SpecificIsobaricHeatCapacity_vT(self, v, T): + """ Evaluate the specific isobaric heat capacity. + + :param v: Specific volume of the refrigerant (m3/kg). + :param T: Temperature of the refrigerant (K). + + :return: Specific isobaric heat capacity (J/kg-K). + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SpecificIsobaricHeatCapacity_vT(0.025, 289.64) + '1167.01' + + """ + R, A, B, C, b, k = self._martinHouCoefficients() + cv = self.get_SpecificIsochoricHeatCapacity_vT(v, T) + Tr = T / self.TCri + + dpdT = R / (v - b) + dpdv = -R*T/(v - b)**2 + for i in range(len(A)): + dpdT += (B[i] - k/self.TCri*C[i]*np.exp(-k*Tr)) / (v - b)**(i + 2) + dpdv += -(float(i+2)*(A[i] + B[i]*T + + C[i]*np.exp(-k*Tr))/(v-b)**(i+3)) + cp = cv - T * dpdT**2 / dpdv + return cp + + def get_SpecificIsochoricHeatCapacity_vT(self, v, T): + """ Evaluate the specific isochoric heat capacity. + + :param v: Specific volume of the refrigerant (m3/kg). + :param T: Temperature of the refrigerant (K). + + :return: Specific isochoric heat capacity (J/kg-K). + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SpecificIsochoricHeatCapacity_vT(0.025, 289.64) + '841.85' + + """ + R, A, B, C, b, k = self._martinHouCoefficients() + cvo = self._get_IdealGasIsochoricHeatCapacity(T) + Tr = T / self.TCri + # Dimensionless value of cv + intd2pdT2 = 0. + for i in range(len(A)): + intd2pdT2 += (k/self.TCri)**2 * C[i]*np.exp(-k*Tr) \ + / (float(i+1) * (v - b)**(i + 1)) + cv = cvo - T * intd2pdT2 + return cv + + def get_SaturatedLiquidPressure(self, TLiq): + """ Evaluate the pressure of saturated liquid refrigerant. + + :param TLiq: Temperature of the saturated liquid refrigerant (K). + + :return: Pressure of saturated liquid refrigerant (Pa). + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SaturatedLiquidPressure(305.25) + '1989639.98' + + """ + a = [-1.4376, -6.8715, -0.53623, -3.82642, -4.06875, -1.2333] + x0 = 0.2086902 + x = (1.0 - TLiq/self.TCri) - x0 + pLiq = self.pCri \ + * np.exp(self.TCri/TLiq * np.polynomial.polynomial.polyval(x, a)) + return pLiq + + def get_SaturatedVaporPressure(self, TVap): + """ Evaluate the pressure of saturated refrigerant vapor. + + :param TLiq: Temperature of the saturated liquid refrigerant (K). + + :return: Pressure of saturated refrigerant vapor (Pa). + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SaturatedVaporPressure(283.15) + '1082792.93' + + """ + a = [-1.440004, -6.865265, -0.5354309, -3.749023, -3.521484, -7.75] + x0 = 0.2086902 + x = (1.0 - TVap/self.TCri) - x0 + pVap = self.pCri \ + * np.exp(self.TCri/TVap * np.polynomial.polynomial.polyval(x, a)) + return pVap + + def get_SaturatedLiquidEnthalpy(self, TLiq): + """ Evaluate the specific enthalpy of saturated liquid refrigerant. + + :param TLiq: Temperature of the saturated liquid refrigerant (K). + + :return: Specific enthalpy of saturated liquid refrigerant (J/kg). + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SaturatedLiquidEnthalpy(305.25) + '252787.45' + + """ + a = [221.1749, -514.9668, -631.625, -262.2749, 1052.0, 1596.0] + x0 = 0.5541498 + x = (1.0 - TLiq/self.TCri)**(1.0/3.0) - x0 + hLiq = 1e3 * np.polynomial.polynomial.polyval(x, a) + return hLiq + + def get_SaturatedVaporEnthalpy(self, TVap): + """ Evaluate the specific enthalpy of saturated liquid refrigerant. + + :param TLiq: Temperature of the saturated liquid refrigerant (K). + + :return: Specific enthalpy of saturated liquid refrigerant (J/kg). + + .. note:: Correlated properties from the thermodynamic properties of + DuPont Suva R410A. An expression similar to the saturated + liquid enthalpy was used. + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_SaturatedVaporEnthalpy(283.15) + '425094.18' + + """ + a = [406.0598, -34.78156, 262.8079, 223.8549, -1162.627, 570.6635] + x0 = 0.0 + x = (1.0 - TVap/self.TCri)**(1.0/3.0) - x0 + hVap = 1e3 * np.polynomial.polynomial.polyval(x, a) + return hVap + + def get_VaporPressure(self, TVap, vVap): + """ Evaluate the pressure of refrigerant vapor. + + :param TVap: Temperature of refrigerant vapor (K). + :param vVap: Specific volume of refrigerant vapor (m3/kg). + + :return: Pressure of refrigerant vapor (Pa). + + The pressure is calculated fromthe Martin-Hou equation of state for + refrigerant R410A. + + Usage: Type + >>> ref = R410A() + >>> '%.2f' % ref.get_VaporPressure(289.64, 0.025) + '1083546.30' + + """ + R, A, B, C, b, k = self._martinHouCoefficients() + + pVap = R*TVap/(vVap - b) + for i in range(len(A)): + pVap = pVap + (A[i] + B[i]*TVap + + C[i]*np.exp(-k*TVap/self.TCri)) \ + / (vVap - b)**(i + 2.0) + return pVap + + def get_VaporSpecificVolume(self, p, T, tol=1e-6): + """ Evaluate the Specific of refrigerant vapor. + + :param p: Pressure of refrigerant vapor (Pa). + :param T: Temperature of refrigerant vapor (K). + + :return: Specific volume of refrigerant vapor (m3/kg). + + Uses the Martin-Hou equation of state to determine specific volume. + + Usage: Type + >>> ref = R410A() + >>> '%.8f' % ref.get_VaporSpecificVolume(1083546.3, 289.64) + '0.02500001' + + """ + R = 114.55 + b = 4.355134e-4 + # Initial guess from the first term in the equation of state + v = R*T/p + b + dv = 1e99 + i = 0 + # Iterative evaluation of the specific volume + while abs(dv)/v > tol and i < 1e3: + i += 1 + # Error on pressure + dp = p - self.get_VaporPressure(T, v) + # Specific volume adjustment + dv = dp / self._dpdv(T, v) + v = v + dv + return v + + def modelicaModelPath(self): + """ Returns the full path to the refrigerant package in the Buildings + library. + + :return: Full path to the refrigerant package in the IBPSA library. + + Usage: Type + >>> ref = R410A() + >>> ref.modelicaModelPath() + 'IBPSA.Media.Refrigerants.R410A' + + """ + return 'IBPSA.Media.Refrigerants.R410A' + + def _get_IdealGasIsobaricHeatCapacity(self, T): + """ Evaluate the ideal gas specific isobaric heat capacity. + + :param T: Temperature of refrigerant vapor (K). + + :return: Ideal gas specific isobaric heat capacity (J/kg-K). + + """ + a = [2.676087e-1, 2.115353e-3, -9.848184e-7, 6.493781e-11] + cpo = 1e3*np.polynomial.polynomial.polyval(T, a) + return cpo + + def _get_IdealGasIsochoricHeatCapacity(self, T): + """ Evaluate the ideal gas specific isochoric heat capacity. + + :param T: Temperature of refrigerant vapor (K). + + :return: Ideal gas specific isochoric heat capacity (J/kg-K). + + """ + R = 114.55 + cpo = self._get_IdealGasIsobaricHeatCapacity(T) + cvo = cpo - R + return cvo + + def _dpdv(self, TVap, vVap): + """ Derivative for specific volume in the Martin-Hou equation of state. + + :param TVap: Temperature of refrigerant vapor (K). + :param vVap: Specific volume of refrigerant vapor (m3/kg). + + :return: Derivative of pressure with respect to specific volume + (Pa-kg/m3). + + """ + R, A, B, C, b, k = self._martinHouCoefficients() + + dpdv = -R*TVap/(vVap - b)**2.0 + for i in range(len(A)): + dpdv = dpdv + (-i)*(A[i] + B[i]*TVap + + C[i]*np.exp(-k*TVap/self.TCri)) \ + / (vVap - b)**(i + 3.0) + return dpdv + + def _martinHouCoefficients(self): + """ Return the coefficients to the Martin-Hou equation of state. + + :return: Coefficients to the Martin-Hou equation of state. + + """ + R = 114.55 + A = [-1.721781e2, 2.381558e-1, -4.329207e-4, -6.241072e-7] + B = [1.646288e-1, -1.462803e-5, 0, 1.380469e-9] + C = [-6.293665e3, 1.532461e1, 0, 1.604125e-4] + b = 4.355134e-4 + k = 5.75 + return R, A, B, C, b, k diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/__init__.py b/AixLib/Resources/src/fluid/heatpumps/calibration/__init__.py new file mode 100644 index 0000000000..29aa468e83 --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/__init__.py @@ -0,0 +1,4 @@ +from __future__ import division, print_function, absolute_import + +from . import Examples +from . import PythonModel diff --git a/AixLib/Resources/src/fluid/heatpumps/calibration/doc/Makefile b/AixLib/Resources/src/fluid/heatpumps/calibration/doc/Makefile new file mode 100644 index 0000000000..60155f6c2c --- /dev/null +++ b/AixLib/Resources/src/fluid/heatpumps/calibration/doc/Makefile @@ -0,0 +1,97 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +#PYTHONPATH=`pwd`/.. + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make