From 3e177d7f335b539105785155f02989f5b3b3c45b Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 22:48:29 +0000 Subject: [PATCH 01/21] Added reference results --- ...onversions_Validation_BooleanToInteger.txt | 10 ++++++ ...L_Conversions_Validation_BooleanToReal.txt | 10 ++++++ ...L_Conversions_Validation_IntegerToReal.txt | 10 ++++++ ...L_Conversions_Validation_RealToInteger.txt | 10 ++++++ ...CDL_Discrete_Validation_FirstOrderHold.txt | 10 ++++++ ...ls_OBC_CDL_Discrete_Validation_Sampler.txt | 10 ++++++ ...C_CDL_Discrete_Validation_TriggeredMax.txt | 11 +++++++ ...iscrete_Validation_TriggeredMovingMean.txt | 14 ++++++++ ...L_Discrete_Validation_TriggeredSampler.txt | 12 +++++++ ..._OBC_CDL_Discrete_Validation_UnitDelay.txt | 10 ++++++ ..._CDL_Discrete_Validation_ZeroOrderHold.txt | 10 ++++++ ...L_Integers_Sources_Validation_Constant.txt | 9 +++++ ..._CDL_Integers_Sources_Validation_Pulse.txt | 12 +++++++ ..._Integers_Sources_Validation_TimeTable.txt | 13 ++++++++ ..._Validation_TimeTableNegativeStartTime.txt | 13 ++++++++ ...ntrols_OBC_CDL_Integers_Validation_Abs.txt | 10 ++++++ ...ntrols_OBC_CDL_Integers_Validation_Add.txt | 11 +++++++ ...C_CDL_Integers_Validation_AddParameter.txt | 10 ++++++ ...ols_OBC_CDL_Integers_Validation_Change.txt | 19 +++++++++++ ...rols_OBC_CDL_Integers_Validation_Equal.txt | 11 +++++++ ...ls_OBC_CDL_Integers_Validation_Greater.txt | 11 +++++++ ...C_CDL_Integers_Validation_GreaterEqual.txt | 11 +++++++ ...egers_Validation_GreaterEqualThreshold.txt | 11 +++++++ ...L_Integers_Validation_GreaterThreshold.txt | 11 +++++++ ...trols_OBC_CDL_Integers_Validation_Less.txt | 11 +++++++ ..._OBC_CDL_Integers_Validation_LessEqual.txt | 11 +++++++ ...Integers_Validation_LessEqualThreshold.txt | 11 +++++++ ..._CDL_Integers_Validation_LessThreshold.txt | 11 +++++++ ...ntrols_OBC_CDL_Integers_Validation_Max.txt | 11 +++++++ ...ntrols_OBC_CDL_Integers_Validation_Min.txt | 11 +++++++ ...s_OBC_CDL_Integers_Validation_MultiSum.txt | 12 +++++++ ...s_OBC_CDL_Integers_Validation_Multiply.txt | 11 +++++++ ..._OBC_CDL_Integers_Validation_OnCounter.txt | 11 +++++++ ...rols_OBC_CDL_Integers_Validation_Stage.txt | 14 ++++++++ ...s_OBC_CDL_Integers_Validation_Subtract.txt | 11 +++++++ ...ols_OBC_CDL_Integers_Validation_Switch.txt | 12 +++++++ ...DL_Logical_Sources_Validation_Constant.txt | 9 +++++ ...C_CDL_Logical_Sources_Validation_Pulse.txt | 23 +++++++++++++ ...rces_Validation_PulseNegativeStartTime.txt | 23 +++++++++++++ ...rces_Validation_PulsePositiveStartTime.txt | 23 +++++++++++++ ...gical_Sources_Validation_SampleTrigger.txt | 14 ++++++++ ...idation_SampleTriggerNegativeStartTime.txt | 14 ++++++++ ...idation_SampleTriggerPositiveStartTime.txt | 14 ++++++++ ...L_Logical_Sources_Validation_TimeTable.txt | 14 ++++++++ ..._Validation_TimeTableNegativeStartTime.txt | 14 ++++++++ ...ontrols_OBC_CDL_Logical_Validation_And.txt | 11 +++++++ ...rols_OBC_CDL_Logical_Validation_Change.txt | 12 +++++++ ...ntrols_OBC_CDL_Logical_Validation_Edge.txt | 12 +++++++ ...OBC_CDL_Logical_Validation_FallingEdge.txt | 12 +++++++ ...trols_OBC_CDL_Logical_Validation_Latch.txt | 26 +++++++++++++++ ...ls_OBC_CDL_Logical_Validation_MultiAnd.txt | 20 +++++++++++ ...ols_OBC_CDL_Logical_Validation_MultiOr.txt | 20 +++++++++++ ...ntrols_OBC_CDL_Logical_Validation_Nand.txt | 11 +++++++ ...ontrols_OBC_CDL_Logical_Validation_Nor.txt | 11 +++++++ ...ontrols_OBC_CDL_Logical_Validation_Not.txt | 10 ++++++ ...Controls_OBC_CDL_Logical_Validation_Or.txt | 11 +++++++ ...trols_OBC_CDL_Logical_Validation_Proof.txt | 32 ++++++++++++++++++ ...rols_OBC_CDL_Logical_Validation_Switch.txt | 12 +++++++ ...trols_OBC_CDL_Logical_Validation_Timer.txt | 20 +++++++++++ ...L_Logical_Validation_TimerAccumulating.txt | 22 +++++++++++++ ...ion_TimerAccumulatingNegativeStartTime.txt | 24 ++++++++++++++ ...ical_Validation_TimerNegativeStartTime.txt | 16 +++++++++ ...rols_OBC_CDL_Logical_Validation_Toggle.txt | 26 +++++++++++++++ ...s_OBC_CDL_Logical_Validation_TrueDelay.txt | 26 +++++++++++++++ ...C_CDL_Logical_Validation_TrueFalseHold.txt | 26 +++++++++++++++ ...C_CDL_Logical_Validation_VariablePulse.txt | 22 +++++++++++++ ...ogical_Validation_VariablePulseMinHold.txt | 10 ++++++ ...ontrols_OBC_CDL_Logical_Validation_Xor.txt | 11 +++++++ ...metrics_Validation_DewPoint_TDryBulPhi.txt | 14 ++++++++ ...Validation_SpecificEnthalpy_TDryBulPhi.txt | 10 ++++++ ...ometrics_Validation_WetBulb_TDryBulPhi.txt | 14 ++++++++ ..._Sources_Validation_CalendarTimeMonths.txt | 14 ++++++++ ...ces_Validation_CalendarTimeMonthsMinus.txt | 14 ++++++++ ...rces_Validation_CalendarTimeMonthsPlus.txt | 14 ++++++++ ...CDL_Reals_Sources_Validation_CivilTime.txt | 9 +++++ ..._CDL_Reals_Sources_Validation_Constant.txt | 9 +++++ ...OBC_CDL_Reals_Sources_Validation_Pulse.txt | 9 +++++ ..._OBC_CDL_Reals_Sources_Validation_Ramp.txt | 9 +++++ ...s_OBC_CDL_Reals_Sources_Validation_Sin.txt | 9 +++++ ...CDL_Reals_Sources_Validation_TimeTable.txt | 13 ++++++++ ..._Validation_TimeTableNegativeStartTime.txt | 13 ++++++++ ..._Controls_OBC_CDL_Reals_Validation_Abs.txt | 10 ++++++ ...Controls_OBC_CDL_Reals_Validation_Acos.txt | 10 ++++++ ..._Controls_OBC_CDL_Reals_Validation_Add.txt | 11 +++++++ ..._OBC_CDL_Reals_Validation_AddParameter.txt | 10 ++++++ ...Controls_OBC_CDL_Reals_Validation_Asin.txt | 10 ++++++ ...Controls_OBC_CDL_Reals_Validation_Atan.txt | 10 ++++++ ...ontrols_OBC_CDL_Reals_Validation_Atan2.txt | 11 +++++++ ...trols_OBC_CDL_Reals_Validation_Average.txt | 11 +++++++ ..._Controls_OBC_CDL_Reals_Validation_Cos.txt | 10 ++++++ ...ls_OBC_CDL_Reals_Validation_Derivative.txt | 13 ++++++++ ...ntrols_OBC_CDL_Reals_Validation_Divide.txt | 11 +++++++ ..._Controls_OBC_CDL_Reals_Validation_Exp.txt | 10 ++++++ ...trols_OBC_CDL_Reals_Validation_Greater.txt | 12 +++++++ ..._CDL_Reals_Validation_GreaterThreshold.txt | 12 +++++++ ...ls_OBC_CDL_Reals_Validation_Hysteresis.txt | 14 ++++++++ ...L_Reals_Validation_IntegratorWithReset.txt | 20 +++++++++++ ...Controls_OBC_CDL_Reals_Validation_Less.txt | 12 +++++++ ...OBC_CDL_Reals_Validation_LessThreshold.txt | 12 +++++++ ...OBC_CDL_Reals_Validation_LimitSlewRate.txt | 11 +++++++ ...trols_OBC_CDL_Reals_Validation_Limiter.txt | 10 ++++++ ...Controls_OBC_CDL_Reals_Validation_Line.txt | 12 +++++++ ..._Controls_OBC_CDL_Reals_Validation_Log.txt | 10 ++++++ ...ontrols_OBC_CDL_Reals_Validation_Log10.txt | 10 ++++++ ...ls_OBC_CDL_Reals_Validation_MatrixGain.txt | 17 ++++++++++ ...ols_OBC_CDL_Reals_Validation_MatrixMax.txt | 15 +++++++++ ...ols_OBC_CDL_Reals_Validation_MatrixMin.txt | 16 +++++++++ ..._Controls_OBC_CDL_Reals_Validation_Max.txt | 11 +++++++ ..._Controls_OBC_CDL_Reals_Validation_Min.txt | 11 +++++++ ...ntrols_OBC_CDL_Reals_Validation_Modulo.txt | 11 +++++++ ...OBC_CDL_Reals_Validation_MovingAverage.txt | 20 +++++++++++ ..._Validation_MovingAverage_nonZeroStart.txt | 20 +++++++++++ ...rols_OBC_CDL_Reals_Validation_MultiMax.txt | 14 ++++++++ ...rols_OBC_CDL_Reals_Validation_MultiMin.txt | 14 ++++++++ ...rols_OBC_CDL_Reals_Validation_MultiSum.txt | 19 +++++++++++ ...rols_OBC_CDL_Reals_Validation_Multiply.txt | 11 +++++++ ...L_Reals_Validation_MultiplyByParameter.txt | 10 ++++++ ..._Controls_OBC_CDL_Reals_Validation_PID.txt | 16 +++++++++ ..._Validation_PIDInitialDerivativeOutput.txt | 13 ++++++++ ...C_CDL_Reals_Validation_PIDInitialState.txt | 13 ++++++++ ...rols_OBC_CDL_Reals_Validation_PIDScale.txt | 14 ++++++++ ..._OBC_CDL_Reals_Validation_PIDWithReset.txt | 21 ++++++++++++ ...CDL_Reals_Validation_PIDWithResetScale.txt | 15 +++++++++ ...Controls_OBC_CDL_Reals_Validation_Ramp.txt | 19 +++++++++++ ...ontrols_OBC_CDL_Reals_Validation_Round.txt | 14 ++++++++ ..._Controls_OBC_CDL_Reals_Validation_Sin.txt | 10 ++++++ ...Controls_OBC_CDL_Reals_Validation_Sort.txt | 33 +++++++++++++++++++ ...Controls_OBC_CDL_Reals_Validation_Sqrt.txt | 10 ++++++ ...rols_OBC_CDL_Reals_Validation_Subtract.txt | 11 +++++++ ...ntrols_OBC_CDL_Reals_Validation_Switch.txt | 12 +++++++ ..._Controls_OBC_CDL_Reals_Validation_Tan.txt | 10 ++++++ ...outing_Validation_BooleanExtractSignal.txt | 20 +++++++++++ ...DL_Routing_Validation_BooleanExtractor.txt | 22 +++++++++++++ ...ing_Validation_BooleanScalarReplicator.txt | 12 +++++++ ...Routing_Validation_BooleanVectorFilter.txt | 13 ++++++++ ...ing_Validation_BooleanVectorReplicator.txt | 12 +++++++ ...outing_Validation_IntegerExtractSignal.txt | 20 +++++++++++ ...DL_Routing_Validation_IntegerExtractor.txt | 22 +++++++++++++ ...ing_Validation_IntegerScalarReplicator.txt | 13 ++++++++ ...Routing_Validation_IntegerVectorFilter.txt | 13 ++++++++ ...ing_Validation_IntegerVectorReplicator.txt | 13 ++++++++ ...L_Routing_Validation_RealExtractSignal.txt | 22 +++++++++++++ ...C_CDL_Routing_Validation_RealExtractor.txt | 22 +++++++++++++ ...outing_Validation_RealScalarReplicator.txt | 12 +++++++ ...DL_Routing_Validation_RealVectorFilter.txt | 13 ++++++++ ...outing_Validation_RealVectorReplicator.txt | 12 +++++++ ...ls_OBC_CDL_Utilities_Validation_Assert.txt | 9 +++++ ...BC_CDL_Utilities_Validation_SunRiseSet.txt | 20 +++++++++++ ...Validation_SunRiseSetNegativeStartTime.txt | 20 +++++++++++ ...Validation_SunRiseSetPositiveStartTime.txt | 20 +++++++++++ ...alidation_SupplyReturnTemperatureReset.txt | 14 ++++++++ ...n_SupplyReturnTemperatureResetExponent.txt | 12 +++++++ ...n_OptimalStartCoolingNegativeStartTime.txt | 13 ++++++++ ...n_OptimalStartCoolingPositiveStartTime.txt | 13 ++++++++ ...ilities_Validation_OptimalStartHeating.txt | 13 ++++++++ ..._Validation_OptimalStartHeatingCooling.txt | 18 ++++++++++ ...idation_OptimalStartNoHeatingNoCooling.txt | 14 ++++++++ ...Utilities_Validation_PIDWithInputGains.txt | 17 ++++++++++ 158 files changed, 2194 insertions(+) create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToInteger.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToReal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_IntegerToReal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_RealToInteger.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_Sampler.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Constant.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Pulse.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTable.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTableNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Abs.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Add.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_AddParameter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Change.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Equal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Greater.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqual.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqualThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Less.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqual.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqualThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Max.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Min.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_MultiSum.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Multiply.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_OnCounter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Stage.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Subtract.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Switch.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Constant.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Pulse.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulseNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulsePositiveStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTrigger.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerPositiveStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTable.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTableNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_And.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Change.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Edge.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_FallingEdge.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Latch.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiAnd.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiOr.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nand.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nor.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Not.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Or.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Proof.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Switch.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Timer.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulating.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulatingNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Toggle.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueDelay.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueFalseHold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulse.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulseMinHold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Xor.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_DewPoint_TDryBulPhi.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_SpecificEnthalpy_TDryBulPhi.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_WetBulb_TDryBulPhi.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CivilTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Abs.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Acos.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Add.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_AddParameter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Asin.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan2.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Average.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Cos.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Derivative.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Divide.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Exp.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Greater.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Less.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Limiter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Line.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log10.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Max.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Min.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Modulo.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMax.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMin.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiSum.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Multiply.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PID.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDScale.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Ramp.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Round.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sin.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sort.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sqrt.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Subtract.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Switch.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Tan.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractSignal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractor.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanScalarReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorFilter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractSignal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractor.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerScalarReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorFilter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractSignal.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractor.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealScalarReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorFilter.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorReplicator.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_Assert.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSet.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetPositiveStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureReset.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureResetExponent.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingNegativeStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingPositiveStartTime.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeating.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeatingCooling.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartNoHeatingNoCooling.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_PIDWithInputGains.txt diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToInteger.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToInteger.txt new file mode 100644 index 0000000000..fc2e202fb1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToInteger.txt @@ -0,0 +1,10 @@ +last-generated=2018-06-26 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +booToInt.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 4e+00] +booToInt.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToReal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToReal.txt new file mode 100644 index 0000000000..2d2c1d84b7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_BooleanToReal.txt @@ -0,0 +1,10 @@ +last-generated=2018-06-26 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +booToRea.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 4e+00] +booToRea.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_IntegerToReal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_IntegerToReal.txt new file mode 100644 index 0000000000..0b44b99cc5 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_IntegerToReal.txt @@ -0,0 +1,10 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +intToRea.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +time=[0e+00, 1e+00] +intToRea.y=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_RealToInteger.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_RealToInteger.txt new file mode 100644 index 0000000000..f84307855e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Conversions_Validation_RealToInteger.txt @@ -0,0 +1,10 @@ +last-generated=2017-04-06 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +reaToInt.u=[-3.5e+00, -3.430000065192561e+00, -3.359999891966595e+00, -3.289999957159187e+00, -3.22000002235177e+00, -3.150000100582814e+00, -3.079999914318365e+00, -3.009999992549414e+00, -2.940000044703563e+00, -2.869999910593299e+00, -2.79999996274703e+00, -2.730000014901188e+00, -2.660000067055026e+00, -2.589999880790923e+00, -2.519999985098812e+00, -2.450000089406701e+00, -2.380000089406701e+00, -2.309999955296437e+00, -2.240000059604325e+00, -2.170000059604467e+00, -2.099999925494416e+00, -2.029999925494487e+00, -1.960000029802305e+00, -1.890000014901223e+00, -1.820000014901081e+00, -1.75e+00, -1.679999880791137e+00, -1.610000089406487e+00, -1.539999970197695e+00, -1.469999970197553e+00, -1.400000059604823e+00, -1.330000059604538e+00, -1.259999940395675e+00, -1.190000149011026e+00, -1.120000029802162e+00, -1.049999910593299e+00, -9.800001192090765e-01, -9.100000596045738e-01, -8.399999403954262e-01, -7.699998807909235e-01, -7.000000298022334e-01, -6.29999970197731e-01, -5.599999105932283e-01, -4.900000596044956e-01, -4.199999701977131e-01, -3.499999105932104e-01, -2.800000596045203e-01, -2.099999850988568e-01, -1.39999925494354e-01, -7.000006705508333e-02, 0e+00, 7.000006705408858e-02, 1.400001341081772e-01, 2.100001937118983e-01, 2.799998509909462e-01, 3.499999105944542e-01, 4.199999701974648e-01, 4.900000596034507e-01, 5.600001192072998e-01, 6.300001788108077e-01, 6.999998211889077e-01, 7.699998807924157e-01, 8.399999403959236e-01, 9.100000596040764e-01, 9.800001192075843e-01, 1.050000119207158e+00, 1.119999821188411e+00, 1.189999940396848e+00, 1.259999940396421e+00, 1.330000059604787e+00, 1.400000059603579e+00, 1.470000178810737e+00, 1.539999761585684e+00, 1.609999880792416e+00, 1.679999880792131e+00, 1.75e+00, 1.820000119207869e+00, 1.890000119207584e+00, 1.960000238414316e+00, 2.029999821189263e+00, 2.099999821187842e+00, 2.170000059604219e+00, 2.240000059603579e+00, 2.310000059602157e+00, 2.380000298019316e+00, 2.449999880794263e+00, 2.519999880792842e+00, 2.589999880791421e+00, 2.660000119208579e+00, 2.730000119207158e+00, 2.800000119205737e+00, 2.869999701980684e+00, 2.939999940397843e+00, 3.009999940396421e+00, 3.079999940395781e+00, 3.150000178812158e+00, 3.220000178810737e+00, 3.289999761585684e+00, 3.359999761584263e+00, 3.430000000000284e+00, 3.5e+00] +reaToInt.y=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt new file mode 100644 index 0000000000..84d6736277 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_FirstOrderHold.txt @@ -0,0 +1,10 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +firOrdHol.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.654508006550342e-01, 9.309017021001379e-01, 8.963525439407923e-01, 8.61803393903822e-01, 8.272542357444763e-01, 7.927050857075059e-01, 7.581559790304299e-01, 7.236068289934239e-01, 6.890576193518444e-01, 6.545085722790579e-01, 6.199593626377979e-01, 5.854102126008275e-01, 5.508611059237515e-01, 5.163118962821363e-01, 4.81762746245166e-01, 4.472136693701992e-01, 4.126644895310485e-01, 3.781153096918267e-01, 3.435661000504246e-01, 3.090170231754578e-01, 2.531153061741589e-01, 1.972135466435526e-01, 1.413119537126491e-01, 8.541020163260561e-02, 2.950845141520063e-02, -2.639313406513727e-02, -8.229488800783058e-02, -1.381966326373023e-01, -1.940982255682059e-01, -2.499999701976776e-01, -3.059017297275162e-01, -3.618034892573547e-01, -4.17705248786767e-01, -4.736066453202155e-01, -5.295084048500541e-01, -5.854101643794954e-01, -6.413119239097306e-01, -6.972136834395691e-01, -7.531154429694077e-01, -8.090168097001076e-01, -8.090169429779053e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -7.53115369296652e-01, -6.972136097664169e-01, -6.413118502365783e-01, -5.854100907067398e-01, -5.295086643713951e-01, -4.736069346438789e-01, -4.177051751140404e-01, -3.618034155842018e-01, -3.059016858566856e-01, -2.499999263268471e-01, -1.940985148924682e-01, -1.381967553628251e-01, -8.229501073412107e-02, -2.639325679185135e-02, 2.950849342434539e-02, 8.541024550362555e-02, 1.413116643883896e-01, 1.97213409017067e-01, 2.531151536458154e-01, 3.090169131755829e-01] +firOrdHol.u=[1e+00, 9.980267285330768e-01, 9.92114722359185e-01, 9.822872272920056e-01, 9.685831651680721e-01, 9.51056541430958e-01, 9.297764865835308e-01, 9.048270591019025e-01, 8.76306707153081e-01, 8.443279385564225e-01, 8.090170080380417e-01, 7.705132341174212e-01, 7.289686086868863e-01, 6.845471043246666e-01, 6.374239950275337e-01, 5.877852741471401e-01, 5.358267832061716e-01, 4.817536869409707e-01, 4.257793533913588e-01, 3.681245604602735e-01, 3.090170203545645e-01, 2.486898648442655e-01, 1.873813346873295e-01, 1.253332904574954e-01, 6.279050918949433e-02, 2.679489696788551e-08, -6.279055046444852e-02, -1.253331379345707e-01, -1.873812750826938e-01, -2.486899108059576e-01, -3.090169014013807e-01, -3.681245008556288e-01, -4.25779293786714e-01, -4.8175357487978e-01, -5.358267236016335e-01, -5.877852741471399e-01, -6.3742386293947e-01, -6.845470447200218e-01, -7.289686406717961e-01, -7.70513293378626e-01, -8.090169207752662e-01, -8.443279385564224e-01, -8.763066922604196e-01, -9.048270389253867e-01, -9.297764951615509e-01, -9.51056503105246e-01, -9.685831532414171e-01, -9.822872294646928e-01, -9.921147307568511e-01, -9.980267244918735e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.04827038925889e-01, -8.763066615344267e-01, -8.443278970741832e-01, -8.090170898698266e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471043249939e-01, -6.374239821493705e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538283042127e-01, -4.257793831930767e-01, -3.68124620064675e-01, -3.090169908094118e-01, -2.486898336217616e-01, -1.873815631169426e-01, -1.253334279713343e-01, -6.279065477168613e-02, -8.038468735094284e-08, 6.27904983094936e-02, 1.253332640585611e-01, 1.873814141051175e-01, 2.486896697091483e-01, 3.090168417977998e-01, 3.681244710530631e-01, 4.257792639837872e-01, 4.817536792926008e-01, 5.358268812191928e-01, 5.877850626424818e-01, 6.374238629400809e-01, 6.84547044720207e-01, 7.289685810669899e-01, 7.70513233773134e-01, 8.090170302644712e-01, 8.443277778656753e-01, 8.763066019297819e-01, 9.048269793210311e-01, 9.297764355570579e-01, 9.510565031049077e-01, 9.685831397019916e-01, 9.822871933156057e-01, 9.921146473576923e-01, 9.980267244919351e-01, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_Sampler.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_Sampler.txt new file mode 100644 index 0000000000..70da889665 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_Sampler.txt @@ -0,0 +1,10 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +sampler1.u=[0e+00, 6.279052189025491e-02, 1.25333237452147e-01, 1.87381316384595e-01, 2.486898953400241e-01, 3.090169981213527e-01, 3.681245524355013e-01, 4.257792813474344e-01, 4.817536869409441e-01, 5.358267832061716e-01, 5.877852363791168e-01, 6.37423995027516e-01, 6.845471385054688e-01, 7.289686406719382e-01, 7.705132341174212e-01, 8.090169803797332e-01, 8.443279385564225e-01, 8.763066475484895e-01, 9.048270389253867e-01, 9.297764951615509e-01, 9.510564745096004e-01, 9.685831765931435e-01, 9.822872294646928e-01, 9.921147192796552e-01, 9.980267305350982e-01, 1e+00, 9.980267244918735e-01, 9.921147307571708e-01, 9.822872294647284e-01, 9.685831532414171e-01, 9.510565627098908e-01, 9.29776495161622e-01, 9.048270389253867e-01, 8.763067518650643e-01, 8.44327938556529e-01, 8.09016980379911e-01, 7.705133529832707e-01, 7.289687002764409e-01, 6.845471043246666e-01, 6.374239225441147e-01, 5.877853337517847e-01, 5.358268428108165e-01, 4.817536344844248e-01, 4.257793831936812e-01, 3.681245902625959e-01, 3.090169610060254e-01, 2.486899853117014e-01, 1.873813495884997e-01, 1.253332124403766e-01, 6.279063242083509e-02, 5.358979038305733e-08, -6.279052811178046e-02, -1.253332938608835e-01, -1.873814290064919e-01, -2.486896995113108e-01, -3.090168716001222e-01, -3.681244710530986e-01, -4.257792639837872e-01, -4.817537090949232e-01, -5.358268812191928e-01, -5.877850626424818e-01, -6.374238629405072e-01, -6.845470447203491e-01, -7.289685810669899e-01, -7.70513233773134e-01, -8.090170302644712e-01, -8.443277778656753e-01, -8.763066019297819e-01, -9.048269793212442e-01, -9.297764355570579e-01, -9.510565031049077e-01, -9.685831993059969e-01, -9.822871933156057e-01, -9.921146473576923e-01, -9.980267244919351e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.048270985303206e-01, -8.763066615349241e-01, -8.443278970749648e-01, -8.090171494737608e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471639296387e-01, -6.374239821497968e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538581065351e-01, -4.257794129953991e-01, -3.681246200647105e-01, -3.090170206117341e-01, -2.486898634240839e-01, -1.87381592919265e-01, -1.253334577736566e-01, -6.279068457400852e-02, -1.07179587871542e-07] +sampler1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt new file mode 100644 index 0000000000..68e098daf7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMax.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +triggeredMax.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01, 9.510565400123596e-01] +triggeredMax.u=[0e+00, 6.279052189025491e-02, 1.25333237452147e-01, 1.87381316384595e-01, 2.486898953400241e-01, 3.090169981213527e-01, 3.681245524355013e-01, 4.257792813474344e-01, 4.817536869409441e-01, 5.358267832061716e-01, 5.877852363791168e-01, 6.37423995027516e-01, 6.845471385054688e-01, 7.289686406719382e-01, 7.705132341174212e-01, 8.090169803797332e-01, 8.443279385564225e-01, 8.763066475484895e-01, 9.048270389253867e-01, 9.297764951615509e-01, 9.510564745096004e-01, 9.685831765931435e-01, 9.822872294646928e-01, 9.921147192796552e-01, 9.980267305350982e-01, 1e+00, 9.980267244918735e-01, 9.921147307571708e-01, 9.822872294647284e-01, 9.685831532414171e-01, 9.510565627098908e-01, 9.29776495161622e-01, 9.048270389253867e-01, 8.763067518650643e-01, 8.44327938556529e-01, 8.09016980379911e-01, 7.705133529832707e-01, 7.289687002764409e-01, 6.845471043246666e-01, 6.374239225441147e-01, 5.877853337517847e-01, 5.358268428108165e-01, 4.817536344844248e-01, 4.257793831936812e-01, 3.681245902625959e-01, 3.090169610060254e-01, 2.486899853117014e-01, 1.873813495884997e-01, 1.253332124403766e-01, 6.279063242083509e-02, 5.358979393577101e-08, -6.279052811178046e-02, -1.253332938608835e-01, -1.873814290064919e-01, -2.486896995113108e-01, -3.090168716001222e-01, -3.681244710530986e-01, -4.257792639837872e-01, -4.817537090949232e-01, -5.358268812191928e-01, -5.877850626424818e-01, -6.374238629405072e-01, -6.845470447203491e-01, -7.289685810669899e-01, -7.70513233773134e-01, -8.090170302644712e-01, -8.443277778656753e-01, -8.763066019297819e-01, -9.048269793212442e-01, -9.297764355570579e-01, -9.510565031049077e-01, -9.685831993059969e-01, -9.822871933156057e-01, -9.921146473576923e-01, -9.980267244919351e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.048270985303206e-01, -8.763066615349241e-01, -8.443278970749648e-01, -8.090171494737608e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471639296387e-01, -6.374239821497968e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538581065351e-01, -4.257794129953991e-01, -3.681246200647105e-01, -3.090170206117341e-01, -2.486898634240839e-01, -1.87381592919265e-01, -1.253334577736566e-01, -6.279068457400852e-02, -1.07179587871542e-07] +time=[0e+00, 1e+00] +triggeredMax.trigger=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt new file mode 100644 index 0000000000..9c91fe06e9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredMovingMean.txt @@ -0,0 +1,14 @@ +last-generated=2019-11-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +triMovMea1.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 9.659258127212524e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 8.660253882408142e-01, 2.588329411686482e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, 2.58819043636322e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -9.659151487697784e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -9.659258127212524e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -8.660253882408142e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01, -2.58819043636322e-01] +triMovMea.u=[5e-01, 6.014664761625028e-01, 6.940303431224256e-01, 7.763215304147594e-01, 8.471218954572036e-01, 9.053836444491157e-01, 9.502442460986447e-01, 9.81039825166185e-01, 9.973144524855669e-01, 9.988273373113585e-01, 9.855560592452735e-01, 9.576970431879718e-01, 9.156625910792943e-01, 8.600749314947155e-01, 7.917568474510011e-01, 7.11719658129379e-01, 6.211477634337024e-01, 5.213820273864654e-01, 4.138989770374305e-01, 3.002895806922236e-01, 1.822354502526237e-01, 6.148414336605637e-02, -6.017741160777051e-02, -1.809482429551963e-01, -2.990407728508002e-01, -4.127070307731628e-01, -5.202645849902316e-01, -6.201214543432193e-01, -7.107995024713668e-01, -7.909566712565899e-01, -8.59406372571603e-01, -9.151357344746229e-01, -9.573194890543621e-01, -9.853335904124509e-01, -9.987631445789033e-01, -9.97409471884688e-01, -9.812926527540375e-01, -9.506512597456115e-01, -9.059385797843665e-01, -8.478167964622497e-01, -7.771458861072825e-01, -6.949721681218675e-01, -6.025119066129268e-01, -5.011331773993932e-01, -3.923372369748858e-01, -2.777337604438136e-01, -1.590197822870765e-01, -3.795167372273422e-02, 8.367779838870022e-02, 2.040690749453934e-01, 3.214394748210907e-01, 4.340520498189372e-01, 5.402403849040974e-01, 6.384319327476536e-01, 7.271740449482663e-01, 8.051528293793221e-01, 8.712136735627454e-01, 9.243796350130378e-01, 9.63863360403877e-01, 9.890801929538597e-01, 9.996573271530925e-01, 9.954379136508218e-01, 9.764844757927637e-01, 9.430777104161433e-01, 8.957118055813571e-01, 8.35087871074764e-01, 7.621033811027919e-01, 6.778390522139012e-01, 5.835411899253222e-01, 4.806059569398766e-01, 3.70557704302947e-01, 2.550239537545757e-01, 1.357154551069016e-01, 1.439813910256098e-02, -1.071315480732013e-01, -2.270762622356415e-01, -3.436598950159814e-01, -4.551561502577352e-01, -5.599160385472161e-01, -6.563883498595448e-01, -7.431450079442803e-01, -8.189015777244697e-01, -8.825375293645313e-01, -9.331105977372743e-01, -9.698719075143097e-01, -9.922778998577637e-01, -9.99996601962562e-01, -9.92913689373696e-01, -9.711343661248995e-01, -9.349805322352361e-01, -8.849875809445433e-01, -8.21895331384541e-01, -7.466382967631414e-01, -6.60329378754925e-01, -5.642465146045756e-01, -4.598126372729628e-01, -3.485721294190688e-01, -2.32172223260452e-01, -1.123357861520096e-01, 9.162640961086186e-03, 1.305261850357056e-01] +triMovMea.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 7.329629063606262e-01, 7.329629063606262e-01, 7.329629063606262e-01, 7.329629063606262e-01, 7.329629063606262e-01, 7.329629063606262e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01, -2.082814872264862e-01, -2.082814872264862e-01, -2.082814872264862e-01, -2.082814872264862e-01, -2.082814872264862e-01, -2.082814872264862e-01, -2.082814872264862e-01, 4.023689329624176e-01, 4.023689329624176e-01, 4.023689329624176e-01, 4.023689329624176e-01, 4.023689329624176e-01, 4.023689329624176e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 7.773170471191406e-01, 6.969252747560057e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 6.969234347343445e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, 2.082814872264862e-01, -4.023549566033692e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -4.023689329624176e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -7.773170471191406e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01, -6.969234347343445e-01] +time=[-5e-01, 1.5e+01] +booPul.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999771123400644e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] +triMovMea2.y=[5e-01, 5e-01, 5e-01, 5e-01, 6.466766595840454e-01, 6.466766595840454e-01, 6.466766595840454e-01, 6.466766595840454e-01, 6.466766595840454e-01, 6.466766595840454e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.615994215011597e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -7.978495828672888e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -4.8989337682724e-01, -4.8989337682724e-01, -4.8989337682724e-01, -4.8989337682724e-01, -4.8989337682724e-01, -4.8989337682724e-01, 1.050393655896187e-01, 1.050393655896187e-01, 1.050393655896187e-01, 1.050393655896187e-01, 1.050393655896187e-01, 1.050393655896187e-01, 1.050393655896187e-01, 6.384414434432983e-01, 6.384414434432983e-01, 6.384414434432983e-01, 6.384414434432983e-01, 6.384414434432983e-01, 6.384414434432983e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 7.978532314300537e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, 4.8989337682724e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -1.050393655896187e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -6.384414434432983e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01, -7.978532314300537e-01] +booPul1.y=[0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt new file mode 100644 index 0000000000..83be6c844d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_TriggeredSampler.txt @@ -0,0 +1,12 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +booPul.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sin1.y=[0e+00, 6.279052189025491e-02, 1.25333237452147e-01, 1.87381316384595e-01, 2.486898953400241e-01, 3.090169981213527e-01, 3.681245524355013e-01, 4.257792813474344e-01, 4.817536869409441e-01, 5.358267832061716e-01, 5.877852363791168e-01, 6.37423995027516e-01, 6.845471385054688e-01, 7.289686406719382e-01, 7.705132341174212e-01, 8.090169803797332e-01, 8.443279385564225e-01, 8.763066475484895e-01, 9.048270389253867e-01, 9.297764951615509e-01, 9.510564745096004e-01, 9.685831765931435e-01, 9.822872294646928e-01, 9.921147192796552e-01, 9.980267305350982e-01, 1e+00, 9.980267244918735e-01, 9.921147307571708e-01, 9.822872294647284e-01, 9.685831532414171e-01, 9.510565627098908e-01, 9.29776495161622e-01, 9.048270389253867e-01, 8.763067518650643e-01, 8.44327938556529e-01, 8.09016980379911e-01, 7.705133529832707e-01, 7.289687002764409e-01, 6.845471043246666e-01, 6.374239225441147e-01, 5.877853337517847e-01, 5.358268428108165e-01, 4.817536344844248e-01, 4.257793831936812e-01, 3.681245902625959e-01, 3.090169610060254e-01, 2.486899853117014e-01, 1.873813495884997e-01, 1.253332124403766e-01, 6.279063242083509e-02, 5.358979393577101e-08, -6.279052811178046e-02, -1.253332938608835e-01, -1.873814290064919e-01, -2.486896995113108e-01, -3.090168716001222e-01, -3.681244710530986e-01, -4.257792639837872e-01, -4.817537090949232e-01, -5.358268812191928e-01, -5.877850626424818e-01, -6.374238629405072e-01, -6.845470447203491e-01, -7.289685810669899e-01, -7.70513233773134e-01, -8.090170302644712e-01, -8.443277778656753e-01, -8.763066019297819e-01, -9.048269793212442e-01, -9.297764355570579e-01, -9.510565031049077e-01, -9.685831993059969e-01, -9.822871933156057e-01, -9.921146473576923e-01, -9.980267244919351e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.048270985303206e-01, -8.763066615349241e-01, -8.443278970749648e-01, -8.090171494737608e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471639296387e-01, -6.374239821497968e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538581065351e-01, -4.257794129953991e-01, -3.681246200647105e-01, -3.090170206117341e-01, -2.486898634240839e-01, -1.87381592919265e-01, -1.253334577736566e-01, -6.279068457400852e-02, -1.07179587871542e-07] +triSam.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01] +triSam1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01, -9.510565400123596e-01] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt new file mode 100644 index 0000000000..aec709f133 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_UnitDelay.txt @@ -0,0 +1,10 @@ +last-generated=2024-08-08 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +unitDelay1.u=[0e+00, 6.279052189025491e-02, 1.25333237452147e-01, 1.87381316384595e-01, 2.486898953400241e-01, 3.090169981213527e-01, 3.681245524355013e-01, 4.257792813474344e-01, 4.817536869409441e-01, 5.358267832061716e-01, 5.877852363791168e-01, 6.37423995027516e-01, 6.845471385054688e-01, 7.289686406719382e-01, 7.705132341174212e-01, 8.090169803797332e-01, 8.443279385564225e-01, 8.763066475484895e-01, 9.048270389253867e-01, 9.297764951615509e-01, 9.510564745096004e-01, 9.685831765931435e-01, 9.822872294646928e-01, 9.921147192796552e-01, 9.980267305350982e-01, 1e+00, 9.980267244918735e-01, 9.921147307571708e-01, 9.822872294647284e-01, 9.685831532414171e-01, 9.510565627098908e-01, 9.29776495161622e-01, 9.048270389253867e-01, 8.763067518650643e-01, 8.44327938556529e-01, 8.09016980379911e-01, 7.705133529832707e-01, 7.289687002764409e-01, 6.845471043246666e-01, 6.374239225441147e-01, 5.877853337517847e-01, 5.358268428108165e-01, 4.817536344844248e-01, 4.257793831936812e-01, 3.681245902625959e-01, 3.090169610060254e-01, 2.486899853117014e-01, 1.873813495884997e-01, 1.253332124403766e-01, 6.279063242083509e-02, 5.358979393577101e-08, -6.279052811178046e-02, -1.253332938608835e-01, -1.873814290064919e-01, -2.486896995113108e-01, -3.090168716001222e-01, -3.681244710530986e-01, -4.257792639837872e-01, -4.817537090949232e-01, -5.358268812191928e-01, -5.877850626424818e-01, -6.374238629405072e-01, -6.845470447203491e-01, -7.289685810669899e-01, -7.70513233773134e-01, -8.090170302644712e-01, -8.443277778656753e-01, -8.763066019297819e-01, -9.048269793212442e-01, -9.297764355570579e-01, -9.510565031049077e-01, -9.685831993059969e-01, -9.822871933156057e-01, -9.921146473576923e-01, -9.980267244919351e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.048270985303206e-01, -8.763066615349241e-01, -8.443278970749648e-01, -8.090171494737608e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471639296387e-01, -6.374239821497968e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538581065351e-01, -4.257794129953991e-01, -3.681246200647105e-01, -3.090170206117341e-01, -2.486898634240839e-01, -1.87381592919265e-01, -1.253334577736566e-01, -6.279068457400852e-02, -1.07179587871542e-07] +unitDelay1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 9.510564804077148e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, 5.877853035926819e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01, -5.877851843833923e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt new file mode 100644 index 0000000000..495ac7086d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Discrete_Validation_ZeroOrderHold.txt @@ -0,0 +1,10 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +zerOrdHol.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, 3.0901700258255e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.090169429779053e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, -8.0901700258255e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01, 3.090169131755829e-01] +zerOrdHol.u=[1e+00, 9.980267285330768e-01, 9.92114722359185e-01, 9.822872272920056e-01, 9.685831651680721e-01, 9.51056541430958e-01, 9.297764865835308e-01, 9.048270591019025e-01, 8.76306707153081e-01, 8.443279385564225e-01, 8.090170080380417e-01, 7.705132341174212e-01, 7.289686086868863e-01, 6.845471043246666e-01, 6.374239950275337e-01, 5.877852741471401e-01, 5.358267832061716e-01, 4.817536869409707e-01, 4.257793533913588e-01, 3.681245604602735e-01, 3.090170203545645e-01, 2.486898648442655e-01, 1.873813346873295e-01, 1.253332904574954e-01, 6.279050918949433e-02, 2.679489519152867e-08, -6.279055046444852e-02, -1.253331379345707e-01, -1.873812750826938e-01, -2.486899108059576e-01, -3.090169014013807e-01, -3.681245008556288e-01, -4.25779293786714e-01, -4.8175357487978e-01, -5.358267236016335e-01, -5.877852741471399e-01, -6.3742386293947e-01, -6.845470447200218e-01, -7.289686406717961e-01, -7.70513293378626e-01, -8.090169207752662e-01, -8.443279385564224e-01, -8.763066922604196e-01, -9.048270389253867e-01, -9.297764951615509e-01, -9.51056503105246e-01, -9.685831532414171e-01, -9.822872294646928e-01, -9.921147307568511e-01, -9.980267244918735e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.04827038925889e-01, -8.763066615344267e-01, -8.443278970741832e-01, -8.090170898698266e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471043249939e-01, -6.374239821493705e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538283042127e-01, -4.257793831930767e-01, -3.68124620064675e-01, -3.090169908094118e-01, -2.486898336217616e-01, -1.873815631169426e-01, -1.253334279713343e-01, -6.279065477168613e-02, -8.038468735094284e-08, 6.27904983094936e-02, 1.253332640585611e-01, 1.873814141051175e-01, 2.486896697091483e-01, 3.090168417977998e-01, 3.681244710530631e-01, 4.257792639837872e-01, 4.817536792926008e-01, 5.358268812191928e-01, 5.877850626424818e-01, 6.374238629400809e-01, 6.84547044720207e-01, 7.289685810669899e-01, 7.70513233773134e-01, 8.090170302644712e-01, 8.443277778656753e-01, 8.763066019297819e-01, 9.048269793210311e-01, 9.297764355570579e-01, 9.510565031049077e-01, 9.685831397019916e-01, 9.822871933156057e-01, 9.921146473576923e-01, 9.980267244919351e-01, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Constant.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Constant.txt new file mode 100644 index 0000000000..b7b9df4f2d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Constant.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +con.y=[5e+00, 5e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Pulse.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Pulse.txt new file mode 100644 index 0000000000..0a4bdb3cc8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_Pulse.txt @@ -0,0 +1,12 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +pul.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pul1.y=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +pul2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pul3.y=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTable.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTable.txt new file mode 100644 index 0000000000..8a4eae8219 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTable.txt @@ -0,0 +1,13 @@ +last-generated=2020-10-08 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.5e+01] +intTimTab.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.999974569266936e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intTimTab.y[2]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.999961853900403e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00] +intTimTab1.y[1]=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +intTimTab1.y[2]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00] +tabOneRow.y[1]=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTableNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTableNegativeStartTime.txt new file mode 100644 index 0000000000..187aaf6ee7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Sources_Validation_TimeTableNegativeStartTime.txt @@ -0,0 +1,13 @@ +last-generated=2020-10-08 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-5e+00, 1e+01] +intTimTab.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.000001589452388e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intTimTab.y[2]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 3.999996821095224e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00] +intTimTab1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +intTimTab1.y[2]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +tabOneRow.y[1]=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Abs.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Abs.txt new file mode 100644 index 0000000000..c8f69ac5ed --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Abs.txt @@ -0,0 +1,10 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +abs1.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +abs1.y=[4e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Add.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Add.txt new file mode 100644 index 0000000000..c534d2847c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Add.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +add1.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +add1.u2=[-1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.999994993219981e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +add1.y=[-5e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2.999989986439961e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00, 9e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_AddParameter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_AddParameter.txt new file mode 100644 index 0000000000..c45957d4a3 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_AddParameter.txt @@ -0,0 +1,10 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +addPar.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +addPar.y=[1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.999994993219981e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Change.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Change.txt new file mode 100644 index 0000000000..e13770f24c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Change.txt @@ -0,0 +1,19 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +reaToInt.y=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cha.u=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +cha.up=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +cha.down=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +changeSampler.u=[0e+00, 2.000000074505789e-01, 4.000000149011579e-01, 6.000000372528755e-01, 8.000000298023024e-01, 9.999999850988333e-01, 1.200000074505776e+00, 1.399999970197673e+00, 1.600000059604538e+00, 1.799999880790923e+00, 1.999999970197766e+00, 2.200000059604609e+00, 2.400000149011452e+00, 2.600000000000284e+00, 2.799999940395391e+00, 2.999999880791066e+00, 3.200000119209077e+00, 3.400000059604539e+00, 3.599999761581847e+00, 3.799999999999858e+00, 3.999999940395533e+00, 4.199999940394965e+00, 4.400000119209219e+00, 4.599999821186315e+00, 4.800000298022904e+00, 5e+00, 5.199999999999432e+00, 5.39999988079135e+00, 5.599999880790782e+00, 5.800000357627371e+00, 5.999999761582131e+00, 6.199999761581563e+00, 6.400000238418153e+00, 6.599999642372913e+00, 6.800000119209503e+00, 7.000000119208934e+00, 7.199999523163694e+00, 7.400000000000285e+00, 7.599999999999716e+00, 7.800000476836306e+00, 7.999999880791066e+00, 8.199999880790497e+00, 8.399999880789929e+00, 8.600000238419005e+00, 8.800000238418438e+00, 9.000000238417869e+00, 9.19999964237263e+00, 9.399999642372061e+00, 9.600000596045808e+00, 9.800000000000569e+00, 1e+01, 1.019999999999659e+01, 1.039999999999318e+01, 1.060000095366409e+01, 1.07999997615891e+01, 1.099999976158568e+01, 1.119999976158085e+01, 1.139999976157886e+01, 1.160000071524977e+01, 1.180000071524636e+01, 1.199999952317137e+01, 1.219999952316796e+01, 1.239999952316455e+01, 1.260000047683545e+01, 1.280000047683204e+01, 1.300000047682863e+01, 1.319999928475364e+01, 1.339999928475023e+01, 1.360000023842114e+01, 1.380000023841915e+01, 1.400000023841432e+01, 1.42000002384109e+01, 1.439999904633591e+01, 1.460000000000682e+01, 1.480000000000341e+01, 1.5e+01, 1.519999999999659e+01, 1.539999999999318e+01, 1.560000095366409e+01, 1.57999997615891e+01, 1.599999976158568e+01, 1.620000071525403e+01, 1.639999976158227e+01, 1.660000071524181e+01, 1.679999976158455e+01, 1.699999952316e+01, 1.720000047683545e+01, 1.739999952316682e+01, 1.760000047683318e+01, 1.779999952316455e+01, 1.800000047684e+01, 1.820000023841545e+01, 1.839999928475819e+01, 1.860000023841773e+01, 1.879999928474597e+01, 1.900000023842e+01, 1.920000119207499e+01, 1.939999904634956e+01, 1.959999999999773e+01, 1.979999904633364e+01, 2e+01] +changeSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.000002384145424e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01] +increaseSampler.u=[0e+00, 2.000000074505789e-01, 4.000000149011579e-01, 6.000000372528755e-01, 8.000000298023024e-01, 9.999999850988333e-01, 1.200000074505776e+00, 1.399999970197673e+00, 1.600000059604538e+00, 1.799999880790923e+00, 1.999999970197766e+00, 2.200000059604609e+00, 2.400000149011452e+00, 2.600000000000284e+00, 2.799999940395391e+00, 2.999999880791066e+00, 3.200000119209077e+00, 3.400000059604539e+00, 3.599999761581847e+00, 3.799999999999858e+00, 3.999999940395533e+00, 4.199999940394965e+00, 4.400000119209219e+00, 4.599999821186315e+00, 4.800000298022904e+00, 5e+00, 5.199999999999432e+00, 5.39999988079135e+00, 5.599999880790782e+00, 5.800000357627371e+00, 5.999999761582131e+00, 6.199999761581563e+00, 6.400000238418153e+00, 6.599999642372913e+00, 6.800000119209503e+00, 7.000000119208934e+00, 7.199999523163694e+00, 7.400000000000285e+00, 7.599999999999716e+00, 7.800000476836306e+00, 7.999999880791066e+00, 8.199999880790497e+00, 8.399999880789929e+00, 8.600000238419005e+00, 8.800000238418438e+00, 9.000000238417869e+00, 9.19999964237263e+00, 9.399999642372061e+00, 9.600000596045808e+00, 9.800000000000569e+00, 1e+01, 1.019999999999659e+01, 1.039999999999318e+01, 1.060000095366409e+01, 1.07999997615891e+01, 1.099999976158568e+01, 1.119999976158085e+01, 1.139999976157886e+01, 1.160000071524977e+01, 1.180000071524636e+01, 1.199999952317137e+01, 1.219999952316796e+01, 1.239999952316455e+01, 1.260000047683545e+01, 1.280000047683204e+01, 1.300000047682863e+01, 1.319999928475364e+01, 1.339999928475023e+01, 1.360000023842114e+01, 1.380000023841915e+01, 1.400000023841432e+01, 1.42000002384109e+01, 1.439999904633591e+01, 1.460000000000682e+01, 1.480000000000341e+01, 1.5e+01, 1.519999999999659e+01, 1.539999999999318e+01, 1.560000095366409e+01, 1.57999997615891e+01, 1.599999976158568e+01, 1.620000071525403e+01, 1.639999976158227e+01, 1.660000071524181e+01, 1.679999976158455e+01, 1.699999952316e+01, 1.720000047683545e+01, 1.739999952316682e+01, 1.760000047683318e+01, 1.779999952316455e+01, 1.800000047684e+01, 1.820000023841545e+01, 1.839999928475819e+01, 1.860000023841773e+01, 1.879999928474597e+01, 1.900000023842e+01, 1.920000119207499e+01, 1.939999904634956e+01, 1.959999999999773e+01, 1.979999904633364e+01, 2e+01] +increaseSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6.000047682908479e+00, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01] +decreaseSampler.u=[0e+00, 2.000000074505789e-01, 4.000000149011579e-01, 6.000000372528755e-01, 8.000000298023024e-01, 9.999999850988333e-01, 1.200000074505776e+00, 1.399999970197673e+00, 1.600000059604538e+00, 1.799999880790923e+00, 1.999999970197766e+00, 2.200000059604609e+00, 2.400000149011452e+00, 2.600000000000284e+00, 2.799999940395391e+00, 2.999999880791066e+00, 3.200000119209077e+00, 3.400000059604539e+00, 3.599999761581847e+00, 3.799999999999858e+00, 3.999999940395533e+00, 4.199999940394965e+00, 4.400000119209219e+00, 4.599999821186315e+00, 4.800000298022904e+00, 5e+00, 5.199999999999432e+00, 5.39999988079135e+00, 5.599999880790782e+00, 5.800000357627371e+00, 5.999999761582131e+00, 6.199999761581563e+00, 6.400000238418153e+00, 6.599999642372913e+00, 6.800000119209503e+00, 7.000000119208934e+00, 7.199999523163694e+00, 7.400000000000285e+00, 7.599999999999716e+00, 7.800000476836306e+00, 7.999999880791066e+00, 8.199999880790497e+00, 8.399999880789929e+00, 8.600000238419005e+00, 8.800000238418438e+00, 9.000000238417869e+00, 9.19999964237263e+00, 9.399999642372061e+00, 9.600000596045808e+00, 9.800000000000569e+00, 1e+01, 1.019999999999659e+01, 1.039999999999318e+01, 1.060000095366409e+01, 1.07999997615891e+01, 1.099999976158568e+01, 1.119999976158085e+01, 1.139999976157886e+01, 1.160000071524977e+01, 1.180000071524636e+01, 1.199999952317137e+01, 1.219999952316796e+01, 1.239999952316455e+01, 1.260000047683545e+01, 1.280000047683204e+01, 1.300000047682863e+01, 1.319999928475364e+01, 1.339999928475023e+01, 1.360000023842114e+01, 1.380000023841915e+01, 1.400000023841432e+01, 1.42000002384109e+01, 1.439999904633591e+01, 1.460000000000682e+01, 1.480000000000341e+01, 1.5e+01, 1.519999999999659e+01, 1.539999999999318e+01, 1.560000095366409e+01, 1.57999997615891e+01, 1.599999976158568e+01, 1.620000071525403e+01, 1.639999976158227e+01, 1.660000071524181e+01, 1.679999976158455e+01, 1.699999952316e+01, 1.720000047683545e+01, 1.739999952316682e+01, 1.760000047683318e+01, 1.779999952316455e+01, 1.800000047684e+01, 1.820000023841545e+01, 1.839999928475819e+01, 1.860000023841773e+01, 1.879999928474597e+01, 1.900000023842e+01, 1.920000119207499e+01, 1.939999904634956e+01, 1.959999999999773e+01, 1.979999904633364e+01, 2e+01] +decreaseSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Equal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Equal.txt new file mode 100644 index 0000000000..07e79cfae6 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Equal.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intEqu.u1=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intEqu.u2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intEqu.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Greater.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Greater.txt new file mode 100644 index 0000000000..1d5fb30cc6 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Greater.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intGre.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intGre.u2=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intGre.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqual.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqual.txt new file mode 100644 index 0000000000..16c87d980d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqual.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intGreEqu.u1=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intGreEqu.u2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intGreEqu.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqualThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqualThreshold.txt new file mode 100644 index 0000000000..b05c270c63 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterEqualThreshold.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intGreEquThr.t=[2e+00, 2e+00] +intGreEquThr.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intGreEquThr.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterThreshold.txt new file mode 100644 index 0000000000..4938df5950 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_GreaterThreshold.txt @@ -0,0 +1,11 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +intGreThr.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intGreThr.t=[2e+00, 2e+00] +time=[0e+00, 1e+00] +intGreThr.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Less.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Less.txt new file mode 100644 index 0000000000..5f52d8e2ad --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Less.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intLes.u1=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intLes.u2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +intLes.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqual.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqual.txt new file mode 100644 index 0000000000..b9dcc0b270 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqual.txt @@ -0,0 +1,11 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +intLesEqu.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intLesEqu.u2=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +time=[0e+00, 1e+00] +intLesEqu.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqualThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqualThreshold.txt new file mode 100644 index 0000000000..c4b4741f28 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessEqualThreshold.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intLesEquThr.t=[2e+00, 2e+00] +intLesEquThr.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intLesEquThr.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessThreshold.txt new file mode 100644 index 0000000000..a1400868b1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_LessThreshold.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intLesThr.t=[2e+00, 2e+00] +intLesThr.u=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +intLesThr.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Max.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Max.txt new file mode 100644 index 0000000000..8832147591 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Max.txt @@ -0,0 +1,11 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +max1.u2=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +max1.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +max1.y=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Min.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Min.txt new file mode 100644 index 0000000000..cb4ee9bbfc --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Min.txt @@ -0,0 +1,11 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +min1.y=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +min1.u2=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +min1.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.00000596036356e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.000011920727175e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_MultiSum.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_MultiSum.txt new file mode 100644 index 0000000000..e3abd1b3b3 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_MultiSum.txt @@ -0,0 +1,12 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +add1.u[3]=[-2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.999994993219981e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] +add1.u[1]=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +add1.y=[-7e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -4e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4.999984979659942e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01] +add1.u[2]=[-1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.999994993219981e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Multiply.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Multiply.txt new file mode 100644 index 0000000000..0ff41f82a1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Multiply.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +product.u1=[-1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +product.u2=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +product.y=[-0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_OnCounter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_OnCounter.txt new file mode 100644 index 0000000000..44d8af0621 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_OnCounter.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +onCounter.trigger=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 2.980226188066309e-06, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 5.960452403888138e-06, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 0e+00, 0e+00, 5.960363559974428e-06, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 2e+00] +onCounter.reset=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onCounter.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000002980226188e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.000005960452404e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.000011920727176e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.00000596036356e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Stage.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Stage.txt new file mode 100644 index 0000000000..4bba95643e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Stage.txt @@ -0,0 +1,14 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +sta.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999997392295245e-03, 1.999999478461667e-02, 3.000000409780068e-02, 4.00000014901188e-02, 5.000000074505806e-02, 5.999999627470705e-02, 6.999999552968364e-02, 8.0000002980218e-02, 9.000000596046269e-02, 1.000000014901161e-01, 1.100000089407251e-01, 1.19999992549423e-01, 1.300000000000142e-01, 1.399999910592749e-01, 1.500000059604645e-01, 1.600000059604929e-01, 1.699999970197536e-01, 1.800000119209077e-01, 1.899999880790426e-01, 2.000000029802322e-01, 2.100000029802607e-01, 2.199999940395213e-01, 2.300000089406754e-01, 2.399999850988815e-01, 2.5e-01, 2.600000000000284e-01, 2.700000059604503e-01, 2.800000059604787e-01, 2.899999821185782e-01, 3.00000011920929e-01, 3.100000119209573e-01, 3.200000119209858e-01, 3.299999940394787e-01, 3.399999940395071e-01, 3.499999940395355e-01, 3.600000238417443e-01, 3.700000238419147e-01, 3.799999761580852e-01, 3.899999761582558e-01, 4.000000059604645e-01, 4.100000059604929e-01, 4.200000059605213e-01, 4.299999880790143e-01, 4.399999880790427e-01, 4.49999988079071e-01, 4.600000178814219e-01, 4.700000178814502e-01, 4.799999701976208e-01, 4.899999999999715e-01, 5e-01, 5.100000000001705e-01, 5.200000000003411e-01, 5.299999523165115e-01, 5.400000119207584e-01, 5.50000011920929e-01, 5.600000119208153e-01, 5.7000001192127e-01, 5.799999642374406e-01, 5.899999642373268e-01, 6.000000238418579e-01, 6.100000238417442e-01, 6.200000238416304e-01, 6.299999761583694e-01, 6.399999761582558e-01, 6.499999761581421e-01, 6.600000357626732e-01, 6.700000357625595e-01, 6.799999880787301e-01, 6.899999880791847e-01, 6.99999988079071e-01, 7.099999403967195e-01, 7.200000476830336e-01, 7.300000000001136e-01, 7.400000476823516e-01, 7.5e-01, 7.599999523187068e-01, 7.699999999998862e-01, 7.799999523169664e-01, 7.900000596032806e-01, 8.00000011920929e-01, 8.099999642385773e-01, 8.200000119208154e-01, 8.299999642378953e-01, 8.400000119207014e-01, 8.500000238418579e-01, 8.599999761575364e-01, 8.700000238411757e-01, 8.799999761588243e-01, 8.900000238416306e-01, 8.999999761581421e-01] +sta.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +zerHolTim.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +sta1.u=[5e-01, 5.62666594051887e-01, 6.243449431345468e-01, 6.840622951144832e-01, 7.408768501618699e-01, 7.938926219940186e-01, 8.422735222964175e-01, 8.852566527649917e-01, 9.22163959225402e-01, 9.524135055626048e-01, 9.755282402038574e-01, 9.911436408643766e-01, 9.990133620582184e-01, 9.990133620582184e-01, 9.911436408643766e-01, 9.755282402038574e-01, 9.524135055626234e-01, 9.221639790519085e-01, 8.852566286780194e-01, 8.422735222963845e-01, 7.938926219940186e-01, 7.408768005993301e-01, 6.840623298276093e-01, 6.243449158439494e-01, 5.62666654330428e-01, 5e-01, 4.373333158675338e-01, 3.756550841559793e-01, 3.159376999745707e-01, 2.59123229202708e-01, 2.061073780059814e-01, 1.577264085938893e-01, 1.147434011243298e-01, 7.783602094799758e-02, 4.758650075945427e-02, 2.447174116969109e-02, 8.856364283090808e-03, 9.866380581584411e-04, 9.866380581584411e-04, 8.856364283090808e-03, 2.447174116969109e-02, 4.758650075945427e-02, 7.783610216161774e-02, 1.147433065166289e-01, 1.577264085938895e-01, 2.061073780059814e-01, 2.591232292027082e-01, 3.15937839658879e-01, 3.756549393554028e-01, 4.373333158675341e-01, 5e-01, 5.626666543304277e-01, 6.243450606445972e-01, 6.840621901428749e-01, 7.408768005993305e-01, 7.938926219940186e-01, 8.422735765049497e-01, 8.852567232851958e-01, 9.221638978381691e-01, 9.52413473163549e-01, 9.755282402038574e-01, 9.911436543433851e-01, 9.990133703364621e-01, 9.990133703364621e-01, 9.911436543433851e-01, 9.755282402038574e-01, 9.52413473163549e-01, 9.221638978381691e-01, 8.852567232851958e-01, 8.422735765049497e-01, 7.938926219940186e-01, 7.408768005993305e-01, 6.840621901428749e-01, 6.243450606445972e-01, 5.626666543304277e-01, 5e-01, 4.373333158675341e-01, 3.756549393554029e-01, 3.15937839658879e-01, 2.591232292027077e-01, 2.061073780059814e-01, 1.57726628516219e-01, 1.147433065184227e-01, 7.783610216005693e-02, 4.758637525310335e-02, 2.447174116969109e-02, 8.856420791578445e-03, 9.866297802864079e-04, 9.866297802864077e-04, 8.856422635427366e-03, 2.447174116969109e-02, 4.758637525310335e-02, 7.783610216005693e-02, 1.147433065184227e-01, 1.57726628516219e-01, 2.061073780059814e-01, 2.591229668516646e-01, 3.159378396562095e-01, 3.756549393581616e-01, 4.373336133572886e-01, 5e-01] +sta1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +lesHolTim.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1.000050806554093e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.999949193445907e+00, 2e+00, 2e+00, 2e+00, 2e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Subtract.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Subtract.txt new file mode 100644 index 0000000000..ceae9185b2 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Subtract.txt @@ -0,0 +1,11 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +sub.u1=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +sub.u2=[-1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.999994993219981e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +sub.y=[-3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Switch.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Switch.txt new file mode 100644 index 0000000000..28c5701312 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Integers_Validation_Switch.txt @@ -0,0 +1,12 @@ +last-generated=2023-03-02 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +integerSwitch.u1=[5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4.99997615811933e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4.999976158119441e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] +integerSwitch.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +integerSwitch.u3=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +integerSwitch.y=[5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4.99997615811933e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Constant.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Constant.txt new file mode 100644 index 0000000000..0ba92d31a9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Constant.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +con.y=[1e+00, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Pulse.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Pulse.txt new file mode 100644 index 0000000000..bd79ba9841 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_Pulse.txt @@ -0,0 +1,23 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +booPul_a1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999809269502016e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999809269502016e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a3.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999809269502016e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a4.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999809269502016e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a5.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.999809269502016e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b1.y=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b2.y=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b3.y=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b4.y=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b5.y=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.76837611174551e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulseNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulseNegativeStartTime.txt new file mode 100644 index 0000000000..78485dfaec --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulseNegativeStartTime.txt @@ -0,0 +1,23 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-1e+01, 1e+00] +booPul_a1.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814700907156521e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a2.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814700907156521e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a3.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814700907156521e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a4.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814700907156521e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a5.y=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 3.814700907156521e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b1.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b2.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b3.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b4.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b5.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.33486858314694e-06, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booPul_c2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.33486858314694e-06, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booPul_c3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.33486858314694e-06, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booPul_c4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.33486858314694e-06, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booPul_c5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.33486858314694e-06, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulsePositiveStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulsePositiveStartTime.txt new file mode 100644 index 0000000000..e05c5ae316 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_PulsePositiveStartTime.txt @@ -0,0 +1,23 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[9e+00, 2e+01] +booPul_a1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_a5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999771123402419e-01, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_b5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765975810847e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booPul_c5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 2.288765993563313e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTrigger.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTrigger.txt new file mode 100644 index 0000000000..8075017218 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTrigger.txt @@ -0,0 +1,14 @@ +last-generated=2020-12-03 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +samTri.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler.u=[0e+00, 2e-01, 4e-01, 6e-01, 8e-01, 1e+00, 1.2e+00, 1.4e+00, 1.6e+00, 1.8e+00, 2e+00, 2.2e+00, 2.4e+00, 2.6e+00, 2.8e+00, 3e+00, 3.2e+00, 3.4e+00, 3.6e+00, 3.8e+00, 4e+00, 4.2e+00, 4.4e+00, 4.600000000000001e+00, 4.8e+00, 5e+00, 5.2e+00, 5.4e+00, 5.600000000000001e+00, 5.8e+00, 6e+00, 6.2e+00, 6.4e+00, 6.600000000000001e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.4e+00, 7.6e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.22e+01, 1.24e+01, 1.26e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.34e+01, 1.36e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.44e+01, 1.46e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.54e+01, 1.56e+01, 1.58e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01] +samTri1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler1.u=[0e+00, 2e-01, 4e-01, 6e-01, 8e-01, 1e+00, 1.2e+00, 1.4e+00, 1.6e+00, 1.8e+00, 2e+00, 2.2e+00, 2.4e+00, 2.6e+00, 2.8e+00, 3e+00, 3.2e+00, 3.4e+00, 3.6e+00, 3.8e+00, 4e+00, 4.2e+00, 4.4e+00, 4.600000000000001e+00, 4.8e+00, 5e+00, 5.2e+00, 5.4e+00, 5.600000000000001e+00, 5.8e+00, 6e+00, 6.2e+00, 6.4e+00, 6.600000000000001e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.4e+00, 7.6e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.22e+01, 1.24e+01, 1.26e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.34e+01, 1.36e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.44e+01, 1.46e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.54e+01, 1.56e+01, 1.58e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] +triggeredSampler1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200009584434847e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.20000934601736e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.200009346017449e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.200009346017449e+00, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.120000934601745e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.320000934601736e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerNegativeStartTime.txt new file mode 100644 index 0000000000..d37c86846d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerNegativeStartTime.txt @@ -0,0 +1,14 @@ +last-generated=2020-12-03 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-2e+00, 3e+00] +samTri.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler.u=[0e+00, 2.000001937152378e-01, 3.999999105929621e-01, 6.000001192092892e-01, 7.999998211857813e-01, 1e+00, 1.200000238418579e+00, 1.399999880790711e+00, 1.600000119209289e+00, 1.799999761581421e+00, 2e+00, 2.200000238418579e+00, 2.399999999999432e+00, 2.600000000000568e+00, 2.799999761581422e+00, 3e+00, 3.200000238418579e+00, 3.399999999999432e+00, 3.600000000000568e+00, 3.799999761581421e+00, 4e+00, 4.199999761581421e+00, 4.400000000000569e+00, 4.599999999999432e+00, 4.800000238418579e+00, 5e+00, 5.199999761581421e+00, 5.400000000000569e+00, 5.599999999999432e+00, 5.800000238418579e+00, 6e+00, 6.199999761581563e+00, 6.400000119209219e+00, 6.599999880790782e+00, 6.800000238418438e+00, 7e+00, 7.199999821186047e+00, 7.400000119209254e+00, 7.599999910593028e+00, 7.800000193715093e+00, 8e+00, 8.199999806284907e+00, 8.399999612569815e+00, 8.600000357627904e+00, 8.800000178813953e+00, 9e+00, 9.199999761581564e+00, 9.399999642372059e+00, 9.600000357627939e+00, 9.800000238418438e+00, 1e+01, 1.019999976158142e+01, 1.039999952316341e+01, 1.060000047683659e+01, 1.080000023841858e+01, 1.1e+01, 1.119999976158142e+01, 1.139999952316341e+01, 1.160000047683659e+01, 1.180000023841858e+01, 1.2e+01, 1.22e+01, 1.239999952316284e+01, 1.260000047683716e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.339999952316284e+01, 1.360000047683716e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.439999952316284e+01, 1.460000047683716e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.539999952316284e+01, 1.560000047683716e+01, 1.58e+01, 1.6e+01, 1.620000095366977e+01, 1.640000000000909e+01, 1.65999999999909e+01, 1.679999904633023e+01, 1.7e+01, 1.720000095366977e+01, 1.740000000000909e+01, 1.759999999999091e+01, 1.779999904633023e+01, 1.8e+01, 1.820000095366977e+01, 1.84000000000091e+01, 1.859999999999091e+01, 1.879999904633023e+01, 1.9e+01, 1.920000095366977e+01, 1.940000000000909e+01, 1.959999999999091e+01, 1.979999904633023e+01, 2e+01] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01] +samTri1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler1.u=[0e+00, 2.000001937152378e-01, 3.999999105929621e-01, 6.000001192092892e-01, 7.999998211857813e-01, 1e+00, 1.200000238418579e+00, 1.399999880790711e+00, 1.600000119209289e+00, 1.799999761581421e+00, 2e+00, 2.200000238418579e+00, 2.399999999999432e+00, 2.600000000000568e+00, 2.799999761581422e+00, 3e+00, 3.200000238418579e+00, 3.399999999999432e+00, 3.600000000000568e+00, 3.799999761581421e+00, 4e+00, 4.199999761581421e+00, 4.400000000000569e+00, 4.599999999999432e+00, 4.800000238418579e+00, 5e+00, 5.199999761581421e+00, 5.400000000000569e+00, 5.599999999999432e+00, 5.800000238418579e+00, 6e+00, 6.199999761581563e+00, 6.400000119209219e+00, 6.599999880790782e+00, 6.800000238418438e+00, 7e+00, 7.199999821186047e+00, 7.400000119209254e+00, 7.599999910593028e+00, 7.800000193715093e+00, 8e+00, 8.199999806284907e+00, 8.399999612569815e+00, 8.600000357627904e+00, 8.800000178813953e+00, 9e+00, 9.199999761581564e+00, 9.399999642372059e+00, 9.600000357627939e+00, 9.800000238418438e+00, 1e+01, 1.019999976158142e+01, 1.039999952316341e+01, 1.060000047683659e+01, 1.080000023841858e+01, 1.1e+01, 1.119999976158142e+01, 1.139999952316341e+01, 1.160000047683659e+01, 1.180000023841858e+01, 1.2e+01, 1.22e+01, 1.239999952316284e+01, 1.260000047683716e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.339999952316284e+01, 1.360000047683716e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.439999952316284e+01, 1.460000047683716e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.539999952316284e+01, 1.560000047683716e+01, 1.58e+01, 1.6e+01, 1.620000095366977e+01, 1.640000000000909e+01, 1.65999999999909e+01, 1.679999904633023e+01, 1.7e+01, 1.720000095366977e+01, 1.740000000000909e+01, 1.759999999999091e+01, 1.779999904633023e+01, 1.8e+01, 1.820000095366977e+01, 1.84000000000091e+01, 1.859999999999091e+01, 1.879999904633023e+01, 1.9e+01, 1.920000095366977e+01, 1.940000000000909e+01, 1.959999999999091e+01, 1.979999904633023e+01, 2e+01] +triggeredSampler1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.799999952316284e+00, 2.800002336504624e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800000190734863e+00, 4.800002574915858e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 6.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800000190734863e+00, 8.800002574922964e+00, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.080000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.280000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.480000019073486e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.679999923706055e+01, 1.879999923706055e+01, 1.879999923706055e+01, 1.879999923706055e+01, 1.879999923706055e+01, 1.879999923706055e+01, 1.879999923706055e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerPositiveStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerPositiveStartTime.txt new file mode 100644 index 0000000000..35baf45aa9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_SampleTriggerPositiveStartTime.txt @@ -0,0 +1,14 @@ +last-generated=2023-03-23 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[1e+00, 6e+00] +samTri.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler.u=[0e+00, 2.000001937152378e-01, 3.999999105929621e-01, 6.000001192092892e-01, 7.999998211857813e-01, 1e+00, 1.200000238418579e+00, 1.399999880790711e+00, 1.600000119209289e+00, 1.799999761581421e+00, 2e+00, 2.200000238418579e+00, 2.399999999999432e+00, 2.600000000000568e+00, 2.799999761581422e+00, 3e+00, 3.200000238418579e+00, 3.399999999999432e+00, 3.600000000000568e+00, 3.799999761581421e+00, 4e+00, 4.199999999999999e+00, 4.400000476837159e+00, 4.599999523162843e+00, 4.800000000000001e+00, 5e+00, 5.199999999999999e+00, 5.400000476837159e+00, 5.599999523162843e+00, 5.800000000000001e+00, 6e+00, 6.199999999999999e+00, 6.400000476837159e+00, 6.599999523162843e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.400000476837159e+00, 7.599999523162841e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.219999904634387e+01, 1.23999999999909e+01, 1.26000000000091e+01, 1.280000095365613e+01, 1.3e+01, 1.319999904634388e+01, 1.33999999999909e+01, 1.36000000000091e+01, 1.380000095365612e+01, 1.4e+01, 1.419999904634387e+01, 1.43999999999909e+01, 1.46000000000091e+01, 1.480000095365613e+01, 1.5e+01, 1.519999904634387e+01, 1.53999999999909e+01, 1.56000000000091e+01, 1.580000095365613e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01] +samTri1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +triggeredSampler1.u=[0e+00, 2.000001937152378e-01, 3.999999105929621e-01, 6.000001192092892e-01, 7.999998211857813e-01, 1e+00, 1.200000238418579e+00, 1.399999880790711e+00, 1.600000119209289e+00, 1.799999761581421e+00, 2e+00, 2.200000238418579e+00, 2.399999999999432e+00, 2.600000000000568e+00, 2.799999761581422e+00, 3e+00, 3.200000238418579e+00, 3.399999999999432e+00, 3.600000000000568e+00, 3.799999761581421e+00, 4e+00, 4.199999999999999e+00, 4.400000476837159e+00, 4.599999523162843e+00, 4.800000000000001e+00, 5e+00, 5.199999999999999e+00, 5.400000476837159e+00, 5.599999523162843e+00, 5.800000000000001e+00, 6e+00, 6.199999999999999e+00, 6.400000476837159e+00, 6.599999523162843e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.400000476837159e+00, 7.599999523162841e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.219999904634387e+01, 1.23999999999909e+01, 1.26000000000091e+01, 1.280000095365613e+01, 1.3e+01, 1.319999904634388e+01, 1.33999999999909e+01, 1.36000000000091e+01, 1.380000095365612e+01, 1.4e+01, 1.419999904634387e+01, 1.43999999999909e+01, 1.46000000000091e+01, 1.480000095365613e+01, 1.5e+01, 1.519999904634387e+01, 1.53999999999909e+01, 1.56000000000091e+01, 1.580000095365613e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] +triggeredSampler1.y=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1.999984741196144e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200009584435984e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200000047683716e+00, 3.200009584434802e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.199999809265137e+00, 5.20000934601736e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.199999809265137e+00, 7.200009346017449e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.199999809265137e+00, 9.200009346017449e+00, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.119999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.319999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.519999980926514e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.720000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01, 1.920000076293945e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTable.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTable.txt new file mode 100644 index 0000000000..21d0723b5c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTable.txt @@ -0,0 +1,14 @@ +last-generated=2020-10-01 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.5e+01] +booTimTab.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999872846334678e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTab.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999872846334678e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booTimTabTwi.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTabTwi.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTabOneRow.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTabOneRow.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTableNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTableNegativeStartTime.txt new file mode 100644 index 0000000000..4c6a48ba43 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Sources_Validation_TimeTableNegativeStartTime.txt @@ -0,0 +1,14 @@ +last-generated=2020-10-08 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-5e+00, 1e+01] +booTimTab.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTab.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.589452387992815e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booTimTabTwi.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTabTwi.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booTimTabOneRow.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +booTimTabOneRow.y[2]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_And.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_And.txt new file mode 100644 index 0000000000..eb4baaa32e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_And.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +and1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +and1.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +and1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 1e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Change.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Change.txt new file mode 100644 index 0000000000..613eb00aae --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Change.txt @@ -0,0 +1,12 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +change.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +change.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01] +triggeredSampler.u=[0e+00, 2e-01, 4e-01, 6e-01, 8e-01, 1e+00, 1.2e+00, 1.4e+00, 1.6e+00, 1.8e+00, 2e+00, 2.2e+00, 2.4e+00, 2.6e+00, 2.8e+00, 3e+00, 3.2e+00, 3.4e+00, 3.6e+00, 3.8e+00, 4e+00, 4.2e+00, 4.4e+00, 4.600000000000001e+00, 4.8e+00, 5e+00, 5.2e+00, 5.4e+00, 5.600000000000001e+00, 5.8e+00, 6e+00, 6.2e+00, 6.4e+00, 6.600000000000001e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.4e+00, 7.6e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.22e+01, 1.24e+01, 1.26e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.34e+01, 1.36e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.44e+01, 1.46e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.54e+01, 1.56e+01, 1.58e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Edge.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Edge.txt new file mode 100644 index 0000000000..4b07fc9c8b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Edge.txt @@ -0,0 +1,12 @@ +last-generated=2019-05-21 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +edge1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +edge1.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 8e+00, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.6e+01] +triggeredSampler.u=[0e+00, 2e-01, 4e-01, 6e-01, 8e-01, 1e+00, 1.2e+00, 1.4e+00, 1.6e+00, 1.8e+00, 2e+00, 2.2e+00, 2.4e+00, 2.6e+00, 2.8e+00, 3e+00, 3.2e+00, 3.4e+00, 3.6e+00, 3.8e+00, 4e+00, 4.2e+00, 4.4e+00, 4.600000000000001e+00, 4.8e+00, 5e+00, 5.2e+00, 5.4e+00, 5.600000000000001e+00, 5.8e+00, 6e+00, 6.2e+00, 6.4e+00, 6.600000000000001e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.4e+00, 7.6e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.22e+01, 1.24e+01, 1.26e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.34e+01, 1.36e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.44e+01, 1.46e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.54e+01, 1.56e+01, 1.58e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_FallingEdge.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_FallingEdge.txt new file mode 100644 index 0000000000..b84460d58a --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_FallingEdge.txt @@ -0,0 +1,12 @@ +last-generated=2019-05-21 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +falEdg.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falEdg.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] +triggeredSampler.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.4e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01, 1.8e+01] +triggeredSampler.u=[0e+00, 2e-01, 4e-01, 6e-01, 8e-01, 1e+00, 1.2e+00, 1.4e+00, 1.6e+00, 1.8e+00, 2e+00, 2.2e+00, 2.4e+00, 2.6e+00, 2.8e+00, 3e+00, 3.2e+00, 3.4e+00, 3.6e+00, 3.8e+00, 4e+00, 4.2e+00, 4.4e+00, 4.600000000000001e+00, 4.8e+00, 5e+00, 5.2e+00, 5.4e+00, 5.600000000000001e+00, 5.8e+00, 6e+00, 6.2e+00, 6.4e+00, 6.600000000000001e+00, 6.800000000000001e+00, 7e+00, 7.199999999999999e+00, 7.4e+00, 7.6e+00, 7.800000000000001e+00, 8e+00, 8.199999999999999e+00, 8.4e+00, 8.6e+00, 8.800000000000001e+00, 9e+00, 9.200000000000001e+00, 9.399999999999999e+00, 9.6e+00, 9.800000000000001e+00, 1e+01, 1.02e+01, 1.04e+01, 1.06e+01, 1.08e+01, 1.1e+01, 1.12e+01, 1.14e+01, 1.16e+01, 1.18e+01, 1.2e+01, 1.22e+01, 1.24e+01, 1.26e+01, 1.28e+01, 1.3e+01, 1.32e+01, 1.34e+01, 1.36e+01, 1.38e+01, 1.4e+01, 1.42e+01, 1.44e+01, 1.46e+01, 1.48e+01, 1.5e+01, 1.52e+01, 1.54e+01, 1.56e+01, 1.58e+01, 1.6e+01, 1.62e+01, 1.64e+01, 1.66e+01, 1.68e+01, 1.7e+01, 1.72e+01, 1.74e+01, 1.76e+01, 1.78e+01, 1.8e+01, 1.82e+01, 1.84e+01, 1.86e+01, 1.88e+01, 1.9e+01, 1.92e+01, 1.94e+01, 1.96e+01, 1.98e+01, 2e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Latch.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Latch.txt new file mode 100644 index 0000000000..f680d3394d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Latch.txt @@ -0,0 +1,26 @@ +last-generated=2020-10-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +falCleTruIni.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleTruIni.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleTruIni.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +falCleFalIni.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +falCleFalIni.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleFalIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleTruIni.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truCleTruIni.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleTruIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truCleFalIni.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleFalIni.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleFalIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp1.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp1.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +swiCleInp1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiAnd.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiAnd.txt new file mode 100644 index 0000000000..36a6688acd --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiAnd.txt @@ -0,0 +1,20 @@ +last-generated=2019-06-06 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +mulAnd0.y=[0e+00, 0e+00] +mulAnd1.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 1e+01] +mulAnd2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd2.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd2.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd5.u[4]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mulAnd5.u[5]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd5.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd5.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulAnd5.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mulAnd5.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiOr.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiOr.txt new file mode 100644 index 0000000000..ed638eae9d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_MultiOr.txt @@ -0,0 +1,20 @@ +last-generated=2019-06-06 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +mulOr1.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr0.y=[0e+00, 0e+00] +time=[0e+00, 1e+01] +mulOr2.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr2.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr5.u[5]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr5.u[4]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mulOr5.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mulOr5.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +mulOr5.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +mulOr5.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nand.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nand.txt new file mode 100644 index 0000000000..8b39e81f29 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nand.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +nand1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nand1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nand1.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nor.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nor.txt new file mode 100644 index 0000000000..e8fb5d1406 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Nor.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +nor1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +nor1.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +nor1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Not.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Not.txt new file mode 100644 index 0000000000..4c8489f314 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Not.txt @@ -0,0 +1,10 @@ +last-generated=2019-05-21 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +not1.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +not1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Or.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Or.txt new file mode 100644 index 0000000000..c84b2a00a9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Or.txt @@ -0,0 +1,11 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +or1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +or1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +or1.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 1e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Proof.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Proof.txt new file mode 100644 index 0000000000..12d03b1595 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Proof.txt @@ -0,0 +1,32 @@ +last-generated=2023-04-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +pro.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro1.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro1.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro1.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro1.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro2.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro2.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro2.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro2.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro3.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro3.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro3.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro3.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro4.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro4.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro4.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro4.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pro5.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pro5.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pro5.yLocFal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +pro5.yLocTru=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Switch.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Switch.txt new file mode 100644 index 0000000000..59d9815fa1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Switch.txt @@ -0,0 +1,12 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +logicalSwitch.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999952316238661e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +logicalSwitch.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999952316238661e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999952316238883e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +logicalSwitch.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +logicalSwitch.u3=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Timer.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Timer.txt new file mode 100644 index 0000000000..10e977f7b7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Timer.txt @@ -0,0 +1,20 @@ +last-generated=2020-08-29 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +noThr.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999976158119219e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +noThr.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1.05e+00, 1.1e+00, 1.15e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.35e+00, 1.39999663829489e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842880923e-02, 1.000000968576189e-01, 1.499999105928906e-01, 1.999999552964455e-01, 2.5e-01, 3.00000059604645e-01, 3.50000089407251e-01, 3.999999105927485e-01, 4.499999403953554e-01, 5e-01, 5.500000596046446e-01, 6.000001192092896e-01, 6.499998807907108e-01, 6.999999403953554e-01, 7.5e-01, 8.00000059604645e-01, 8.500001192092892e-01, 8.999998807907104e-01, 9.49999940395355e-01, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.35000011920929e+00, 1.399999880790711e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.99998100145297e-02, 1.000000968553448e-01, 1.499999105951639e-01, 2.000001937105483e-01, 2.5e-01, 2.999998211900444e-01, 3.500000894049773e-01, 3.999999105950227e-01, 4.500001788099556e-01, 5e-01, 5.499998211906129e-01, 6.000001192070163e-01, 6.499998807929845e-01, 7.000001788093863e-01, 7.5e-01, 7.999998211906129e-01, 8.500001192070155e-01, 8.999998807929845e-01, 9.500001788093871e-01, 1e+00] +noThr.t=[0e+00, 0e+00] +noThr.passed=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999976158119219e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999976158119219e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1.05e+00, 1.1e+00, 1.15e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.35e+00, 1.39999663829489e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842880923e-02, 1.000000968576189e-01, 1.499999105928906e-01, 1.999999552964455e-01, 2.5e-01, 3.00000059604645e-01, 3.50000089407251e-01, 3.999999105927485e-01, 4.499999403953554e-01, 5e-01, 5.500000596046446e-01, 6.000001192092896e-01, 6.499998807907108e-01, 6.999999403953554e-01, 7.5e-01, 8.00000059604645e-01, 8.500001192092892e-01, 8.999998807907104e-01, 9.49999940395355e-01, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.35000011920929e+00, 1.399999880790711e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.99998100145297e-02, 1.000000968553448e-01, 1.499999105951639e-01, 2.000001937105483e-01, 2.5e-01, 2.999998211900444e-01, 3.500000894049773e-01, 3.999999105950227e-01, 4.500001788099556e-01, 5e-01, 5.499998211906129e-01, 6.000001192070163e-01, 6.499998807929845e-01, 7.000001788093863e-01, 7.5e-01, 7.999998211906129e-01, 8.500001192070155e-01, 8.999998807929845e-01, 9.500001788093871e-01, 1e+00] +thrTim.t=[3.00000011920929e-01, 3.00000011920929e-01] +thrTim.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999976158119219e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim1.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim1.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842880945e-02, 9.999997764824053e-02, 1.500000298023225e-01, 1.999999552964453e-01, 2.5e-01, 3.000000596046448e-01, 3.499999701976777e-01, 4.000000298023225e-01, 4.499999403953552e-01, 5e-01, 5.500000596046448e-01, 5.99999999999858e-01, 6.500000000001422e-01, 6.999999403953554e-01, 7.5e-01, 8.000000596046446e-01, 8.49999999999858e-01, 9.00000000000142e-01, 9.499999403953554e-01, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842880923e-02, 1.000000968576189e-01, 1.499999105928906e-01, 1.999999552964455e-01, 2.5e-01, 3.00000059604645e-01, 3.500000894072515e-01, 3.99999910592749e-01, 4.49999940395355e-01, 5e-01, 5.500000596046446e-01, 6.000001192092892e-01, 6.499998807907104e-01, 6.999999403953554e-01, 7.5e-01, 8.000000596046446e-01, 8.500001192092896e-01, 8.999998807907108e-01, 9.499999403953554e-01, 1e+00, 1.049999761585969e+00, 1.100000119207015e+00, 1.149999880792984e+00, 1.200000238414032e+00, 1.25e+00, 1.299999761585968e+00, 1.350000119207015e+00, 1.399999880792985e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim1.t=[3.00000011920929e-01, 3.00000011920929e-01] +thrTim1.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376133949992e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.768376156154474e-06, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulating.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulating.txt new file mode 100644 index 0000000000..4f358e7cf9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulating.txt @@ -0,0 +1,22 @@ +last-generated=2020-08-27 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +noThr.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +noThr.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.60000011920929e+00, 1.649999880790711e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.850000119209289e+00, 1.89999988079071e+00, 1.95e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.049999761585969e+00, 2.099999999997726e+00, 2.150000000002273e+00, 2.200000238414032e+00, 2.25e+00, 2.299999761585968e+00, 2.349999999997726e+00, 2.400000000002274e+00, 2.450000238414032e+00, 2.5e+00, 2.549999761585968e+00, 2.599999999997727e+00, 2.650000000002274e+00, 2.700000238414031e+00, 2.75e+00, 2.799999761585968e+00, 2.849999999997726e+00, 2.900000000002274e+00, 2.950000238414032e+00, 3e+00] +thrTim.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.60000011920929e+00, 1.649999880790711e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.850000119209289e+00, 1.89999988079071e+00, 1.95e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.049999761585969e+00, 2.099999999997726e+00, 2.150000000002273e+00, 2.200000238414032e+00, 2.25e+00, 2.299999761585968e+00, 2.349999999997726e+00, 2.400000000002274e+00, 2.450000238414032e+00, 2.5e+00, 2.549999761585968e+00, 2.599999999997727e+00, 2.650000000002274e+00, 2.700000238414031e+00, 2.75e+00, 2.799999761585968e+00, 2.849999999997726e+00, 2.900000000002274e+00, 2.950000238414032e+00, 3e+00] +thrTim.t=[1e+00, 1e+00] +noThrWitRes.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +noThrWitRes.reset=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +noThrWitRes.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.60000011920929e+00, 1.649999880790711e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.850000119209289e+00, 1.89999988079071e+00, 1.95e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.99998100145297e-02, 1.000000968553448e-01, 1.499999105951639e-01, 2.000001937105483e-01, 2.5e-01, 2.999998211900444e-01, 3.500000894049773e-01, 3.999999105950227e-01, 4.500001788099556e-01, 5e-01, 5.499998211906129e-01, 6.000001192070163e-01, 6.499998807929845e-01, 7.000001788093863e-01, 7.5e-01, 7.999998211906129e-01, 8.500001192070155e-01, 8.999998807929845e-01, 9.500001788093871e-01, 1e+00] +thrTimWitRes.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTimWitRes.reset=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTimWitRes.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTimWitRes.y=[0e+00, 5e-02, 1e-01, 1.5e-01, 2e-01, 2.5e-01, 3e-01, 3.5e-01, 4e-01, 4.5e-01, 5e-01, 5.5e-01, 6e-01, 6.5e-01, 7.000000000000001e-01, 7.5e-01, 8e-01, 8.500000000000001e-01, 8.999999999999999e-01, 9.5e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.60000011920929e+00, 1.649999880790711e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.850000119209289e+00, 1.89999988079071e+00, 1.95e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.99998100145297e-02, 1.000000968553448e-01, 1.499999105951639e-01, 2.000001937105483e-01, 2.5e-01, 2.999998211900444e-01, 3.500000894049773e-01, 3.999999105950227e-01, 4.500001788099556e-01, 5e-01, 5.499998211906129e-01, 6.000001192070163e-01, 6.499998807929845e-01, 7.000001788093863e-01, 7.5e-01, 7.999998211906129e-01, 8.500001192070155e-01, 8.999998807929845e-01, 9.500001788093871e-01, 1e+00] +thrTimWitRes.t=[1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulatingNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulatingNegativeStartTime.txt new file mode 100644 index 0000000000..a6d1df0b9d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerAccumulatingNegativeStartTime.txt @@ -0,0 +1,24 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-1e+01, 5e+00] +noThr.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noThr.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 4.500001788156389e-01, 5.999996423804679e-01, 7.5e-01, 9.000003576195321e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.149999880791469e+00, 1.299999761582937e+00, 1.450000238417063e+00, 1.600000119208531e+00, 1.75e+00, 1.899999880791469e+00, 2.049999761582937e+00, 2.200000238417064e+00, 2.35e+00, 2.5e+00, 2.65e+00, 2.799999761582936e+00, 2.950000238417064e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.05e+00, 3.199999999999999e+00, 3.35e+00, 3.5e+00, 3.65e+00, 3.800000000000001e+00, 3.95e+00, 4.099999880790901e+00, 4.25e+00, 4.400000119209101e+00, 4.55000023841801e+00, 4.699999761581989e+00, 4.849999880790899e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.099999880790899e+00, 5.25e+00, 5.400000119209101e+00, 5.550000238418011e+00, 5.69999976158199e+00, 5.849999880790901e+00, 6e+00, 6.15e+00, 6.300000238418199e+00, 6.449999761581799e+00, 6.6e+00, 6.75e+00, 6.9e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00] +noThr.t=[0e+00, 0e+00] +thrTim.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTim.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 4.500001788156389e-01, 5.999996423804679e-01, 7.5e-01, 9.000003576195321e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.149999880791469e+00, 1.299999761582937e+00, 1.450000238417063e+00, 1.600000119208531e+00, 1.75e+00, 1.899999880791469e+00, 2.049999761582937e+00, 2.200000238417064e+00, 2.35e+00, 2.5e+00, 2.65e+00, 2.799999761582936e+00, 2.950000238417064e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3.05e+00, 3.199999999999999e+00, 3.35e+00, 3.5e+00, 3.65e+00, 3.800000000000001e+00, 3.95e+00, 4.099999880790901e+00, 4.25e+00, 4.400000119209101e+00, 4.55000023841801e+00, 4.699999761581989e+00, 4.849999880790899e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5.099999880790899e+00, 5.25e+00, 5.400000119209101e+00, 5.550000238418011e+00, 5.69999976158199e+00, 5.849999880790901e+00, 6e+00, 6.15e+00, 6.300000238418199e+00, 6.449999761581799e+00, 6.6e+00, 6.75e+00, 6.9e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00, 7e+00] +thrTim.t=[1e+00, 1e+00] +noThrWitRes.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noThrWitRes.reset=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noThrWitRes.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 4.500001788156389e-01, 5.999996423804679e-01, 7.5e-01, 9.000003576195321e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.499999105936727e-01, 2.999998211873918e-01, 4.500001788126082e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1.049999761582938e+00, 1.200000238417063e+00, 1.350000119208531e+00, 1.5e+00, 1.649999880791469e+00, 1.799999761582937e+00, 1.950000238417063e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881515e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953554e-01, 1.100000000000001e+00, 1.25e+00, 1.4e+00, 5.000004842862479e-02, 1.999999552966578e-01, 3.499999701976536e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.999999999999522e-01, 7.5e-01, 9.000000000000478e-01, 1.050000000000001e+00, 1.200000000000001e+00, 1.350000000000001e+00, 1.5e+00, 1.499999105936727e-01, 3.000000596046911e-01, 4.499999403953072e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +noThrWitRes.t=[0e+00, 0e+00] +thrTimWitRes.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTimWitRes.reset=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTimWitRes.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTimWitRes.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 4.500001788156389e-01, 5.999996423804679e-01, 7.5e-01, 9.000003576195321e-01, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.499999105936727e-01, 2.999998211873918e-01, 4.500001788126082e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1.049999761582938e+00, 1.200000238417063e+00, 1.350000119208531e+00, 1.5e+00, 1.649999880791469e+00, 1.799999761582937e+00, 1.950000238417063e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881515e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953554e-01, 1.100000000000001e+00, 1.25e+00, 1.4e+00, 5.000004842862479e-02, 1.999999552966578e-01, 3.499999701976536e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.999999999999522e-01, 7.5e-01, 9.000000000000478e-01, 1.050000000000001e+00, 1.200000000000001e+00, 1.350000000000001e+00, 1.5e+00, 1.499999105936727e-01, 3.000000596046911e-01, 4.499999403953072e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +thrTimWitRes.t=[1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerNegativeStartTime.txt new file mode 100644 index 0000000000..ad4188a351 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TimerNegativeStartTime.txt @@ -0,0 +1,16 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-1e+01, 5e+00] +noThr.u=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999992052706332e-01, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noThr.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 0e+00, 0e+00, 0e+00, 0e+00, 4.999981000849017e-02, 2.000001937168001e-01, 3.499996125785244e-01, 5e-01, 6.500003576195321e-01, 7.999998211841716e-01, 9.500001788158284e-01, 1.100000119208531e+00, 1.25e+00, 1.399999880791469e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.499999105936727e-01, 2.999998211873918e-01, 4.500001788126082e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1.049999761582938e+00, 1.200000238417063e+00, 1.350000119208531e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000968568614e-01, 2.5e-01, 3.999999105936955e-01, 5.499998211872024e-01, 7.000001788127976e-01, 8.500001192085321e-01, 1e+00, 1.149999880791468e+00, 1.300000000000189e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881515e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953554e-01, 1.100000000000001e+00, 1.25e+00, 1.399998863537047e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.500000298022991e-01, 3.000000000000125e-01, 4.499999999999875e-01, 6.000000298023161e-01, 7.5e-01, 8.9999997764826e-01, 1.049999951571227e+00, 1.200000044703476e+00, 1.350000029802316e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999997764823416e-02, 2.5e-01, 4.000000298023464e-01, 5.50000059604456e-01, 6.999999403955458e-01, 8.49999999999954e-01, 1e+00, 1.149999880791469e+00, 1.300000000000188e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881604e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953563e-01, 1.100000119208531e+00, 1.25e+00, 1.399999880791467e+00, 0e+00, 0e+00, 0e+00, 0e+00] +noThr.t=[0e+00, 0e+00] +noThr.passed=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999992052706332e-01, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim.u=[1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999992052706332e-01, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim.y=[0e+00, 1.500003874214756e-01, 2.999998211843611e-01, 0e+00, 0e+00, 0e+00, 0e+00, 4.999981000849017e-02, 2.000001937168001e-01, 3.499996125785244e-01, 5e-01, 6.500003576195321e-01, 7.999998211841716e-01, 9.500001788158284e-01, 1.100000119208531e+00, 1.25e+00, 1.399999880791469e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.499999105936727e-01, 2.999998211873918e-01, 4.500001788126082e-01, 6.000001192085312e-01, 7.5e-01, 8.999998807914688e-01, 1.049999761582938e+00, 1.200000238417063e+00, 1.350000119208531e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000968568614e-01, 2.5e-01, 3.999999105936955e-01, 5.499998211872024e-01, 7.000001788127976e-01, 8.500001192085321e-01, 1e+00, 1.149999880791468e+00, 1.300000000000189e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881515e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953554e-01, 1.100000000000001e+00, 1.25e+00, 1.399998863537047e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.500000298022991e-01, 3.000000000000125e-01, 4.499999999999875e-01, 6.000000298023161e-01, 7.5e-01, 8.9999997764826e-01, 1.049999951571227e+00, 1.200000044703476e+00, 1.350000029802316e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.999997764823416e-02, 2.5e-01, 4.000000298023464e-01, 5.50000059604456e-01, 6.999999403955458e-01, 8.49999999999954e-01, 1e+00, 1.149999880791469e+00, 1.300000000000188e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004842881604e-02, 1.999999552964683e-01, 3.500000894063036e-01, 5e-01, 6.499998807914688e-01, 8.000000596046455e-01, 9.499999403953563e-01, 1.100000119208531e+00, 1.25e+00, 1.399999880791467e+00, 0e+00, 0e+00, 0e+00, 0e+00] +thrTim.t=[3.00000011920929e-01, 3.00000011920929e-01] +thrTim.passed=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999992052706332e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Toggle.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Toggle.txt new file mode 100644 index 0000000000..d5edae9d48 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Toggle.txt @@ -0,0 +1,26 @@ +last-generated=2020-10-14 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +falCleTruIni.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleTruIni.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleTruIni.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +falCleFalIni.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +falCleFalIni.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falCleFalIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleTruIni.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truCleTruIni.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleTruIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truCleFalIni.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleFalIni.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truCleFalIni.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.clr=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp1.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +swiCleInp1.clr=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +swiCleInp1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueDelay.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueDelay.txt new file mode 100644 index 0000000000..2525ae76f4 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueDelay.txt @@ -0,0 +1,26 @@ +last-generated=2019-02-11 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +onDelay4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay3.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay7.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay0.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +onDelay6.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] +onDelay1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay0.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +onDelay66.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay77.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay11.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay55.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay22.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay00.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +onDelay00.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +onDelay44.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +onDelay33.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueFalseHold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueFalseHold.txt new file mode 100644 index 0000000000..1e8c5f9d0e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_TrueFalseHold.txt @@ -0,0 +1,26 @@ +last-generated=2024-08-26 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 7.2e+03] +truFalHol.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol1.u=[1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00] +truFalHol1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truFalHol2.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truFalHol2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truFalHol3.u=[0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00] +truFalHol3.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol4.u=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truFalHol5.u=[0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00] +truFalHol5.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00] +truFalHol6.u=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +truFalHol6.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol7.u=[1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00] +truFalHol7.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00] +truFalHol8.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFalHol8.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulse.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulse.txt new file mode 100644 index 0000000000..4247cb8392 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulse.txt @@ -0,0 +1,22 @@ +last-generated=2023-03-29 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +fal.u=[0e+00, 0e+00] +fal.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +tru.u=[1e+00, 1e+00] +tru.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conTru.u=[7.5e-01, 7.5e-01] +conTru.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFal.u=[6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +truFal.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falTru.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 6.499999761581421e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falTru.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +falTru1.u=[3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01] +falTru1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999999999997726e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conChaWid.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.133333310484886e-02, 5.33333346247673e-02, 8.533333241939545e-02, 1.173333302140236e-01, 1.493333280086517e-01, 1.813333332538605e-01, 2.133333384990692e-01, 2.453333288431168e-01, 2.773333191871643e-01, 3.09333324432373e-01, 3.413333296775818e-01, 3.733333349227905e-01, 4.053333401679993e-01, 4.37333345413208e-01, 4.693333208560944e-01, 5.013333559036255e-01, 5.333333611488342e-01, 5.653333067893982e-01, 5.97333312034607e-01, 6.293333172798158e-01, 6.613333225250244e-01, 6.933333277702332e-01, 7.253333330154419e-01, 7.573333382606506e-01, 7.893333435058594e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01, 8.00000011920929e-01] +conChaWid.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulseMinHold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulseMinHold.txt new file mode 100644 index 0000000000..96463eafb3 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_VariablePulseMinHold.txt @@ -0,0 +1,10 @@ +last-generated=2023-04-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 5e+00] +conChaWid.u=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 8.999999761581421e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01] +conChaWid.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999809269502904e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Xor.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Xor.txt new file mode 100644 index 0000000000..042df9cce9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Logical_Validation_Xor.txt @@ -0,0 +1,11 @@ +last-generated=2018-06-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +xor1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +xor1.u1=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +xor1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_DewPoint_TDryBulPhi.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_DewPoint_TDryBulPhi.txt new file mode 100644 index 0000000000..cf74e4c50e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_DewPoint_TDryBulPhi.txt @@ -0,0 +1,14 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +dewBulPhi.TDryBul=[3.025499877929688e+02, 3.025499877929688e+02] +dewBulPhi.phi=[1.000000047497451e-03, 1.100000016391277e-02, 2.100000016391277e-02, 3.100000016391215e-02, 4.100000202655792e-02, 5.099999830126763e-02, 6.100000202655792e-02, 7.100000202655682e-02, 8.100000202655126e-02, 9.099999457599064e-02, 1.010000020265579e-01, 1.110000020265557e-01, 1.210000020265579e-01, 1.310000020265579e-01, 1.410000020265579e-01, 1.509999871254411e-01, 1.610000020265579e-01, 1.710000020265579e-01, 1.8099998712545e-01, 1.910000020265579e-01, 2.010000020265579e-01, 2.110000020265579e-01, 2.210000020265579e-01, 2.310000020265579e-01, 2.410000020265579e-01, 2.509999871253967e-01, 2.610000169277191e-01, 2.709999871253967e-01, 2.809999871254145e-01, 2.910000169277191e-01, 3.009999871253967e-01, 3.109999871253967e-01, 3.210000169277191e-01, 3.309999871253967e-01, 3.409999871253968e-01, 3.510000169276303e-01, 3.609999871253967e-01, 3.709999871253967e-01, 3.810000169276481e-01, 3.910000169277191e-01, 4.009999871253968e-01, 4.110000169276658e-01, 4.210000169277191e-01, 4.309999871253967e-01, 4.410000169276836e-01, 4.510000169277191e-01, 4.609999871253967e-01, 4.709999871253967e-01, 4.810000169277191e-01, 4.909999871253967e-01, 5.009999871253967e-01, 5.109999871253967e-01, 5.210000467294731e-01, 5.310000467291889e-01, 5.409999871253968e-01, 5.50999987125752e-01, 5.609999871253968e-01, 5.709999871253967e-01, 5.809999871253967e-01, 5.910000467292599e-01, 6.009999871253967e-01, 6.10999987125823e-01, 6.209999871255388e-01, 6.309999871253967e-01, 6.409999871253967e-01, 6.51000046729331e-01, 6.609999871253968e-01, 6.709999871258941e-01, 6.809999871256099e-01, 6.909999871254677e-01, 7.009999871253967e-01, 7.11000046729402e-01, 7.209999871253967e-01, 7.309999871253967e-01, 7.409999871256809e-01, 7.509999871253967e-01, 7.609999871253967e-01, 7.710000467294731e-01, 7.810000467291889e-01, 7.909999871253968e-01, 8.00999987125752e-01, 8.109999871253968e-01, 8.209999871253967e-01, 8.309999871253967e-01, 8.410000467292599e-01, 8.509999871253967e-01, 8.60999987125823e-01, 8.709999871255388e-01, 8.809999871253967e-01, 8.909999871253967e-01, 9.01000046729331e-01, 9.109999871253968e-01, 9.209999871258941e-01, 9.309999871256099e-01, 9.409999871254677e-01, 9.509999871253967e-01, 9.61000046729402e-01, 9.709999871253967e-01, 9.809999871253967e-01, 9.909999871256809e-01, 1.001000046730042e+00] +dewBulPhi.TDewPoi=[2.065773162841797e+02, 2.392031557548283e+02, 2.474015963270481e+02, 2.523485110096366e+02, 2.559273379205333e+02, 2.587463376973915e+02, 2.610800173733468e+02, 2.630761718188159e+02, 2.648235476538915e+02, 2.663796991741048e+02, 2.677841184510048e+02, 2.690651245842417e+02, 2.702437136804986e+02, 2.713358159284534e+02, 2.723539733296003e+02, 2.733081049140503e+02, 2.742061770680951e+02, 2.750548704569849e+02, 2.758595880592341e+02, 2.766249696597002e+02, 2.773549192200448e+02, 2.780527653382751e+02, 2.787213745894622e+02, 2.793632809864289e+02, 2.799806826967808e+02, 2.805754699707031e+02, 2.811493840810134e+02, 2.817039483875499e+02, 2.82240478452488e+02, 2.827601932968819e+02, 2.832642205978712e+02, 2.837535399237388e+02, 2.842290347582305e+02, 2.846914972028692e+02, 2.851417234734694e+02, 2.855803530405896e+02, 2.860080255173247e+02, 2.864252927717175e+02, 2.868327333458724e+02, 2.872308050049894e+02, 2.876199643696896e+02, 2.880006104859673e+02, 2.883731999451037e+02, 2.88738006333028e+02, 2.890954285510159e+02, 2.894457706765816e+02, 2.897893368737501e+02, 2.901264038483204e+02, 2.904572147064602e+02, 2.907820126319718e+02, 2.911010437011719e+02, 2.914145510770854e+02, 2.917226873493539e+02, 2.920256661414605e+02, 2.923236687984134e+02, 2.926168819769795e+02, 2.92905486992152e+02, 2.931895753966712e+02, 2.934693608142692e+02, 2.937449347983372e+02, 2.9401647884864e+02, 2.942840877540939e+02, 2.945478819550065e+02, 2.948079835213991e+02, 2.950645145240208e+02, 2.95317535998828e+02, 2.955672295731312e+02, 2.958135982238379e+02, 2.960568235573767e+02, 2.962969360919458e+02, 2.965340273800928e+02, 2.967681889752118e+02, 2.969994805424178e+02, 2.972279963925321e+02, 2.974537961725182e+02, 2.976769714355469e+02, 2.97897583216629e+02, 2.981156620340701e+02, 2.983312994406048e+02, 2.985445246910535e+02, 2.987554318786176e+02, 2.989640502434552e+02, 2.991704713380871e+02, 2.993746951629088e+02, 2.995767827535876e+02, 2.997768244760599e+02, 2.999747921984574e+02, 3.00170806791635e+02, 3.003648377385237e+02, 3.005570071092179e+02, 3.007472843866486e+02, 3.009357294882586e+02, 3.011224056956905e+02, 3.013073423974587e+02, 3.014905395942193e+02, 3.016720583206516e+02, 3.018519290949924e+02, 3.020301813766213e+02, 3.022068783262569e+02, 3.023819883589196e+02, 3.025555725097656e+02] +dewBulPhi1.TDryBul=[2.751499938964844e+02, 2.755000000078239e+02, 2.758500061191635e+02, 2.762000122304928e+02, 2.765499878242645e+02, 2.768999938704046e+02, 2.772500000469436e+02, 2.776000060930837e+02, 2.779500122695953e+02, 2.782999876678407e+02, 2.78649993844325e+02, 2.790000000208638e+02, 2.793500061974026e+02, 2.797000123738686e+02, 2.800499877721141e+02, 2.803999936878467e+02, 2.807500001251826e+02, 2.811000060409243e+02, 2.814500119566661e+02, 2.817999878764238e+02, 2.821499937921656e+02, 2.825000002295014e+02, 2.828500061452432e+02, 2.832000120609849e+02, 2.835499879807426e+02, 2.838999938964844e+02, 2.842500003338203e+02, 2.846000057279678e+02, 2.849500121653037e+02, 2.852999880850615e+02, 2.856499934792091e+02, 2.859999999165449e+02, 2.863500063538808e+02, 2.867000117480284e+02, 2.870499876678407e+02, 2.873999941051221e+02, 2.877499994992696e+02, 2.881000059366055e+02, 2.884500123738686e+02, 2.887999882936991e+02, 2.891499936878467e+02, 2.895000001251826e+02, 2.898500065625185e+02, 2.902000119566661e+02, 2.905499878764238e+02, 2.908999943137597e+02, 2.912499997079073e+02, 2.916000061452431e+02, 2.919500125824154e+02, 2.92299987459294e+02, 2.926499938964844e+02, 2.930000003338153e+02, 2.933500067711462e+02, 2.937000132080406e+02, 2.940499870422118e+02, 2.943999934792153e+02, 2.947499999165437e+02, 2.951000063538771e+02, 2.954500127909533e+02, 2.957999887109608e+02, 2.961499930619462e+02, 2.964999994992771e+02, 2.96850005936608e+02, 2.972000123738661e+02, 2.975499882936917e+02, 2.978999947310226e+02, 2.982499990820079e+02, 2.986000055193389e+02, 2.989500119566698e+02, 2.992999878764251e+02, 2.996499943137535e+02, 3.000000007510844e+02, 3.003500051020698e+02, 3.007000115394007e+02, 3.01049987459299e+02, 3.013999938964844e+02, 3.017500003338153e+02, 3.021000067711462e+02, 3.024500132080406e+02, 3.027999870422118e+02, 3.031499934792153e+02, 3.034999999165437e+02, 3.038500063538771e+02, 3.042000127909533e+02, 3.045499887109608e+02, 3.048999930619462e+02, 3.052499994992771e+02, 3.05600005936608e+02, 3.059500123738661e+02, 3.062999882936917e+02, 3.066499947310226e+02, 3.069999990820079e+02, 3.073500055193389e+02, 3.077000119566698e+02, 3.080499878764251e+02, 3.083999943137535e+02, 3.087500007510844e+02, 3.091000051020698e+02, 3.094500115394007e+02, 3.09799987459299e+02, 3.101499938964844e+02] +dewBulPhi1.phi=[4.000000059604645e-01, 4.000000059604645e-01] +dewBulPhi1.TDewPoi=[2.626684875488281e+02, 2.629984741284641e+02, 2.633280029444009e+02, 2.636570434790808e+02, 2.639856567676397e+02, 2.643138122314281e+02, 2.646415405712587e+02, 2.64968811025411e+02, 2.652956848728699e+02, 2.656221617485101e+02, 2.65948211621355e+02, 2.662738647654841e+02, 2.665991211809249e+02, 2.669239808677227e+02, 2.672485046193361e+02, 2.675726316427612e+02, 2.678963929380077e+02, 2.682198180574179e+02, 2.685428769663272e+02, 2.688656006628442e+02, 2.691880187027857e+02, 2.695100710118745e+02, 2.698318176652792e+02, 2.701532591432663e+02, 2.704743654065147e+02, 2.707951965332031e+02, 2.711157229616941e+02, 2.714359432600547e+02, 2.717558898544522e+02, 2.720755617900644e+02, 2.723949581153801e+02, 2.727140807344769e+02, 2.730329286947886e+02, 2.733515315648373e+02, 2.736698912435897e+02, 2.73987976263757e+02, 2.743058467132951e+02, 2.746234739696814e+02, 2.749408570848606e+02, 2.752580265766292e+02, 2.755749815005515e+02, 2.758916932284662e+02, 2.762081913329521e+02, 2.765245053889889e+02, 2.768405762472174e+02, 2.771564945169732e+02, 2.774721677054336e+02, 2.777876892465828e+02, 2.781029971643941e+02, 2.784181515549723e+02, 2.787330932617188e+02, 2.79047851862701e+02, 2.793624578755014e+02, 2.796769112996838e+02, 2.799911797457794e+02, 2.803052974770389e+02, 2.806192321029002e+02, 2.809330446578713e+02, 2.812466741072988e+02, 2.815601814860135e+02, 2.818735344090218e+02, 2.821867366126465e+02, 2.824998167452311e+02, 2.828127442897796e+02, 2.831255497636518e+02, 2.834382331669204e+02, 2.837507621199031e+02, 2.840632013830197e+02, 2.843755185754237e+02, 2.846876831799028e+02, 2.84999756231352e+02, 2.853117377297781e+02, 2.856235952990979e+02, 2.859353326573719e+02, 2.862469784624751e+02, 2.865585021972656e+02, 2.868699343790308e+02, 2.871812750077706e+02, 2.87492524083485e+02, 2.878036797523277e+02, 2.881147457228643e+02, 2.884257201407008e+02, 2.887366030055163e+02, 2.890473943173041e+02, 2.893581245940448e+02, 2.896687614663513e+02, 2.899793086378415e+02, 2.902897947738118e+02, 2.906001893569749e+02, 2.909105229049089e+02, 2.91220795417323e+02, 2.915309745286496e+02, 2.918411249705692e+02, 2.921511838602638e+02, 2.924611817145133e+02, 2.92771118533493e+02, 2.930809943169912e+02, 2.93390776701694e+02, 2.937005609326397e+02, 2.940102536108511e+02, 2.943198852539062e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_SpecificEnthalpy_TDryBulPhi.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_SpecificEnthalpy_TDryBulPhi.txt new file mode 100644 index 0000000000..0892662108 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_SpecificEnthalpy_TDryBulPhi.txt @@ -0,0 +1,10 @@ +last-generated=2017-04-09 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +hBulPhi.h=[2.9640759765625e+04, 3.028464845189919e+04, 3.092906057569652e+04, 3.157399418389194e+04, 3.221945122961146e+04, 3.286542963935572e+04, 3.351193368049744e+04, 3.415896482446053e+04, 3.480651964709815e+04, 3.545460133065703e+04, 3.610321084081727e+04, 3.675234769496034e+04, 3.740201189308799e+04, 3.805220343519498e+04, 3.870292964870118e+04, 3.935417929919748e+04, 4.000596507696201e+04, 4.065828113331716e+04, 4.131112843914145e+04, 4.196450796835186e+04, 4.261842168005712e+04, 4.327286761680973e+04, 4.392785164061685e+04, 4.458336691391174e+04, 4.523942222711256e+04, 4.589601171875e+04, 4.655314125200234e+04, 4.721080788791137e+04, 4.786901164026062e+04, 4.852775445622979e+04, 4.918703827632564e+04, 4.984686312388474e+04, 5.050723094130677e+04, 5.116813585183247e+04, 5.182958960711538e+04, 5.24915824260252e+04, 5.315412014567485e+04, 5.381720280871418e+04, 5.448083234784316e+04, 5.514500485683971e+04, 5.580972616616484e+04, 5.647499242553858e+04, 5.714080946727526e+04, 5.780717530447435e+04, 5.847409000283355e+04, 5.914155548356964e+04, 5.98095697548764e+04, 6.047813679848735e+04, 6.114725462449383e+04, 6.181692514238264e+04, 6.24871484375e+04, 6.315793032751267e+04, 6.382926299985565e+04, 6.450115426697307e+04, 6.517359621291071e+04, 6.584660075994636e+04, 6.65201639018541e+04, 6.71942817323983e+04, 6.786896206400871e+04, 6.854419708426464e+04, 6.921999057578044e+04, 6.989635059468597e+04, 7.057327311461593e+04, 7.125075813570071e+04, 7.192880565788444e+04, 7.260741568120437e+04, 7.328658415579832e+04, 7.396632699021196e+04, 7.464663232577112e+04, 7.532750797491542e+04, 7.600895393770488e+04, 7.669096240162606e+04, 7.737353710899083e+04, 7.805667838411749e+04, 7.874039778524997e+04, 7.94246875e+04, 8.010954752847936e+04, 8.07949856830018e+04, 8.148098633867904e+04, 8.216756883873492e+04, 8.28547179305897e+04, 8.354245296097336e+04, 8.423075830504023e+04, 8.491964177523841e+04, 8.560910337155416e+04, 8.629913897928773e+04, 8.698975682423447e+04, 8.768095279529877e+04, 8.837272689253651e+04, 8.906508692839181e+04, 8.975802509047645e+04, 9.045154505559902e+04, 9.11456550912215e+04, 9.184034325296155e+04, 9.253562516585205e+04, 9.323148520493406e+04, 9.392793118263858e+04, 9.462495894264081e+04, 9.53225846064763e+04, 9.602079620889212e+04, 9.671959375e+04] +time=[0e+00, 1e+00] +phi.y=[1.000000047497451e-03, 1.100000016391277e-02, 2.100000016391277e-02, 3.100000016391215e-02, 4.100000202655792e-02, 5.099999830126763e-02, 6.100000202655792e-02, 7.100000202655682e-02, 8.100000202655126e-02, 9.099999457599064e-02, 1.010000020265579e-01, 1.110000020265557e-01, 1.210000020265579e-01, 1.310000020265579e-01, 1.410000020265579e-01, 1.509999871254411e-01, 1.610000020265579e-01, 1.710000020265579e-01, 1.8099998712545e-01, 1.910000020265579e-01, 2.010000020265579e-01, 2.110000020265579e-01, 2.210000020265579e-01, 2.310000020265579e-01, 2.410000020265579e-01, 2.509999871253967e-01, 2.610000169277191e-01, 2.709999871253967e-01, 2.809999871254145e-01, 2.910000169277191e-01, 3.009999871253967e-01, 3.109999871253967e-01, 3.210000169277191e-01, 3.309999871253967e-01, 3.409999871253968e-01, 3.510000169276303e-01, 3.609999871253967e-01, 3.709999871253967e-01, 3.810000169276481e-01, 3.910000169277191e-01, 4.009999871253968e-01, 4.110000169276658e-01, 4.210000169277191e-01, 4.309999871253967e-01, 4.410000169276836e-01, 4.510000169277191e-01, 4.609999871253967e-01, 4.709999871253967e-01, 4.810000169277191e-01, 4.909999871253967e-01, 5.009999871253967e-01, 5.109999871253967e-01, 5.210000467294731e-01, 5.310000467291889e-01, 5.409999871253968e-01, 5.50999987125752e-01, 5.609999871253968e-01, 5.709999871253967e-01, 5.809999871253967e-01, 5.910000467292599e-01, 6.009999871253967e-01, 6.10999987125823e-01, 6.209999871255388e-01, 6.309999871253967e-01, 6.409999871253967e-01, 6.51000046729331e-01, 6.609999871253968e-01, 6.709999871258941e-01, 6.809999871256099e-01, 6.909999871254677e-01, 7.009999871253967e-01, 7.11000046729402e-01, 7.209999871253967e-01, 7.309999871253967e-01, 7.409999871256809e-01, 7.509999871253967e-01, 7.609999871253967e-01, 7.710000467294731e-01, 7.810000467291889e-01, 7.909999871253968e-01, 8.00999987125752e-01, 8.109999871253968e-01, 8.209999871253967e-01, 8.309999871253967e-01, 8.410000467292599e-01, 8.509999871253967e-01, 8.60999987125823e-01, 8.709999871255388e-01, 8.809999871253967e-01, 8.909999871253967e-01, 9.01000046729331e-01, 9.109999871253968e-01, 9.209999871258941e-01, 9.309999871256099e-01, 9.409999871254677e-01, 9.509999871253967e-01, 9.61000046729402e-01, 9.709999871253967e-01, 9.809999871253967e-01, 9.909999871256809e-01, 1.001000046730042e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_WetBulb_TDryBulPhi.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_WetBulb_TDryBulPhi.txt new file mode 100644 index 0000000000..fab40fa8bb --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Psychrometrics_Validation_WetBulb_TDryBulPhi.txt @@ -0,0 +1,14 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +wetBulPhi.TDryBul=[3.025499877929688e+02, 3.025499877929688e+02] +wetBulPhi.phi=[5.000000074505806e-02, 5.950000158324819e-02, 6.899999869614885e-02, 7.850000325962661e-02, 8.800000037252995e-02, 9.749999571591818e-02, 1.07000002048911e-01, 1.164999973922971e-01, 1.26000003725289e-01, 1.354999955296543e-01, 1.449999944120657e-01, 1.54499993294477e-01, 1.640000070780496e-01, 1.735000059604609e-01, 1.829999977648263e-01, 1.924999895691916e-01, 2.020000104307835e-01, 2.115000022351755e-01, 2.209999940395408e-01, 2.304999999999982e-01, 2.399999918043858e-01, 2.495000126659333e-01, 2.590000044703386e-01, 2.684999962747439e-01, 2.780000022352102e-01, 2.874999940395355e-01, 2.970000000000639e-01, 3.064999776483461e-01, 3.160000134110371e-01, 3.255000193714411e-01, 3.349999970196878e-01, 3.445000029802163e-01, 3.540000089406381e-01, 3.634999865890624e-01, 3.729999925494487e-01, 3.824999985099238e-01, 3.919999761582593e-01, 4.014999821186456e-01, 4.110000178813544e-01, 4.205000238417407e-01, 4.300000014900762e-01, 4.395000074505513e-01, 4.490000134109376e-01, 4.584999910593619e-01, 4.679999970197837e-01, 4.775000029803122e-01, 4.869999806285589e-01, 4.964999865889629e-01, 5.059999925494914e-01, 5.15499999999936e-01, 5.249999761581421e-01, 5.345000119208579e-01, 5.440000476830054e-01, 5.535000238416448e-01, 5.630000029803921e-01, 5.724999791384632e-01, 5.820000149011115e-01, 5.9149999105925e-01, 6.010000268219657e-01, 6.105000029800368e-01, 6.199999821187842e-01, 6.294999582772816e-01, 6.389999940395711e-01, 6.485000298021447e-01, 6.580000059603579e-01, 6.675000417223632e-01, 6.769999612579579e-01, 6.864999970198922e-01, 6.959999731781763e-01, 7.055000089407464e-01, 7.1499998509875e-01, 7.245000208614658e-01, 7.340000000002131e-01, 7.434999761582842e-01, 7.53000011921e-01, 7.62499988079071e-01, 7.720000238415027e-01, 7.814999999998579e-01, 7.910000357625737e-01, 8.004999552973158e-01, 8.099999910593921e-01, 8.195000268220405e-01, 8.29000002980179e-01, 8.385000387423973e-01, 8.480000149009658e-01, 8.574999940397131e-01, 8.669999701982105e-01, 8.765000059605e-01, 8.85999982118571e-01, 8.955000178812869e-01, 9.049999940393579e-01, 9.144999731781053e-01, 9.240000089408211e-01, 9.334999850988921e-01, 9.430000208616043e-01, 9.524999970196789e-01, 9.620000327823948e-01, 9.7149995231735e-01, 9.809999880792132e-01, 9.904999642375684e-01, 1e+00] +wetBulPhi.TWetBul=[2.836178894042969e+02, 2.839925842369466e+02, 2.843685913252648e+02, 2.847383423096001e+02, 2.850988769848027e+02, 2.854490966539033e+02, 2.857888184041085e+02, 2.861182556055392e+02, 2.864378052318788e+02, 2.867478941775337e+02, 2.870491027388199e+02, 2.873418579273184e+02, 2.876267395771363e+02, 2.879041444173487e+02, 2.881745605309134e+02, 2.884383543364823e+02, 2.886959839775225e+02, 2.889477233440613e+02, 2.89194000069518e+02, 2.894350586505387e+02, 2.896712340610558e+02, 2.899027711461601e+02, 2.901299133568536e+02, 2.903529356986384e+02, 2.905719910831119e+02, 2.90787353515625e+02, 2.909992067429117e+02, 2.912076718968242e+02, 2.914129638428495e+02, 2.916152040247322e+02, 2.918145749590262e+02, 2.920112304221112e+02, 2.922052308506242e+02, 2.923967587832927e+02, 2.92585906915083e+02, 2.927727662238756e+02, 2.929574582332867e+02, 2.931401061144426e+02, 2.933207398316588e+02, 2.934994814554661e+02, 2.936764220140942e+02, 2.938516235974201e+02, 2.94025146710675e+02, 2.94197082396968e+02, 2.94367462198621e+02, 2.945364076711554e+02, 2.947039183177333e+02, 2.948701172071996e+02, 2.950349733206818e+02, 2.951986082428779e+02, 2.953610534667969e+02, 2.955223085028384e+02, 2.956824954213174e+02, 2.958416142226702e+02, 2.959996944860016e+02, 2.961567991295992e+02, 2.963129577265277e+02, 2.964682007942592e+02, 2.966225893680196e+02, 2.967761234482464e+02, 2.969288631619627e+02, 2.970808103299096e+02, 2.972319945569482e+02, 2.973824768781621e+02, 2.975322572935511e+02, 2.9768136632113e+02, 2.97829803078231e+02, 2.979776608865619e+02, 2.981249083421662e+02, 2.98271575962623e+02, 2.984176942656893e+02, 2.98563293768728e+02, 2.987083736087149e+02, 2.988529660329851e+02, 2.989970701752778e+02, 2.991407165527344e+02, 2.992839356832241e+02, 2.994267275670381e+02, 2.995691227213178e+02, 2.997111203013025e+02, 2.998527525169294e+02, 2.999940490386139e+02, 3.001349488312027e+02, 3.002755739647506e+02, 3.004158328868882e+02, 3.005558163167936e+02, 3.006954954057471e+02, 3.008348998359154e+02, 3.009740296072985e+02, 3.011129152374745e+02, 3.012515567268073e+02, 3.013899532507264e+02, 3.015281369765692e+02, 3.01666107079074e+02, 3.018038635582056e+02, 3.019414369314663e+02, 3.020788271986407e+02, 3.022160335430884e+02, 3.023530576002712e+02, 3.024899595862684e+02, 3.026266784667969e+02] +wetBulPhi1.TDryBul=[2.731499938964844e+02, 2.735499878019114e+02, 2.739500122249096e+02, 2.743500061303332e+02, 2.747500000357568e+02, 2.751499938666871e+02, 2.755499878466244e+02, 2.759500121951078e+02, 2.76350006175029e+02, 2.767499998569731e+02, 2.771499938368898e+02, 2.775499878168156e+02, 2.779500123143014e+02, 2.783500062942181e+02, 2.787499999761622e+02, 2.791499936581063e+02, 2.795499879360502e+02, 2.799500121354906e+02, 2.803500058173528e+02, 2.807500000953513e+02, 2.811499937772953e+02, 2.815499880552847e+02, 2.819500122547068e+02, 2.823500059365873e+02, 2.827500002145403e+02, 2.831499938964844e+02, 2.835499881745192e+02, 2.83950011777787e+02, 2.843500060558218e+02, 2.847500003337293e+02, 2.851499934197282e+02, 2.855499876976175e+02, 2.85950012493085e+02, 2.863500055788838e+02, 2.867499998569731e+02, 2.871499941349534e+02, 2.875499872208613e+02, 2.87950012016256e+02, 2.883500062942181e+02, 2.887500005721074e+02, 2.891499936581063e+02, 2.895499879360502e+02, 2.89950012731463e+02, 2.903500058173528e+02, 2.907500000953513e+02, 2.911499943734224e+02, 2.915499874592394e+02, 2.919500122547068e+02, 2.923500065325962e+02, 2.927499996185951e+02, 2.931499938964844e+02, 2.935499881745135e+02, 2.939500129698297e+02, 2.943500072477133e+02, 2.947499991418517e+02, 2.951499934197353e+02, 2.955499876976161e+02, 2.959500124930807e+02, 2.963500067709643e+02, 2.967500010488479e+02, 2.971499929429863e+02, 2.975499872208699e+02, 2.979500120162589e+02, 2.983500062942152e+02, 2.987500005720989e+02, 2.991499948503463e+02, 2.995499867441208e+02, 2.999500115393279e+02, 3.00350005817357e+02, 3.007500000953527e+02, 3.011499943734153e+02, 3.015499886514444e+02, 3.01950011062397e+02, 3.023500053404261e+02, 3.027499996186008e+02, 3.031499938964844e+02, 3.035499881745135e+02, 3.039500129698297e+02, 3.043500072477133e+02, 3.047499991418517e+02, 3.051499934197353e+02, 3.055499876976161e+02, 3.059500124930807e+02, 3.063500067709643e+02, 3.067500010488479e+02, 3.071499929429863e+02, 3.075499872208699e+02, 3.079500120162589e+02, 3.083500062942152e+02, 3.087500005720989e+02, 3.091499948503463e+02, 3.095499867441208e+02, 3.099500115393279e+02, 3.10350005817357e+02, 3.107500000953527e+02, 3.111499943734153e+02, 3.115499886514444e+02, 3.11950011062397e+02, 3.123500053404261e+02, 3.127499996186008e+02, 3.131499938964844e+02] +wetBulPhi1.phi=[6.000000238418579e-01, 6.000000238418579e-01] +wetBulPhi1.TWetBul=[2.701868591308594e+02, 2.705463256916291e+02, 2.70905822769977e+02, 2.712652893307468e+02, 2.716247864090947e+02, 2.719842529029029e+02, 2.723437500482123e+02, 2.727032165420205e+02, 2.730626831697517e+02, 2.734221800472154e+02, 2.737816466749465e+02, 2.741411133026776e+02, 2.745005799304088e+02, 2.7486004655814e+02, 2.752195129180255e+02, 2.75578979277911e+02, 2.759384461734878e+02, 2.762979125333733e+02, 2.766573788932588e+02, 2.770168457888356e+02, 2.773763121487211e+02, 2.777357790441979e+02, 2.780952148866053e+02, 2.784546812464908e+02, 2.788141481420676e+02, 2.791736145019531e+02, 2.795330508799518e+02, 2.79892516704146e+02, 2.802519530821629e+02, 2.806114199777215e+02, 2.809708858019157e+02, 2.813303221799144e+02, 2.816897890753821e+02, 2.820492243821073e+02, 2.824086607601606e+02, 2.827681276556827e+02, 2.831275629625171e+02, 2.834870298578757e+02, 2.838464662358743e+02, 2.84205902613873e+02, 2.845653379205801e+02, 2.849248048160113e+02, 2.852842411940646e+02, 2.856436765007898e+02, 2.860031128786794e+02, 2.863625492566781e+02, 2.867220150808723e+02, 2.870814514588527e+02, 2.874408878367059e+02, 2.878003231434857e+02, 2.881597595214844e+02, 2.885191958994779e+02, 2.888786322774715e+02, 2.892380686554651e+02, 2.895975028907254e+02, 2.89956939268719e+02, 2.9031637564671e+02, 2.90675812024597e+02, 2.91035248402445e+02, 2.913946847802931e+02, 2.917540884987392e+02, 2.921135248765873e+02, 2.924729612544353e+02, 2.928323976322834e+02, 2.931918340101315e+02, 2.935512398707652e+02, 2.939106741064257e+02, 2.942701104840191e+02, 2.946295468620127e+02, 2.949889527224306e+02, 2.953483891004216e+02, 2.957078254780878e+02, 2.96067229196534e+02, 2.96426665574382e+02, 2.967861019520846e+02, 2.971455078125e+02, 2.975049441903481e+02, 2.978643805681961e+02, 2.982237864289026e+02, 2.985832206641629e+02, 2.989426265247603e+02, 2.993020629025694e+02, 2.996614687629873e+02, 3.000209051407263e+02, 3.003803110013964e+02, 3.007397452366567e+02, 3.010991510972904e+02, 3.014585874750657e+02, 3.018179933354812e+02, 3.021774297132565e+02, 3.025368355738902e+02, 3.028962392919726e+02, 3.03255675669566e+02, 3.036150815300905e+02, 3.039745179079411e+02, 3.043339237682085e+02, 3.046933296288058e+02, 3.050527638640662e+02, 3.054121697247726e+02, 3.057715755850426e+02, 3.061310119628906e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt new file mode 100644 index 0000000000..adde9ae02d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonths.txt @@ -0,0 +1,14 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +calTim.year=[2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03] +time=[1.728e+05, 3.456e+05] +calTim.month=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +calTim.day=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +calTim.weekDay=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +calTim.hour=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 2.3e+01, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 2.3e+01] +calTim.minute=[0e+00, 2.879999923706055e+01, 5.759999847412109e+01, 2.639999961853027e+01, 5.520000076293945e+01, 2.4e+01, 5.279999923706055e+01, 2.160000038146973e+01, 5.040000152587891e+01, 1.920000076293945e+01, 4.8e+01, 1.679999923706055e+01, 4.559999847412109e+01, 1.439999961853027e+01, 4.320000076293945e+01, 1.2e+01, 4.079999923706055e+01, 9.600000381469727e+00, 3.840000152587891e+01, 7.199999809265137e+00, 3.6e+01, 4.800000190734863e+00, 3.359999847412109e+01, 2.400000095367432e+00, 3.120000076293945e+01, 6e+01, 2.879999923706055e+01, 5.759999847412109e+01, 2.639999961853027e+01, 5.520000076293945e+01, 2.4e+01, 5.279999923706055e+01, 2.160000038146973e+01, 5.040000152587891e+01, 1.920000076293945e+01, 4.8e+01, 1.679999923706055e+01, 4.559999847412109e+01, 1.439999961853027e+01, 4.320000076293945e+01, 1.2e+01, 4.079999923706055e+01, 9.600000381469727e+00, 3.840000152587891e+01, 7.199999809265137e+00, 3.6e+01, 4.800000190734863e+00, 3.359999847412109e+01, 2.400000095367432e+00, 3.120000076293945e+01, 6e+01, 2.879999923706055e+01, 5.759999847412109e+01, 2.639999961853027e+01, 5.520000076293945e+01, 2.4e+01, 5.279999923706055e+01, 2.160000038146973e+01, 5.040000152587891e+01, 1.920000076293945e+01, 4.8e+01, 1.679999923706055e+01, 4.559999847412109e+01, 1.439999961853027e+01, 4.320000076293945e+01, 1.2e+01, 4.079999923706055e+01, 9.600000381469727e+00, 3.840000152587891e+01, 7.199999809265137e+00, 3.6e+01, 4.800000190734863e+00, 3.359999847412109e+01, 2.400000095367432e+00, 3.120000076293945e+01, 6e+01, 2.879999923706055e+01, 5.759999847412109e+01, 2.639999961853027e+01, 5.520000076293945e+01, 2.4e+01, 5.279999923706055e+01, 2.160000038146973e+01, 5.040000152587891e+01, 1.920000076293945e+01, 4.8e+01, 1.679999923706055e+01, 4.559999847412109e+01, 1.439999961853027e+01, 4.320000076293945e+01, 1.2e+01, 4.079999923706055e+01, 9.600000381469727e+00, 3.840000152587891e+01, 7.199999809265137e+00, 3.6e+01, 4.800000190734863e+00, 3.359999847412109e+01, 2.400000095367432e+00, 3.120000076293945e+01, 6e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt new file mode 100644 index 0000000000..90947a15c6 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsMinus.txt @@ -0,0 +1,14 @@ +last-generated=2017-07-18 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +calTim.year=[2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03] +time=[1.72799e+05, 3.45599e+05] +calTim.month=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +calTim.day=[2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +calTim.weekDay=[1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +calTim.hour=[2.3e+01, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 2.3e+01, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 2.3e+01] +calTim.minute=[5.998333358764648e+01, 2.878333282470703e+01, 5.758333206176758e+01, 2.638333320617676e+01, 5.518333435058594e+01, 2.398333358764648e+01, 5.278333282470703e+01, 2.158333396911621e+01, 5.038333511352539e+01, 1.91833324432373e+01, 4.798333358764648e+01, 1.678333282470703e+01, 4.558333206176758e+01, 1.438333320617676e+01, 4.318333435058594e+01, 1.198333358764648e+01, 4.078333282470703e+01, 9.583333015441895e+00, 3.838333511352539e+01, 7.183333396911621e+00, 3.598333358764648e+01, 4.783333301544189e+00, 3.358333206176758e+01, 2.383333444595337e+00, 3.11833324432373e+01, 5.998333358764648e+01, 2.878333282470703e+01, 5.758333206176758e+01, 2.638333320617676e+01, 5.518333435058594e+01, 2.398333358764648e+01, 5.278333282470703e+01, 2.158333396911621e+01, 5.038333511352539e+01, 1.91833324432373e+01, 4.798333358764648e+01, 1.678333282470703e+01, 4.558333206176758e+01, 1.438333320617676e+01, 4.318333435058594e+01, 1.198333358764648e+01, 4.078333282470703e+01, 9.583333015441895e+00, 3.838333511352539e+01, 7.183333396911621e+00, 3.598333358764648e+01, 4.783333301544189e+00, 3.358333206176758e+01, 2.383333444595337e+00, 3.11833324432373e+01, 5.998333358764648e+01, 2.878333282470703e+01, 5.758333206176758e+01, 2.638333320617676e+01, 5.518333435058594e+01, 2.398333358764648e+01, 5.278333282470703e+01, 2.158333396911621e+01, 5.038333511352539e+01, 1.91833324432373e+01, 4.798333358764648e+01, 1.678333282470703e+01, 4.558333206176758e+01, 1.438333320617676e+01, 4.318333435058594e+01, 1.198333358764648e+01, 4.078333282470703e+01, 9.583333015441895e+00, 3.838333511352539e+01, 7.183333396911621e+00, 3.598333358764648e+01, 4.783333301544189e+00, 3.358333206176758e+01, 2.383333444595337e+00, 3.11833324432373e+01, 5.998333358764648e+01, 2.878333282470703e+01, 5.758333206176758e+01, 2.638333320617676e+01, 5.518333435058594e+01, 2.398333358764648e+01, 5.278333282470703e+01, 2.158333396911621e+01, 5.038333511352539e+01, 1.91833324432373e+01, 4.798333358764648e+01, 1.678333282470703e+01, 4.558333206176758e+01, 1.438333320617676e+01, 4.318333435058594e+01, 1.198333358764648e+01, 4.078333282470703e+01, 9.583333015441895e+00, 3.838333511352539e+01, 7.183333396911621e+00, 3.598333358764648e+01, 4.783333301544189e+00, 3.358333206176758e+01, 2.383333444595337e+00, 3.11833324432373e+01, 5.998333358764648e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt new file mode 100644 index 0000000000..0b27fc3ede --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CalendarTimeMonthsPlus.txt @@ -0,0 +1,14 @@ +last-generated=2017-07-18 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +calTim.year=[2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03, 2.017e+03] +time=[1.72801e+05, 3.45601e+05] +calTim.month=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +calTim.day=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 5e+00] +calTim.weekDay=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 4e+00] +calTim.hour=[0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 2e+00, 2e+00, 3e+00, 3e+00, 4e+00, 4e+00, 5e+00, 5e+00, 6e+00, 6e+00, 7e+00, 7e+00, 8e+00, 8e+00, 9e+00, 9e+00, 1e+01, 1e+01, 1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 2e+01, 2e+01, 2.1e+01, 2.1e+01, 2.2e+01, 2.2e+01, 2.3e+01, 2.3e+01, 0e+00] +calTim.minute=[1.666666567325592e-02, 2.88166675567627e+01, 5.761666488647461e+01, 2.641666603088379e+01, 5.521666717529297e+01, 2.401666641235352e+01, 5.281666564941406e+01, 2.161666679382324e+01, 5.041666793823242e+01, 1.921666717529297e+01, 4.801666641235352e+01, 1.68166675567627e+01, 4.561666488647461e+01, 1.441666698455811e+01, 4.321666717529297e+01, 1.201666641235352e+01, 4.081666564941406e+01, 9.616666793823242e+00, 3.841666793823242e+01, 7.216666698455811e+00, 3.601666641235352e+01, 4.816666603088379e+00, 3.361666488647461e+01, 2.416666746139526e+00, 3.121666717529297e+01, 1.666666567325592e-02, 2.88166675567627e+01, 5.761666488647461e+01, 2.641666603088379e+01, 5.521666717529297e+01, 2.401666641235352e+01, 5.281666564941406e+01, 2.161666679382324e+01, 5.041666793823242e+01, 1.921666717529297e+01, 4.801666641235352e+01, 1.68166675567627e+01, 4.561666488647461e+01, 1.441666698455811e+01, 4.321666717529297e+01, 1.201666641235352e+01, 4.081666564941406e+01, 9.616666793823242e+00, 3.841666793823242e+01, 7.216666698455811e+00, 3.601666641235352e+01, 4.816666603088379e+00, 3.361666488647461e+01, 2.416666746139526e+00, 3.121666717529297e+01, 1.666666567325592e-02, 2.88166675567627e+01, 5.761666488647461e+01, 2.641666603088379e+01, 5.521666717529297e+01, 2.401666641235352e+01, 5.281666564941406e+01, 2.161666679382324e+01, 5.041666793823242e+01, 1.921666717529297e+01, 4.801666641235352e+01, 1.68166675567627e+01, 4.561666488647461e+01, 1.441666698455811e+01, 4.321666717529297e+01, 1.201666641235352e+01, 4.081666564941406e+01, 9.616666793823242e+00, 3.841666793823242e+01, 7.216666698455811e+00, 3.601666641235352e+01, 4.816666603088379e+00, 3.361666488647461e+01, 2.416666746139526e+00, 3.121666717529297e+01, 1.666666567325592e-02, 2.88166675567627e+01, 5.761666488647461e+01, 2.641666603088379e+01, 5.521666717529297e+01, 2.401666641235352e+01, 5.281666564941406e+01, 2.161666679382324e+01, 5.041666793823242e+01, 1.921666717529297e+01, 4.801666641235352e+01, 1.68166675567627e+01, 4.561666488647461e+01, 1.441666698455811e+01, 4.321666717529297e+01, 1.201666641235352e+01, 4.081666564941406e+01, 9.616666793823242e+00, 3.841666793823242e+01, 7.216666698455811e+00, 3.601666641235352e+01, 4.816666603088379e+00, 3.361666488647461e+01, 2.416666746139526e+00, 3.121666717529297e+01, 1.666666567325592e-02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CivilTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CivilTime.txt new file mode 100644 index 0000000000..b30e8e7d2e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_CivilTime.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-18 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +civTim.y=[-1e+00, -9.8e-01, -9.6e-01, -9.399999999999999e-01, -9.2e-01, -9e-01, -8.8e-01, -8.6e-01, -8.4e-01, -8.200000000000001e-01, -8e-01, -7.8e-01, -7.6e-01, -7.4e-01, -7.2e-01, -7e-01, -6.799999999999999e-01, -6.599999999999999e-01, -6.4e-01, -6.2e-01, -6e-01, -5.800000000000001e-01, -5.600000000000001e-01, -5.4e-01, -5.2e-01, -5e-01, -4.8e-01, -4.6e-01, -4.399999999999999e-01, -4.2e-01, -4e-01, -3.8e-01, -3.6e-01, -3.4e-01, -3.2e-01, -3e-01, -2.8e-01, -2.6e-01, -2.4e-01, -2.2e-01, -2e-01, -1.8e-01, -1.6e-01, -1.4e-01, -1.2e-01, -9.999999999999998e-02, -7.999999999999996e-02, -6.000000000000005e-02, -4.000000000000004e-02, -2.000000000000002e-02, 0e+00, 2.000000000000002e-02, 4.000000000000004e-02, 6.000000000000005e-02, 8.000000000000007e-02, 1.000000000000001e-01, 1.200000000000001e-01, 1.399999999999999e-01, 1.599999999999999e-01, 1.799999999999999e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.200000000000001e-01, 3.400000000000001e-01, 3.600000000000001e-01, 3.799999999999999e-01, 3.999999999999999e-01, 4.199999999999999e-01, 4.399999999999999e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.800000000000001e-01, 6.000000000000001e-01, 6.200000000000001e-01, 6.399999999999999e-01, 6.599999999999999e-01, 6.799999999999999e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.200000000000001e-01, 8.400000000000001e-01, 8.600000000000001e-01, 8.799999999999999e-01, 8.999999999999999e-01, 9.199999999999999e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00] +time=[-1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt new file mode 100644 index 0000000000..bea4321288 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Constant.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +con.y=[2.5e+00, 2.5e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt new file mode 100644 index 0000000000..b239d08724 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Pulse.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +pulse.y=[2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.200000047683716e+00, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt new file mode 100644 index 0000000000..b0cb145c68 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Ramp.txt @@ -0,0 +1,9 @@ +last-generated=2017-07-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +ram.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.333333929379781e-01, 5.666666467984518e-01, 6.000000397364299e-01, 6.333332935969035e-01, 6.666666865348816e-01, 7.000000198682149e-01, 7.333333333333334e-01, 7.666666666666667e-01, 7.999999801317851e-01, 8.333333134651184e-01, 8.666667064030965e-01, 8.999999602635702e-01, 9.333333532015483e-01, 9.66666607062022e-01, 1e+00, 1.033333333333333e+00, 1.066666706402812e+00, 1.10000003973643e+00, 1.133333293596904e+00, 1.166666626930237e+00, 1.20000007947286e+00, 1.233333412806193e+00, 1.266666587193807e+00, 1.29999992052714e+00, 1.333333373069763e+00, 1.366666706403097e+00, 1.40000003973643e+00, 1.433333214124044e+00, 1.466666666666667e+00, 1.5e+00, 1.533333333333333e+00, 1.566666785875956e+00, 1.59999996026357e+00, 1.633333293596904e+00, 1.666666626930237e+00, 1.70000007947286e+00, 1.733333412806193e+00, 1.766666587193807e+00, 1.79999992052714e+00, 1.833333373069763e+00, 1.866666706403096e+00, 1.90000003973643e+00, 1.933333214124044e+00, 1.966666666666667e+00, 2e+00, 2.033333333333334e+00, 2.066666666666667e+00, 2.099999841054281e+00, 2.133333412806193e+00, 2.166666746139526e+00, 2.20000007947286e+00, 2.233333412806193e+00, 2.266666587193807e+00, 2.29999992052714e+00, 2.333333253860474e+00, 2.366666587193807e+00, 2.40000015894572e+00, 2.433333333333334e+00, 2.466666666666667e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00] +time=[0e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt new file mode 100644 index 0000000000..b136676e9b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_Sin.txt @@ -0,0 +1,9 @@ +last-generated=2017-11-06 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +sin.y=[1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1.020937844191531e+01, 1.088542375831547e+01, 1.154508495330811e+01, 1.217615499983809e+01, 1.276695711517082e+01, 1.330655971069135e+01, 1.378497478677221e+01, 1.419335269927979e+01, 1.452413575474411e+01, 1.477120202508522e+01, 1.492998030863989e+01, 1.499753282656066e+01, 1.49726095199585e+01, 1.485567082839863e+01, 1.464888293689666e+01, 1.435606851073689e+01, 1.398265004032125e+01, 1.35355339050293e+01, 1.302299562735073e+01, 1.245451761687486e+01, 1.18406236406552e+01, 1.119266739404273e+01, 1.052264213562012e+01, 9.842945653499058e+00, 9.16615502928277e+00, 8.504796793679194e+00, 7.871104127302454e+00, 7.27680492401123e+00, 6.732896506003839e+00, 6.249443964584741e+00, 5.8353943567705e+00, 5.498406112116754e+00, 5.244717597961426e+00, 5.079021865315042e+00, 5.004385925595086e+00, 5.022190029644421e+00, 5.132105264581423e+00, 5.332098007202148e+00, 5.618466574446327e+00, 5.985913284854949e+00, 6.427636072230508e+00, 6.935464546737046e+00, 7.5e+00, 8.110794503701614e+00, 8.756551565329634e+00, 9.425313157290061e+00, 1.010471408314757e+01, 1.078217220306396e+01, 1.144515742264974e+01, 1.208140445410804e+01, 1.267913368858324e+01, 1.322728945242029e+01, 1.371572399139404e+01, 1.413540176341901e+01, 1.447855888579827e+01, 1.473884174539232e+01, 1.491143635895027e+01, 1.499314785003662e+01, 1.498246394869636e+01, 1.487958317388968e+01, 1.46864102185187e+01, 1.440651625465307e+01, 1.404508495330811e+01, 1.360880197819251e+01, 1.310573800702992e+01, 1.254520770568006e+01, 1.193757672001069e+01, 1.129409503936768e+01, 1.062666765139302e+01, 9.94764057399416e+00, 9.269585447625662e+00, 8.605042836755585e+00, 7.966316699981689e+00, 7.365222392883537e+00, 6.812879430628213e+00, 6.319515300157358e+00, 5.894252836817939e+00, 5.544967174530029e+00, 5.278118679511505e+00, 5.098644109355609e+00, 5.009866298654381e+00, 5.013427873076e+00, 5.109261989593506e+00, 5.295595602011288e+00, 5.568982504066119e+00, 5.924360775052777e+00, 6.355158008044967e+00, 6.853397846221924e+00, 7.409863547158879e+00, 8.014261029515836e+00, 8.655400463364945e+00, 9.32142416271245e+00, 1e+01] +time=[0e+00, 1.3e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt new file mode 100644 index 0000000000..8c66584145 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTable.txt @@ -0,0 +1,13 @@ +last-generated=2020-03-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1.728e+05] +timTabLin.y[1]=[0e+00, 7.999999821186066e-02, 1.599999964237213e-01, 2.39999994635582e-01, 3.199999928474426e-01, 4.000000059604645e-01, 4.799999892711639e-01, 5.600000023841859e-01, 6.399999856948853e-01, 7.200000286102295e-01, 8.00000011920929e-01, 8.799999952316284e-01, 9.599999785423279e-01, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.899999856948853e-01, 8.700000047683716e-01, 8.500000238418579e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158141e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474425e-01, 5.500000119209291e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00, 7.999999821186066e-02, 1.599999964237213e-01, 2.39999994635582e-01, 3.199999928474426e-01, 4.000000059604651e-01, 4.799999892711646e-01, 5.600000023841851e-01, 6.399999856948853e-01, 7.200000286102295e-01, 8.00000011920929e-01, 8.799999952316284e-01, 9.599999785423279e-01, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.89999985694885e-01, 8.700000047683718e-01, 8.500000238418581e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158142e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474426e-01, 5.50000011920929e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00] +timTabLinCon.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.899999856948853e-01, 8.700000047683716e-01, 8.500000238418579e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158141e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474425e-01, 5.500000119209291e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.89999985694885e-01, 8.700000047683718e-01, 8.500000238418581e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158142e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474426e-01, 5.50000011920929e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00] +timTabCon.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01] +timTabLinHol.y[1]=[0e+00, 7.999999821186066e-02, 1.599999964237213e-01, 2.39999994635582e-01, 3.199999928474426e-01, 4.000000059604645e-01, 4.799999892711639e-01, 5.600000023841859e-01, 6.399999856948853e-01, 7.200000286102295e-01, 8.00000011920929e-01, 8.799999952316284e-01, 9.599999785423279e-01, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.899999856948853e-01, 8.700000047683716e-01, 8.500000238418579e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158141e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474425e-01, 5.500000119209291e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +timTabLinDer.y[1]=[0e+00, 7.999999821186066e-02, 1.599999964237213e-01, 2.39999994635582e-01, 3.199999928474426e-01, 4.000000059604645e-01, 4.799999892711639e-01, 5.600000023841859e-01, 6.399999856948853e-01, 7.200000286102295e-01, 8.00000011920929e-01, 8.799999952316284e-01, 9.599999785423279e-01, 9.900000095367432e-01, 9.700000286102295e-01, 9.49999988079071e-01, 9.300000071525574e-01, 9.100000262260437e-01, 8.899999856948853e-01, 8.700000047683716e-01, 8.500000238418579e-01, 8.299999833106995e-01, 8.100000023841858e-01, 7.900000214576721e-01, 7.699999809265137e-01, 7.5e-01, 7.300000190734863e-01, 7.099999785423279e-01, 6.899999976158141e-01, 6.700000166893005e-01, 6.499999761581421e-01, 6.299999952316284e-01, 6.100000143051147e-01, 5.899999737739563e-01, 5.699999928474425e-01, 5.500000119209291e-01, 5.299999713897705e-01, 5.099999904632568e-01, 4.799999892711639e-01, 4.399999976158142e-01, 4.000000059604645e-01, 3.600000143051147e-01, 3.199999928474426e-01, 2.800000011920929e-01, 2.39999994635582e-01, 2.000000029802322e-01, 1.599999964237213e-01, 1.19999997317791e-01, 7.999999821186066e-02, 3.999999910593033e-02, 0e+00, -3.999999910593033e-02, -7.999999821186066e-02, -1.19999997317791e-01, -1.599999964237213e-01, -2.000000029802326e-01, -2.399999946355823e-01, -2.800000011920926e-01, -3.199999928474426e-01, -3.600000143051147e-01, -4.000000059604645e-01, -4.399999976158142e-01, -4.799999892711639e-01, -5.199999809265137e-01, -5.600000023841858e-01, -6.000000238418579e-01, -6.399999856948853e-01, -6.800000071525574e-01, -7.200000286102298e-01, -7.599999904632565e-01, -8.000000119209286e-01, -8.399999737739563e-01, -8.799999952316284e-01, -9.200000166893005e-01, -9.599999785423279e-01, -1e+00, -1.039999961853027e+00, -1.080000042915344e+00, -1.120000004768372e+00, -1.159999966621399e+00, -1.200000047683716e+00, -1.240000009536743e+00, -1.279999971389771e+00, -1.320000052452087e+00, -1.360000014305115e+00, -1.399999976158142e+00, -1.440000057220459e+00, -1.480000019073486e+00, -1.519999980926514e+00, -1.559999942779541e+00, -1.600000023841858e+00, -1.639999985694885e+00, -1.679999947547913e+00, -1.720000028610229e+00, -1.759999990463257e+00, -1.799999952316284e+00, -1.840000033378601e+00, -1.879999995231628e+00, -1.919999957084656e+00, -1.960000038146973e+00, -2e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt new file mode 100644 index 0000000000..35d25e5877 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Sources_Validation_TimeTableNegativeStartTime.txt @@ -0,0 +1,13 @@ +last-generated=2020-03-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-1.296e+05, 1.728e+05] +timTabLin.y[1]=[7.5e-01, 7.149999737739563e-01, 6.800000071525574e-01, 6.449999809265137e-01, 6.100000143051147e-01, 5.74999988079071e-01, 5.400000214576721e-01, 5.049999952316284e-01, 4.399999976158142e-01, 3.700000047683716e-01, 3.00000011920929e-01, 2.300000041723251e-01, 1.599999964237213e-01, 9.000000357627869e-02, 1.999999955296516e-02, 1.000000014901161e-01, 2.39999994635582e-01, 3.799999952316284e-01, 5.199999809265137e-01, 6.600000262260437e-01, 8.00000011920929e-01, 9.399999976158142e-01, 9.800000190734863e-01, 9.449999928474426e-01, 9.100000262260437e-01, 8.75e-01, 8.399999737739563e-01, 8.050000071525574e-01, 7.699999809265134e-01, 7.350000143051147e-01, 6.99999988079071e-01, 6.650000214576721e-01, 6.299999952316284e-01, 5.950000286102295e-01, 5.600000023841856e-01, 5.249999761581421e-01, 4.799999892711639e-01, 4.099999964237213e-01, 3.400000035762787e-01, 2.700000107288361e-01, 2.000000029802322e-01, 1.299999952316288e-01, 5.999999865889549e-02, 1.999999955296516e-02, 1.599999964237213e-01, 3.00000011920929e-01, 4.399999976158142e-01, 5.799999833106995e-01, 7.200000286102295e-01, 8.600000143051147e-01, 1e+00, 9.649999737739563e-01, 9.300000071525574e-01, 8.949999809265137e-01, 8.600000143051147e-01, 8.24999988079071e-01, 7.900000214576718e-01, 7.549999952316288e-01, 7.200000286102295e-01, 6.850000023841858e-01, 6.499999761581421e-01, 6.150000095367432e-01, 5.799999833106995e-01, 5.450000166893005e-01, 5.099999904632568e-01, 4.49999988079071e-01, 3.799999952316284e-01, 3.100000023841858e-01, 2.399999946355813e-01, 1.7000000178814e-01, 1.000000014901161e-01, 2.999999932944775e-02, 7.999999821186066e-02, 2.199999988079071e-01, 3.600000143051147e-01, 5e-01, 6.399999856948853e-01, 7.799999713897705e-01, 9.200000166893005e-01, 9.850000143051147e-01, 9.49999988079071e-01, 9.150000214576718e-01, 8.799999952316288e-01, 8.450000286102295e-01, 8.100000023841858e-01, 7.749999761581421e-01, 7.400000095367432e-01, 7.049999833106995e-01, 6.700000166893005e-01, 6.349999904632568e-01, 6.000000238418579e-01, 5.649999976158142e-01, 5.299999713897705e-01, 4.900000095367432e-01, 4.199999868869781e-01, 3.499999940395355e-01, 2.800000011920929e-01, 2.099999934434891e-01, 1.400000005960464e-01, 7.000000029802322e-02, 0e+00] +timTabLinCon.y[1]=[7.5e-01, 7.149999737739563e-01, 6.800000071525574e-01, 6.449999809265137e-01, 6.100000143051147e-01, 5.74999988079071e-01, 5.400000214576721e-01, 5.049999952316284e-01, 4.399999976158142e-01, 3.700000047683716e-01, 3.00000011920929e-01, 2.300000041723251e-01, 1.599999964237213e-01, 9.000000357627869e-02, 1.999999955296516e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.800000190734863e-01, 9.449999928474426e-01, 9.100000262260437e-01, 8.75e-01, 8.399999737739563e-01, 8.050000071525574e-01, 7.699999809265134e-01, 7.350000143051147e-01, 6.99999988079071e-01, 6.650000214576721e-01, 6.299999952316284e-01, 5.950000286102295e-01, 5.600000023841856e-01, 5.249999761581421e-01, 4.799999892711639e-01, 4.099999964237213e-01, 3.400000035762787e-01, 2.700000107288361e-01, 2.000000029802322e-01, 1.299999952316288e-01, 5.999999865889549e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.649999737739563e-01, 9.300000071525574e-01, 8.949999809265137e-01, 8.600000143051147e-01, 8.24999988079071e-01, 7.900000214576718e-01, 7.549999952316288e-01, 7.200000286102295e-01, 6.850000023841858e-01, 6.499999761581421e-01, 6.150000095367432e-01, 5.799999833106995e-01, 5.450000166893005e-01, 5.099999904632568e-01, 4.49999988079071e-01, 3.799999952316284e-01, 3.100000023841858e-01, 2.399999946355813e-01, 1.7000000178814e-01, 1.000000014901161e-01, 2.999999932944775e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.850000143051147e-01, 9.49999988079071e-01, 9.150000214576718e-01, 8.799999952316288e-01, 8.450000286102295e-01, 8.100000023841858e-01, 7.749999761581421e-01, 7.400000095367432e-01, 7.049999833106995e-01, 6.700000166893005e-01, 6.349999904632568e-01, 6.000000238418579e-01, 5.649999976158142e-01, 5.299999713897705e-01, 4.900000095367432e-01, 4.199999868869781e-01, 3.499999940395355e-01, 2.800000011920929e-01, 2.099999934434891e-01, 1.400000005960464e-01, 7.000000029802322e-02, 0e+00] +timTabCon.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01] +timTabLinHol.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 1.599999964237213e-01, 3.00000011920929e-01, 4.399999976158142e-01, 5.799999833106995e-01, 7.200000286102295e-01, 8.600000143051147e-01, 1e+00, 9.649999737739563e-01, 9.300000071525574e-01, 8.949999809265137e-01, 8.600000143051147e-01, 8.24999988079071e-01, 7.900000214576718e-01, 7.549999952316288e-01, 7.200000286102295e-01, 6.850000023841858e-01, 6.499999761581421e-01, 6.150000095367432e-01, 5.799999833106995e-01, 5.450000166893005e-01, 5.099999904632568e-01, 4.49999988079071e-01, 3.799999952316284e-01, 3.100000023841858e-01, 2.399999946355813e-01, 1.7000000178814e-01, 1.000000014901161e-01, 2.999999932944775e-02, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +timTabLinDer.y[1]=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.999999955296516e-02, 1.599999964237213e-01, 3.00000011920929e-01, 4.399999976158142e-01, 5.799999833106995e-01, 7.200000286102295e-01, 8.600000143051147e-01, 1e+00, 9.649999737739563e-01, 9.300000071525574e-01, 8.949999809265137e-01, 8.600000143051147e-01, 8.24999988079071e-01, 7.900000214576718e-01, 7.549999952316288e-01, 7.200000286102295e-01, 6.850000023841858e-01, 6.499999761581421e-01, 6.150000095367432e-01, 5.799999833106995e-01, 5.450000166893005e-01, 5.099999904632568e-01, 4.49999988079071e-01, 3.799999952316284e-01, 3.100000023841858e-01, 2.399999946355813e-01, 1.7000000178814e-01, 1.000000014901161e-01, 2.999999932944775e-02, -3.999999910593033e-02, -1.099999994039536e-01, -1.800000071525574e-01, -2.5e-01, -3.199999928474426e-01, -3.899999856948853e-01, -4.600000083446503e-01, -5.299999713897705e-01, -6.000000238418579e-01, -6.700000166893012e-01, -7.400000095367425e-01, -8.100000023841858e-01, -8.799999952316284e-01, -9.49999988079071e-01, -1.019999980926514e+00, -1.090000033378601e+00, -1.159999966621399e+00, -1.230000019073486e+00, -1.299999952316284e+00, -1.370000004768372e+00, -1.440000057220459e+00, -1.509999990463257e+00, -1.580000042915344e+00, -1.649999976158142e+00, -1.720000028610229e+00, -1.789999961853027e+00, -1.860000014305115e+00, -1.929999947547913e+00, -2e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Abs.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Abs.txt new file mode 100644 index 0000000000..4ecfa8eb58 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Abs.txt @@ -0,0 +1,10 @@ +last-generated=2017-02-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +abs1.y=[1e+00, 9.800000186264507e-01, 9.599999776482565e-01, 9.399999962747084e-01, 9.200000149011579e-01, 8.99999977648261e-01, 8.799999925494144e-01, 8.600000149011634e-01, 8.399999701977309e-01, 8.200000000000001e-01, 8.000000149011612e-01, 7.799999701976954e-01, 7.599999850988388e-01, 7.4e-01, 7.200000298023046e-01, 7e-01, 6.799999999999999e-01, 6.60000029802269e-01, 6.4e-01, 6.2e-01, 6.000000298022335e-01, 5.799999701976777e-01, 5.600000000000001e-01, 5.400000298023224e-01, 5.199999701976776e-01, 5e-01, 4.799999701978197e-01, 4.600000298021625e-01, 4.399999999999999e-01, 4.19999970197802e-01, 4.000000298023224e-01, 3.8e-01, 3.6e-01, 3.400000298023224e-01, 3.2e-01, 3e-01, 2.800000298023224e-01, 2.6e-01, 2.399999850988743e-01, 2.199999701977842e-01, 2.000000149011167e-01, 1.8e-01, 1.599999701977753e-01, 1.400000149011079e-01, 1.199999925494283e-01, 9.99999776483026e-02, 8.000001490113007e-02, 5.999999627471642e-02, 3.999997764829821e-02, 2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +abs1.u=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Acos.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Acos.txt new file mode 100644 index 0000000000..5e13f343f8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Acos.txt @@ -0,0 +1,10 @@ +last-generated=2022-01-28 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +arcCos.u=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 6.661338147750939e-16, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +arcCos.y=[3.141592741012573e+00, 2.941257713080056e+00, 2.857798573236356e+00, 2.793426509802495e+00, 2.73887681510135e+00, 2.690565827960306e+00, 2.646658414959068e+00, 2.606065989716528e+00, 2.568079465034244e+00, 2.532207263155047e+00, 2.498091464263713e+00, 2.465462205896689e+00, 2.434109441162152e+00, 2.40386675375035e+00, 2.374598743254293e+00, 2.346193807174723e+00, 2.318558921620271e+00, 2.291615014079501e+00, 2.265294570507043e+00, 2.239539140357875e+00, 2.21429754049987e+00, 2.189525111341287e+00, 2.165182110774458e+00, 2.14123345414354e+00, 2.117647158478246e+00, 2.094395160675049e+00, 2.071450927001068e+00, 2.048791432734455e+00, 2.026395085131606e+00, 2.004241686569111e+00, 1.982313182166426e+00, 1.960592632684996e+00, 1.939064248976652e+00, 1.917713193192413e+00, 1.896525867387665e+00, 1.875488984017263e+00, 1.854590445775155e+00, 1.833818564760159e+00, 1.813162197784627e+00, 1.792610735188535e+00, 1.772154224169914e+00, 1.751782767656608e+00, 1.731487009191167e+00, 1.711257710603291e+00, 1.691086168255718e+00, 1.670963740233353e+00, 1.650881903227992e+00, 1.630832431312361e+00, 1.610806920513384e+00, 1.590797681813303e+00, 1.570796370506287e+00, 1.550794939990833e+00, 1.530785641637258e+00, 1.510760249982415e+00, 1.490710778366843e+00, 1.470628881569574e+00, 1.450506453547637e+00, 1.430334911200208e+00, 1.41010567143599e+00, 1.389809793536522e+00, 1.369438458451072e+00, 1.348981886614312e+00, 1.328430543227801e+00, 1.307774057043272e+00, 1.287002176028573e+00, 1.266103575279027e+00, 1.245066936501873e+00, 1.223879491985652e+00, 1.202528492035267e+00, 1.180999989118211e+00, 1.159279439637246e+00, 1.137350988735085e+00, 1.115197722188159e+00, 1.092801136966683e+00, 1.070141694802461e+00, 1.047197580337524e+00, 1.023945309212232e+00, 1.000359132197873e+00, 9.764104389779845e-01, 9.520676661910464e-01, 9.27295237723663e-01, 9.020536006546462e-01, 8.762980512963059e-01, 8.499775083571287e-01, 8.230336187344482e-01, 7.953988979548781e-01, 7.669940405851184e-01, 7.377259872617282e-01, 7.074832172945881e-01, 6.761304873158263e-01, 6.435010230962218e-01, 6.093854027893624e-01, 5.735131517807321e-01, 5.355266611127378e-01, 4.949341017145322e-01, 4.510267420696834e-01, 4.027157211501951e-01, 3.48166183816678e-01, 2.837942381117601e-01, 2.003349384995088e-01, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Add.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Add.txt new file mode 100644 index 0000000000..4c93f73093 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Add.txt @@ -0,0 +1,11 @@ +last-generated=2022-01-28 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +add1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 1.332267629550188e-15, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +add1.u2=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 6.661338147750939e-16, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +add1.y=[-3e+00, -2.940000055879345e+00, -2.880000111758691e+00, -2.819999929219541e+00, -2.759999985098802e+00, -2.700000052154006e+00, -2.640000096857493e+00, -2.57999992549421e+00, -2.519999970197624e+00, -2.460000059604325e+00, -2.400000104307995e+00, -2.339999910593086e+00, -2.279999955296437e+00, -2.219999999999858e+00, -2.160000089406914e+00, -2.099999940395533e+00, -2.039999940395675e+00, -1.980000029802269e+00, -1.920000000000213e+00, -1.860000000000071e+00, -1.799999970197766e+00, -1.739999970197873e+00, -1.679999940395391e+00, -1.620000029802198e+00, -1.559999910593193e+00, -1.5e+00, -1.439999999999716e+00, -1.380000059604325e+00, -1.320000059604609e+00, -1.259999940395604e+00, -1.200000119208934e+00, -1.139999999999929e+00, -1.079999999999787e+00, -1.020000059604254e+00, -9.599999999999999e-01, -8.99999940395533e-01, -8.400000596046449e-01, -7.8e-01, -7.2e-01, -6.599999403953551e-01, -6.00000059604467e-01, -5.400000000000001e-01, -4.799999105932283e-01, -4.200000298023224e-01, -3.6e-01, -2.999999403953552e-01, -2.400000447034213e-01, -1.80000000000009e-01, -1.199999329449346e-01, -6.000005587923019e-02, 1.998401444325282e-15, 6.000005587837755e-02, 1.200001117567906e-01, 1.800001788109503e-01, 2.399998658917877e-01, 2.999999403964213e-01, 3.599999999997872e-01, 4.200000298016826e-01, 4.800000894054748e-01, 5.400001788108078e-01, 5.999998807928419e-01, 6.599999403966341e-01, 7.200000000004263e-01, 7.799999999995737e-01, 8.400000596033659e-01, 9.000001192071581e-01, 9.599998211891922e-01, 1.0199998807927e+00, 1.080000000000427e+00, 1.140000000000142e+00, 1.200000119207868e+00, 1.260000119206731e+00, 1.319999880792416e+00, 1.379999880792984e+00, 1.440000000000568e+00, 1.5e+00, 1.559999999999432e+00, 1.620000119207016e+00, 1.680000119207584e+00, 1.739999880793269e+00, 1.799999880792132e+00, 1.859999999999858e+00, 1.919999999999573e+00, 1.9800001192073e+00, 2.040000119207726e+00, 2.099999761585684e+00, 2.160000000000852e+00, 2.220000000000284e+00, 2.279999999999716e+00, 2.339999999999148e+00, 2.400000238414316e+00, 2.459999880792274e+00, 2.519999880791705e+00, 2.579999880791989e+00, 2.640000119209289e+00, 2.700000119207158e+00, 2.76000011920801e+00, 2.819999761586537e+00, 2.880000000001137e+00, 2.940000000000568e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_AddParameter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_AddParameter.txt new file mode 100644 index 0000000000..d66377d410 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_AddParameter.txt @@ -0,0 +1,10 @@ +last-generated=2022-02-03 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +addPar.u=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 1.332267629550188e-15, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +addPar.y=[-1.5e+00, -1.460000037252901e+00, -1.419999955296513e+00, -1.379999992549417e+00, -1.340000029802316e+00, -1.299999955296522e+00, -1.259999985098829e+00, -1.220000029802327e+00, -1.179999940395462e+00, -1.14e+00, -1.100000029802322e+00, -1.059999940395391e+00, -1.019999970197678e+00, -9.8e-01, -9.399999999999999e-01, -9e-01, -8.6e-01, -8.2e-01, -7.8e-01, -7.4e-01, -7e-01, -6.6e-01, -6.2e-01, -5.8e-01, -5.4e-01, -5e-01, -4.599999701976776e-01, -4.200000298023223e-01, -3.799999999999999e-01, -3.399999701976777e-01, -3.000000596044672e-01, -2.6e-01, -2.199999701977309e-01, -1.800000596044493e-01, -1.400000149011345e-01, -9.999997764830271e-02, -6.000005587927459e-02, -2.000001862641598e-02, 2.000001862641598e-02, 6.000005587927459e-02, 9.999997764830271e-02, 1.400000149011345e-01, 1.800000596044493e-01, 2.199999701977309e-01, 2.6e-01, 3.000000596044672e-01, 3.399999701976777e-01, 3.799999999999999e-01, 4.200000298023223e-01, 4.599999701976776e-01, 5e-01, 5.400000596037922e-01, 5.80000059603508e-01, 6.200001192075844e-01, 6.599999403966343e-01, 6.999999403960659e-01, 7.399999999998581e-01, 7.799999999995735e-01, 8.200000596036499e-01, 8.600001192069446e-01, 8.99999880792842e-01, 9.399999403962078e-01, 9.800000000002842e-01, 1.019999999999716e+00, 1.059999999999147e+00, 1.100000119207869e+00, 1.139999880792274e+00, 1.1799998807927e+00, 1.220000000000427e+00, 1.260000000000142e+00, 1.299999999999289e+00, 1.34000011920801e+00, 1.379999880792416e+00, 1.419999880791847e+00, 1.460000000000568e+00, 1.5e+00, 1.539999999999432e+00, 1.580000119208153e+00, 1.620000119207584e+00, 1.65999988079199e+00, 1.700000000000711e+00, 1.739999999999858e+00, 1.779999999999573e+00, 1.8200001192073e+00, 1.860000119207726e+00, 1.899999880792131e+00, 1.940000000000853e+00, 1.980000000000284e+00, 2.02e+00, 2.06e+00, 2.1e+00, 2.14e+00, 2.18e+00, 2.22e+00, 2.26e+00, 2.3e+00, 2.34e+00, 2.38e+00, 2.42e+00, 2.46e+00, 2.5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Asin.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Asin.txt new file mode 100644 index 0000000000..b065b8f6d5 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Asin.txt @@ -0,0 +1,10 @@ +last-generated=2022-01-28 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +arcSin.u=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 6.661338147750939e-16, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +arcSin.y=[-1.570796370506287e+00, -1.370461461783046e+00, -1.287002202730069e+00, -1.222630258505497e+00, -1.168080444595117e+00, -1.119769576663264e+00, -1.075862163661991e+00, -1.035269619210242e+00, -9.972832137371404e-01, -9.614110118579434e-01, -9.272952129666715e-01, -8.946658353904379e-01, -8.633131302604304e-01, -8.33070323639703e-01, -8.038023131433967e-01, -7.753974962729034e-01, -7.477626107185229e-01, -7.208187627823978e-01, -6.944982596058273e-01, -6.687427102471569e-01, -6.435011103889385e-01, -6.187286812307461e-01, -5.943857998727453e-01, -5.704371432417735e-01, -5.468509667852542e-01, -5.235987901687622e-01, -5.006546757033603e-01, -4.779952112388208e-01, -4.555986848230499e-01, -4.334453160631976e-01, -4.115168712647842e-01, -3.897962919810321e-01, -3.682678784706849e-01, -3.469169120928977e-01, -3.257294968813784e-01, -3.04692643313477e-01, -2.837941348735136e-01, -2.630222240561947e-01, -2.423658421794656e-01, -2.218144391877342e-01, -2.01357928169344e-01, -1.809864418538047e-01, -1.606906237843054e-01, -1.404614295039713e-01, -1.202898797057381e-01, -1.001673995295663e-01, -8.008559977683727e-02, -6.003605708078209e-02, -4.001065431476606e-02, -2.000135228497023e-02, 6.661338147750939e-16, 2.000135228468595e-02, 4.001071396793809e-02, 6.003611679874103e-02, 8.008553998537991e-02, 1.001673995299234e-01, 1.202898797056666e-01, 1.404614295037558e-01, 1.606906841687625e-01, 1.809865024645448e-01, 2.013578673515531e-01, 2.218144391881711e-01, 2.423658421796119e-01, 2.630222240560475e-01, 2.837941348730692e-01, 3.046927058202928e-01, 3.257294340032417e-01, 3.469168487185605e-01, 3.682678784709134e-01, 3.897962919811088e-01, 4.115168712643961e-01, 4.334453817705624e-01, 4.555986185153786e-01, 4.779951441326363e-01, 5.006546757036839e-01, 5.235987901687622e-01, 5.468510016896938e-01, 5.704371787037691e-01, 5.943858719236573e-01, 6.187286447105954e-01, 6.435010731779789e-01, 6.687427102470667e-01, 6.944982596055491e-01, 7.208188025445131e-01, 7.477626921679752e-01, 7.753974129467638e-01, 8.038022703169497e-01, 8.330703236399136e-01, 8.633131532115564e-01, 8.94665883190034e-01, 9.272952878061306e-01, 9.614109081122795e-01, 9.972831591214071e-01, 1.035269590184259e+00, 1.075862179384858e+00, 1.119769628436248e+00, 1.168080559950084e+00, 1.22263009728392e+00, 1.287002072789597e+00, 1.370461372402204e+00, 1.570796370506287e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan.txt new file mode 100644 index 0000000000..2065894dac --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +atan1.y=[-1.107148766517639e+00, -1.0990188119943e+00, -1.090621351812926e+00, -1.081943988206564e+00, -1.072973965780339e+00, -1.063697815641912e+00, -1.05410122740032e+00, -1.044169068636603e+00, -1.033885596304824e+00, -1.023234132815382e+00, -1.01219701933794e+00, -1.000755905408125e+00, -9.888911810771551e-01, -9.765826403692707e-01, -9.638086565116331e-01, -9.505468687190282e-01, -9.367735931548569e-01, -9.22464313721024e-01, -9.075933206810939e-01, -8.92133828204941e-01, -8.760580469159053e-01, -8.593371994299389e-01, -8.419415929539554e-01, -8.238407450158989e-01, -8.05003513476979e-01, -7.853981852531433e-01, -7.649928132062604e-01, -7.437556021451456e-01, -7.216548350398088e-01, -6.986598175987283e-01, -6.747409990967537e-01, -6.498704612868826e-01, -6.240230609582326e-01, -5.971767067618984e-01, -5.693131786372668e-01, -5.404195013549542e-01, -5.104883747292748e-01, -4.795192927756186e-01, -4.475199722713827e-01, -4.145068343486408e-01, -3.805063869877695e-01, -3.455555610058534e-01, -3.097028851449942e-01, -2.730087306602546e-01, -2.355449705387405e-01, -1.973955172062573e-01, -1.586552885370904e-01, -1.194289205111713e-01, -7.98299407446374e-02, -3.997872479312041e-02, 0e+00, 3.997872479255309e-02, 7.983005917092731e-02, 1.194290379216803e-01, 1.586551722433081e-01, 1.973955172069418e-01, 2.355449705386062e-01, 2.730087306598599e-01, 3.097029932485999e-01, 3.455556663312599e-01, 3.805062840534133e-01, 4.145068343493573e-01, 4.475199722716144e-01, 4.795192927753956e-01, 5.104883747286278e-01, 5.404195888219018e-01, 5.693130938352052e-01, 5.971766252097778e-01, 6.240230609585146e-01, 6.498704612869722e-01, 6.747409990963219e-01, 6.986598873701168e-01, 7.216547676121809e-01, 7.437555375099892e-01, 7.649928132065574e-01, 7.853981852531433e-01, 8.050035420789962e-01, 8.238407724191776e-01, 8.419416456388799e-01, 8.593371739185012e-01, 8.760580224302341e-01, 8.921338282048848e-01, 9.075933206809328e-01, 9.224643353717441e-01, 9.367736348668148e-01, 9.505468283543695e-01, 9.638086370524414e-01, 9.765826403693602e-01, 9.888911900705063e-01, 1.000755922709291e+00, 1.012197044361474e+00, 1.023234100417966e+00, 1.033885580656301e+00, 1.044169061083531e+00, 1.054101231033373e+00, 1.063697826149318e+00, 1.072973986103858e+00, 1.08194396347844e+00, 1.090621335862628e+00, 1.099018804275053e+00, 1.107148766517639e+00] +atan1.u=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan2.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan2.txt new file mode 100644 index 0000000000..87fe3d5035 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Atan2.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +atan2_1.y=[-1.107148766517639e+00, -1.090955853095073e+00, -1.074373602115301e+00, -1.057397245206463e+00, -1.040022848461721e+00, -1.022246958161654e+00, -1.004067060860941e+00, -9.854819184168422e-01, -9.664908017097033e-01, -9.470946262685302e-01, -9.272952109515764e-01, -9.070959675051451e-01, -8.865015450877187e-01, -8.655182618077993e-01, -8.441540015646369e-01, -8.224182855377882e-01, -8.003224054672364e-01, -7.778795401891816e-01, -7.55104438951444e-01, -7.320138160533928e-01, -7.086262772981726e-01, -6.849620186074287e-01, -6.610431642459091e-01, -6.368932825121129e-01, -6.125375497216634e-01, -5.88002622127533e-01, -5.633162619929432e-01, -5.385074882096702e-01, -5.136060148395397e-01, -4.886423736916999e-01, -4.636476337907034e-01, -4.386528193920278e-01, -4.136892080798879e-01, -3.887877790405355e-01, -3.639789610258892e-01, -3.392926009893542e-01, -3.14757709933531e-01, -2.904019471538156e-01, -2.662520294117404e-01, -2.423331397490194e-01, -2.186689666252732e-01, -1.952813929751658e-01, -1.721907851761704e-01, -1.494157327256636e-01, -1.269727892310898e-01, -1.048769093970772e-01, -8.314124806184417e-02, -6.177695961153368e-02, -4.079366111644264e-02, -2.019929227204247e-02, 0e+00, 1.979941132193068e-02, 3.919563742854829e-02, 5.818672626421933e-02, 7.677185307662303e-02, 9.495168266580074e-02, 1.127276080572337e-01, 1.301020655403405e-01, 1.47078378122337e-01, 1.636606287534715e-01, 1.798534606977788e-01, 1.956624313738925e-01, 2.110933290572728e-01, 2.261524420207489e-01, 2.408464758078542e-01, 2.55182419118823e-01, 2.691674465397719e-01, 2.828091753623007e-01, 2.961151505661267e-01, 3.090930015527286e-01, 3.217505663259429e-01, 3.340956233613556e-01, 3.461359398265901e-01, 3.578793780779167e-01, 3.693336438272593e-01, 3.805063664913177e-01, 3.914051456331692e-01, 4.02037402105978e-01, 4.124104673019413e-01, 4.22531523657847e-01, 4.324077549221939e-01, 4.420460141790477e-01, 4.514530963452202e-01, 4.606355877763165e-01, 4.695999556057429e-01, 4.783524068139772e-01, 4.868992147934879e-01, 4.952462872178486e-01, 5.033993759341433e-01, 5.113641732038533e-01, 5.191461030830482e-01, 5.267504852105495e-01, 5.341825362328996e-01, 5.414472170839578e-01, 5.485494153515377e-01, 5.554937205931376e-01, 5.622848416110154e-01, 5.689269711965954e-01, 5.75424658888304e-01, 5.817818581563068e-01, 5.88002622127533e-01] +atan2_1.u2=[1e+00, 1.019999981373556e+00, 1.039999962747112e+00, 1.059999944120667e+00, 1.08000004470346e+00, 1.100000022351717e+00, 1.120000007450546e+00, 1.139999985098846e+00, 1.159999970197731e+00, 1.179999940395462e+00, 1.200000044703439e+00, 1.220000029802305e+00, 1.240000014901081e+00, 1.260000000000142e+00, 1.279999970197695e+00, 1.299999940395533e+00, 1.320000059604538e+00, 1.340000029802269e+00, 1.359999999999787e+00, 1.379999999999929e+00, 1.399999970197766e+00, 1.419999970197873e+00, 1.440000059604609e+00, 1.460000029802198e+00, 1.480000029802162e+00, 1.5e+00, 1.520000000000284e+00, 1.539999940395675e+00, 1.559999940395391e+00, 1.580000059604396e+00, 1.599999999999645e+00, 1.620000000000071e+00, 1.640000000000213e+00, 1.659999940395746e+00, 1.679999940395462e+00, 1.700000059604467e+00, 1.719999999999574e+00, 1.739999999999858e+00, 1.760000000000142e+00, 1.780000000000426e+00, 1.799999940395533e+00, 1.820000059604538e+00, 1.840000059604254e+00, 1.859999999999787e+00, 1.879999999999929e+00, 1.900000000000355e+00, 1.919999940395604e+00, 1.940000059604609e+00, 1.960000059604325e+00, 1.979999999999716e+00, 2e+00, 2.019999999999432e+00, 2.039999999998863e+00, 2.059999999998295e+00, 2.079999880791989e+00, 2.099999880791421e+00, 2.119999880790711e+00, 2.140000119208863e+00, 2.160000119208295e+00, 2.180000119207727e+00, 2.200000000001421e+00, 2.220000000000852e+00, 2.240000000000284e+00, 2.259999999999716e+00, 2.279999999999148e+00, 2.299999999998579e+00, 2.319999880792273e+00, 2.339999880791705e+00, 2.359999880791137e+00, 2.380000119209289e+00, 2.400000119208579e+00, 2.420000119208011e+00, 2.440000000001705e+00, 2.460000000001137e+00, 2.480000000000568e+00, 2.5e+00, 2.519999999999432e+00, 2.539999999998863e+00, 2.559999999998295e+00, 2.579999880791989e+00, 2.599999880791421e+00, 2.619999880790711e+00, 2.640000119208863e+00, 2.660000119208295e+00, 2.680000119207727e+00, 2.700000000001421e+00, 2.720000000000852e+00, 2.740000000000284e+00, 2.759999999999716e+00, 2.779999999999148e+00, 2.799999999998579e+00, 2.819999880792273e+00, 2.839999880791705e+00, 2.859999880791137e+00, 2.880000119209289e+00, 2.900000119208579e+00, 2.920000119208011e+00, 2.940000000001705e+00, 2.960000000001137e+00, 2.980000000000568e+00, 3e+00] +atan2_1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Average.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Average.txt new file mode 100644 index 0000000000..50cfafea11 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Average.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +avg1.u1=[-2e+00, -1.940000055879345e+00, -1.879999992549428e+00, -1.82000004842875e+00, -1.759999985098855e+00, -1.70000005215405e+00, -1.639999977648283e+00, -1.580000044703481e+00, -1.519999970197731e+00, -1.460000059604538e+00, -1.399999985098794e+00, -1.340000029802305e+00, -1.279999955296596e+00, -1.219999999999858e+00, -1.159999970197695e+00, -1.100000059604467e+00, -1.039999940395462e+00, -9.800000298022691e-01, -9.200000596044317e-01, -8.6e-01, -8.000000298022335e-01, -7.399999701976776e-01, -6.799999999999999e-01, -6.200000298023223e-01, -5.599999701976777e-01, -5e-01, -4.399999403954973e-01, -3.800000596044848e-01, -3.199999999999821e-01, -2.599999403954797e-01, -2.000000745056284e-01, -1.400000149011257e-01, -7.999995529662296e-02, -2.000007823094963e-02, 3.999997764830499e-02, 1.000000372528362e-01, 1.599999105932459e-01, 2.199999701977486e-01, 2.800000298022514e-01, 3.400000894067541e-01, 3.999999701977666e-01, 4.60000029802269e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.540000119207726e+00, 1.599999880793552e+00, 1.659999880792416e+00, 1.720000000000284e+00, 1.779999999999716e+00, 1.840000119207584e+00, 1.900000119206448e+00, 1.959999880792274e+00, 2.019999880791705e+00, 2.079999880791989e+00, 2.140000119209289e+00, 2.200000119207158e+00, 2.26000011920801e+00, 2.319999761586537e+00, 2.380000000001137e+00, 2.440000000000568e+00, 2.5e+00, 2.559999999999432e+00, 2.619999999998863e+00, 2.680000238413463e+00, 2.73999988079199e+00, 2.799999880792842e+00, 2.859999880790711e+00, 2.920000119208011e+00, 2.980000119208295e+00, 3.040000119207726e+00, 3.099999761585684e+00, 3.160000000000852e+00, 3.220000000000284e+00, 3.279999999999716e+00, 3.339999999999148e+00, 3.400000238414316e+00, 3.459999880792274e+00, 3.519999880791705e+00, 3.579999880791989e+00, 3.640000119209289e+00, 3.700000119207158e+00, 3.76000011920801e+00, 3.819999761586537e+00, 3.880000000001137e+00, 3.940000000000568e+00, 4e+00] +avg1.y=[-2.5e-01, -2.049999972060321e-01, -1.599999944120641e-01, -1.149999990686796e-01, -6.999999627471053e-02, -2.500000372529029e-02, 2.000000558793419e-02, 6.499999627470807e-02, 1.100000074505673e-01, 1.549999850988654e-01, 1.999999962747208e-01, 2.450000074505762e-01, 2.900000037252703e-01, 3.350000298022869e-01, 3.799999925494239e-01, 4.249999850988832e-01, 4.700000149011346e-01, 5.149999776482715e-01, 5.599999701977308e-01, 6.050000298023046e-01, 6.499999627471192e-01, 6.950000223516929e-01, 7.400000149011523e-01, 7.850000074506117e-01, 8.300000074505406e-01, 8.75e-01, 9.200000596045738e-01, 9.64999925494274e-01, 1.009999985098883e+00, 1.054999985099025e+00, 1.099999970197411e+00, 1.144999970197766e+00, 1.190000089406701e+00, 1.234999955296223e+00, 1.27999995529665e+00, 1.325000074505584e+00, 1.369999940395035e+00, 1.414999940395533e+00, 1.460000059604467e+00, 1.505000059604965e+00, 1.549999925494416e+00, 1.59500004470335e+00, 1.640000044703777e+00, 1.684999910593299e+00, 1.730000029802234e+00, 1.775000029802589e+00, 1.820000014900975e+00, 1.865000014901117e+00, 1.910000014901401e+00, 1.954999999999787e+00, 2e+00, 2.045000119207726e+00, 2.089999999999148e+00, 2.135000119208011e+00, 2.179999970198637e+00, 2.224999850990342e+00, 2.269999970197464e+00, 2.315000089405795e+00, 2.359999970196931e+00, 2.405000089405795e+00, 2.449999940396421e+00, 2.494999821188411e+00, 2.539999940395568e+00, 2.585000059604432e+00, 2.630000178811589e+00, 2.675000059603579e+00, 2.719999910594205e+00, 2.765000029803069e+00, 2.809999910594205e+00, 2.855000029802536e+00, 2.900000149009658e+00, 2.945000029801363e+00, 2.989999880791989e+00, 3.035000000000852e+00, 3.079999880792274e+00, 3.125e+00, 3.170000119207726e+00, 3.214999999999148e+00, 3.260000119208011e+00, 3.304999970198637e+00, 3.349999850990342e+00, 3.394999970197464e+00, 3.440000089405795e+00, 3.484999970196931e+00, 3.530000089405795e+00, 3.574999940396421e+00, 3.619999821188411e+00, 3.664999940395568e+00, 3.710000059604432e+00, 3.755000178811589e+00, 3.800000059603579e+00, 3.844999910594205e+00, 3.890000029803069e+00, 3.934999910594205e+00, 3.980000029802536e+00, 4.025000149009657e+00, 4.070000268217385e+00, 4.114999642376821e+00, 4.159999761584547e+00, 4.204999880792274e+00, 4.25e+00] +avg1.u2=[1.5e+00, 1.529999972060327e+00, 1.559999944120655e+00, 1.59000003539023e+00, 1.620000007450599e+00, 1.649999973922997e+00, 1.679999951571254e+00, 1.710000037252895e+00, 1.740000014901188e+00, 1.769999970197838e+00, 1.799999947846002e+00, 1.830000044703457e+00, 1.860000022351782e+00, 1.890000000000071e+00, 1.919999955296543e+00, 1.950000029802234e+00, 1.980000029802162e+00, 2.009999985098812e+00, 2.039999940395249e+00, 2.069999940395391e+00, 2.099999895692183e+00, 2.130000134109767e+00, 2.160000089406843e+00, 2.190000044703421e+00, 2.220000044703563e+00, 2.25e+00, 2.280000000000142e+00, 2.309999910592873e+00, 2.339999910593157e+00, 2.369999910593157e+00, 2.400000059604467e+00, 2.430000059604609e+00, 2.460000059604751e+00, 2.489999970197482e+00, 2.519999970197624e+00, 2.549999970197766e+00, 2.579999880790497e+00, 2.609999880791208e+00, 2.640000119208792e+00, 2.670000119209503e+00, 2.700000029802234e+00, 2.730000029802376e+00, 2.760000029802518e+00, 2.789999940395249e+00, 2.819999940395391e+00, 2.849999940395533e+00, 2.880000089406843e+00, 2.910000089406843e+00, 2.940000089407127e+00, 2.969999999999858e+00, 3e+00, 3.029999999999716e+00, 3.059999999999432e+00, 3.089999999999148e+00, 3.119999821189263e+00, 3.150000059605e+00, 3.180000059604503e+00, 3.210000059604432e+00, 3.240000059604147e+00, 3.270000059603863e+00, 3.299999880791421e+00, 3.329999880791137e+00, 3.359999880791421e+00, 3.390000119208579e+00, 3.420000119208863e+00, 3.450000119208579e+00, 3.479999940396137e+00, 3.509999940395853e+00, 3.539999940395568e+00, 3.569999940395497e+00, 3.599999940395e+00, 3.630000178810737e+00, 3.660000000000852e+00, 3.690000000000568e+00, 3.720000000000284e+00, 3.75e+00, 3.779999999999716e+00, 3.809999999999432e+00, 3.839999999999148e+00, 3.869999821189263e+00, 3.900000059605e+00, 3.930000059604503e+00, 3.960000059604432e+00, 3.990000059604147e+00, 4.020000059603863e+00, 4.05000011921e+00, 4.079999880791137e+00, 4.110000119209432e+00, 4.139999880790568e+00, 4.170000119208863e+00, 4.19999988079e+00, 4.229999940396137e+00, 4.260000178814431e+00, 4.289999940395568e+00, 4.320000178814077e+00, 4.349999940395e+00, 4.380000178813295e+00, 4.409999761582274e+00, 4.440000000000568e+00, 4.469999761583979e+00, 4.5e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Cos.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Cos.txt new file mode 100644 index 0000000000..7c6438ff8d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Cos.txt @@ -0,0 +1,10 @@ +last-generated=2017-04-06 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +cos1.u=[0e+00, 6.283000252015869e-02, 1.256600050403174e-01, 1.884900075604721e-01, 2.513200100806348e-01, 3.141500008977957e-01, 3.769800151209521e-01, 4.398100059381095e-01, 5.026400201612219e-01, 5.654699577702076e-01, 6.283000017955865e-01, 6.911299862164273e-01, 7.539600302418328e-01, 8.167900146627535e-01, 8.796200118762242e-01, 9.424499494852275e-01, 1.005280040322444e+00, 1.06810997793143e+00, 1.130939915540415e+00, 1.193770065982276e+00, 1.256600003591262e+00, 1.319430034823833e+00, 1.38225997243289e+00, 1.445090029250846e+00, 1.507920060483666e+00, 1.570749998092651e+00, 1.633580029325791e+00, 1.696409873310623e+00, 1.759240023752413e+00, 1.822070054985055e+00, 1.884899898970455e+00, 1.947729930203027e+00, 2.010560080644461e+00, 2.073389924629506e+00, 2.136219955862646e+00, 2.199049987095786e+00, 2.261879831081683e+00, 2.324709862313686e+00, 2.387540131964268e+00, 2.450370163196271e+00, 2.513200007182169e+00, 2.576030038415308e+00, 2.638860069648448e+00, 2.701689913633493e+00, 2.76451994486578e+00, 2.82734997609892e+00, 2.890180058501691e+00, 2.953010089734688e+00, 3.015840120966692e+00, 3.078669964952163e+00, 3.141499996185303e+00, 3.20433002741755e+00, 3.267160058649797e+00, 3.329990089882044e+00, 3.392819746624534e+00, 3.455650016272802e+00, 3.518480047504602e+00, 3.581310078736442e+00, 3.644140109969542e+00, 3.706970141201789e+00, 3.769799797944564e+00, 3.832629829175674e+00, 3.895459860406784e+00, 3.958290130056473e+00, 4.021120161289288e+00, 4.083950192521535e+00, 4.146779849261468e+00, 4.209609880493715e+00, 4.272439911725962e+00, 4.335269942958655e+00, 4.398099974190455e+00, 4.460930005422702e+00, 4.523759662169455e+00, 4.586589693399429e+00, 4.649419724629402e+00, 4.712250232696533e+00, 4.775080263926506e+00, 4.83791029515648e+00, 4.900740326393274e+00, 4.963569983133207e+00, 5.026400014365453e+00, 5.089230045597254e+00, 5.152060076829946e+00, 5.214890108062193e+00, 5.27772013929444e+00, 5.340549796034373e+00, 5.40337982726662e+00, 5.466209858498867e+00, 5.529039889731114e+00, 5.591869920963361e+00, 5.654699952195608e+00, 5.717529608941793e+00, 5.780360117004945e+00, 5.843190148237192e+00, 5.906020179469317e+00, 5.968850210701685e+00, 6.031680241933932e+00, 6.094509898673865e+00, 6.157339929906112e+00, 6.220169961138359e+00, 6.282999992370605e+00] +cos1.y=[1e+00, 9.98026847742373e-01, 9.921151395917384e-01, 9.822883001756515e-01, 9.685850129121401e-01, 9.510594024538184e-01, 9.297805993041802e-01, 9.048326023338134e-01, 8.76313800106129e-01, 8.443368792524993e-01, 8.090279156877247e-01, 7.705262279301066e-01, 7.289838674765083e-01, 6.845646280913674e-01, 6.374439625833913e-01, 5.878077450967993e-01, 5.358518171579365e-01, 4.817812838910221e-01, 4.258095133398033e-01, 3.681572834108591e-01, 3.090522466989162e-01, 2.487275349813267e-01, 1.874213592065715e-01, 1.253755501497086e-01, 6.283486994744755e-02, 4.632679338101298e-05, -6.274249421803517e-02, -1.252835319705151e-01, -1.873303429138753e-01, -2.486378908514217e-01, -3.089640618844978e-01, -3.680711248963389e-01, -4.25725679408632e-01, -4.817000201062539e-01, -5.357735562582807e-01, -5.877328220602704e-01, -6.373725433381867e-01, -6.844970960269895e-01, -7.289204205153097e-01, -7.704672189916252e-01, -8.089734093829815e-01, -8.442872285852132e-01, -8.762692009435454e-01, -9.047931238797384e-01, -9.297464544216499e-01, -9.510307539040321e-01, -9.685619339841467e-01, -9.822709573972731e-01, -9.921035846940335e-01, -9.980210024408591e-01, -1e+00, -9.980326253577363e-01, -9.921267471125186e-01, -9.823056111687467e-01, -9.686080544294392e-01, -9.510880339541781e-01, -9.298147017373695e-01, -9.048719808327391e-01, -8.763583983775314e-01, -8.443864288533292e-01, -8.090824165441581e-01, -7.705853553839331e-01, -7.290473187994698e-01, -6.846321601560726e-01, -6.375152964741191e-01, -5.878825758555449e-01, -5.359301760537384e-01, -4.818625471673303e-01, -4.258933472702636e-01, -3.682434121228493e-01, -3.091402830221033e-01, -2.488171938546387e-01, -1.875125443140312e-01, -1.254675533176979e-01, -6.292743252797524e-02, -1.389803801430389e-04, 6.26500250617113e-02, 1.251917924329078e-01, 1.872395103470685e-01, 2.485479596650757e-01, 3.088759364163073e-01, 3.67984966381611e-01, 4.256418454769628e-01, 4.816189728006308e-01, 5.356955125914867e-01, 5.876576875066493e-01, 6.373011369696673e-01, 6.844295639627969e-01, 7.288570011749547e-01, 7.704081507942002e-01, 8.089190402462237e-01, 8.442374768077378e-01, 8.76224466715355e-01, 9.047536656015626e-01, 9.297123605661272e-01, 9.510021436805963e-01, 9.685389130779499e-01, 9.822535166606127e-01, 9.920919379664327e-01, 9.980151611803328e-01, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Derivative.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Derivative.txt new file mode 100644 index 0000000000..b0762e0948 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Derivative.txt @@ -0,0 +1,13 @@ +last-generated=2023-03-27 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +der1.y=[1e+00, 9.959028960465073e-01, 9.819550519556391e-01, 9.581958684484828e-01, 9.248626850300768e-01, 8.822885751724243e-01, 8.30898953628209e-01, 7.712072653272641e-01, 7.038099253562579e-01, 6.293802670652393e-01, 5.486621260643005e-01, 4.624619694209273e-01, 3.716410243291572e-01, 2.771066265826531e-01, 1.798036161569373e-01, 8.070407062768936e-02, -1.920184716840108e-02, -1.189159127963956e-01, -2.1744191819562e-01, -3.137952016887199e-01, -4.070131480693817e-01, -4.961644638207976e-01, -5.803580489134587e-01, -6.587531326129351e-01, -7.305659589737215e-01, -7.950793504714966e-01, -8.516486182658597e-01, -8.997083093955294e-01, -9.387785952073824e-01, -9.684687606238405e-01, -9.884824156761169e-01, -9.986194411828289e-01, -9.987786430546937e-01, -9.889582916386174e-01, -9.692566620008379e-01, -9.398705363273621e-01, -9.010934407720183e-01, -8.533130532616388e-01, -7.970065182772437e-01, -7.327367113178452e-01, -6.611455082893372e-01, -5.829483086372815e-01, -4.989265031301334e-01, -4.099200013461602e-01, -3.168172843650727e-01, -2.205490320920944e-01, -1.220771244286866e-01, -2.23854605380134e-02, 7.752939656501522e-02, 1.766700847462305e-01, 2.740455269813538e-01, 3.647411141008916e-01, 4.541284012255336e-01, 5.390557256844974e-01, 6.186895825174342e-01, 6.92249596118927e-01, 7.5901079166772e-01, 8.183175770338801e-01, 8.695971051428424e-01, 9.123263581285169e-01, 9.46108877658844e-01, 9.70631915353482e-01, 9.855227644958571e-01, 9.90890798060147e-01, 9.863437494500508e-01, 9.722959399223328e-01, 9.486261326273693e-01, 9.156427842075782e-01, 8.736747178420188e-01, 8.231207646102159e-01, 7.645221352577209e-01, 6.983906552142616e-01, 6.254163707874086e-01, 5.463197591026645e-01, 4.61835526370571e-01, 3.728454411029816e-01, 2.802103751515969e-01, 1.847927217956115e-01, 8.757810316068722e-02, -1.044453920571972e-02, -1.08469620347023e-01, -2.05318977635326e-01, -3.001634173486009e-01, -3.920285763627187e-01, -4.801230111144644e-01, -5.634526014328003e-01, -6.412585481577828e-01, -7.127394173377433e-01, -7.772306818225883e-01, -8.34094245999273e-01, -8.827573657035828e-01, -9.227543871434116e-01, -9.53691352092422e-01, -9.752609390902561e-01, -9.872570870055875e-01, -9.895601272583008e-01, -9.821476770861559e-01, -9.650913042545138e-01, -9.385620932786626e-01, -9.028265100079774e-01, -8.582368493080139e-01] +intWitRes.u=[1e+00, 9.950041772274343e-01, 9.800665980245303e-01, 9.553365145438573e-01, 9.210609816323642e-01, 8.775825500488281e-01, 8.253356350982572e-01, 7.648422044298272e-01, 6.967067207138525e-01, 6.216099670055213e-01, 5.403022766113281e-01, 4.535961362508291e-01, 3.623578097032607e-01, 2.674987749498673e-01, 1.699671211937806e-01, 7.073719799518585e-02, -2.919949815154311e-02, -1.288444522436861e-01, -2.27202133965785e-01, -3.232895956755755e-01, -4.16146844625473e-01, -5.048461778740929e-01, -5.885010569415869e-01, -6.662760729310033e-01, -7.373936717231064e-01, -8.011435866355896e-01, -8.56888819398808e-01, -9.040721446803646e-01, -9.422223723193646e-01, -9.709581495340331e-01, -9.899924993515015e-01, -9.99135139616729e-01, -9.982947730248974e-01, -9.87479738349513e-01, -9.667982097489808e-01, -9.364566802978516e-01, -8.967583941020099e-01, -8.481000314388562e-01, -7.909676733146686e-01, -7.259323649847195e-01, -6.536436080932617e-01, -5.748238969829167e-01, -4.902606424960932e-01, -4.00799359006494e-01, -3.07332963797166e-01, -2.107958048582077e-01, -1.121524294260055e-01, -1.238847263511822e-02, 8.749879507316261e-02, 1.865122720715352e-01, 2.836621999740601e-01, 3.779778167700255e-01, 4.685168452190177e-01, 5.543741774070742e-01, 6.346927734317522e-01, 7.086697816848755e-01, 7.755659221144813e-01, 8.347129067995939e-01, 8.8551941424842e-01, 9.274783961174866e-01, 9.601702690124512e-01, 9.832684562031929e-01, 9.965421100845466e-01, 9.99858619082603e-01, 9.931849342926949e-01, 9.765876531600952e-01, 9.502325347879425e-01, 9.143830940304652e-01, 8.69397553994733e-01, 8.157251425022263e-01, 7.539022564888e-01, 6.845465792878729e-01, 6.083511376956182e-01, 5.260776701202705e-01, 4.385473984970318e-01, 3.466353118419647e-01, 2.512597410327659e-01, 1.533736785150569e-01, 5.395561119328425e-02, -4.600203192608105e-02, -1.455000340938568e-01, -2.435437755393855e-01, -3.391550480850473e-01, -4.313766717615178e-01, -5.192889830890152e-01, -6.020119190216064e-01, -6.787197742961457e-01, -7.486467419480308e-01, -8.110929192590418e-01, -8.654353708546059e-01, -9.111302495002747e-01, -9.477214752024828e-01, -9.748436619040397e-01, -9.922253233210268e-01, -9.996930417158711e-01, -9.971721768379211e-01, -9.846879275182084e-01, -9.62364798763793e-01, -9.304263676910163e-01, -8.891909727528647e-01, -8.3907151222229e-01] +der2.y=[0e+00, 1.261573541040191e+00, 1.712090483941703e+00, 1.851700178207826e+00, 1.864737988521703e+00, 1.819380760192871e+00, 1.741220256870108e+00, 1.640295730540954e+00, 1.521001353977452e+00, 1.385776247032267e+00, 1.236436128616333e+00, 1.074650446502839e+00, 9.020864016826857e-01, 7.204898899987495e-01, 5.31693412712761e-01, 3.375897109508514e-01, 1.401130135908014e-01, -5.876837124106268e-02, -2.57065360340503e-01, -4.527924223712543e-01, -6.43994152545929e-01, -8.287622261899449e-01, -1.005250252367809e+00, -1.171694354856316e+00, -1.32643029720939e+00, -1.467913389205933e+00, -1.594729773945908e+00, -1.705612013706523e+00, -1.79945246371589e+00, -1.875312978292578e+00, -1.932436347007751e+00, -1.970251346632632e+00, -1.98838030805751e+00, -1.98664199654143e+00, -1.965053824892065e+00, -1.923831343650818e+00, -1.863386681815249e+00, -1.784323733489241e+00, -1.687432357226279e+00, -1.573680873140911e+00, -1.444205403327942e+00, -1.300299857194408e+00, -1.143402144406011e+00, -9.750808191223271e-01, -7.970159593022511e-01, -6.109875440597534e-01, -4.188543487018059e-01, -2.225360968709077e-01, -2.399528348973932e-02, 1.747862294672636e-01, 3.718213438987732e-01, 5.65141322838544e-01, 7.52814642818514e-01, 9.32965239611256e-01, 1.103794892612504e+00, 1.263595819473267e+00, 1.410771264019913e+00, 1.543850539252614e+00, 1.661503818150347e+00, 1.762555986254738e+00, 1.845997452735901e+00, 1.910994461658609e+00, 1.956897324043274e+00, 1.983247483345361e+00, 1.989781857893151e+00, 1.976434946060181e+00, 1.943340020355622e+00, 1.890827891447654e+00, 1.819423587424041e+00, 1.729839893964001e+00, 1.622972130775452e+00, 1.499888174737287e+00, 1.361817795814848e+00, 1.210141242534122e+00, 1.046372693272172e+00, 8.721491098403931e-01, 6.892113090814868e-01, 4.993871343106556e-01, 3.045741488370629e-01, 1.067170383108498e-01, -9.220635145902634e-02, -2.902074982067049e-01, -4.85310862058335e-01, -6.755633347536464e-01, -8.590675254268733e-01, -1.033986568450928e+00, -1.198574290088221e+00, -1.351187862856297e+00, -1.490299328108361e+00, -1.614521464250162e+00, -1.722610712051392e+00, -1.813488283117332e+00, -1.886246798608269e+00, -1.940158040563774e+00, -1.974684205913325e+00, -1.989479660987854e+00, -1.984396865027746e+00, -1.95948629529222e+00, -1.914997796488926e+00, -1.851374817512973e+00, -1.769254207611084e+00] +der1.T=[9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 9.999999776482582e-03, 1.090000096857395e-02, 1.180000216066532e-02, 1.269999812990733e-02, 1.359999932199426e-02, 1.449999958276749e-02, 1.54000007748633e-02, 1.63000019669591e-02, 1.719999886750592e-02, 1.810000005960173e-02, 1.899999938905239e-02, 1.99000005811482e-02, 2.080000177324401e-02, 2.169999867379083e-02, 2.259999986588664e-02, 2.34999991953373e-02, 2.440000038743311e-02, 2.530000157952891e-02, 2.619999848007574e-02, 2.709999967217154e-02, 2.800000086426735e-02, 2.890000019371801e-02, 2.980000138581381e-02, 3.069999828636064e-02, 3.159999761582018e-02, 3.24999988079071e-02, 3.34000000000118e-02, 3.430000119211649e-02, 3.519999809266331e-02, 3.609999928475023e-02, 3.700000047683716e-02, 3.789999737743031e-02, 3.880000286097008e-02, 3.969999976159875e-02, 4.060000524510302e-02, 4.149999842047691e-02, 4.239999532114111e-02, 4.330000080464536e-02, 4.419999770527405e-02, 4.510000318874277e-02, 4.600000008940697e-02, 4.689999699007116e-02, 4.78000024735399e-02, 4.869999937416857e-02, 4.960000485767281e-02, 5.050000175833702e-02, 5.139999493371092e-02, 5.230000041721517e-02, 5.319999731784385e-02, 5.410000280138363e-02, 5.499999970197678e-02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Divide.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Divide.txt new file mode 100644 index 0000000000..549ff5057a --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Divide.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +div1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +div1.u2=[1e+00, 1.019999981373556e+00, 1.039999962747112e+00, 1.059999944120667e+00, 1.08000004470346e+00, 1.100000022351717e+00, 1.120000007450546e+00, 1.139999985098846e+00, 1.159999970197731e+00, 1.179999940395462e+00, 1.200000044703439e+00, 1.220000029802305e+00, 1.240000014901081e+00, 1.260000000000142e+00, 1.279999970197695e+00, 1.299999940395533e+00, 1.320000059604538e+00, 1.340000029802269e+00, 1.359999999999787e+00, 1.379999999999929e+00, 1.399999970197766e+00, 1.419999970197873e+00, 1.440000059604609e+00, 1.460000029802198e+00, 1.480000029802162e+00, 1.5e+00, 1.520000000000284e+00, 1.539999940395675e+00, 1.559999940395391e+00, 1.580000059604396e+00, 1.599999999999645e+00, 1.620000000000071e+00, 1.640000000000213e+00, 1.659999940395746e+00, 1.679999940395462e+00, 1.700000059604467e+00, 1.719999999999574e+00, 1.739999999999858e+00, 1.760000000000142e+00, 1.780000000000426e+00, 1.799999940395533e+00, 1.820000059604538e+00, 1.840000059604254e+00, 1.859999999999787e+00, 1.879999999999929e+00, 1.900000000000355e+00, 1.919999940395604e+00, 1.940000059604609e+00, 1.960000059604325e+00, 1.979999999999716e+00, 2e+00, 2.019999999999432e+00, 2.039999999998863e+00, 2.059999999998295e+00, 2.079999880791989e+00, 2.099999880791421e+00, 2.119999880790711e+00, 2.140000119208863e+00, 2.160000119208295e+00, 2.180000119207727e+00, 2.200000000001421e+00, 2.220000000000852e+00, 2.240000000000284e+00, 2.259999999999716e+00, 2.279999999999148e+00, 2.299999999998579e+00, 2.319999880792273e+00, 2.339999880791705e+00, 2.359999880791137e+00, 2.380000119209289e+00, 2.400000119208579e+00, 2.420000119208011e+00, 2.440000000001705e+00, 2.460000000001137e+00, 2.480000000000568e+00, 2.5e+00, 2.519999999999432e+00, 2.539999999998863e+00, 2.559999999998295e+00, 2.579999880791989e+00, 2.599999880791421e+00, 2.619999880790711e+00, 2.640000119208863e+00, 2.660000119208295e+00, 2.680000119207727e+00, 2.700000000001421e+00, 2.720000000000852e+00, 2.740000000000284e+00, 2.759999999999716e+00, 2.779999999999148e+00, 2.799999999998579e+00, 2.819999880792273e+00, 2.839999880791705e+00, 2.859999880791137e+00, 2.880000119209289e+00, 2.900000119208579e+00, 2.920000119208011e+00, 2.940000000001705e+00, 2.960000000001137e+00, 2.980000000000568e+00, 3e+00] +div1.y=[-2e+00, -1.921568630413864e+00, -1.84615385203e+00, -1.773584957134784e+00, -1.703703754991204e+00, -1.636363630470428e+00, -1.571428528846313e+00, -1.508771898203324e+00, -1.44827579392527e+00, -1.389830490702423e+00, -1.333333381375813e+00, -1.278688546802214e+00, -1.225806460775224e+00, -1.174603199848596e+00, -1.125000002919508e+00, -1.076923160244675e+00, -1.030302985033577e+00, -9.850746473109788e-01, -9.411765051223082e-01, -8.985507388385574e-01, -8.571428778568234e-01, -8.169013598445602e-01, -7.77777786436888e-01, -7.397260226867141e-01, -7.027026815520762e-01, -6.666666865348816e-01, -6.315788893367184e-01, -5.974026089172969e-01, -5.641025940129073e-01, -5.316455693534409e-01, -5.000000373460506e-01, -4.691357983490571e-01, -4.390243675672568e-01, -4.096385920191999e-01, -3.809523982091967e-01, -3.529411687751335e-01, -3.255814403599185e-01, -2.988505787774926e-01, -2.727272685680724e-01, -2.471909758672643e-01, -2.222222386278559e-01, -1.978021922950608e-01, -1.739130157994873e-01, -1.505376564315261e-01, -1.276595687659799e-01, -1.052631323169938e-01, -8.333335396366741e-02, -6.185566753596457e-02, -4.08163033974435e-02, -2.020203968331871e-02, 0e+00, 1.980199854489794e-02, 3.921572425565377e-02, 5.825248155730565e-02, 7.692304003523785e-02, 9.523807534587461e-02, 1.132075446048195e-01, 1.308411335486836e-01, 1.481481778153611e-01, 1.651376628464157e-01, 1.818181477575681e-01, 1.981981760098777e-01, 2.14285708798344e-01, 2.300885096239699e-01, 2.456140588934421e-01, 2.608695986185286e-01, 2.75862028890707e-01, 2.905982786546857e-01, 3.050847248642052e-01, 3.193277452229643e-01, 3.33333359796339e-01, 3.47107469496047e-01, 3.606556864959297e-01, 3.739837155514761e-01, 3.870967502326835e-01, 4.000000059604645e-01, 4.126984298967459e-01, 4.251968798737931e-01, 4.375000348694366e-01, 4.496123830479173e-01, 4.615384497018672e-01, 4.732824536150984e-01, 4.848485074954529e-01, 4.962406346856562e-01, 5.074627095069567e-01, 5.185184812783804e-01, 5.294117772639944e-01, 5.401459881441903e-01, 5.507246305878943e-01, 5.611511020705164e-01, 5.714286212664641e-01, 5.815602276771085e-01, 5.915492607292059e-01, 6.013985802218165e-01, 6.111111067848054e-01, 6.20689641832506e-01, 6.301369868104991e-01, 6.394557687719326e-01, 6.486486022130972e-01, 6.577181134026411e-01, 6.666666865348816e-01] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Exp.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Exp.txt new file mode 100644 index 0000000000..bdff4deccd --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Exp.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-17 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +Exp1.y=[1e+00, 1.020201325873546e+00, 1.040810824372952e+00, 1.061836601730507e+00, 1.083287121806318e+00, 1.105170963551128e+00, 1.127496841599857e+00, 1.150273799211986e+00, 1.173510913285666e+00, 1.197217336691625e+00, 1.221402760687553e+00, 1.246076704560001e+00, 1.271249181904797e+00, 1.296930087085034e+00, 1.323129771565821e+00, 1.349858744774441e+00, 1.377127776478824e+00, 1.404947633497226e+00, 1.433329442541903e+00, 1.462284571958676e+00, 1.491824737257591e+00, 1.521961589783581e+00, 1.552707198991363e+00, 1.584074007193513e+00, 1.616074460236732e+00, 1.648721218109131e+00, 1.682027729709197e+00, 1.716006838290017e+00, 1.750672455436808e+00, 1.786038428610279e+00, 1.822118715799465e+00, 1.858928075527093e+00, 1.896480945113924e+00, 1.934792229556794e+00, 1.97387777349978e+00, 2.01375272295227e+00, 2.05443304871722e+00, 2.095935563166035e+00, 2.138276359010165e+00, 2.181472364019883e+00, 2.225540849910939e+00, 2.27049996095928e+00, 2.3163669718051e+00, 2.363160576461337e+00, 2.41089965064865e+00, 2.459603129971692e+00, 2.509290414977101e+00, 2.559981352246142e+00, 2.61169653785808e+00, 2.664456078356227e+00, 2.718281745910645e+00, 2.773194842886381e+00, 2.829217065233922e+00, 2.886371062783082e+00, 2.944679372554706e+00, 3.004166054770411e+00, 3.064854130464693e+00, 3.126768395419199e+00, 3.189933406704496e+00, 3.254374436706318e+00, 3.320116838768686e+00, 3.3871876226322e+00, 3.455613341821606e+00, 3.525421414684955e+00, 3.596639736284675e+00, 3.669296916799101e+00, 3.743421120194419e+00, 3.819043270687751e+00, 3.896193210291447e+00, 3.974901695169893e+00, 4.055200196818824e+00, 4.137120424789885e+00, 4.220695731419242e+00, 4.305959537608988e+00, 4.392945682829174e+00, 4.481688976287842e+00, 4.572225181224325e+00, 4.664590537028454e+00, 4.758821283433392e+00, 4.854955465285225e+00, 4.953032375739844e+00, 5.053090071473239e+00, 5.155169560890726e+00, 5.259310898249487e+00, 5.365556045240056e+00, 5.473947264532487e+00, 5.584528286744187e+00, 5.697343295232494e+00, 5.812437589874176e+00, 5.929856470345918e+00, 6.049647620281685e+00, 6.171857987623993e+00, 6.296538143218781e+00, 6.423736480559417e+00, 6.553504975160256e+00, 6.685894649009948e+00, 6.820958907654735e+00, 6.958750804246297e+00, 7.099326817127831e+00, 7.242742877423612e+00, 7.389056205749512e+00] +Exp1.u=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Greater.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Greater.txt new file mode 100644 index 0000000000..72ab505156 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Greater.txt @@ -0,0 +1,12 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +gre.u1=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1.811628505752779e+00, -1.624000400138706e+00, -1.43785598996685e+00, -1.253930286818943e+00, -1.072949051856995e+00, -8.956264080262712e-01, -7.226622324250406e-01, -5.547389199236601e-01, -3.925195852485924e-01, -2.366442382335663e-01, -8.7727893193044e-02, 5.364125336904336e-02, 1.869059369170518e-01, 3.115396239174152e-01, 4.270509779453278e-01, 5.329838752732372e-01, 6.289199748783157e-01, 7.1448121270354e-01, 7.89329401980005e-01, 8.531695604324341e-01, 9.057495434078494e-01, 9.468617265306255e-01, 9.763441192861637e-01, 9.940801734758675e-01, 1e+00, 9.940801734758675e-01, 9.763441192861637e-01, 9.468617265306255e-01, 9.057495434078492e-01, 8.531695604324341e-01, 7.893294019800053e-01, 7.144810198268143e-01, 6.289201903800828e-01, 5.329838752732368e-01, 4.270509779453278e-01, 3.115396239174147e-01, 1.869056280486268e-01, 5.364157980559271e-02, -8.772789317175074e-02, -2.366442382335663e-01, -3.925197754217349e-01, -5.547393145486301e-01, -7.226618265200716e-01, -8.956261994185419e-01, -1.072949051856995e+00, -1.253930504668855e+00, -1.437856431721111e+00, -1.623999954498346e+00, -1.811628281550894e+00, -2e+00, -2.188371837658394e+00, -2.376000045501654e+00, -2.562143687488177e+00, -2.746069495331147e+00, -2.927051067352295e+00, -3.10437386018582e+00, -3.277338113875285e+00, -3.445260685450803e+00, -3.607480135171581e+00, -3.763355731964111e+00, -3.912272114257252e+00, -4.053641579804455e+00, -4.186905613149738e+00, -4.311539534512012e+00, -4.427051067352295e+00, -4.532983875272384e+00, -4.628920249494676e+00, -4.714481198640749e+00, -4.789329461585503e+00, -4.853169441223145e+00, -4.905749137797657e+00, -4.946861809072616e+00, -4.976344061279806e+00, -4.994080107325297e+00, -5e+00, -4.994080107325297e+00, -4.976344061279806e+00, -4.946861809072616e+00, -4.905749137797656e+00, -4.853169441223145e+00, -4.78932978929101e+00, -4.714481198644446e+00, -4.628920249490593e+00, -4.532983390825205e+00, -4.427051067352295e+00, -4.311540104800364e+00, -4.186905613155646e+00, -4.053641579798243e+00, -3.91227141957735e+00, -3.763355731964111e+00] +gre.u2=[-1.5e+00, -1.450000048428773e+00, -1.399999977648257e+00, -1.350000029802314e+00, -1.299999955296512e+00, -1.25e+00, -1.200000059604609e+00, -1.149999970197695e+00, -1.100000029802305e+00, -1.049999940395391e+00, -1e+00, -9.5e-01, -9e-01, -8.5e-01, -7.999999999999999e-01, -7.5e-01, -7e-01, -6.499999999999999e-01, -6.000000000000001e-01, -5.5e-01, -5e-01, -4.499999403953552e-01, -4.000000298023223e-01, -3.499999701976775e-01, -3.000000596046448e-01, -2.5e-01, -1.999999552964453e-01, -1.500000298023223e-01, -9.999997764824031e-02, -5.000004842880945e-02, 0e+00, 5.000004842880945e-02, 9.999997764824053e-02, 1.500000298023225e-01, 1.999999552964455e-01, 2.5e-01, 3.000000596046446e-01, 3.499999701976777e-01, 4.000000298023223e-01, 4.499999403953554e-01, 5e-01, 5.500000596046446e-01, 6.000001192092896e-01, 6.499998807937309e-01, 6.999999403953554e-01, 7.5e-01, 8.00000059604645e-01, 8.500001192092892e-01, 8.999998807907104e-01, 9.499999403956485e-01, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.149999880790711e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.350000119209289e+00, 1.39999988079071e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.60000011920929e+00, 1.64999988079071e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.85000011920929e+00, 1.899999880790711e+00, 1.95e+00, 2e+00, 2.05e+00, 2.1e+00, 2.15e+00, 2.2e+00, 2.25e+00, 2.3e+00, 2.35e+00, 2.4e+00, 2.45e+00, 2.5e+00, 2.549999761585969e+00, 2.599999999997726e+00, 2.650000000002273e+00, 2.700000238414032e+00, 2.75e+00, 2.799999761585968e+00, 2.849999999997726e+00, 2.900000000002274e+00, 2.950000238414032e+00, 3e+00, 3.049999761585968e+00, 3.099999999997727e+00, 3.150000000002274e+00, 3.200000238414031e+00, 3.25e+00, 3.299999761585968e+00, 3.349999999997726e+00, 3.400000000002274e+00, 3.450000238414032e+00, 3.5e+00] +gre.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.266945395828056e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +greHys.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4.916541686217357e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt new file mode 100644 index 0000000000..c79b6f451b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_GreaterThreshold.txt @@ -0,0 +1,12 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +gre.u=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1.497676015340886e+00, -9.973343606335472e-01, -5.009492668417413e-01, -1.048078720206188e-02, 4.721359610557556e-01, 9.449963048679213e-01, 1.406234166075659e+00, 1.85402962634291e+00, 2.286614518809852e+00, 2.702281951904297e+00, 3.099392304686385e+00, 3.47637659617823e+00, 3.831749125375993e+00, 4.164105584308051e+00, 4.4721360206604e+00, 4.754623667394541e+00, 5.010453107397214e+00, 5.238616567209061e+00, 5.438211738613346e+00, 5.608452320098877e+00, 5.748665449086841e+00, 5.858297778469661e+00, 5.93691781037549e+00, 5.984213795934889e+00, 6e+00, 5.984213795934889e+00, 5.93691781037549e+00, 5.858297778469661e+00, 5.74866544908684e+00, 5.608452320098877e+00, 5.438211738613347e+00, 5.238616052869989e+00, 5.010453680767095e+00, 4.75462366739454e+00, 4.4721360206604e+00, 4.164105584308049e+00, 3.831748301726575e+00, 3.476377466676903e+00, 3.099392304686384e+00, 2.702281951904297e+00, 2.286614011680809e+00, 1.85402857400833e+00, 1.406235248488341e+00, 9.449968616175726e-01, 4.721359610557556e-01, -1.048136813505908e-02, -5.009504448522509e-01, -9.973331722587795e-01, -1.49767541746905e+00, -2e+00, -2.502324582530945e+00, -3.002666708533068e+00, -3.499049674355329e+00, -3.989518654217149e+00, -4.4721360206604e+00, -4.944996801550559e+00, -5.406235129281329e+00, -5.854028335594302e+00, -6.286614011680805e+00, -6.702281951904297e+00, -7.09939230468752e+00, -7.476377705090932e+00, -7.831748301726572e+00, -8.164106061140663e+00, -8.472135543823242e+00, -8.75462366739454e+00, -9.010453680767094e+00, -9.238615576037381e+00, -9.438211261778463e+00, -9.608451843261719e+00, -9.748664367460419e+00, -9.858298475415383e+00, -9.936917178866837e+00, -9.984213937413436e+00, -1e+01, -9.984213937413436e+00, -9.936917178866837e+00, -9.858298475415383e+00, -9.748664367460417e+00, -9.608451843261719e+00, -9.438212135678004e+00, -9.238615576047238e+00, -9.010453680756207e+00, -8.754622375521754e+00, -8.472135543823242e+00, -8.16410758191112e+00, -7.831748301742326e+00, -7.476377705074368e+00, -7.099390452212329e+00, -6.702281951904297e+00] +gre.t=[2e+00, 2e+00] +gre.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +greHys.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.091269490084763e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt new file mode 100644 index 0000000000..f52ffb2fd8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Hysteresis.txt @@ -0,0 +1,14 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +hysteresis.u=[0e+00, 1.56976301000347e-01, 3.133330712786273e-01, 4.684532984120606e-01, 6.217247383500868e-01, 7.725424655010872e-01, 9.203114108910556e-01, 1.064448233170911e+00, 1.204384232253481e+00, 1.339566898410891e+00, 1.469463091020046e+00, 1.593559987568817e+00, 1.711367756856865e+00, 1.822421601679775e+00, 1.92628311509584e+00, 2.022542421147277e+00, 2.110819846391163e+00, 2.190766559266606e+00, 2.262067507907246e+00, 2.324441208101661e+00, 2.377641186273779e+00, 2.421458030889631e+00, 2.455718043859428e+00, 2.480286828001585e+00, 2.49506688594207e+00, 2.5e+00, 2.495066870834328e+00, 2.48028685669509e+00, 2.455718043859427e+00, 2.421457972510137e+00, 2.37764125870761e+00, 2.324441208101661e+00, 2.262067507907246e+00, 2.190766909464202e+00, 2.110819846391163e+00, 2.022542421147278e+00, 1.9262832632491e+00, 1.822421720889064e+00, 1.711367790613847e+00, 1.59355992556915e+00, 1.469463304577051e+00, 1.339567017620181e+00, 1.204384145815707e+00, 1.06444845798415e+00, 9.203114756564897e-01, 7.725424174162248e-01, 6.217249707299275e-01, 4.684533888724105e-01, 3.133330460020628e-01, 1.569765810520877e-01, 1.339744812867139e-07, -1.569763128289594e-01, -3.133332421028605e-01, -4.684535799669168e-01, -6.217242785806794e-01, -7.725421790003055e-01, -9.203111776327465e-01, -1.064448219564059e+00, -1.204384317440418e+00, -1.339567173246441e+00, -1.469462686407816e+00, -1.593559687153164e+00, -1.711367552196086e+00, -1.822421482469726e+00, -1.926283144037693e+00, -2.022542694869402e+00, -2.11081959367541e+00, -2.190766445221302e+00, -2.262067507907116e+00, -2.324441208101863e+00, -2.377641257762269e+00, -2.421457849255299e+00, -2.455717953487118e+00, -2.480286797207312e+00, -2.495066870834482e+00, -2.5e+00, -2.495066870834482e+00, -2.480286797207312e+00, -2.455718191902287e+00, -2.42145808767132e+00, -2.377641496180849e+00, -2.324441208101863e+00, -2.262067746325695e+00, -2.190766683637892e+00, -2.110819593678535e+00, -2.022542933287981e+00, -1.926283382456272e+00, -1.822421720888305e+00, -1.711367909823955e+00, -1.593559925571743e+00, -1.469463044035685e+00, -1.33956753087431e+00, -1.204384675068287e+00, -1.064448577191928e+00, -9.203115948652599e-01, -7.725425366281742e-01, -6.21724636208548e-01, -4.684539971990039e-01, -3.133336295330515e-01, -1.569767151603116e-01, -2.679489625734277e-07] +hysteresis.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +hysteresis1.u=[0e+00, 5.877852548020184e-01, 9.510565469929613e-01, 9.51056524512735e-01, 5.877851965882408e-01, 4.669026060222237e-08, -5.877853088719246e-01, -9.510565331236185e-01, -9.510564986800658e-01, -5.877854170114153e-01, -9.361950796191176e-08, 5.877852728252668e-01, 9.510565818958913e-01, 9.510564297929095e-01, 5.877852728252662e-01, 3.735213902900103e-07, -5.877854170114153e-01, -9.510564986800661e-01, -9.510566517017776e-01, -5.877851175888156e-01, -1.867606946037714e-07, 5.877855611975631e-01, 9.510565586272626e-01, 9.510566051645198e-01, 5.877849595897895e-01, 6.123233998228043e-16, -5.877857053837123e-01, -9.510562920185974e-01, -9.510565586272621e-01, -5.877848015907633e-01, -7.489560659400263e-07, 5.877851175888156e-01, 9.510566517017776e-01, 9.510567447762921e-01, 5.87785417011414e-01, -3.735213908874251e-07, -5.87784485592708e-01, -9.510564297929095e-01, -9.510564297929095e-01, -5.87784485592708e-01, -3.735213891520317e-07, 5.87785417011414e-01, 9.510567447762921e-01, 9.510566517017776e-01, 5.877851175888156e-01, -7.47042778760458e-07, -5.877848015907633e-01, -9.510565586272621e-01, -9.510562920185974e-01, -5.877857053837123e-01, -1.224646799645609e-15, 5.877857053768371e-01, 9.510568378463694e-01, 9.510558787055131e-01, 5.877862821128343e-01, 7.470316425728374e-07, -5.877851175869351e-01, -9.510566517001124e-01, -9.510561542500338e-01, -5.877838536173216e-01, -1.494063297968751e-06, 5.877844856040088e-01, 9.510564297945518e-01, 9.510564297945518e-01, 5.877844856040088e-01, -1.494063298453019e-06, -5.877838536173214e-01, -9.510561542500338e-01, -9.510566517001124e-01, -5.87785117586935e-01, 7.470316501584374e-07, 5.877862821128343e-01, 9.510558787055131e-01, 9.510568378463694e-01, 5.877857053768371e-01, 5.389683772389795e-15, -5.877857053768371e-01, -9.510568378463694e-01, -9.510558787055131e-01, -5.877862821128343e-01, -7.470316467361737e-07, 5.877851175869351e-01, 9.510566517001124e-01, 9.510561542500338e-01, 5.877838536173216e-01, 1.494063302132087e-06, -5.877844856040088e-01, -9.510564297945518e-01, -9.510564297945518e-01, -5.877844856040088e-01, 1.494063294288032e-06, 5.877838536173214e-01, 9.510561542500338e-01, 9.510566517001124e-01, 5.87785117586935e-01, -7.470316459934253e-07, -5.877862821128343e-01, -9.510558787055131e-01, -9.510568378463694e-01, -5.877857053768371e-01, -2.449293599291217e-15] +hysteresis1.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +hysteresis2.u=[0e+00, 3.090170091883316e-01, 5.877852550831602e-01, 8.090170144214469e-01, 9.510565478473709e-01, 9.999999992648992e-01, 9.510565257429763e-01, 8.090170078442965e-01, 5.877851975336643e-01, 3.090171082748573e-01, 4.681209514814655e-08, -3.090170201979346e-01, -5.87785310558651e-01, -8.090170867701829e-01, -9.510565336704234e-01, -9.999999941192049e-01, -9.510565019607415e-01, -8.090170341529122e-01, -5.877854215096746e-01, -3.090169306671733e-01, -9.356497701618061e-08, 3.090171963517797e-01, 5.877852735749767e-01, 8.090169222575976e-01, 9.510565870223401e-01, 1e+00, 9.510564385413781e-01, 8.090171920047236e-01, 5.87785273574976e-01, 3.090167508787323e-01, 3.744967623110079e-07, -3.090169306671733e-01, -5.877854215096746e-01, -8.090167501326991e-01, -9.510565019607419e-01, -9.99999994119205e-01, -9.510566653723079e-01, -8.090170867701829e-01, -5.877851201097095e-01, -3.090165710902895e-01, -1.871299540184834e-07, 3.090171082748565e-01, 5.877855694443719e-01, 8.09016864882631e-01, 9.510565609056844e-01, 9.9999998823841e-01, 9.510566131389959e-01, 8.090169796325641e-01, 5.877849652618008e-01, 3.090172844287029e-01, 6.123233998228043e-16, -3.090172844245031e-01, -5.877857173720165e-01, -8.090175077008204e-01, -9.51056311706054e-01, -9.999999882385853e-01, -9.510565609059952e-01, -8.090168648846839e-01, -5.877848104203527e-01, -3.090162115251951e-01, -7.48508664688563e-07, 3.090165710967192e-01, 5.877851201115555e-01, 8.090170867689285e-01, 9.5105666537044e-01, 9.999999764771703e-01, 9.510567698355064e-01, 8.090172972348735e-01, 5.877854215070279e-01, 3.090169306661034e-01, -3.742543329311947e-07, -3.090176367269428e-01, -5.877845007291471e-01, -8.090166353882378e-01, -9.510564385428901e-01, -1e+00, -9.510564385428901e-01, -8.090166353882378e-01, -5.87784500729147e-01, -3.090176367269428e-01, -3.742543312201807e-07, 3.090169306661034e-01, 5.877854215070281e-01, 8.090172972348735e-01, 9.510567698355064e-01, 9.999999764771703e-01, 9.5105666537044e-01, 8.090170867689285e-01, 5.877851201115555e-01, 3.090165710967192e-01, -7.485086628548458e-07, -3.090162115251951e-01, -5.877848104203527e-01, -8.090168648846841e-01, -9.510565609059952e-01, -9.999999882385853e-01, -9.51056311706054e-01, -8.090175077008204e-01, -5.877857173720165e-01, -3.090172844245031e-01, -1.224646799645609e-15] +hysteresis2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4.681209607171333e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3.744967703145363e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt new file mode 100644 index 0000000000..df0eccdac5 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_IntegratorWithReset.txt @@ -0,0 +1,20 @@ +last-generated=2023-03-23 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +cons.y=[1e+01, 1e+01] +booleanPulse.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +intDef.y_start=[-2e+00, -2e+00] +intDef.y=[-2e+00, -1.89999997392297e+00, -1.799999947845941e+00, -1.700000040978167e+00, -1.600000014901171e+00, -1.500000007450572e+00, -1.399999962747112e+00, -1.299999955296536e+00, -1.200000029802269e+00, -1.100000059604538e+00, -1.000000014901117e+00, -8.999999701976954e-01, -7.999999850988389e-01, -6.999999403954973e-01, -6.000000298023045e-01, -5.000000596044671e-01, -3.999999701977309e-01, -3.00000029802269e-01, -2.000000745056462e-01, -9.99999776483026e-02, -2.980226099236205e-08, -2.099999839067654e+00, -1.999999988079107e+00, -1.900000017881269e+00, -1.799999898672264e+00, -1.700000047683716e+00, -1.59999992847471e+00, -1.500000107288041e+00, -1.399999988079035e+00, -1.29999986887003e+00, -1.20000016689265e+00, -1.100000047683645e+00, -9.999999284746394e-01, -9.000001072883604e-01, -8.00000047683609e-01, -6.999999284746041e-01, -6.000001668925792e-01, -5.000000476835738e-01, -3.999999582768197e-01, -2.999998688699945e-01, -2.000000625847436e-01, -2.299999916553604e+00, -2.199999916553888e+00, -2.099999976157929e+00, -1.999999976158213e+00, -1.899999856949208e+00, -1.800000035763035e+00, -1.700000035762752e+00, -1.599999916553817e+00, -1.500000095367148e+00, -1.399999976158142e+00, -1.299999856950558e+00, -1.199999856951126e+00, -1.099999737744679e+00, -1.000000214572884e+00, -9.000000953656548e-01, -8.000000357630705e-01, -6.999999165547768e-01, -5.999998569513398e-01, -4.99999737743862e-01, -4.000002443747806e-01, -2.50000014304859e+00, -2.400000143050295e+00, -2.299999904633421e+00, -2.199999904635126e+00, -2.099999666218252e+00, -2.000000262255747e+00, -1.900000143048163e+00, -1.800000023841005e+00, -1.700000023841432e+00, -1.5999999046347e+00, -1.499999785427116e+00, -1.400000262255321e+00, -1.300000143048874e+00, -1.200000143049442e+00, -1.100000023841858e+00, -9.999999046342736e-01, -8.999997854266891e-01, -7.999997258228969e-01, -7.000002026525944e-01, -6.000001430490154e-01, -2.700000071525857e+00, -2.599999833108274e+00, -2.499999833109979e+00, -2.399999833111684e+00, -2.3000001907306e+00, -2.200000190732306e+00, -2.099999952315432e+00, -1.999999952317137e+00, -1.899999833109552e+00, -1.799999713901968e+00, -1.700000309939463e+00, -1.600000190731879e+00, -1.500000071524294e+00, -1.399999952316e+00, -1.299999833109127e+00, -1.199999833109553e+00, -1.100000309939037e+00, -1.000000190731453e+00, -9.000000715241527e-01, -8.00000011920929e-01] +intDef.y_reset_in=[-2e+00, -2.009999990686785e+00, -2.019999981373569e+00, -2.029999972060353e+00, -2.039999962747139e+00, -2.04999995157128e+00, -2.059999944120708e+00, -2.069999932944796e+00, -2.079999925494274e+00, -2.089999910593299e+00, -2.099999903142563e+00, -2.109999895691898e+00, -2.119999888241411e+00, -2.130000119208934e+00, -2.140000104308102e+00, -2.150000089406701e+00, -2.160000089406701e+00, -2.170000074505726e+00, -2.180000059604325e+00, -2.190000059604467e+00, -2.200000044703351e+00, -2.210000044702995e+00, -2.220000029802234e+00, -2.230000014900975e+00, -2.240000014901401e+00, -2.25e+00, -2.260000000000426e+00, -2.269999970197198e+00, -2.279999970197766e+00, -2.289999970198051e+00, -2.299999940396243e+00, -2.309999940395533e+00, -2.319999940395675e+00, -2.32999991059401e+00, -2.339999910593299e+00, -2.349999910593299e+00, -2.359999880791776e+00, -2.369999880791066e+00, -2.380000119208934e+00, -2.390000119208224e+00, -2.400000089406701e+00, -2.410000089406701e+00, -2.42000008940599e+00, -2.430000059604325e+00, -2.440000059604467e+00, -2.450000059603757e+00, -2.460000029801949e+00, -2.470000029802234e+00, -2.480000029802802e+00, -2.489999999999574e+00, -2.5e+00, -2.510000000000284e+00, -2.520000000000568e+00, -2.530000000000852e+00, -2.539999940397274e+00, -2.549999940396421e+00, -2.559999940395497e+00, -2.569999940395568e+00, -2.579999940395853e+00, -2.589999940396137e+00, -2.599999880792842e+00, -2.609999880791989e+00, -2.619999880791137e+00, -2.630000119208863e+00, -2.640000119208011e+00, -2.650000119207158e+00, -2.660000059603863e+00, -2.670000059604147e+00, -2.680000059604432e+00, -2.690000059604503e+00, -2.700000059603579e+00, -2.710000059602726e+00, -2.719999999999148e+00, -2.729999999999432e+00, -2.739999999999716e+00, -2.75e+00, -2.760000000000284e+00, -2.770000000000568e+00, -2.780000000000852e+00, -2.789999940397274e+00, -2.799999940396421e+00, -2.809999940395497e+00, -2.819999940395568e+00, -2.829999940395853e+00, -2.839999940396137e+00, -2.849999880792842e+00, -2.859999880791989e+00, -2.869999880791137e+00, -2.880000119208863e+00, -2.890000119208011e+00, -2.900000119207158e+00, -2.910000059603863e+00, -2.920000059604147e+00, -2.930000059604432e+00, -2.940000059604503e+00, -2.950000059603579e+00, -2.960000059602726e+00, -2.969999999999148e+00, -2.979999999999432e+00, -2.989999999999716e+00, -3e+00] +intWitRes1.y_start=[-2e+00, -2e+00] +intWitRes1.y=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -2.150000062584975e+00, -2.099999898672122e+00, -2.049999973177848e+00, -1.99999997317799e+00, -1.950000047683716e+00, -1.899999928474568e+00, -1.850000077485878e+00, -1.799999958276731e+00, -1.749999958276873e+00, -1.700000107288183e+00, -1.649999988079035e+00, -1.599999988079178e+00, -1.550000017881198e+00, -1.50000001788134e+00, -1.450000017881482e+00, -1.400000047683503e+00, -1.350000047683645e+00, -1.299999928474497e+00, -1.249999928474639e+00, -1.200000077485949e+00, -2.349999886751228e+00, -2.29999988675137e+00, -2.25000003576268e+00, -2.200000035762822e+00, -2.150000035762965e+00, -2.099999946355695e+00, -2.049999946355837e+00, -1.99999994635598e+00, -1.95000009536729e+00, -1.899999976158142e+00, -1.849999976158995e+00, -1.799999856950558e+00, -1.74999985695141e+00, -1.700000154970158e+00, -1.650000035761721e+00, -1.600000035762929e+00, -1.549999916554137e+00, -1.49999991655499e+00, -1.449999916555842e+00, -1.4000000953653e+00, -2.550000023840579e+00, -2.500000023841431e+00, -2.450000023842284e+00, -2.400000023843137e+00, -2.34999978542541e+00, -2.300000083444158e+00, -2.25000008344501e+00, -2.200000083445863e+00, -2.150000083446361e+00, -2.099999845028989e+00, -2.049999845029842e+00, -2.00000014304859e+00, -1.950000143049442e+00, -1.900000023841005e+00, -1.850000023841858e+00, -1.799999904633421e+00, -1.749999904634274e+00, -1.699999904635126e+00, -1.650000083444584e+00, -1.600000083445437e+00, -2.750000011921071e+00, -2.700000011921569e+00, -2.650000011922421e+00, -2.599999773504695e+00, -2.550000071523442e+00, -2.500000071524295e+00, -2.450000071525147e+00, -2.400000071526e+00, -2.349999833108273e+00, -2.299999833109126e+00, -2.250000131127873e+00, -2.200000131128726e+00, -2.150000131129579e+00, -2.099999892711498e+00, -2.049999892712705e+00, -1.999999892713558e+00, -1.950000190732305e+00, -1.900000071523869e+00, -1.850000071524721e+00, -1.799999952316284e+00] +intWitRes1.y_reset_in=[-2e+00, -2.009999990686785e+00, -2.019999981373569e+00, -2.029999972060353e+00, -2.039999962747139e+00, -2.04999995157128e+00, -2.059999944120708e+00, -2.069999932944796e+00, -2.079999925494274e+00, -2.089999910593299e+00, -2.099999903142563e+00, -2.109999895691898e+00, -2.119999888241411e+00, -2.130000119208934e+00, -2.140000104308102e+00, -2.150000089406701e+00, -2.160000089406701e+00, -2.170000074505726e+00, -2.180000059604325e+00, -2.190000059604467e+00, -2.200000044703351e+00, -2.210000044702995e+00, -2.220000029802234e+00, -2.230000014900975e+00, -2.240000014901401e+00, -2.25e+00, -2.260000000000426e+00, -2.269999970197198e+00, -2.279999970197766e+00, -2.289999970198051e+00, -2.299999940396243e+00, -2.309999940395533e+00, -2.319999940395675e+00, -2.32999991059401e+00, -2.339999910593299e+00, -2.349999910593299e+00, -2.359999880791776e+00, -2.369999880791066e+00, -2.380000119208934e+00, -2.390000119208224e+00, -2.400000089406701e+00, -2.410000089406701e+00, -2.42000008940599e+00, -2.430000059604325e+00, -2.440000059604467e+00, -2.450000059603757e+00, -2.460000029801949e+00, -2.470000029802234e+00, -2.480000029802802e+00, -2.489999999999574e+00, -2.5e+00, -2.510000000000284e+00, -2.520000000000568e+00, -2.530000000000852e+00, -2.539999940397274e+00, -2.549999940396421e+00, -2.559999940395497e+00, -2.569999940395568e+00, -2.579999940395853e+00, -2.589999940396137e+00, -2.599999880792842e+00, -2.609999880791989e+00, -2.619999880791137e+00, -2.630000119208863e+00, -2.640000119208011e+00, -2.650000119207158e+00, -2.660000059603863e+00, -2.670000059604147e+00, -2.680000059604432e+00, -2.690000059604503e+00, -2.700000059603579e+00, -2.710000059602726e+00, -2.719999999999148e+00, -2.729999999999432e+00, -2.739999999999716e+00, -2.75e+00, -2.760000000000284e+00, -2.770000000000568e+00, -2.780000000000852e+00, -2.789999940397274e+00, -2.799999940396421e+00, -2.809999940395497e+00, -2.819999940395568e+00, -2.829999940395853e+00, -2.839999940396137e+00, -2.849999880792842e+00, -2.859999880791989e+00, -2.869999880791137e+00, -2.880000119208863e+00, -2.890000119208011e+00, -2.900000119207158e+00, -2.910000059603863e+00, -2.920000059604147e+00, -2.930000059604432e+00, -2.940000059604503e+00, -2.950000059603579e+00, -2.960000059602726e+00, -2.969999999999148e+00, -2.979999999999432e+00, -2.989999999999716e+00, -3e+00] +intWitRes2.y_start=[-5e+00, -5e+00] +intWitRes2.y=[-5e+00, -4.949999808147577e+00, -4.900000093132206e+00, -4.849999901279894e+00, -4.800000186264413e+00, -4.750000003725375e+00, -4.699999802559781e+00, -4.650000096857513e+00, -4.599999895692111e+00, -4.550000208615777e+00, -4.500000007450736e+00, -4.449999806284985e+00, -4.400000081956107e+00, -4.34999988079135e+00, -4.300000193715015e+00, -4.250000029802944e+00, -4.199999791384223e+00, -4.150000104307889e+00, -4.099999940396101e+00, -4.050000178813685e+00, -4.000000014901472e+00, -2.150000062584975e+00, -2.099999898672122e+00, -2.049999973177848e+00, -1.99999997317799e+00, -1.950000047683716e+00, -1.899999928474568e+00, -1.850000077485878e+00, -1.799999958276731e+00, -1.749999958276873e+00, -1.700000107288183e+00, -1.649999988079035e+00, -1.599999988079178e+00, -1.550000017881198e+00, -1.50000001788134e+00, -1.450000017881482e+00, -1.400000047683503e+00, -1.350000047683645e+00, -1.299999928474497e+00, -1.249999928474639e+00, -1.200000077485949e+00, -2.349999886751228e+00, -2.29999988675137e+00, -2.25000003576268e+00, -2.200000035762822e+00, -2.150000035762965e+00, -2.099999946355695e+00, -2.049999946355837e+00, -1.99999994635598e+00, -1.95000009536729e+00, -1.899999976158142e+00, -1.849999976158995e+00, -1.799999856950558e+00, -1.74999985695141e+00, -1.700000154970158e+00, -1.650000035761721e+00, -1.600000035762929e+00, -1.549999916554137e+00, -1.49999991655499e+00, -1.449999916555842e+00, -1.4000000953653e+00, -2.550000023840579e+00, -2.500000023841431e+00, -2.450000023842284e+00, -2.400000023843137e+00, -2.34999978542541e+00, -2.300000083444158e+00, -2.25000008344501e+00, -2.200000083445863e+00, -2.150000083446361e+00, -2.099999845028989e+00, -2.049999845029842e+00, -2.00000014304859e+00, -1.950000143049442e+00, -1.900000023841005e+00, -1.850000023841858e+00, -1.799999904633421e+00, -1.749999904634274e+00, -1.699999904635126e+00, -1.650000083444584e+00, -1.600000083445437e+00, -2.750000011921071e+00, -2.700000011921569e+00, -2.650000011922421e+00, -2.599999773504695e+00, -2.550000071523442e+00, -2.500000071524295e+00, -2.450000071525147e+00, -2.400000071526e+00, -2.349999833108273e+00, -2.299999833109126e+00, -2.250000131127873e+00, -2.200000131128726e+00, -2.150000131129579e+00, -2.099999892711498e+00, -2.049999892712705e+00, -1.999999892713558e+00, -1.950000190732305e+00, -1.900000071523869e+00, -1.850000071524721e+00, -1.799999952316284e+00] +intWitRes2.y_reset_in=[-2e+00, -2.009999990686785e+00, -2.019999981373569e+00, -2.029999972060353e+00, -2.039999962747139e+00, -2.04999995157128e+00, -2.059999944120708e+00, -2.069999932944796e+00, -2.079999925494274e+00, -2.089999910593299e+00, -2.099999903142563e+00, -2.109999895691898e+00, -2.119999888241411e+00, -2.130000119208934e+00, -2.140000104308102e+00, -2.150000089406701e+00, -2.160000089406701e+00, -2.170000074505726e+00, -2.180000059604325e+00, -2.190000059604467e+00, -2.200000044703351e+00, -2.210000044702995e+00, -2.220000029802234e+00, -2.230000014900975e+00, -2.240000014901401e+00, -2.25e+00, -2.260000000000426e+00, -2.269999970197198e+00, -2.279999970197766e+00, -2.289999970198051e+00, -2.299999940396243e+00, -2.309999940395533e+00, -2.319999940395675e+00, -2.32999991059401e+00, -2.339999910593299e+00, -2.349999910593299e+00, -2.359999880791776e+00, -2.369999880791066e+00, -2.380000119208934e+00, -2.390000119208224e+00, -2.400000089406701e+00, -2.410000089406701e+00, -2.42000008940599e+00, -2.430000059604325e+00, -2.440000059604467e+00, -2.450000059603757e+00, -2.460000029801949e+00, -2.470000029802234e+00, -2.480000029802802e+00, -2.489999999999574e+00, -2.5e+00, -2.510000000000284e+00, -2.520000000000568e+00, -2.530000000000852e+00, -2.539999940397274e+00, -2.549999940396421e+00, -2.559999940395497e+00, -2.569999940395568e+00, -2.579999940395853e+00, -2.589999940396137e+00, -2.599999880792842e+00, -2.609999880791989e+00, -2.619999880791137e+00, -2.630000119208863e+00, -2.640000119208011e+00, -2.650000119207158e+00, -2.660000059603863e+00, -2.670000059604147e+00, -2.680000059604432e+00, -2.690000059604503e+00, -2.700000059603579e+00, -2.710000059602726e+00, -2.719999999999148e+00, -2.729999999999432e+00, -2.739999999999716e+00, -2.75e+00, -2.760000000000284e+00, -2.770000000000568e+00, -2.780000000000852e+00, -2.789999940397274e+00, -2.799999940396421e+00, -2.809999940395497e+00, -2.819999940395568e+00, -2.829999940395853e+00, -2.839999940396137e+00, -2.849999880792842e+00, -2.859999880791989e+00, -2.869999880791137e+00, -2.880000119208863e+00, -2.890000119208011e+00, -2.900000119207158e+00, -2.910000059603863e+00, -2.920000059604147e+00, -2.930000059604432e+00, -2.940000059604503e+00, -2.950000059603579e+00, -2.960000059602726e+00, -2.969999999999148e+00, -2.979999999999432e+00, -2.989999999999716e+00, -3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Less.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Less.txt new file mode 100644 index 0000000000..c31e776f9f --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Less.txt @@ -0,0 +1,12 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +les.u1=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1.811628505752779e+00, -1.624000400138706e+00, -1.43785598996685e+00, -1.253930286818943e+00, -1.072949051856995e+00, -8.956264080262712e-01, -7.226622324250406e-01, -5.547389199236601e-01, -3.925195852485924e-01, -2.366442382335663e-01, -8.7727893193044e-02, 5.364125336904336e-02, 1.869059369170518e-01, 3.115396239174152e-01, 4.270509779453278e-01, 5.329838752732372e-01, 6.289199748783157e-01, 7.1448121270354e-01, 7.89329401980005e-01, 8.531695604324341e-01, 9.057495434078494e-01, 9.468617265306255e-01, 9.763441192861637e-01, 9.940801734758675e-01, 1e+00, 9.940801734758675e-01, 9.763441192861637e-01, 9.468617265306255e-01, 9.057495434078492e-01, 8.531695604324341e-01, 7.893294019800053e-01, 7.144810198268143e-01, 6.289201898923054e-01, 5.329838752732368e-01, 4.270509779453278e-01, 3.115396244887637e-01, 1.869056280486268e-01, 5.364157980559271e-02, -8.772789319304464e-02, -2.366442382335663e-01, -3.925197754217349e-01, -5.547393145486301e-01, -7.226618265200716e-01, -8.956261994185419e-01, -1.072949051856995e+00, -1.253930504668855e+00, -1.437856431721111e+00, -1.623999954498346e+00, -1.811628281550894e+00, -2e+00, -2.188371837658394e+00, -2.376000045501654e+00, -2.562143687488177e+00, -2.746069495331147e+00, -2.927051067352295e+00, -3.10437386018582e+00, -3.277338113875285e+00, -3.445260685450803e+00, -3.607480135171581e+00, -3.763355731964111e+00, -3.912272114257252e+00, -4.053641579804455e+00, -4.186905613149738e+00, -4.311539534512012e+00, -4.427051067352295e+00, -4.532983875272384e+00, -4.628920249494676e+00, -4.714481198640749e+00, -4.789329461585503e+00, -4.853169441223145e+00, -4.905749137797657e+00, -4.946861809072616e+00, -4.976344061279806e+00, -4.994080107325297e+00, -5e+00, -4.994080107325297e+00, -4.976344061279806e+00, -4.946861809072616e+00, -4.905749137797656e+00, -4.853169441223145e+00, -4.78932978929101e+00, -4.714481198644446e+00, -4.628920249490593e+00, -4.532983390825205e+00, -4.427051067352295e+00, -4.311540104800364e+00, -4.186905613155646e+00, -4.053641579798243e+00, -3.91227141957735e+00, -3.763355731964111e+00] +les.u2=[-2e+00, -1.950000048428773e+00, -1.899999977648257e+00, -1.850000029802314e+00, -1.799999955296512e+00, -1.75e+00, -1.700000059604609e+00, -1.649999970197695e+00, -1.600000029802305e+00, -1.549999940395391e+00, -1.5e+00, -1.450000059604645e+00, -1.399999999999858e+00, -1.350000000000142e+00, -1.299999940395355e+00, -1.25e+00, -1.200000059604645e+00, -1.149999999999858e+00, -1.100000000000142e+00, -1.049999940395355e+00, -1e+00, -9.499999403953552e-01, -9.00000000000142e-01, -8.499999999998578e-01, -8.000000596046448e-01, -7.5e-01, -6.999999403953552e-01, -6.50000000000142e-01, -5.999999999998578e-01, -5.500000596046448e-01, -5e-01, -4.499999403953552e-01, -4.000000298023223e-01, -3.499999701976775e-01, -3.000000596046446e-01, -2.5e-01, -1.999999552964455e-01, -1.500000298023223e-01, -9.999997764824053e-02, -5.000004842880923e-02, 0e+00, 5.000004842880923e-02, 1.000000968576189e-01, 1.499999105928906e-01, 1.999999552964455e-01, 2.5e-01, 3.000000596050649e-01, 3.50000089407251e-01, 3.999999105927485e-01, 4.499999403953554e-01, 5e-01, 5.500000596046446e-01, 6.000001192092896e-01, 6.499998807907108e-01, 6.999999403953554e-01, 7.5e-01, 8.00000059604645e-01, 8.500001192092892e-01, 8.999998807907104e-01, 9.49999940395355e-01, 1e+00, 1.05e+00, 1.10000011920929e+00, 1.14999988079071e+00, 1.2e+00, 1.25e+00, 1.3e+00, 1.35000011920929e+00, 1.399999880790711e+00, 1.45e+00, 1.5e+00, 1.55e+00, 1.600000119209289e+00, 1.64999988079071e+00, 1.7e+00, 1.75e+00, 1.8e+00, 1.85000011920929e+00, 1.899999880790711e+00, 1.95e+00, 2e+00, 2.049999761585969e+00, 2.099999999997726e+00, 2.150000000002273e+00, 2.200000238414032e+00, 2.25e+00, 2.299999761585968e+00, 2.349999999997726e+00, 2.400000000002274e+00, 2.450000238414032e+00, 2.5e+00, 2.549999761585968e+00, 2.599999999997727e+00, 2.650000000002274e+00, 2.700000238414031e+00, 2.75e+00, 2.799999761585968e+00, 2.849999999997726e+00, 2.900000000002274e+00, 2.950000238414032e+00, 3e+00] +les.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +lesHys.y=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt new file mode 100644 index 0000000000..f2e3fda820 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LessThreshold.txt @@ -0,0 +1,12 @@ +last-generated=2023-03-17 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +les.u=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1.497676015340886e+00, -9.973343606335472e-01, -5.009492668417413e-01, -1.048078720206188e-02, 4.721359610557556e-01, 9.449963048679213e-01, 1.406234166075659e+00, 1.85402962634291e+00, 2.286614518809852e+00, 2.702281951904297e+00, 3.099392304686385e+00, 3.47637659617823e+00, 3.831749125375993e+00, 4.164105584308051e+00, 4.4721360206604e+00, 4.754623667394541e+00, 5.010453107397214e+00, 5.238616567209061e+00, 5.438211738613346e+00, 5.608452320098877e+00, 5.748665449086841e+00, 5.858297778469661e+00, 5.93691781037549e+00, 5.984213795934889e+00, 6e+00, 5.984213795934889e+00, 5.93691781037549e+00, 5.858297778469661e+00, 5.74866544908684e+00, 5.608452320098877e+00, 5.438211738613347e+00, 5.238616052869989e+00, 5.010453680767095e+00, 4.75462366739454e+00, 4.4721360206604e+00, 4.164105584308049e+00, 3.831748301726575e+00, 3.476377466676903e+00, 3.099392304686384e+00, 2.702281951904297e+00, 2.286614011680809e+00, 1.85402857400833e+00, 1.406235248488341e+00, 9.449968611549155e-01, 4.721359610557556e-01, -1.048136813505908e-02, -5.009504448522509e-01, -9.973331722587795e-01, -1.49767541746905e+00, -2e+00, -2.502324582530945e+00, -3.002666708533068e+00, -3.499049674355329e+00, -3.989518654217149e+00, -4.4721360206604e+00, -4.944996801550559e+00, -5.406235129281329e+00, -5.854028335594302e+00, -6.286614011680805e+00, -6.702281951904297e+00, -7.09939230468752e+00, -7.476377705090932e+00, -7.831748301726572e+00, -8.164106061140663e+00, -8.472135543823242e+00, -8.75462366739454e+00, -9.010453680767094e+00, -9.238615576037381e+00, -9.438211261778463e+00, -9.608451843261719e+00, -9.748664367460419e+00, -9.858298475415383e+00, -9.936917178866837e+00, -9.984213937413436e+00, -1e+01, -9.984213937413436e+00, -9.936917178866837e+00, -9.858298475415383e+00, -9.748664367460417e+00, -9.608451843261719e+00, -9.438212135678004e+00, -9.238615576047238e+00, -9.010453680756207e+00, -8.754622375521754e+00, -8.472135543823242e+00, -8.16410758191112e+00, -7.831748301742326e+00, -7.476377705074368e+00, -7.099390452212329e+00, -6.702281951904297e+00] +les.t=[2e+00, 2e+00] +les.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +lesHys.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt new file mode 100644 index 0000000000..e750a219d2 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_LimitSlewRate.txt @@ -0,0 +1,11 @@ +last-generated=2017-10-24 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "number of continuous time states": "1", + "linear": " " +} +sleRatLim.y=[0e+00, 0e+00, 0e+00, 1.437176146109914e-01, 3.037175877889218e-01, 4.637176096439362e-01, 6.237176314989503e-01, 7.837176831560915e-01, 9.437175480526151e-01, 1.103717540105203e+00, 1.263717651367188e+00, 1.423717643419882e+00, 1.499997735027099e+00, 1.422950080235559e+00, 1.262949961027015e+00, 1.102949976921082e+00, 9.429501120242484e-01, 7.829499332110463e-01, 6.229500683149274e-01, 4.629499193039529e-01, 3.02949994802475e-01, 1.429501150044332e-01, 8.814942139984681e-04, 2.059985892636918e-08, 4.000724315966706e-10, 2.597874519671972e-11, 1.549918677416678e-01, 3.149917773419613e-01, 4.749921806639448e-01, 6.349920455607775e-01, 7.949919700622559e-01, 9.549918945637342e-01, 1.114991819064833e+00, 1.274992192584495e+00, 1.434992057481897e+00, 1.499999284744263e+00, 1.5e+00, 1.5e+00, 1.42501119295857e+00, 1.265011208853016e+00, 1.105011343955994e+00, 9.450114194545162e-01, 7.850115545576826e-01, 6.250111214333758e-01, 4.650112565365431e-01, 3.050113320350647e-01, 1.450114522370225e-01, 1.060648718873344e-03, 9.954553664997234e-09, 3.021871829589923e-10, 5.703153227454294e-12, 1.519405420628424e-01, 3.119404367619747e-01, 4.719408400839582e-01, 6.319402559690765e-01, 7.919406294822693e-01, 9.519410626001087e-01, 1.111940418877725e+00, 1.271940792403854e+00, 1.431940267889246e+00, 1.499998569488525e+00, 1.5e+00, 1.5e+00, 1.42805973211702e+00, 1.268060256631628e+00, 1.108059883117676e+00, 9.480595096044812e-01, 7.880600937225974e-01, 6.280597201964679e-01, 4.680603043145862e-01, 3.080599009990692e-01, 1.480594976836488e-01, 1.396376906567395e-03, -3.14243751486786e-08, -6.434689225771209e-10, -4.178314638725311e-11, 1.340002801339638e-01, 2.77999814031906e-01, 4.220001740472615e-01, 5.659996185385207e-01, 7.099999785423279e-01, 8.540003385461368e-01, 9.97999842642039e-01, 1.142000143052845e+00, 1.285999647148748e+00, 1.429999947547913e+00, 1.49999713901343e+00, 1.5e+00, 1.437991555263012e+00, 1.29400039576508e+00, 1.149999976158142e+00, 1.00599967575822e+00, 8.62000171663074e-01, 7.179998116476237e-01, 5.740003671563663e-01, 4.300000071525574e-01, 2.859996471487502e-01, 1.420001877562351e-01, 3.011352473554726e-03, -6.480208271559414e-08, -5.38217415080311e-10] +sleRatLim.u=[0e+00, 0e+00, 0e+00, 3.300000417232489e-01, 6.89999940395393e-01, 1.049999952316284e+00, 1.41000002384182e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.320000166892512e+00, 9.59999749662197e-01, 6.000000238418579e-01, 2.400002235158549e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.399998420487814e-01, 4.799996840976575e-01, 7.200003337837373e-01, 9.600001311292705e-01, 1.200000047683716e+00, 1.439999904633327e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.379999690058121e+00, 1.139999833108131e+00, 8.999999761581421e-01, 6.600001788127983e-01, 4.200002920606755e-01, 1.799997019788601e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.799998927123977e-01, 3.599997854247955e-01, 5.400002503376135e-01, 7.199995708568667e-01, 8.999999761581421e-01, 1.080000500668709e+00, 1.259999761579297e+00, 1.440000286103658e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.409999737737442e+00, 1.230000476826851e+00, 1.049999952316284e+00, 8.699995470150067e-01, 6.900002264997714e-01, 5.099997615794869e-01, 3.300004708660078e-01, 1.500000059604645e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.440003600038089e-01, 2.879998044952576e-01, 4.320001943126512e-01, 5.759996090025354e-01, 7.200000286102295e-01, 8.640003886132804e-01, 1.007999833105296e+00, 1.152000133516101e+00, 1.295999637612005e+00, 1.440000057220459e+00, 1.5e+00, 1.5e+00, 1.427999790189953e+00, 1.284000405303339e+00, 1.139999985694885e+00, 9.959996256910764e-01, 8.520001811998171e-01, 7.079998211843669e-01, 5.640003766931094e-01, 4.199999868869781e-01, 2.759996268833604e-01, 1.32000182391817e-01, 0e+00, 0e+00, 0e+00] +time=[0e+00, 4.8e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Limiter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Limiter.txt new file mode 100644 index 0000000000..9624b14eb3 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Limiter.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +limiter1.u=[0e+00, 4e-02, 8e-02, 1.2e-01, 1.6e-01, 2e-01, 2.4e-01, 2.8e-01, 3.2e-01, 3.6e-01, 4e-01, 4.4e-01, 4.8e-01, 5.2e-01, 5.600000000000001e-01, 6e-01, 6.4e-01, 6.8e-01, 7.2e-01, 7.6e-01, 8e-01, 8.4e-01, 8.8e-01, 9.2e-01, 9.6e-01, 1e+00, 1.04e+00, 1.08e+00, 1.12e+00, 1.16e+00, 1.2e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00, 3.04e+00, 3.08e+00, 3.12e+00, 3.16e+00, 3.2e+00, 3.24e+00, 3.28e+00, 3.32e+00, 3.36e+00, 3.4e+00, 3.44e+00, 3.48e+00, 3.52e+00, 3.56e+00, 3.6e+00, 3.64e+00, 3.68e+00, 3.72e+00, 3.76e+00, 3.8e+00, 3.84e+00, 3.88e+00, 3.92e+00, 3.96e+00, 4e+00] +limiter1.y=[1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Line.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Line.txt new file mode 100644 index 0000000000..2833030a15 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Line.txt @@ -0,0 +1,12 @@ +last-generated=2018-03-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +line1.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 6.000005587923019e-02, 1.199999329449346e-01, 1.80000000000009e-01, 2.400000447034213e-01, 2.999999403953552e-01, 3.6e-01, 4.200000298023224e-01, 4.799999105932283e-01, 5.400000000000001e-01, 6.00000059604467e-01, 6.599999403953551e-01, 7.2e-01, 7.8e-01, 8.400000596046449e-01, 8.99999940395533e-01, 9.599999999999999e-01, 1.020000059604254e+00, 1.079999999999787e+00, 1.139999999999929e+00, 1.200000119208934e+00, 1.259999940395604e+00, 1.320000059604609e+00, 1.380000059604325e+00, 1.439999999999716e+00, 1.5e+00, 1.559999999999432e+00, 1.620000119207016e+00, 1.680000119207584e+00, 1.739999880793269e+00, 1.799999880792132e+00, 1.859999999999858e+00, 1.919999999999573e+00, 1.9800001192073e+00, 2.040000119207726e+00, 2.099999761585684e+00, 2.160000000000852e+00, 2.220000000000284e+00, 2.279999999999716e+00, 2.339999999999148e+00, 2.400000238414316e+00, 2.459999880792274e+00, 2.519999880791705e+00, 2.579999880791989e+00, 2.640000119209289e+00, 2.700000119207158e+00, 2.76000011920801e+00, 2.819999761586537e+00, 2.880000000001137e+00, 2.940000000000568e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +line1.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00] +time=[0e+00, 1e+00] +line3.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.540000119207726e+00, 1.599999880793552e+00, 1.659999880792416e+00, 1.720000000000284e+00, 1.779999999999716e+00, 1.840000119207584e+00, 1.900000119206448e+00, 1.959999880792274e+00, 2.019999880791705e+00, 2.079999880791989e+00, 2.140000119209289e+00, 2.200000119207158e+00, 2.26000011920801e+00, 2.319999761586537e+00, 2.380000000001137e+00, 2.440000000000568e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00, 2.5e+00] +line2.y=[-5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -4.399999403954973e-01, -3.800000596044848e-01, -3.199999999999821e-01, -2.599999403954797e-01, -2.000000745056284e-01, -1.400000149011257e-01, -7.999995529662296e-02, -2.000007823094963e-02, 3.999997764830499e-02, 1.000000372528362e-01, 1.599999105932459e-01, 2.199999701977486e-01, 2.800000298022514e-01, 3.400000894067541e-01, 3.999999701977666e-01, 4.60000029802269e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00, 1.5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log.txt new file mode 100644 index 0000000000..d136279727 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +log1.y=[0e+00, 4.87901653511907e-02, 9.531018340211317e-02, 1.397619425476533e-01, 1.823215670729271e-01, 2.231435447811441e-01, 2.623642734412664e-01, 3.001045871622895e-01, 3.364722494340859e-01, 3.715635414354568e-01, 4.054650912516052e-01, 4.382549245449546e-01, 4.700036430470175e-01, 5.007752920205341e-01, 5.306282621920957e-01, 5.596157737652154e-01, 5.877866844061271e-01, 6.151856135546999e-01, 6.418538500892152e-01, 6.678294004381674e-01, 6.931471749953008e-01, 7.178397934221931e-01, 7.419373421374558e-01, 7.654678128261045e-01, 7.884573462059203e-01, 8.109301924705505e-01, 8.329091278955197e-01, 8.544153342368299e-01, 8.754687284378073e-01, 8.960880211074321e-01, 9.162907361504637e-01, 9.360933256992704e-01, 9.555114644960276e-01, 9.745596399379585e-01, 9.932517939020038e-01, 1.011600982039204e+00, 1.029619429746953e+00, 1.047318927014163e+00, 1.064710744481755e+00, 1.081805253391175e+00, 1.098612298551422e+00, 1.115141636025742e+00, 1.131402156010907e+00, 1.147402394367896e+00, 1.163150791073057e+00, 1.17865504665456e+00, 1.193922507021068e+00, 1.208960296500148e+00, 1.223775402565348e+00, 1.238374219404505e+00, 1.252762913703918e+00, 1.266947640480112e+00, 1.280933883417454e+00, 1.2947272453679e+00, 1.308332771830331e+00, 1.321755870161993e+00, 1.335001107889229e+00, 1.348073134162674e+00, 1.360976598174184e+00, 1.373715553061437e+00, 1.386294335089752e+00, 1.398716908891871e+00, 1.410987013716791e+00, 1.423108345047654e+00, 1.435084598384375e+00, 1.446918992402212e+00, 1.458615034090746e+00, 1.470175843106814e+00, 1.4816045679737e+00, 1.492904069715428e+00, 1.504077447769877e+00, 1.515127205561355e+00, 1.526056258541375e+00, 1.536867240401427e+00, 1.547562469816798e+00, 1.558144569396973e+00, 1.568615923314669e+00, 1.578978677366089e+00, 1.589235215740434e+00, 1.599387504817228e+00, 1.60943793057223e+00, 1.619388220331528e+00, 1.629240519853165e+00, 1.638996736501479e+00, 1.648658658424125e+00, 1.658228017014481e+00, 1.667706833682531e+00, 1.677096600840192e+00, 1.686398987412684e+00, 1.695615662334325e+00, 1.704748056132789e+00, 1.713797903255172e+00, 1.722766622887942e+00, 1.731655591351249e+00, 1.740466119948478e+00, 1.749199877605231e+00, 1.757857937221502e+00, 1.766441678368624e+00, 1.774952276264959e+00, 1.783391229237872e+00, 1.791759490966797e+00] +log1.u=[1e+00, 1.04999995343387e+00, 1.10000002607703e+00, 1.149999979510896e+00, 1.200000052154059e+00, 1.249999996274714e+00, 1.299999959021799e+00, 1.350000022351741e+00, 1.399999985098812e+00, 1.450000029802376e+00, 1.499999992549442e+00, 1.549999955296508e+00, 1.600000037252863e+00, 1.649999999999929e+00, 1.700000044703493e+00, 1.749999970197766e+00, 1.799999970197624e+00, 1.850000014901188e+00, 1.899999940395462e+00, 1.950000059604609e+00, 1.999999985098883e+00, 2.049999985098741e+00, 2.099999910593015e+00, 2.150000074505868e+00, 2.200000074505726e+00, 2.25e+00, 2.299999999999858e+00, 2.349999850988548e+00, 2.400000089406985e+00, 2.450000089406843e+00, 2.499999940395533e+00, 2.549999940395391e+00, 2.599999940395249e+00, 2.650000029802518e+00, 2.700000029802376e+00, 2.750000029802234e+00, 2.799999880790923e+00, 2.849999880790782e+00, 2.900000119209218e+00, 2.950000119209077e+00, 2.999999970197766e+00, 3.049999970197624e+00, 3.099999970197482e+00, 3.150000059604751e+00, 3.200000059604609e+00, 3.250000059604467e+00, 3.299999910593157e+00, 3.349999910593015e+00, 3.400000149011452e+00, 3.450000000000142e+00, 3.5e+00, 3.549999999999148e+00, 3.599999999998295e+00, 3.650000238416022e+00, 3.699999940397274e+00, 3.749999940396421e+00, 3.799999940395213e+00, 3.849999940394715e+00, 3.900000178812442e+00, 3.950000178811589e+00, 3.999999880792842e+00, 4.050000119208863e+00, 4.099999880791705e+00, 4.150000119208295e+00, 4.199999880791137e+00, 4.25000011921e+00, 4.300000059603863e+00, 4.349999821189548e+00, 4.400000059604432e+00, 4.449999821186492e+00, 4.500000059605e+00, 4.550000298018747e+00, 4.599999761587389e+00, 4.649999999999432e+00, 4.699999761583411e+00, 4.75e+00, 4.800000238416589e+00, 4.850000000000568e+00, 4.900000238412611e+00, 4.949999701981253e+00, 4.999999940395e+00, 5.050000178813508e+00, 5.099999940395568e+00, 5.150000178810452e+00, 5.199999940396137e+00, 5.24999988079e+00, 5.300000119208863e+00, 5.349999880791705e+00, 5.400000119208295e+00, 5.449999880791137e+00, 5.50000011921e+00, 5.550000059603863e+00, 5.599999821189548e+00, 5.650000059604432e+00, 5.699999821186492e+00, 5.750000059605e+00, 5.800000298018747e+00, 5.849999761587389e+00, 5.899999999999432e+00, 5.949999761583411e+00, 6e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log10.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log10.txt new file mode 100644 index 0000000000..a14c5cda78 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Log10.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +log10_1.u=[1e+00, 1.090000035390258e+00, 1.179999951571227e+00, 1.26999998696148e+00, 1.360000022351743e+00, 1.450000040978192e+00, 1.53999997392297e+00, 1.629999992549414e+00, 1.720000044703457e+00, 1.809999910593299e+00, 1.899999962747119e+00, 1.990000014901117e+00, 2.079999947846056e+00, 2.170000119208934e+00, 2.259999985098883e+00, 2.349999850988832e+00, 2.440000089406701e+00, 2.52999995529665e+00, 2.619999821186599e+00, 2.710000059604467e+00, 2.799999925494416e+00, 2.890000163912285e+00, 2.980000029802234e+00, 3.069999895692183e+00, 3.160000134110051e+00, 3.25e+00, 3.340000000000426e+00, 3.429999970197198e+00, 3.519999970197767e+00, 3.609999970198051e+00, 3.699999940394822e+00, 3.789999940395533e+00, 3.880000178813401e+00, 3.969999910592447e+00, 4.059999910592873e+00, 4.150000149011878e+00, 4.239999642374903e+00, 4.329999880790497e+00, 4.420000119209503e+00, 4.510000357625097e+00, 4.599999850988122e+00, 4.690000089407127e+00, 4.780000327823006e+00, 4.869999821187451e+00, 4.960000059604751e+00, 5.050000298020914e+00, 5.13999979138536e+00, 5.230000029802375e+00, 5.320000268218823e+00, 5.409999761583268e+00, 5.5e+00, 5.590000238415453e+00, 5.679999999998295e+00, 5.770000238416022e+00, 5.859999940397274e+00, 5.949999701980684e+00, 6.039999940394929e+00, 6.130000178811589e+00, 6.219999940393863e+00, 6.310000178811589e+00, 6.399999880792842e+00, 6.489999642376821e+00, 6.579999880791137e+00, 6.670000119208863e+00, 6.760000357623179e+00, 6.850000119207158e+00, 6.939999821188411e+00, 7.030000059606137e+00, 7.119999821188411e+00, 7.210000059605071e+00, 7.300000298019316e+00, 7.390000059602726e+00, 7.479999761583978e+00, 7.570000000001705e+00, 7.659999761584547e+00, 7.75e+00, 7.840000238415453e+00, 7.929999999998295e+00, 8.020000715246358e+00, 8.109999463565231e+00, 8.199999701980685e+00, 8.289999940395498e+00, 8.380000178811589e+00, 8.470000417227041e+00, 8.560000655642495e+00, 8.649999403961369e+00, 8.739999642376821e+00, 8.829999880792274e+00, 8.920000119207726e+00, 9.010000357623179e+00, 9.100000596038631e+00, 9.189999344357505e+00, 9.279999582772959e+00, 9.369999821188411e+00, 9.460000059604502e+00, 9.550000298019315e+00, 9.640000536434769e+00, 9.729999284753642e+00, 9.819999523169095e+00, 9.909999761584547e+00, 1e+01] +log10_1.y=[0e+00, 3.742649858220613e-02, 7.18820109758098e-02, 1.038037260997729e-01, 1.335389043585886e-01, 1.613679955061617e-01, 1.875207308993131e-01, 2.121876023974158e-01, 2.355284582269037e-01, 2.576785606016807e-01, 2.787536053851314e-01, 2.98853070709295e-01, 3.180633535502984e-01, 3.364597346486957e-01, 3.541084517619527e-01, 3.710678418299149e-01, 3.873898444033221e-01, 4.031205149583229e-01, 4.18301273605842e-01, 4.329693053663421e-01, 4.471580344425053e-01, 4.608978419489416e-01, 4.742162541242582e-01, 4.871383554110801e-01, 4.996870822313831e-01, 5.118833780288696e-01, 5.237465016087187e-01, 5.352941032853558e-01, 5.465426431736189e-01, 5.575072259428951e-01, 5.682017080907371e-01, 5.786392068058227e-01, 5.888317299250471e-01, 5.987905134503726e-01, 6.085260475937914e-01, 6.180480774629971e-01, 6.273658143452093e-01, 6.364878968975151e-01, 6.454222840428571e-01, 6.541765455954225e-01, 6.627578088560032e-01, 6.711728602593336e-01, 6.794279324743894e-01, 6.875289621060264e-01, 6.954816598572753e-01, 7.032913657739597e-01, 7.109631236405023e-01, 7.185016879392503e-01, 7.25911625148262e-01, 7.331972649222533e-01, 7.403627038002014e-01, 7.47411794167591e-01, 7.54348350754759e-01, 7.611758306413343e-01, 7.678975915621049e-01, 7.745169322743997e-01, 7.810369118497619e-01, 7.874604509116604e-01, 7.937904105003856e-01, 8.000293536287113e-01, 8.061799857236646e-01, 8.12244704679021e-01, 8.182259173639093e-01, 8.241258291493335e-01, 8.299467050181898e-01, 8.356905715427533e-01, 8.413594813267283e-01, 8.469552900865419e-01, 8.524799903655191e-01, 8.57935251096381e-01, 8.633228604169347e-01, 8.686444276676255e-01, 8.739015906380392e-01, 8.790958425157064e-01, 8.842287610925411e-01, 8.893017172813416e-01, 8.943160819812639e-01, 8.992732261147696e-01, 9.041744013828096e-01, 9.090208307691702e-01, 9.138138237338435e-01, 9.185545433234805e-01, 9.232440028137323e-01, 9.278833943052808e-01, 9.324737906868101e-01, 9.370161187092783e-01, 9.415114457938731e-01, 9.459606983990982e-01, 9.503648301971384e-01, 9.54724794865294e-01, 9.590414268752712e-01, 9.633154757430347e-01, 9.675479460929975e-01, 9.717395871814256e-01, 9.758911142654354e-01, 9.800033618081897e-01, 9.840770450725479e-01, 9.881128553747331e-01, 9.921114964792118e-01, 9.960736594697506e-01, 1e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt new file mode 100644 index 0000000000..c228439473 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixGain.txt @@ -0,0 +1,17 @@ +last-generated=2019-02-11 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +matGai.y[1]=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] +matGai.y[2]=[0e+00, 4e-02, 8e-02, 1.2e-01, 1.6e-01, 2e-01, 2.4e-01, 2.8e-01, 3.2e-01, 3.6e-01, 4e-01, 4.4e-01, 4.8e-01, 5.2e-01, 5.600000000000001e-01, 6e-01, 6.4e-01, 6.8e-01, 7.2e-01, 7.6e-01, 8e-01, 8.4e-01, 8.8e-01, 9.2e-01, 9.6e-01, 1e+00, 1.04e+00, 1.08e+00, 1.12e+00, 1.16e+00, 1.2e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00, 3.04e+00, 3.08e+00, 3.12e+00, 3.16e+00, 3.2e+00, 3.24e+00, 3.28e+00, 3.32e+00, 3.36e+00, 3.4e+00, 3.44e+00, 3.48e+00, 3.52e+00, 3.56e+00, 3.6e+00, 3.64e+00, 3.68e+00, 3.72e+00, 3.76e+00, 3.8e+00, 3.84e+00, 3.88e+00, 3.92e+00, 3.96e+00, 4e+00] +matGai.y[3]=[0e+00, 5.999999999999959e-02, 1.2e-01, 1.800000111758646e-01, 2.400000000000033e-01, 3.000000074505723e-01, 3.600000223517368e-01, 4.199999850988366e-01, 4.8e-01, 5.4e-01, 6.000000149011613e-01, 6.600000298023047e-01, 7.200000447034036e-01, 7.8e-01, 8.399999701976955e-01, 8.999999403955328e-01, 9.6e-01, 1.019999970197731e+00, 1.079999999999787e+00, 1.139999999999929e+00, 1.200000029802234e+00, 1.260000029802127e+00, 1.320000059604609e+00, 1.379999970197802e+00, 1.440000089406807e+00, 1.5e+00, 1.560000000000284e+00, 1.619999940395675e+00, 1.679999940395391e+00, 1.740000059604396e+00, 1.799999880791066e+00, 1.860000000000071e+00, 1.920000000000213e+00, 1.979999940395746e+00, 2.039999940395675e+00, 2.099999940395533e+00, 2.159999999999574e+00, 2.219999999999858e+00, 2.280000000000142e+00, 2.340000000000426e+00, 2.400000059604467e+00, 2.460000059604325e+00, 2.520000059605036e+00, 2.57999988079135e+00, 2.640000119209077e+00, 2.700000119208224e+00, 2.759999940395107e+00, 2.819999940395391e+00, 2.880000178812975e+00, 2.939999999999716e+00, 3e+00, 3.059999999999432e+00, 3.119999999998863e+00, 3.180000238413463e+00, 3.23999988079199e+00, 3.299999880792842e+00, 3.359999880790711e+00, 3.420000119208011e+00, 3.480000119208295e+00, 3.540000119207726e+00, 3.599999761585684e+00, 3.660000000000852e+00, 3.720000000000284e+00, 3.779999999999716e+00, 3.839999999999148e+00, 3.900000238414316e+00, 3.959999880792274e+00, 4.019999880791706e+00, 4.079999880791137e+00, 4.139999880790994e+00, 4.19999988079e+00, 4.260000357621474e+00, 4.320000000001705e+00, 4.380000000001137e+00, 4.440000000000568e+00, 4.5e+00, 4.559999999999432e+00, 4.619999999998863e+00, 4.679999999998295e+00, 4.739999642378526e+00, 4.80000011921e+00, 4.860000119209006e+00, 4.920000119208863e+00, 4.980000119208294e+00, 5.040000119207726e+00, 5.099999761582842e+00, 5.159999761582274e+00, 5.219999761582842e+00, 5.280000238417158e+00, 5.340000238417726e+00, 5.400000238417158e+00, 5.459999880792274e+00, 5.519999880791706e+00, 5.579999880791137e+00, 5.639999880790994e+00, 5.69999988079e+00, 5.760000357621474e+00, 5.820000000001705e+00, 5.880000000001137e+00, 5.940000000000568e+00, 6e+00] +time=[0e+00, 1e+00] +matGai.u[2]=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] +matGai.u[1]=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] +matGai1.y[1]=[0e+00, 5.000000186264474e-02, 1.000000037252895e-01, 1.500000093132189e-01, 2.000000074505756e-01, 2.499999962747083e-01, 3.00000018626444e-01, 3.499999925494183e-01, 4.000000149011346e-01, 4.499999701977309e-01, 4.999999925494416e-01, 5.500000149011524e-01, 6.00000037252863e-01, 6.500000000000711e-01, 6.999999850988478e-01, 7.499999701977664e-01, 8.000000298022691e-01, 8.500000149011346e-01, 8.999999403954617e-01, 9.499999999999645e-01, 9.999999850988832e-01, 1.049999985098741e+00, 1.100000029802305e+00, 1.149999955296579e+00, 1.200000074505726e+00, 1.25e+00, 1.299999999999858e+00, 1.349999970197838e+00, 1.399999970197696e+00, 1.450000089406843e+00, 1.499999940395533e+00, 1.549999940395391e+00, 1.600000059604538e+00, 1.649999910593228e+00, 1.700000029802376e+00, 1.750000029802234e+00, 1.799999880790923e+00, 1.850000000000071e+00, 1.899999999999929e+00, 1.950000119209077e+00, 1.999999970197766e+00, 2.049999970197624e+00, 2.099999970197482e+00, 2.150000059604751e+00, 2.200000059604609e+00, 2.250000059604467e+00, 2.299999910593157e+00, 2.349999910593015e+00, 2.400000149011452e+00, 2.450000000000142e+00, 2.5e+00, 2.549999999999148e+00, 2.599999999998295e+00, 2.650000238416022e+00, 2.699999940397274e+00, 2.749999940396421e+00, 2.799999940395213e+00, 2.849999940394715e+00, 2.900000178812442e+00, 2.950000178811589e+00, 2.999999880792842e+00, 3.049999880791989e+00, 3.099999880791137e+00, 3.150000119208863e+00, 3.200000119208011e+00, 3.250000119207158e+00, 3.299999821188411e+00, 3.349999821187558e+00, 3.400000059605285e+00, 3.450000059604787e+00, 3.500000059603579e+00, 3.550000059602726e+00, 3.599999761583978e+00, 3.650000000001705e+00, 3.700000000000852e+00, 3.75e+00, 3.799999999999148e+00, 3.849999999998295e+00, 3.900000238416022e+00, 3.949999940397274e+00, 3.999999940396421e+00, 4.050000178813508e+00, 4.099999940395568e+00, 4.150000178810452e+00, 4.199999940396137e+00, 4.24999988079e+00, 4.300000119208863e+00, 4.349999880791705e+00, 4.400000119208295e+00, 4.449999880791137e+00, 4.50000011921e+00, 4.550000059603863e+00, 4.599999821189548e+00, 4.650000059604432e+00, 4.699999821186492e+00, 4.750000059605e+00, 4.800000298018747e+00, 4.849999761587389e+00, 4.899999999999432e+00, 4.949999761583411e+00, 5e+00] +matGai1.y[2]=[0e+00, 1.100000018626447e-01, 2.200000037252895e-01, 3.300000204890835e-01, 4.400000074505856e-01, 5.500000037252861e-01, 6.600000409781608e-01, 7.699999776482593e-01, 8.800000149011346e-01, 9.899999701977309e-01, 1.100000007450558e+00, 1.210000044703457e+00, 1.320000081956267e+00, 1.430000000000071e+00, 1.539999955296543e+00, 1.649999910593299e+00, 1.760000029802163e+00, 1.869999985098919e+00, 1.979999940395249e+00, 2.089999940395391e+00, 2.200000014901117e+00, 2.310000014901259e+00, 2.420000089406843e+00, 2.529999925494132e+00, 2.640000163912214e+00, 2.75e+00, 2.860000000000142e+00, 2.969999910592873e+00, 3.079999910593157e+00, 3.190000149010741e+00, 3.299999821187309e+00, 3.410000059604609e+00, 3.520000059604751e+00, 3.629999970197483e+00, 3.739999970197625e+00, 3.849999970197766e+00, 3.959999880790497e+00, 4.07000011920865e+00, 4.17999988079135e+00, 4.290000119207797e+00, 4.400000029801523e+00, 4.510000268220528e+00, 4.620000029804081e+00, 4.729999940396101e+00, 4.840000178813685e+00, 4.949999940396954e+00, 5.059999850989259e+00, 5.170000089406843e+00, 5.280000327824427e+00, 5.389999761582415e+00, 5.5e+00, 5.610000238416021e+00, 5.719999999999432e+00, 5.830000238417727e+00, 5.939999821191821e+00, 6.050000059605001e+00, 6.159999821185924e+00, 6.270000059602726e+00, 6.380000298018747e+00, 6.490000059603863e+00, 6.599999642378526e+00, 6.709999880794547e+00, 6.820000119209432e+00, 6.929999880790568e+00, 7.040000119205453e+00, 7.150000357621474e+00, 7.259999940396137e+00, 7.369999701981253e+00, 7.479999940397274e+00, 7.590000178814076e+00, 7.699999940394999e+00, 7.810000178808179e+00, 7.919999761582273e+00, 8.029999523172505e+00, 8.140000238418864e+00, 8.25e+00, 8.359999761581136e+00, 8.470000476827495e+00, 8.580000238417727e+00, 8.689999344359778e+00, 8.800000059605001e+00, 8.909999821185355e+00, 9.020000536438179e+00, 9.130000298022726e+00, 9.240000059603863e+00, 9.35000011921e+00, 9.459999880791136e+00, 9.569999642374547e+00, 9.680000357625453e+00, 9.790000119208864e+00, 9.89999988079e+00, 1.000999994039614e+01, 1.011999970197727e+01, 1.022999946356182e+01, 1.034000017881464e+01, 1.0449999940395e+01, 1.056000065564022e+01, 1.066999976158227e+01, 1.07799995231725e+01, 1.089000023841886e+01, 1.1e+01] +matGai1.u[1]=[0e+00, 1e-02, 2e-02, 3e-02, 4e-02, 5e-02, 6e-02, 7.000000000000001e-02, 8e-02, 9e-02, 1e-01, 1.1e-01, 1.2e-01, 1.3e-01, 1.4e-01, 1.5e-01, 1.6e-01, 1.7e-01, 1.8e-01, 1.9e-01, 2e-01, 2.1e-01, 2.2e-01, 2.3e-01, 2.4e-01, 2.5e-01, 2.6e-01, 2.7e-01, 2.8e-01, 2.9e-01, 3e-01, 3.1e-01, 3.2e-01, 3.3e-01, 3.4e-01, 3.5e-01, 3.6e-01, 3.7e-01, 3.8e-01, 3.9e-01, 4e-01, 4.1e-01, 4.2e-01, 4.3e-01, 4.4e-01, 4.5e-01, 4.6e-01, 4.7e-01, 4.8e-01, 4.9e-01, 5e-01, 5.1e-01, 5.2e-01, 5.3e-01, 5.4e-01, 5.5e-01, 5.600000000000001e-01, 5.7e-01, 5.8e-01, 5.9e-01, 6e-01, 6.1e-01, 6.2e-01, 6.3e-01, 6.4e-01, 6.5e-01, 6.6e-01, 6.7e-01, 6.8e-01, 6.899999999999999e-01, 7e-01, 7.1e-01, 7.2e-01, 7.3e-01, 7.4e-01, 7.5e-01, 7.6e-01, 7.7e-01, 7.8e-01, 7.9e-01, 8e-01, 8.100000000000001e-01, 8.2e-01, 8.3e-01, 8.4e-01, 8.5e-01, 8.6e-01, 8.7e-01, 8.8e-01, 8.9e-01, 9e-01, 9.1e-01, 9.2e-01, 9.3e-01, 9.399999999999999e-01, 9.5e-01, 9.6e-01, 9.7e-01, 9.8e-01, 9.9e-01, 1e+00] +matGai1.u[2]=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt new file mode 100644 index 0000000000..beac4d5f52 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMax.txt @@ -0,0 +1,15 @@ +last-generated=2019-05-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +matMax.y[1]=[6e+00, 6e+00] +matMax.y[3]=[6e+00, 6e+00] +matMax.y[2]=[9e+00, 9e+00] +time=[0e+00, 1e+00] +matMax1.y[1]=[4e+00, 4e+00] +matMax1.y[2]=[6e+00, 6e+00] +matMax2.y[2]=[6e+00, 6e+00] +matMax2.y[1]=[3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt new file mode 100644 index 0000000000..beba9ec7f0 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MatrixMin.txt @@ -0,0 +1,16 @@ +last-generated=2019-05-24 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +matMin.y[2]=[-9e+00, -9e+00] +matMin.y[3]=[-6e+00, -6e+00] +matMin.y[1]=[-6e+00, -6e+00] +time=[0e+00, 1e+00] +matMin1.y[2]=[-4e+00, -4e+00] +matMin1.y[1]=[-2e+00, -2e+00] +matMin1.y[3]=[-6e+00, -6e+00] +matMin2.y[1]=[-3e+00, -3e+00] +matMin2.y[2]=[-6e+00, -6e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Max.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Max.txt new file mode 100644 index 0000000000..d98f8b0265 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Max.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +max1.u2=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +max1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +max1.y=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Min.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Min.txt new file mode 100644 index 0000000000..415d8c6e85 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Min.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +min1.y=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +min1.u2=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +min1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Modulo.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Modulo.txt new file mode 100644 index 0000000000..a9faa35745 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Modulo.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +mod1.y=[1e+00, 1.120000007450586e+00, 1.240000014901171e+00, 1.360000022351709e+00, 1.480000029802289e+00, 1.600000014901145e+00, 4.000001117586838e-02, 1.299999925494161e-01, 2.200000149011346e-01, 3.099999701977308e-01, 3.999999925494416e-01, 4.900000149011523e-01, 5.800000074505406e-01, 6.700000596045738e-01, 7.599999850988478e-01, 8.499999701977664e-01, 9.400000298022692e-01, 1.029999955296543e+00, 1.119999940395462e+00, 1.210000059604609e+00, 1.299999925494238e+00, 1.390000044703386e+00, 1.480000029802305e+00, 1.570000014901223e+00, 1.660000014901081e+00, 1.75e+00, 1.840000119209148e+00, 1.929999850988548e+00, 2.019999970197767e+00, 2.109999970198051e+00, 2.199999940394822e+00, 2.289999940395533e+00, 2.380000178813401e+00, 2.469999910592447e+00, 3.999997764830499e-02, 1.000000372528362e-01, 1.599999105932459e-01, 2.199999701977486e-01, 2.800000298022514e-01, 3.400000894067541e-01, 3.999999701977666e-01, 4.60000029802269e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.540000119207726e+00, 1.599999880793552e+00, 1.659999880792416e+00, 1.720000000000284e+00, 1.779999999999716e+00, 1.840000119207584e+00, 1.900000119206448e+00, 1.959999880792274e+00, 2.019999880791705e+00, 2.079999880791989e+00, 2.140000119209289e+00, 2.200000119207158e+00, 2.26000011920801e+00, 2.319999761586537e+00, 2.380000000001137e+00, 2.440000000000568e+00, 2.5e+00, 2.559999999999432e+00, 2.619999999998863e+00, 2.680000238413463e+00, 2.73999988079199e+00, 2.799999880792842e+00, 2.859999880790711e+00, 2.920000119208011e+00, 2.980000119208295e+00, 3.040000119207726e+00, 3.099999761585684e+00, 3.160000000000852e+00, 3.220000000000284e+00, 3.279999999999716e+00, 3.339999999999148e+00, 3.400000238414316e+00, 3.459999880792274e+00, 3.519999880791705e+00, 3.579999880791989e+00, 3.640000119209289e+00, 3.700000119207158e+00, 3.76000011920801e+00, 3.819999761586537e+00, 3.880000000001137e+00, 3.940000000000568e+00, 4e+00] +mod1.u2=[1.5e+00, 1.529999972060327e+00, 1.559999944120655e+00, 1.59000003539023e+00, 1.620000007450599e+00, 1.649999973922997e+00, 1.679999951571254e+00, 1.710000037252895e+00, 1.740000014901188e+00, 1.769999970197838e+00, 1.799999947846002e+00, 1.830000044703457e+00, 1.860000022351782e+00, 1.890000000000071e+00, 1.919999955296543e+00, 1.950000029802234e+00, 1.980000029802162e+00, 2.009999985098812e+00, 2.039999940395249e+00, 2.069999940395391e+00, 2.099999895692183e+00, 2.130000134109767e+00, 2.160000089406843e+00, 2.190000044703421e+00, 2.220000044703563e+00, 2.25e+00, 2.280000000000142e+00, 2.309999910592873e+00, 2.339999910593157e+00, 2.369999910593157e+00, 2.400000059604467e+00, 2.430000059604609e+00, 2.460000059604751e+00, 2.489999970197482e+00, 2.519999970197624e+00, 2.549999970197766e+00, 2.579999880790497e+00, 2.609999880791208e+00, 2.640000119208792e+00, 2.670000119209503e+00, 2.700000029802234e+00, 2.730000029802376e+00, 2.760000029802518e+00, 2.789999940395249e+00, 2.819999940395391e+00, 2.849999940395533e+00, 2.880000089406843e+00, 2.910000089406843e+00, 2.940000089407127e+00, 2.969999999999858e+00, 3e+00, 3.029999999999716e+00, 3.059999999999432e+00, 3.089999999999148e+00, 3.119999821189263e+00, 3.150000059605e+00, 3.180000059604503e+00, 3.210000059604432e+00, 3.240000059604147e+00, 3.270000059603863e+00, 3.299999880791421e+00, 3.329999880791137e+00, 3.359999880791421e+00, 3.390000119208579e+00, 3.420000119208863e+00, 3.450000119208579e+00, 3.479999940396137e+00, 3.509999940395853e+00, 3.539999940395568e+00, 3.569999940395497e+00, 3.599999940395e+00, 3.630000178810737e+00, 3.660000000000852e+00, 3.690000000000568e+00, 3.720000000000284e+00, 3.75e+00, 3.779999999999716e+00, 3.809999999999432e+00, 3.839999999999148e+00, 3.869999821189263e+00, 3.900000059605e+00, 3.930000059604503e+00, 3.960000059604432e+00, 3.990000059604147e+00, 4.020000059603863e+00, 4.05000011921e+00, 4.079999880791137e+00, 4.110000119209432e+00, 4.139999880790568e+00, 4.170000119208863e+00, 4.19999988079e+00, 4.229999940396137e+00, 4.260000178814431e+00, 4.289999940395568e+00, 4.320000178814077e+00, 4.349999940395e+00, 4.380000178813295e+00, 4.409999761582274e+00, 4.440000000000568e+00, 4.469999761583979e+00, 4.5e+00] +mod1.u1=[-2e+00, -1.940000055879345e+00, -1.879999992549428e+00, -1.82000004842875e+00, -1.759999985098855e+00, -1.70000005215405e+00, -1.639999977648283e+00, -1.580000044703481e+00, -1.519999970197731e+00, -1.460000059604538e+00, -1.399999985098794e+00, -1.340000029802305e+00, -1.279999955296596e+00, -1.219999999999858e+00, -1.159999970197695e+00, -1.100000059604467e+00, -1.039999940395462e+00, -9.800000298022691e-01, -9.200000596044317e-01, -8.6e-01, -8.000000298022335e-01, -7.399999701976776e-01, -6.799999999999999e-01, -6.200000298023223e-01, -5.599999701976777e-01, -5e-01, -4.399999403954973e-01, -3.800000596044848e-01, -3.199999999999821e-01, -2.599999403954797e-01, -2.000000745056284e-01, -1.400000149011257e-01, -7.999995529662296e-02, -2.000007823094963e-02, 3.999997764830499e-02, 1.000000372528362e-01, 1.599999105932459e-01, 2.199999701977486e-01, 2.800000298022514e-01, 3.400000894067541e-01, 3.999999701977666e-01, 4.60000029802269e-01, 5.200000596046447e-01, 5.799999403955683e-01, 6.4e-01, 7.000000596046448e-01, 7.59999940395604e-01, 8.199999999999998e-01, 8.800000596046447e-01, 9.399999403953552e-01, 1e+00, 1.059999999999432e+00, 1.120000119207016e+00, 1.180000119207584e+00, 1.239999880793269e+00, 1.299999880792132e+00, 1.359999999999858e+00, 1.419999999999573e+00, 1.4800001192073e+00, 1.540000119207726e+00, 1.599999880793552e+00, 1.659999880792416e+00, 1.720000000000284e+00, 1.779999999999716e+00, 1.840000119207584e+00, 1.900000119206448e+00, 1.959999880792274e+00, 2.019999880791705e+00, 2.079999880791989e+00, 2.140000119209289e+00, 2.200000119207158e+00, 2.26000011920801e+00, 2.319999761586537e+00, 2.380000000001137e+00, 2.440000000000568e+00, 2.5e+00, 2.559999999999432e+00, 2.619999999998863e+00, 2.680000238413463e+00, 2.73999988079199e+00, 2.799999880792842e+00, 2.859999880790711e+00, 2.920000119208011e+00, 2.980000119208295e+00, 3.040000119207726e+00, 3.099999761585684e+00, 3.160000000000852e+00, 3.220000000000284e+00, 3.279999999999716e+00, 3.339999999999148e+00, 3.400000238414316e+00, 3.459999880792274e+00, 3.519999880791705e+00, 3.579999880791989e+00, 3.640000119209289e+00, 3.700000119207158e+00, 3.76000011920801e+00, 3.819999761586537e+00, 3.880000000001137e+00, 3.940000000000568e+00, 4e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt new file mode 100644 index 0000000000..42b814e474 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage.txt @@ -0,0 +1,20 @@ +last-generated=2017-09-15 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "number of continuous time states": "9", + "linear": " " +} +movAve1.y=[0e+00, 3.389549851417542e-01, 5.967000126838684e-01, 7.179645895957947e-01, 6.900429725646973e-01, 5.443436503410339e-01, 3.428270518779755e-01, 1.549198031425475e-01, 3.377144038677216e-02, 4.830255929846317e-04, 4.143456369638443e-02, 1.185182109475136e-01, 1.775919497013092e-01, 1.534560471773148e-01, 5.578513815999012e-02, -6.861740350723267e-02, -1.601397693157196e-01, -1.749258190393448e-01, -1.058895289897919e-01, 1.388753578066826e-02, 1.270097196102142e-01, 1.792702227830887e-01, 1.45626425743103e-01, 4.220050200819969e-02, -8.144774287939072e-02, -1.660671085119247e-01, -1.711090207099915e-01, -9.415744990110361e-02, 2.791333012282888e-02, 1.366084516048431e-01, 1.798425167798996e-01, 1.368982791900635e-01, 2.83540915697813e-02, -9.377695620059967e-02, -1.709713339805603e-01, -1.662381142377853e-01, -8.184557408094406e-02, 4.176636412739754e-02, 1.453643590211868e-01, 1.793054938316345e-01, 1.273255795240402e-01, 1.433276198804379e-02, -1.055281385779381e-01, -1.74821212887764e-01, -1.603420525789261e-01, -6.902889907360077e-02, 5.536215379834175e-02, 1.532242596149445e-01, 1.776631772518158e-01, 1.169678941369057e-01, 2.230705140391365e-04, -1.166287064552307e-01, -1.775934398174286e-01, -1.534575521945953e-01, -5.57866729795925e-02, 6.861647218465877e-02, 1.601391136646274e-01, 1.749250739812851e-01, 1.058888733386993e-01, -1.388819981366396e-02, -1.270102709531784e-01, -1.792707592248917e-01, -1.45626962184906e-01, -4.220058396458626e-02, 8.144768327474594e-02, 1.660670638084412e-01, 1.711089611053467e-01, 9.415764361619949e-02, -2.791319787502289e-02, -1.366083472967148e-01, -1.7984239757061e-01, -1.368981301784515e-01, -2.835390157997608e-02, 9.377717226743698e-02, 1.709713488817215e-01, 1.66238084435463e-01, 8.184552192687988e-02, -4.176643863320351e-02, -1.453644186258316e-01, -1.793055087327957e-01, -1.273255348205566e-01, -1.433268282562494e-02, 1.055282205343246e-01, 1.748212575912476e-01, 1.603420376777649e-01, 6.90288245677948e-02, -5.536217615008354e-02, -1.532242894172668e-01, -1.776631325483322e-01, -1.169679388403893e-01, -2.230993122793734e-04, 1.166286468505859e-01, 1.775933355093002e-01, 1.534574180841446e-01, 5.578653514385223e-02, -6.86165913939476e-02, -1.601394712924957e-01, -1.749254167079926e-01, -1.058892011642456e-01, 1.38878608122468e-02, 1.270100176334381e-01] +sinInpNoDel.y=[0e+00, 6.49448037147522e-01, 9.876883625984192e-01, 8.526401519775391e-01, 3.0901700258255e-01, -3.826834261417389e-01, -8.910065293312073e-01, -9.723699092864988e-01, -5.877852439880371e-01, 7.845909893512726e-02, 7.071067690849304e-01, 9.969173073768616e-01, 8.0901700258255e-01, 2.334453612565994e-01, -4.53990489244462e-01, -9.238795042037964e-01, -9.510565400123596e-01, -5.224985480308533e-01, 1.564344614744186e-01, 7.60405957698822e-01, 1e+00, 7.60405957698822e-01, 1.564344614744186e-01, -5.224985480308533e-01, -9.510565400123596e-01, -9.238795042037964e-01, -4.539904892444611e-01, 2.334453612566016e-01, 8.090170025825513e-01, 9.969173073768616e-01, 7.071067690849304e-01, 7.845909893512726e-02, -5.877852439880371e-01, -9.72369909286499e-01, -8.910065293312073e-01, -3.826834261417389e-01, 3.0901700258255e-01, 8.526401519775391e-01, 9.876883625984192e-01, 6.49448037147522e-01, 1.102182140856871e-15, -6.49448037147522e-01, -9.876883625984192e-01, -8.526401519775391e-01, -3.0901700258255e-01, 3.826834261417389e-01, 8.910065293312073e-01, 9.72369909286499e-01, 5.877852439880371e-01, -7.845909893512726e-02, -7.071067690849304e-01, -9.969173073768616e-01, -8.0901700258255e-01, -2.334453612565994e-01, 4.539904892444649e-01, 9.238795042037978e-01, 9.51056540012358e-01, 5.224985480308533e-01, -1.564344614744186e-01, -7.60405957698822e-01, -1e+00, -7.60405957698822e-01, -1.564344614744186e-01, 5.224985480308533e-01, 9.510565400123596e-01, 9.238795042037964e-01, 4.539904892444611e-01, -2.334453612565994e-01, -8.0901700258255e-01, -9.969173073768616e-01, -7.071067690849304e-01, -7.845909893512726e-02, 5.877852439880371e-01, 9.72369909286499e-01, 8.910065293312073e-01, 3.826834261417389e-01, -3.0901700258255e-01, -8.526401519775391e-01, -9.876883625984192e-01, -6.49448037147522e-01, -2.204364281713743e-15, 6.49448037147522e-01, 9.876883625984192e-01, 8.526401519775391e-01, 3.0901700258255e-01, -3.826834261417389e-01, -8.910065293312073e-01, -9.72369909286499e-01, -5.877852439880371e-01, 7.845909893512726e-02, 7.071067690849304e-01, 9.969173073768616e-01, 8.0901700258255e-01, 2.334453612565994e-01, -4.539904892444611e-01, -9.238795042037964e-01, -9.510565400123596e-01, -5.224985480308533e-01, 1.564344614744186e-01, 7.60405957698822e-01, 1e+00] +movAve4.y=[0e+00, 3.389549851417542e-01, 5.967000126838684e-01, 7.179645895957947e-01, 6.900429725646973e-01, 5.443436503410339e-01, 3.428270518779755e-01, 1.549198031425475e-01, 3.377144038677216e-02, 4.830255929846317e-04, 4.143456369638443e-02, 1.185182109475136e-01, 1.871866881847382e-01, 2.146396785974503e-01, 1.91086396574974e-01, 1.304052621126175e-01, 6.109518557786942e-02, 1.226198859512806e-02, 9.666834957897663e-04, 2.610068395733833e-02, 7.073471695184708e-02, 1.111178696155548e-01, 1.278175860643387e-01, 1.139536648988724e-01, 7.71610289812088e-02, 3.493234887719154e-02, 5.929954349994659e-03, 1.447161193937098e-03, 2.082676999270925e-02, 5.261008813977242e-02, 8.050157129764557e-02, 9.113048017024994e-02, 7.997562736272812e-02, 5.287735536694527e-02, 2.271851897239685e-02, 3.076368942856789e-03, 1.922936644405127e-03, 1.825706288218498e-02, 4.305276647210121e-02, 6.385768949985504e-02, 7.07351490855217e-02, 6.074267253279686e-02, 3.895249217748642e-02, 1.570955663919449e-02, 1.573308371007442e-03, -5.161688386579044e-05, -2.652381408552174e-05, 1.11070066850516e-05, 4.338383587310091e-05, 5.479332685354166e-05, 1.508346159084795e-08, 5.686097665602574e-06, -3.118301174254157e-05, -5.31343393959105e-05, -4.964845356880675e-05, -2.239601417386416e-05, 1.556374263600469e-05, 4.604352216119878e-05, 5.443870759336278e-05, 3.672677848953754e-05, 1.394584046465752e-06, -3.46267297572922e-05, -5.407609569374472e-05, -4.763405377161689e-05, -1.838718708313536e-05, 1.964964758371934e-05, 4.824979259865358e-05, 5.367425183067098e-05, 3.335780638735741e-05, -2.975371899083257e-06, -3.792411007452756e-05, -5.474135105032474e-05, -4.536812411970459e-05, -1.429644180461764e-05, 2.358484380238224e-05, 5.012346446164884e-05, 5.260223406367004e-05, 2.983349259011447e-05, -7.28563964003115e-06, -4.092561357538216e-05, -5.502470230567269e-05, -4.278573032934219e-05, -1.008700746751856e-05, 2.74038320640102e-05, 5.172134478925727e-05, 5.121333742863499e-05, 2.612258322187699e-05, -1.152718778030248e-05, -4.369488669908606e-05, -3.926824138034135e-05, -3.994911457994021e-05, -5.825782409374369e-06, 3.104283314314671e-05, 5.300846169120632e-05, 4.953418465447612e-05, 2.228274570370559e-05, -1.567616345710121e-05, -4.61555719084572e-05, -5.454964411910623e-05, -3.683657268993556e-05, -6.57378507185058e-08] +time=[0e+00, 9e+02] +movAve2.y=[0e+00, 3.389549851417542e-01, 5.967000126838684e-01, 7.179645895957947e-01, 6.900429725646973e-01, 5.443436503410339e-01, 3.428270518779755e-01, 1.549198031425475e-01, 3.377144038677216e-02, 4.830255929846317e-04, 4.143456369638443e-02, 1.185182109475136e-01, 1.871866881847382e-01, 2.146396785974503e-01, 1.91086396574974e-01, 1.304052621126175e-01, 6.109518557786942e-02, 1.226198859512806e-02, 9.666834957897663e-04, 2.610068395733833e-02, 7.073471695184708e-02, 1.111178696155548e-01, 1.278175860643387e-01, 1.085061728954315e-01, 3.932303562760353e-02, -4.870355501770973e-02, -1.133919879794121e-01, -1.237445101141929e-01, -7.480045408010459e-02, 9.987063705921173e-03, 8.998884260654449e-02, 1.268690228462219e-01, 1.029550358653069e-01, 2.970620058476925e-02, -5.777739733457565e-02, -1.175748407840729e-01, -1.210317835211754e-01, -6.649170815944672e-02, 1.991044729948044e-02, 9.677179157733917e-02, 1.2726129591465e-01, 9.676873683929443e-02, 1.990580186247826e-02, -6.649571657180786e-02, -1.210332363843918e-01, -1.175731346011162e-01, -5.777328088879585e-02, 2.971081808209419e-02, 1.029578596353531e-01, 1.268686652183533e-01, 8.998555690050125e-02, 9.982417337596416e-03, -7.480420172214508e-02, -1.237455531954765e-01, -1.133895292878148e-01, -4.869861900806373e-02, 3.932791948318534e-02, 1.085090786218643e-01, 1.256938576698303e-01, 8.264757692813873e-02, -2.524623596400488e-06, -8.265150338411331e-02, -1.256949454545975e-01, -1.085069552063942e-01, -3.932381048798561e-02, 4.870275408029556e-02, 1.133914589881897e-01, 1.237442493438721e-01, 7.480016350746155e-02, -9.987335652112961e-03, -8.998911827802658e-02, -1.268692165613174e-01, -1.029552146792412e-01, -2.970636263489723e-02, 5.777736380696297e-02, 1.175748035311699e-01, 1.210317313671112e-01, 6.649164110422134e-02, -1.991038583219051e-02, -9.67717319726944e-02, -1.272612065076828e-01, -9.676863998174667e-02, -1.990568824112415e-02, 6.649582833051682e-02, 1.210333406925201e-01, 1.17573119699955e-01, 5.777325853705406e-02, -2.971085347235203e-02, -1.029578819870949e-01, -1.26868724822998e-01, -8.998557925224304e-02, -9.982426650822163e-03, 7.480418682098389e-02, 1.237455308437347e-01, 1.133894845843315e-01, 4.86985556781292e-02, -3.932813927531242e-02, -1.085092648863792e-01, -1.256940364837646e-01, -8.264773339033127e-02, 2.379947545705363e-06] +movAve3.y=[0e+00, 3.389549851417542e-01, 5.967000126838684e-01, 7.179645895957947e-01, 6.900429725646973e-01, 5.443436503410339e-01, 3.428270518779755e-01, 1.549198031425475e-01, 3.377144038677216e-02, 4.830255929846317e-04, 4.143456369638443e-02, 1.185182109475136e-01, 1.871866881847382e-01, 2.146396785974503e-01, 1.91086396574974e-01, 1.304052621126175e-01, 6.109518557786942e-02, 1.226198859512806e-02, 9.666834957897663e-04, 2.610068395733833e-02, 7.073471695184708e-02, 1.111178696155548e-01, 1.278175860643387e-01, 1.139536648988724e-01, 7.71610289812088e-02, 3.493234887719154e-02, 5.929954349994659e-03, 1.447161193937098e-03, 2.082676999270925e-02, 5.261008813977242e-02, 8.050157129764557e-02, 9.113048017024994e-02, 7.997562736272812e-02, 5.287735536694527e-02, 1.846384629607201e-02, -2.300418727099895e-02, -5.34491091966629e-02, -5.828188359737396e-02, -3.5186767578125e-02, 4.769257269799709e-03, 4.243981093168259e-02, 5.977372825145721e-02, 4.846476763486862e-02, 1.393204927444458e-02, -2.727676182985306e-02, -5.541480705142021e-02, -5.699878558516502e-02, -3.126960620284081e-02, 9.443630464375019e-03, 4.563158005475998e-02, 5.9953473508358e-02, 4.554638639092445e-02, 9.314027614891529e-03, -3.138148784637451e-02, -5.703935027122504e-02, -5.536462366580951e-02, -2.715996652841543e-02, 1.405951008200645e-02, 4.854177683591843e-02, 5.97633495926857e-02, 4.234698414802551e-02, 4.638391546905041e-03, -3.529291599988937e-02, -5.831233412027359e-02, -5.338923260569572e-02, -2.288270182907581e-02, 1.858889125287533e-02, 5.115284025669098e-02, 5.920493602752686e-02, 3.888664767146111e-02, -6.570218101842329e-05, -3.898662328720093e-02, -5.922567471861839e-02, -5.108454450964928e-02, -1.846436597406864e-02, 2.300366014242172e-02, 5.344855412840843e-02, 5.828148126602173e-02, 3.518656641244888e-02, -4.769404418766499e-03, -4.243997856974602e-02, -5.977388471364975e-02, -4.846488684415817e-02, -1.393215637654066e-02, 2.72766500711441e-02, 5.541476979851723e-02, 5.699874833226204e-02, 3.126956522464752e-02, -9.443662129342556e-03, -4.563158750534058e-02, -5.995343998074532e-02, -4.554635286331177e-02, -9.313995018601418e-03, 3.13815176486969e-02, 5.703938379883766e-02, 5.536465346813202e-02, 2.715984545648098e-02, -1.405963767319918e-02, -4.854191094636917e-02, -5.976347997784615e-02, -4.234709963202477e-02] +sinInp50sDel.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3.0901700258255e-01, 8.526401519775393e-01, 9.876883625984192e-01, 6.49448037147522e-01, 1.224646852585168e-16, -6.49448037147522e-01, -9.876883625984192e-01, -8.526401519775391e-01, -3.09017002582549e-01, 3.826834261417389e-01, 8.910065293312073e-01, 9.72369909286499e-01, 5.877852439880371e-01, -7.845909893512726e-02, -7.071067690849304e-01, -9.969173073768616e-01, -8.0901700258255e-01, -2.334453612565994e-01, 4.539904892444611e-01, 9.238795042037964e-01, 9.510565400123596e-01, 5.224985480308513e-01, -1.564344614744208e-01, -7.60405957698822e-01, -1e+00, -7.60405957698822e-01, -1.564344614744186e-01, 5.224985480308533e-01, 9.510565400123596e-01, 9.238795042037964e-01, 4.539904892444611e-01, -2.334453612565994e-01, -8.0901700258255e-01, -9.969173073768616e-01, -7.071067690849304e-01, -7.845909893512726e-02, 5.877852439880371e-01, 9.72369909286499e-01, 8.910065293312073e-01, 3.826834261417389e-01, -3.0901700258255e-01, -8.526401519775391e-01, -9.876883625984192e-01, -6.49448037147522e-01, -1.224646799645609e-15, 6.49448037147522e-01, 9.876883625984192e-01, 8.526401519775391e-01, 3.090170025825457e-01, -3.826834261417429e-01, -8.910065293312091e-01, -9.72369909286499e-01, -5.877852439880371e-01, 7.845909893512726e-02, 7.071067690849304e-01, 9.969173073768616e-01, 8.0901700258255e-01, 2.334453612565994e-01, -4.539904892444611e-01, -9.238795042037964e-01, -9.510565400123596e-01, -5.224985480308533e-01, 1.564344614744186e-01, 7.60405957698822e-01, 1e+00, 7.60405957698822e-01, 1.564344614744186e-01, -5.224985480308533e-01, -9.510565400123596e-01, -9.238795042037964e-01, -4.539904892444611e-01, 2.334453612565994e-01, 8.0901700258255e-01, 9.969173073768616e-01, 7.071067690849304e-01, 7.845909893512726e-02, -5.877852439880371e-01, -9.72369909286499e-01, -8.910065293312073e-01, -3.826834261417389e-01, 3.0901700258255e-01, 8.526401519775391e-01, 9.876883625984192e-01, 6.49448037147522e-01, 5.879542407544744e-15, -6.49448037147522e-01, -9.876883625984192e-01, -8.526401519775391e-01, -3.0901700258255e-01, 3.826834261417389e-01, 8.910065293312073e-01, 9.72369909286499e-01, 5.877852439880371e-01, -7.845909893512726e-02, -7.071067690849304e-01] +movAve7.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.154010277241468e-02, 9.650379419326791e-02, 2.045025527477264e-01, 2.767183482646942e-01, 2.829421162605286e-01, 2.264058738946915e-01, 1.36335164308548e-01, 5.196370929479599e-02, 4.945940803736421e-03, 7.179423701018095e-03, 4.827805608510971e-02, 1.026454046368599e-01, 1.42179936170578e-01, 1.486875265836716e-01, 1.20753213763237e-01, 7.265282422304153e-02, 2.650756761431694e-02, 1.759030041284859e-03, 6.938789505511522e-03, 3.929964825510979e-02, 8.333466947078705e-02, 1.17942787706852e-01, 1.256940960884094e-01, 8.264781534671783e-02, -2.284115907968953e-06, -8.265126496553421e-02, -1.256947219371796e-01, -1.085067391395569e-01, -3.932375088334084e-02, 4.870285093784332e-02, 1.133915483951569e-01, 1.237443387508392e-01, 7.48002752661705e-02, -9.987222030758858e-03, -8.998899906873703e-02, -1.268691569566727e-01, -1.029551699757576e-01, -2.97063309699297e-02, 5.777739360928535e-02, 1.175748705863953e-01, 1.210318729281425e-01, 6.649181246757507e-02, -1.991033367812634e-02, -9.677165746688843e-02, -1.272611618041992e-01, -9.676861017942429e-02, -1.990567333996296e-02, 6.649584323167801e-02, 1.210333704948427e-01, 1.175731644034383e-01, 5.777350440621324e-02, -2.971065975725651e-02, -1.029576882719994e-01, -1.268685460090637e-01, -8.99854302406311e-02, -9.98228695243597e-03, 7.480432838201523e-02, 1.237456798553467e-01, 1.133896633982658e-01, 4.869874939322472e-02, -3.932794183492661e-02, -1.085090339183807e-01, -1.256938725709915e-01, -8.264758437871933e-02, 2.518237351978314e-06, 8.265148103237152e-02, 1.256949007511139e-01, 1.0850690305233e-01, 3.932373970746994e-02, -4.870282858610153e-02, -1.133915260434151e-01, -1.237442940473557e-01, -7.480032742023468e-02, 9.987172670662403e-03, 8.998894691467285e-02, 1.268690973520279e-01, 1.029550805687904e-01, 2.970622479915619e-02, -5.777750164270401e-02, -1.175749376416206e-01, -1.21031865477562e-01, -6.649176776409149e-02, 1.991038955748081e-02, 9.67717319726944e-02, 1.272612065076828e-01, 9.676863998174667e-02, 1.990568824112415e-02, -6.649582833051682e-02, -1.210333406925201e-01, -1.17573119699955e-01, -5.777325853705406e-02, 2.971085347235203e-02, 1.029578819870949e-01, 1.26868724822998e-01, 8.998557925224304e-02] +movAve6.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.154010277241468e-02, 9.650379419326791e-02, 2.045025527477264e-01, 2.767183482646942e-01, 2.829421162605286e-01, 2.264058738946915e-01, 1.472419798374176e-01, 6.079754233360291e-02, 6.231885403394665e-03, 9.692221879959106e-03, 6.952039897441864e-02, 1.532245576381683e-01, 1.776634305715561e-01, 1.169682368636131e-01, 2.233896520920098e-04, -1.166283786296844e-01, -1.775930970907211e-01, -1.534575521945953e-01, -5.578670650720596e-02, 6.861639022827148e-02, 1.60139262676239e-01, 1.749252229928969e-01, 1.058890447020527e-01, -1.388798281550407e-02, -1.270101219415665e-01, -1.792706102132797e-01, -1.456268280744553e-01, -4.22004833817482e-02, 8.144780248403549e-02, 1.660672873258591e-01, 1.711092293262482e-01, 9.415767341852188e-02, -2.791311964392662e-02, -1.366082727909088e-01, -1.798423826694489e-01, -1.368981599807739e-01, -2.835397608578205e-02, 9.377709031105042e-02, 1.709712892770767e-01, 1.662381291389465e-01, 8.184558153152466e-02, -4.176635295152664e-02, -1.453643590211868e-01, -1.793054342269897e-01, -1.273254901170731e-01, -1.433264836668968e-02, 1.055282801389694e-01, 1.748213618993759e-01, 1.603421717882152e-01, 6.902897357940598e-02, -5.536172911524847e-02, -1.532239466905594e-01, -1.776628494262695e-01, -1.169676631689072e-01, -2.228574303444475e-04, 1.16628885269165e-01, 1.775935888290405e-01, 1.534576714038849e-01, 5.578678846359253e-02, -6.861633807420731e-02, -1.601392179727554e-01, -1.749254167079926e-01, -1.058892011642456e-01, 1.38878608122468e-02, 1.270100176334381e-01, 1.792705059051514e-01, 1.456266939640045e-01, 4.220030829310417e-02, -8.144795894622803e-02, -1.660673320293427e-01, -1.711092293262482e-01, -9.415761381387711e-02, 2.791319601237774e-02, 1.366083472967148e-01, 1.7984239757061e-01, 1.368981152772903e-01, 2.835390157997608e-02, -9.377717226743698e-02, -1.709713488817215e-01, -1.66238084435463e-01, -8.184552192687988e-02, 4.176643863320351e-02, 1.453644186258316e-01, 1.793055087327957e-01, 1.273255348205566e-01, 1.433268282562494e-02, -1.055282205343246e-01, -1.748212575912476e-01, -1.603420376777649e-01, -6.90288245677948e-02, 5.536217615008354e-02, 1.532242894172668e-01, 1.776631325483322e-01, 1.169679388403893e-01, 2.231020189356059e-04] +sinInp100sDel.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.877852439880371e-01, 9.72369909286499e-01, 8.910065293312067e-01, 3.826834261417389e-01, -3.0901700258255e-01, -8.526401519775391e-01, -9.876883625984192e-01, -6.49448037147522e-01, -2.449293705170336e-16, 6.49448037147522e-01, 9.876883625984192e-01, 8.526401519775391e-01, 3.0901700258255e-01, -3.826834261417389e-01, -8.910065293312073e-01, -9.723699092864984e-01, -5.877852439880352e-01, 7.845909893512726e-02, 7.071067690849304e-01, 9.969173073768616e-01, 8.0901700258255e-01, 2.334453612565994e-01, -4.539904892444611e-01, -9.238795042037964e-01, -9.510565400123596e-01, -5.224985480308533e-01, 1.564344614744186e-01, 7.60405957698822e-01, 1e+00, 7.60405957698822e-01, 1.564344614744186e-01, -5.224985480308533e-01, -9.510565400123596e-01, -9.238795042037964e-01, -4.539904892444611e-01, 2.334453612565994e-01, 8.0901700258255e-01, 9.969173073768616e-01, 7.071067690849304e-01, 7.845909893512726e-02, -5.877852439880371e-01, -9.72369909286499e-01, -8.910065293312049e-01, -3.826834261417347e-01, 3.090170025825542e-01, 8.526401519775391e-01, 9.876883625984192e-01, 6.49448037147522e-01, 4.899825137234847e-15, -6.49448037147522e-01, -9.876883625984192e-01, -8.526401519775391e-01, -3.0901700258255e-01, 3.826834261417389e-01, 8.910065293312073e-01, 9.72369909286499e-01, 5.877852439880371e-01, -7.845909893512726e-02, -7.071067690849304e-01, -9.969173073768616e-01, -8.0901700258255e-01, -2.334453612565994e-01, 4.539904892444611e-01, 9.238795042037964e-01, 9.510565400123596e-01, 5.224985480308533e-01, -1.564344614744186e-01, -7.60405957698822e-01, -1e+00, -7.60405957698822e-01, -1.564344614744186e-01, 5.224985480308533e-01, 9.510565400123596e-01, 9.238795042037964e-01, 4.539904892444611e-01, -2.334453612565994e-01, -8.0901700258255e-01, -9.969173073768616e-01, -7.071067690849304e-01, -7.845909893512726e-02, 5.877852439880371e-01, 9.72369909286499e-01, 8.910065293312073e-01, 3.826834261417389e-01, -3.0901700258255e-01, -8.526401519775391e-01, -9.876883625984192e-01, -6.49448037147522e-01, -2.449293599291217e-15] +movAve8.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.431668154895306e-02, 9.760077297687531e-02, 1.851278245449067e-01, 2.449559271335602e-01, 2.484161555767059e-01, 1.938504129648209e-01, 1.074059531092644e-01, 3.050593286752701e-02, -7.859007666866091e-08, 3.050603531301022e-02, 1.074061095714569e-01, 1.748212426900864e-01, 1.603420525789261e-01, 6.902888417243958e-02, -5.536208301782608e-02, -1.532241702079775e-01, -1.77663043141365e-01, -1.169678792357445e-01, -2.230770041933283e-04, 1.166286468505859e-01, 1.775933355093002e-01, 1.53457447886467e-01, 5.578674748539925e-02, -6.861650198698044e-02, -1.60139411687851e-01, -1.749254167079926e-01, -1.058892533183098e-01, 1.388778164982796e-02, 1.270099580287933e-01, 1.79270476102829e-01, 1.456267237663269e-01, 4.220037907361984e-02, -8.144787698984146e-02, -1.660673320293427e-01, -1.711092889308929e-01, -9.415771812200546e-02, 2.791306935250759e-02, 1.3660828769207e-01, 1.798423677682877e-01, 1.368981301784515e-01, 2.835391089320183e-02, -9.377718716859818e-02, -1.709713935852053e-01, -1.662381738424298e-01, -8.184581249952243e-02, 4.176630824804306e-02, 1.453643292188644e-01, 1.793054640293121e-01, 1.273254454135895e-01, 1.43326111137867e-02, -1.055282950401306e-01, -1.748213320970535e-01, -1.603421121835709e-01, -6.902890652418137e-02, 5.536209419369698e-02, 1.532242596149445e-01, 1.776631325483322e-01, 1.169679388403893e-01, 2.230985701316968e-04, -1.166286468505859e-01, -1.775933355093002e-01, -1.534574180841446e-01, -5.578653514385223e-02, 6.86165913939476e-02, 1.601394712924957e-01, 1.749254167079926e-01, 1.058892011642456e-01, -1.38878608122468e-02, -1.270100176334381e-01, -1.792704910039902e-01, -1.456266939640045e-01, -4.220030829310417e-02, 8.144795894622803e-02, 1.660673320293427e-01, 1.711092293262482e-01, 9.415761381387711e-02, -2.791319787502289e-02, -1.366083472967148e-01, -1.7984239757061e-01, -1.368981152772903e-01, -2.835390157997608e-02, 9.377717226743698e-02, 1.709713488817215e-01, 1.66238084435463e-01, 8.184552192687988e-02, -4.176643863320351e-02, -1.453644186258316e-01, -1.793055087327957e-01, -1.273255348205566e-01] +movAve9.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.251544594764709e-02, 8.341946452856064e-02, 1.469268500804902e-01, 1.81448832154274e-01, 1.725112199783325e-01, 1.266996115446091e-01, 6.629997491836548e-02, 1.783972606062889e-02, -4.366115291531969e-08, 1.614075899124146e-02, 5.424550920724869e-02, 9.692526608705521e-02, 1.24208115041256e-01, 1.224779635667801e-01, 9.256388992071152e-02, 4.880036413669572e-02, 1.215833984315388e-02, 1.96241308003664e-04, 1.864616200327873e-02, 5.866712331771851e-02, 1.010815501213074e-01, 1.255649626255035e-01, 1.133895814418793e-01, 4.869861528277397e-02, -3.932808339595795e-02, -1.085092127323151e-01, -1.256940066814423e-01, -8.264772593975067e-02, 2.376630618527997e-06, 8.265135437250137e-02, 1.256947964429855e-01, 1.085068136453629e-01, 3.932366520166397e-02, -4.870283976197243e-02, -1.133916303515434e-01, -1.23744435608387e-01, -7.480039447546005e-02, 9.987125173211098e-03, 8.998889476060867e-02, 1.268690526485443e-01, 1.029550731182098e-01, 2.970622852444649e-02, -5.77774979174142e-02, -1.175749450922014e-01, -1.210319921374319e-01, -6.649186462163925e-02, 1.991029642522335e-02, 9.677164256572723e-02, 1.272611320018768e-01, 9.67685878276825e-02, 1.990565285086632e-02, -6.64958655834198e-02, -1.210333853960037e-01, -1.175731867551804e-01, -5.777334794402122e-02, 2.971069142222404e-02, 1.029578149318695e-01, 1.268686652183533e-01, 8.998555690050125e-02, 9.982380084693432e-03, -7.480422407388687e-02, -1.237455680966377e-01, -1.133895292878151e-01, -4.869860038161278e-02, 3.932809829711914e-02, 1.085092201828957e-01, 1.256940215826035e-01, 8.264773339033127e-02, -2.380326577622327e-06, -8.265135437250137e-02, -1.256947815418243e-01, -1.085067763924599e-01, -3.932361304759979e-02, 4.870295524597168e-02, 1.133916452527046e-01, 1.237444132566452e-01, 7.480033487081528e-02, -9.987172670662403e-03, -8.998894691467285e-02, -1.268690973520279e-01, -1.029550805687904e-01, -2.970622479915619e-02, 5.777750164270401e-02, 1.175749376416206e-01, 1.21031865477562e-01, 6.649176776409149e-02, -1.991038955748081e-02, -9.67717319726944e-02, -1.272612065076828e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt new file mode 100644 index 0000000000..68dd68242d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MovingAverage_nonZeroStart.txt @@ -0,0 +1,20 @@ +last-generated=2017-10-24 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "number of continuous time states": "9", + "linear": " " +} +movAve1.y=[0e+00, 9.353725910186768e-01, 7.567793726921082e-01, 5.045299530029297e-01, 2.338647693395615e-01, -2.310188307319549e-07, -1.559118181467056e-01, -2.162324488162994e-01, -1.892037689685822e-01, -1.03941798210144e-01, 3.116154445592656e-08, 8.50435346364975e-02, 1.261364668607712e-01, 8.182483166456223e-02, -2.796485461294651e-02, -1.270727664232254e-01, -1.776431202888489e-01, -1.60359799861908e-01, -8.182444423437119e-02, 2.796507067978382e-02, 1.270729303359985e-01, 1.776432991027832e-01, 1.603600382804871e-01, 8.182474225759506e-02, -2.796476148068905e-02, -1.273238658905029e-01, -1.776432693004608e-01, -1.60359725356102e-01, -8.182428032159805e-02, 2.796526625752449e-02, 1.270730793476105e-01, 1.776434332132339e-01, 1.603601574897766e-01, 8.182486891746521e-02, -2.796462923288345e-02, -1.270724833011627e-01, -1.776428669691086e-01, -1.603595912456512e-01, -8.182430267333984e-02, 2.79652401804924e-02, 1.270729303359985e-01, 1.776432245969772e-01, 1.603598296642303e-01, 8.18244069814682e-02, -2.796521224081516e-02, -1.270731389522552e-01, -1.776435077190399e-01, -1.603601574897766e-01, -8.182476460933685e-02, 2.796478196978569e-02, 1.273239105939865e-01, 1.776430755853653e-01, 1.60359799861908e-01, 8.182451874017715e-02, -2.79649943113327e-02, -1.270727515220642e-01, -1.776429861783981e-01, -1.603596210479736e-01, -8.182430267333984e-02, 2.796515822410583e-02, 1.270729005336761e-01, 1.77643209695816e-01, 1.603599041700363e-01, 8.182483166456223e-02, -2.796485461294651e-02, -1.270727664232254e-01, -1.776431202888489e-01, -1.60359799861908e-01, -8.182444423437119e-02, 2.796507067978382e-02, 1.270729303359985e-01, 1.776432991027832e-01, 1.603600382804871e-01, 8.182474225759506e-02, -2.796476148068905e-02, -1.273238658905029e-01, -1.776431798934937e-01, -1.603597402572632e-01, -8.182443678379059e-02, 2.796502783894539e-02, 1.270727962255478e-01, 1.776431649923325e-01, 1.603598743677139e-01, 8.182458579540253e-02, -2.796491421759129e-02, -1.270727664232254e-01, -1.776431500911713e-01, -1.603598743677139e-01, -8.182458579540253e-02, 2.796491421759129e-02, 1.270727664232254e-01, 1.776431500911713e-01, 1.603598743677139e-01, 8.182458579540253e-02, -2.796491421759129e-02, -1.270727664232254e-01, -1.776431500911713e-01, -1.603598743677139e-01, -8.182458579540253e-02, 2.796491421759129e-02, 1.270727664232254e-01] +sinInpNoDel.y=[1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00, 8.0901700258255e-01, 3.0901700258255e-01, -3.0901700258255e-01, -8.0901700258255e-01, -1e+00, -8.0901700258255e-01, -3.0901700258255e-01, 3.0901700258255e-01, 8.0901700258255e-01, 1e+00] +movAve4.y=[0e+00, 9.353725910186768e-01, 7.567793726921082e-01, 5.045299530029297e-01, 2.338647693395615e-01, -2.310188307319549e-07, -1.559118181467056e-01, -2.162324488162994e-01, -1.892037689685822e-01, -1.03941798210144e-01, 3.116154445592656e-08, 8.50435346364975e-02, 1.261364668607712e-01, 1.164339482784271e-01, 6.682006269693375e-02, -6.769826654817734e-08, -5.846767500042915e-02, -8.903776854276657e-02, -8.409120142459869e-02, -4.923585057258606e-02, 1.104353088976495e-07, 4.45469468832016e-02, 6.88021257519722e-02, 6.581072509288788e-02, 3.897856175899506e-02, 3.547783222757062e-08, -3.598019108176231e-02, -5.606092140078545e-02, -5.405868217349052e-02, -3.225794062018394e-02, 1.883551874470868e-07, 3.017713129520416e-02, 4.730165004730225e-02, 4.586826264858246e-02, 2.751442603766918e-02, 1.277221883810853e-07, -2.59855967015028e-02, -4.09092865884304e-02, -3.983272612094879e-02, -2.398668602108955e-02, 1.386083710031016e-07, 2.281687781214714e-02, 3.603937104344368e-02, 3.520120307803154e-02, 2.126107737421989e-02, -4.953704113574986e-09, -2.033666893839836e-02, -3.220527991652489e-02, -3.153429925441742e-02, -1.909148879349232e-02, 8.822250663342857e-08, 8.822294716992474e-08, 8.822324559787376e-08, 8.822373587236143e-08, 8.822419772513967e-08, 8.822443220424248e-08, 8.822430430655004e-08, 8.822383534834444e-08, 8.822321007073697e-08, 8.822274821795872e-08, 8.822274821795872e-08, 8.822334507385676e-08, 8.822302532962567e-08, 8.82239419297548e-08, 8.822436825539626e-08, 8.822436825539626e-08, 8.822438957167833e-08, 8.822458141821699e-08, 8.822472352676414e-08, 8.822499353300373e-08, 8.822508590355937e-08, 8.822509300898673e-08, 8.822508590355937e-08, 8.822509300898673e-08, 8.822507169270466e-08, 8.8130697406541e-08, 1.105350975194597e-07, 8.234263049189394e-08, 4.855630919564646e-08, 2.850643987528656e-08, 1.920682102252158e-08, 1.950479422418994e-08, 1.887384470933284e-08, 1.806473903798178e-08, 1.719193321036983e-08, 1.64713984673881e-08, 1.644577629633659e-08, 1.706795060840705e-08, 2.310959068552165e-08, 1.859148390792598e-08, 2.133713650209756e-08, 2.045716662735231e-08, 3.335275167160034e-08, 6.44280078176962e-08, 9.393030353521681e-08, 1.10341574099948e-07, 1.073056239420112e-07, 8.610344792714386e-08, 5.975112316036757e-08, 4.987021995361829e-08, 4.390302521528611e-08] +time=[1e+02, 9e+02] +movAve2.y=[0e+00, 9.353725910186768e-01, 7.567793726921082e-01, 5.045299530029297e-01, 2.338647693395615e-01, -2.310188307319549e-07, -1.559118181467056e-01, -2.162324488162994e-01, -1.892037689685822e-01, -1.03941798210144e-01, 3.116154445592656e-08, 8.50435346364975e-02, 1.261364668607712e-01, 1.164339482784271e-01, 6.682006269693375e-02, -6.769826654817734e-08, -5.846767500042915e-02, -8.903776854276657e-02, -8.409120142459869e-02, -4.923585057258606e-02, 1.104353088976495e-07, 4.45469468832016e-02, 6.88021257519722e-02, 6.581072509288788e-02, 3.897856175899506e-02, 3.547783222757062e-08, -7.483915984630585e-02, -1.21092215180397e-01, -1.210921108722687e-01, -7.483890652656555e-02, 2.722320857628802e-07, 7.483940571546555e-02, 1.210925206542015e-01, 1.210924834012985e-01, 7.483932375907898e-02, 1.663469220147817e-07, -7.483897358179092e-02, -1.210920810699463e-01, -1.21092177927494e-01, -7.483892142772675e-02, 2.623933994527761e-07, 7.483939826488495e-02, 1.210924461483955e-01, 1.21092326939106e-01, 7.483909279108047e-02, -9.726549166089171e-08, -7.483922690153122e-02, -1.210922971367836e-01, -1.210922077298164e-01, -7.48390257358551e-02, 1.409674439400987e-07, 7.483933866024017e-02, 1.210923865437508e-01, 1.21092289686203e-01, 7.483907788991928e-02, -9.578322135439521e-08, -7.483923435211182e-02, -1.210923418402672e-01, -1.210923120379448e-01, -7.483914494514465e-02, 1.009856376299467e-08, 7.483914494514465e-02, 1.210922598838806e-01, 1.210923567414284e-01, 7.483909279108047e-02, -8.594464873112884e-08, -7.483921945095062e-02, -1.210922747850418e-01, -1.210921481251717e-01, -7.483892142772675e-02, 2.737156705734378e-07, 7.483940571546555e-02, 1.210924759507179e-01, 1.210923865437508e-01, 7.483920454978943e-02, 3.529395442569694e-08, -7.483911514282227e-02, -1.210922226309776e-01, -1.210921928286552e-01, -7.48390257358551e-02, 1.34196866952152e-07, 7.48392716050148e-02, 1.210923790931702e-01, 1.210923492908478e-01, 7.483918219804764e-02, 2.284423494813836e-08, -7.483911514282227e-02, -1.210922226309776e-01, -1.210923045873642e-01, -7.483905553817749e-02, 1.28618921735324e-07, 7.483925670385361e-02, 1.210923418402672e-01, 1.210922822356224e-01, 7.483910769224167e-02, -5.303251171540069e-08, -7.483918964862823e-02, -1.210922971367836e-01, -1.210922673344612e-01, -7.483910769224167e-02, 5.25120924521616e-08] +movAve3.y=[0e+00, 9.353725910186768e-01, 7.567793726921082e-01, 5.045299530029297e-01, 2.338647693395615e-01, -2.310188307319549e-07, -1.559118181467056e-01, -2.162324488162994e-01, -1.892037689685822e-01, -1.03941798210144e-01, 3.116154445592656e-08, 8.50435346364975e-02, 1.261364668607712e-01, 1.164339482784271e-01, 6.682006269693375e-02, -6.769826654817734e-08, -5.846767500042915e-02, -8.903776854276657e-02, -8.409120142459869e-02, -4.923585057258606e-02, 1.104353088976495e-07, 4.45469468832016e-02, 6.88021257519722e-02, 6.581072509288788e-02, 3.897856175899506e-02, 3.547783222757062e-08, -3.598019108176231e-02, -5.606092140078545e-02, -5.405868217349052e-02, -3.225794062018394e-02, 1.883551874470868e-07, 3.017713129520416e-02, 4.730165004730225e-02, 4.586826264858246e-02, 2.751442603766918e-02, 1.277221883810853e-07, -2.59855967015028e-02, -4.09092865884304e-02, -5.345317348837852e-02, -5.921423062682152e-02, -4.235741496086121e-02, -9.321445599198341e-03, 2.727503515779972e-02, 5.345340073108673e-02, 5.921442061662674e-02, 4.235757887363434e-02, 9.321615099906921e-03, -2.727485448122025e-02, -5.3453229367733e-02, -5.92142716050148e-02, -4.244119301438332e-02, -9.321532212197781e-03, 2.727501839399338e-02, 5.345343053340912e-02, 5.921447649598122e-02, 4.235762730240822e-02, 9.321657009422779e-03, -2.727484330534935e-02, -5.345325171947479e-02, -5.921430885791779e-02, -4.235748946666718e-02, -9.32152196764946e-03, 2.72749736905098e-02, 5.34534677863121e-02, 5.921447649598122e-02, 4.235758632421494e-02, 9.321593679487705e-03, -2.727490477263927e-02, -5.345329642295837e-02, -5.921434983611107e-02, -4.235753044486046e-02, -9.321565739810467e-03, 2.727492898702621e-02, 5.345333740115166e-02, 5.921439826488495e-02, 4.244132712483406e-02, 9.321614168584347e-03, -2.727488055825233e-02, -5.345328897237778e-02, -5.921434611082077e-02, -4.235749319195747e-02, -9.321482852101326e-03, 2.727504633367062e-02, 5.34534640610218e-02, 5.92145062983036e-02, 4.235764965415001e-02, 9.321662597358227e-03, -2.72748451679945e-02, -5.345325917005539e-02, -5.921432375907898e-02, -4.235750436782837e-02, -9.321535937488079e-03, 2.727496065199375e-02, 5.345337092876434e-02, 5.921442806720734e-02, 4.235760867595673e-02, 9.321640245616436e-03, -2.727485634386539e-02, -5.345326662063599e-02, -5.921432375907898e-02, -4.244125261902809e-02] +sinInp50sDel.y=[-7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01, -9.876883625984192e-01, -8.910065293312073e-01, -4.539904892444611e-01, 1.564344614744186e-01, 7.071067690849304e-01, 9.876883625984192e-01, 8.910065293312073e-01, 4.539904892444611e-01, -1.564344614744186e-01, -7.071067690849304e-01] +movAve7.y=[0e+00, -8.763125538825989e-01, -9.239140748977661e-01, -8.47790002822876e-01, -6.743162870407104e-01, -4.501466453075409e-01, -2.290564030408859e-01, -5.754833295941353e-02, 3.658527880907059e-02, 4.961711913347244e-02, 4.036843392896117e-08, -7.967382669448853e-02, -1.5399369597435e-01, -1.956502497196198e-01, -1.926662027835846e-01, -1.500514000654221e-01, -8.589723706245422e-02, -2.369659021496773e-02, 1.626027747988701e-02, 2.35030185431242e-02, 1.479662703474105e-08, -4.173414036631584e-02, -8.39969590306282e-02, -1.105853095650673e-01, -1.12388975918293e-01, -9.003113955259323e-02, -1.99178084731102e-02, 5.78039214015007e-02, 1.134464740753174e-01, 1.257563084363937e-01, 9.003148972988129e-02, 1.991769857704639e-02, -5.780402198433876e-02, -1.134466081857681e-01, -1.257564872503281e-01, -9.00317057967186e-02, -1.991790905594826e-02, 5.780381336808205e-02, 1.134464517235756e-01, 1.257563531398773e-01, 9.003152698278427e-02, 1.991771161556244e-02, -5.780400708317757e-02, -1.134465485811234e-01, -1.257563531398773e-01, -9.003150463104248e-02, -1.991766691207886e-02, 5.780405551195145e-02, 1.134466156363487e-01, 1.257564723491669e-01, 9.003166854381561e-02, 1.991789229214191e-02, -5.780383944511414e-02, -1.134463921189308e-01, -1.257562339305878e-01, -9.003140777349472e-02, -1.991761662065983e-02, 5.780410394072533e-02, 1.134466901421547e-01, 1.257565766572952e-01, 9.003178775310516e-02, 1.991799101233482e-02, -5.780372768640518e-02, -1.13446369767189e-01, -1.257562786340714e-01, -9.003144502639771e-02, -1.991762965917587e-02, 5.780408903956413e-02, 1.134466305375099e-01, 1.257564425468445e-01, 9.003158658742905e-02, 1.991775073111057e-02, -5.780397355556488e-02, -1.134465336799622e-01, -1.257563978433609e-01, -9.003158658742905e-02, -1.991780661046505e-02, 5.78039139509201e-02, 1.134465038776398e-01, 1.257563829421997e-01, 9.003159403800964e-02, 1.991779543459415e-02, -5.7803925126791e-02, -1.134465113282204e-01, -1.257563978433609e-01, -9.003160148859024e-02, -1.991780661046505e-02, 5.78039139509201e-02, 1.134465709328651e-01, 1.257564425468445e-01, 9.003160148859024e-02, 1.991777680814266e-02, -5.780394747853279e-02, -1.13446518778801e-01, -1.257563978433609e-01, -9.003160148859024e-02, -1.99178047478199e-02, 5.78039176762104e-02, 1.134465038776398e-01, 1.257563829421997e-01, 9.003160148859024e-02] +movAve6.y=[0e+00, -8.763125538825989e-01, -9.239140748977661e-01, -8.47790002822876e-01, -6.743162870407104e-01, -4.501466453075409e-01, -2.290564030408859e-01, -5.754833295941353e-02, 3.658527880907059e-02, 4.961711913347244e-02, 4.036843392896117e-08, -7.967382669448853e-02, -1.5399369597435e-01, -1.711364090442657e-01, -1.058778911828995e-01, -1.775890996214002e-04, 1.055904924869537e-01, 1.710265576839447e-01, 1.71136274933815e-01, 1.058777794241905e-01, 1.775654527591541e-04, -1.055904552340508e-01, -1.710265278816223e-01, -1.71136274933815e-01, -1.058777868747711e-01, 6.788108919408842e-08, 1.055906414985657e-01, 1.710265725851059e-01, 1.711361855268478e-01, 1.058775782585144e-01, 1.773427793523297e-04, -1.055906638503075e-01, -1.710267066955566e-01, -1.711364537477493e-01, -1.058779805898666e-01, -1.777841680450365e-04, 1.055902391672134e-01, 1.710263043642044e-01, 1.711360961198807e-01, 1.058775931596756e-01, 1.774590200511739e-04, -1.055904850363731e-01, -1.710264533758163e-01, -1.711361259222031e-01, -1.058775186538696e-01, -1.771975657902658e-04, 1.055909171700478e-01, 1.710269898176193e-01, 1.711366921663284e-01, 1.058781668543816e-01, 2.697746310786897e-07, -1.055900901556015e-01, -1.710261851549149e-01, -1.711359620094299e-01, -1.05877473950386e-01, -1.773055701050907e-04, 1.055906265974045e-01, 1.710265725851059e-01, 1.71136200428009e-01, 1.058776676654816e-01, 1.774982520146295e-04, -1.055904850363731e-01, -1.710264980792999e-01, -1.711364090442657e-01, -1.058778911828995e-01, -1.775890996214002e-04, 1.055904924869537e-01, 1.710265576839447e-01, 1.71136274933815e-01, 1.058777794241905e-01, 1.775654673110694e-04, -1.055904552340508e-01, -1.710265278816223e-01, -1.71136274933815e-01, -1.058777868747711e-01, 6.968446797372962e-08, 1.055906489491463e-01, 1.710265576839447e-01, 1.711362302303314e-01, 1.058777198195457e-01, 1.775437995092943e-04, -1.055904701352119e-01, -1.710265129804611e-01, -1.711362600326538e-01, -1.058777794241905e-01, -1.775825512595475e-04, 1.055904477834702e-01, 1.710265129804611e-01, 1.711362600326538e-01, 1.058777794241905e-01, 1.775821583578363e-04, -1.055904477834702e-01, -1.710265129804611e-01, -1.711362600326538e-01, -1.058777794241905e-01, -1.775827549863607e-04, 1.055904477834702e-01, 1.710265129804611e-01, 1.711362600326538e-01, 1.058777794241905e-01, 1.775841228663921e-04] +sinInp100sDel.y=[0e+00, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 1.224646852585168e-16, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -2.449293705170336e-16, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 3.673940293057708e-16, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -4.898587410340671e-16, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 6.123233998228043e-16, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -7.347880586115415e-16, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 8.572527703398379e-16, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -9.797174820681343e-16, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 1.102182140856871e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -1.224646799645609e-15, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 4.899825137234847e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -1.469576117223083e-15, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, -1.960672902788681e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -1.714505540679676e-15, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 5.389683772389795e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -1.959434964136269e-15, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, -1.470814161754614e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -2.204364281713743e-15, 5.877852439880371e-01, 9.510565400123596e-01, 9.510565400123596e-01, 5.877852439880371e-01, 5.879542407544744e-15, -5.877852439880371e-01, -9.510565400123596e-01, -9.510565400123596e-01, -5.877852439880371e-01, -2.449293599291217e-15] +movAve8.y=[0e+00, 3.039204776287079e-01, 5.498324036598206e-01, 6.944261193275452e-01, 7.197624444961548e-01, 6.366037130355835e-01, 4.798464775085449e-01, 2.976180911064148e-01, 1.374643594026566e-01, 3.377259895205498e-02, -8.825113440025234e-08, 2.763227373361588e-02, 9.164350479841232e-02, 1.601985991001129e-01, 1.776988059282303e-01, 1.273239105939865e-01, 2.831562049686909e-02, -8.150828629732132e-02, -1.601988077163696e-01, -1.776988506317139e-01, -1.273240447044373e-01, -2.831584401428699e-02, 8.150799572467804e-02, 1.601984947919846e-01, 1.776985675096512e-01, 1.273237615823746e-01, 2.831554971635342e-02, -8.150837570428848e-02, -1.601988226175308e-01, -1.776987761259079e-01, -1.273238807916641e-01, -2.831568941473961e-02, 8.150812983512878e-02, 1.601986289024353e-01, 1.776987016201019e-01, 1.273239105939865e-01, 2.831570990383625e-02, -8.150812983512878e-02, -1.601986736059189e-01, -1.776987612247467e-01, -1.273238956928253e-01, -2.831572294235229e-02, 8.15081000328064e-02, 1.601986140012741e-01, 1.776986420154572e-01, 1.273237317800522e-01, 2.831540070474148e-02, -8.150853961706161e-02, -1.601990759372711e-01, -1.776991188526154e-01, -1.273242980241776e-01, -2.831613458693027e-02, 8.150774985551834e-02, 1.601982712745667e-01, 1.776983588933945e-01, 1.273234933614731e-01, 2.831529453396797e-02, -8.150846511125565e-02, -1.601988524198532e-01, -1.776987910270691e-01, -1.273239254951477e-01, -2.831572107970715e-02, 8.15080851316452e-02, 1.601985991001129e-01, 1.776988059282303e-01, 1.273239105939865e-01, 2.831562049686909e-02, -8.150828629732132e-02, -1.601988077163696e-01, -1.776988506317139e-01, -1.273240447044373e-01, -2.831584401428699e-02, 8.150799572467804e-02, 1.601984947919846e-01, 1.776985675096512e-01, 1.273237615823746e-01, 2.831545099616051e-02, -8.15083310008049e-02, -1.601987481117249e-01, -1.776987314224243e-01, -1.273238807916641e-01, -2.831568941473961e-02, 8.150813728570938e-02, 1.601986438035965e-01, 1.776987016201019e-01, 1.273239105939865e-01, 2.831570617854595e-02, -8.150813728570938e-02, -1.601986438035965e-01, -1.776987016201019e-01, -1.273239105939865e-01, -2.831570617854595e-02, 8.150813728570938e-02, 1.601986438035965e-01, 1.776987016201019e-01, 1.273239105939865e-01, 2.831570617854595e-02, -8.150813728570938e-02, -1.601986438035965e-01, -1.776987016201019e-01, -1.273239105939865e-01] +movAve9.y=[0e+00, 3.039204776287079e-01, 5.498324036598206e-01, 6.944261193275452e-01, 7.197624444961548e-01, 6.366037130355835e-01, 4.798464775085449e-01, 2.976180911064148e-01, 1.374643594026566e-01, 3.377259895205498e-02, -8.825113440025234e-08, 2.763227373361588e-02, 9.164350479841232e-02, 1.602572798728943e-01, 2.056510895490646e-01, 2.12204784154892e-01, 1.79944708943367e-01, 1.225498095154762e-01, 6.10956959426403e-02, 1.599756442010403e-02, -1.313608919417675e-07, 1.447403989732265e-02, 4.998751729726791e-02, 9.05805230140686e-02, 1.199634522199631e-01, 1.273232251405716e-01, 1.030071973800659e-01, 3.934512287378311e-02, -3.934543207287788e-02, -1.030073761940002e-01, -1.273240298032761e-01, -1.030072867870331e-01, -3.934529051184654e-02, 3.934524580836296e-02, 1.030072122812271e-01, 1.273238956928253e-01, 1.030071452260017e-01, 3.93451489508152e-02, -3.934533521533012e-02, -1.030074208974838e-01, -1.273240745067596e-01, -1.030072942376137e-01, -3.934523835778236e-02, 3.934532031416893e-02, 1.030072495341301e-01, 1.273238658905029e-01, 1.030070632696152e-01, 3.934501484036446e-02, -3.934553638100624e-02, -1.030074879527092e-01, -1.273241490125656e-01, -1.030074879527092e-01, -3.934541717171669e-02, 3.93451415002346e-02, 1.03007085621357e-01, 1.273237317800522e-01, 1.030069962143898e-01, 3.934499621391296e-02, -3.934554010629654e-02, -1.030075028538704e-01, -1.27324178814888e-01, -1.030074432492256e-01, -3.934543952345848e-02, 3.934504091739655e-02, 1.030071303248405e-01, 1.273237764835358e-01, 1.030070036649704e-01, 3.934494405984879e-02, -3.934561088681221e-02, -1.03007547557354e-01, -1.273241639137268e-01, -1.030073538422585e-01, -3.934530913829803e-02, 3.934524208307266e-02, 1.030071899294853e-01, 1.273238509893417e-01, 1.030071452260017e-01, 3.93451452255249e-02, -3.93453910946846e-02, -1.030073538422585e-01, -1.273240298032761e-01, -1.030072867870331e-01, -3.934528678655624e-02, 3.934524953365326e-02, 1.030072122812271e-01, 1.273238956928253e-01, 1.030071452260017e-01, 3.93451452255249e-02, -3.934537246823311e-02, -1.030074059963226e-01, -1.273240447044373e-01, -1.030072495341301e-01, -3.934521600604057e-02, 3.934532776474953e-02, 1.030072867870331e-01, 1.273239552974701e-01, 1.030072197318077e-01, 3.934521973133087e-02, -3.934531658887863e-02, -1.030072793364525e-01, -1.273239701986313e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMax.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMax.txt new file mode 100644 index 0000000000..ea59238eed --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMax.txt @@ -0,0 +1,14 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +con[3].y=[3e+00, 3e+00] +con[5].y=[5e+00, 5e+00] +con[1].y=[1e+00, 1e+00] +con[4].y=[4e+00, 4e+00] +time=[0e+00, 1e+00] +con[2].y=[2e+00, 2e+00] +maxVal.y=[5e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMin.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMin.txt new file mode 100644 index 0000000000..46c2056b44 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiMin.txt @@ -0,0 +1,14 @@ +last-generated=2017-09-14 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +con[3].y=[3e+00, 3e+00] +con[5].y=[5e+00, 5e+00] +con[1].y=[1e+00, 1e+00] +con[4].y=[4e+00, 4e+00] +time=[0e+00, 1e+00] +con[2].y=[2e+00, 2e+00] +minVal.y=[1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiSum.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiSum.txt new file mode 100644 index 0000000000..6f2ef7f4be --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiSum.txt @@ -0,0 +1,19 @@ +last-generated=2017-06-30 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +mulSum_1.u[1]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +mulSum_1.y=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +time=[0e+00, 1e+00] +mulSum_2.u[2]=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +mulSum_2.u[1]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +mulSum_2.y=[-2.5e+00, -2.45000004656613e+00, -2.40000009313226e+00, -2.349999901279814e+00, -2.299999947845941e+00, -2.250000003725286e+00, -2.200000040978201e+00, -2.150000096857549e+00, -2.099999895691898e+00, -2.049999970197624e+00, -2.000000007450558e+00, -1.950000044703492e+00, -1.899999962747137e+00, -1.850000000000071e+00, -1.799999955296507e+00, -1.750000029802234e+00, -1.700000029802376e+00, -1.649999985098812e+00, -1.600000059604538e+00, -1.549999940395391e+00, -1.500000014901117e+00, -1.450000014901259e+00, -1.399999970197695e+00, -1.350000044703421e+00, -1.299999925494274e+00, -1.25e+00, -1.200000000000142e+00, -1.150000029802162e+00, -1.100000029802304e+00, -1.049999910593157e+00, -1.000000059604467e+00, -9.499999999999644e-01, -8.999999403954617e-01, -8.500000894067716e-01, -8.000000298022689e-01, -7.499999701977665e-01, -7.000000596044317e-01, -6.500000000000711e-01, -5.999999999999289e-01, -5.499999403955683e-01, -5.000000298022335e-01, -4.49999970197731e-01, -3.999999403953553e-01, -3.500000298023224e-01, -3e-01, -2.49999940395444e-01, -2.000000447033591e-01, -1.50000000000009e-01, -9.999994784605581e-02, -5.000004842866734e-02, 0e+00, 5.000004842795681e-02, 1.000000968559136e-01, 1.500001490090542e-01, 1.999998956936304e-01, 2.499999403963324e-01, 2.999999999998226e-01, 3.500000298017892e-01, 4.000000894054748e-01, 4.500001192073355e-01, 4.999998807928419e-01, 5.499999403966341e-01, 6.000000000002842e-01, 6.499999999997158e-01, 7.000000596033659e-01, 7.50000119207158e-01, 7.999998807930554e-01, 8.499999403963502e-01, 8.99999940395995e-01, 9.500000000001418e-01, 1.000000059603579e+00, 1.050000059602726e+00, 1.099999880793268e+00, 1.149999880792416e+00, 1.200000000000853e+00, 1.25e+00, 1.299999999999147e+00, 1.350000119207584e+00, 1.400000119206732e+00, 1.449999940397274e+00, 1.499999940396421e+00, 1.549999940395213e+00, 1.600000059604005e+00, 1.650000059603153e+00, 1.700000178811589e+00, 1.749999880792842e+00, 1.799999880791989e+00, 1.850000000000426e+00, 1.899999999999574e+00, 1.950000119208011e+00, 2.000000119207158e+00, 2.049999821188411e+00, 2.099999821187558e+00, 2.150000059605285e+00, 2.200000059604787e+00, 2.250000059603579e+00, 2.300000059602726e+00, 2.349999761583978e+00, 2.400000000001705e+00, 2.450000000000852e+00, 2.5e+00] +mulSum_5.u[1]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +mulSum_5.u[3]=[-1e+00, -9.700000279396727e-01, -9.399999962747139e-01, -9.100000242143751e-01, -8.799999925494277e-01, -8.500000260770252e-01, -8.199999888241416e-01, -7.900000223517407e-01, -7.599999850988655e-01, -7.300000298022691e-01, -6.999999925493972e-01, -6.700000149011524e-01, -6.399999776482982e-01, -6.099999999999289e-01, -5.799999850988476e-01, -5.500000298022336e-01, -5.199999701977309e-01, -4.900000149011345e-01, -4.600000298022158e-01, -4.3e-01, -4.000000149011168e-01, -3.699999850988388e-01, -3.4e-01, -3.100000149011611e-01, -2.799999850988388e-01, -2.5e-01, -2.199999701977486e-01, -1.900000298022424e-01, -1.59999999999991e-01, -1.299999701977398e-01, -1.000000372528142e-01, -7.000000745056284e-02, -3.999997764831148e-02, -1.000003911547481e-02, 1.999998882415249e-02, 5.000001862641812e-02, 7.999995529662296e-02, 1.099999850988743e-01, 1.400000149011257e-01, 1.70000044703377e-01, 1.999999850988833e-01, 2.300000149011345e-01, 2.600000298023223e-01, 2.899999701977842e-01, 3.2e-01, 3.500000298023224e-01, 3.79999970197802e-01, 4.099999999999999e-01, 4.400000298023223e-01, 4.699999701976776e-01, 5e-01, 5.299999999997158e-01, 5.60000059603508e-01, 5.900000596037922e-01, 6.199999403966343e-01, 6.499999403960659e-01, 6.799999999999291e-01, 7.099999999997867e-01, 7.400000596036499e-01, 7.700000596038631e-01, 7.999999403967762e-01, 8.299999403962078e-01, 8.600000000001421e-01, 8.899999999998579e-01, 9.200000596037922e-01, 9.500000596032238e-01, 9.799999403961369e-01, 1.009999940395853e+00, 1.039999940395995e+00, 1.070000059604645e+00, 1.100000059603579e+00, 1.130000059604005e+00, 1.159999880793268e+00, 1.190000000000568e+00, 1.220000000000284e+00, 1.25e+00, 1.279999999999716e+00, 1.309999999999432e+00, 1.340000119206732e+00, 1.369999940395995e+00, 1.399999940396421e+00, 1.429999940395355e+00, 1.460000059604005e+00, 1.490000059604147e+00, 1.520000059603863e+00, 1.549999880792842e+00, 1.580000000000426e+00, 1.610000000000142e+00, 1.639999999999858e+00, 1.669999999999574e+00, 1.700000119207158e+00, 1.729999940396137e+00, 1.759999940395853e+00, 1.789999940395995e+00, 1.820000059604645e+00, 1.850000059603579e+00, 1.880000059604005e+00, 1.909999880793268e+00, 1.940000000000568e+00, 1.970000000000284e+00, 2e+00] +mulSum_5.u[2]=[-1e+00, -9.800000186264507e-01, -9.599999776482565e-01, -9.399999962747084e-01, -9.200000149011579e-01, -8.99999977648261e-01, -8.799999925494144e-01, -8.600000149011634e-01, -8.399999701977309e-01, -8.200000000000001e-01, -8.000000149011612e-01, -7.799999701976954e-01, -7.599999850988388e-01, -7.4e-01, -7.200000298023046e-01, -7e-01, -6.799999999999999e-01, -6.60000029802269e-01, -6.4e-01, -6.2e-01, -6.000000298022335e-01, -5.799999701976777e-01, -5.600000000000001e-01, -5.400000298023224e-01, -5.199999701976776e-01, -5e-01, -4.799999701978197e-01, -4.600000298021625e-01, -4.399999999999999e-01, -4.19999970197802e-01, -4.000000298023224e-01, -3.8e-01, -3.6e-01, -3.400000298023224e-01, -3.2e-01, -3e-01, -2.800000298023224e-01, -2.6e-01, -2.399999850988743e-01, -2.199999701977842e-01, -2.000000149011167e-01, -1.8e-01, -1.599999701977753e-01, -1.400000149011079e-01, -1.199999925494283e-01, -9.99999776483026e-02, -8.000001490113007e-02, -5.999999627471642e-02, -3.999997764829821e-02, -2.000001862641598e-02, 0e+00, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00] +mulSum_5.u[5]=[-3e+00, -2.970000027939673e+00, -2.940000055879345e+00, -2.91000008381902e+00, -2.880000111758691e+00, -2.849999906867758e+00, -2.819999929219457e+00, -2.789999962747105e+00, -2.759999985098812e+00, -2.730000029802376e+00, -2.700000052154087e+00, -2.670000074505797e+00, -2.640000096857508e+00, -2.609999880791208e+00, -2.579999925494203e+00, -2.549999970197766e+00, -2.519999970197624e+00, -2.490000014901188e+00, -2.460000059604751e+00, -2.430000059604609e+00, -2.400000104307817e+00, -2.369999865890233e+00, -2.339999910593157e+00, -2.309999955296579e+00, -2.279999955296437e+00, -2.25e+00, -2.219999999999858e+00, -2.190000089407127e+00, -2.160000089406843e+00, -2.130000089406843e+00, -2.099999940395533e+00, -2.069999940395391e+00, -2.039999940395249e+00, -2.010000029802518e+00, -1.980000029802162e+00, -1.950000029802234e+00, -1.920000000000213e+00, -1.890000000000071e+00, -1.859999999999929e+00, -1.829999999999787e+00, -1.799999970197766e+00, -1.769999970197838e+00, -1.739999970197482e+00, -1.710000059604325e+00, -1.679999940395462e+00, -1.649999940395888e+00, -1.620000029802447e+00, -1.590000029802305e+00, -1.559999910593513e+00, -1.530000000000142e+00, -1.5e+00, -1.470000000000284e+00, -1.440000000000568e+00, -1.409999880793268e+00, -1.380000059604005e+00, -1.350000059603579e+00, -1.320000059604645e+00, -1.289999940395995e+00, -1.259999940395853e+00, -1.229999940396137e+00, -1.200000119207158e+00, -1.169999999999574e+00, -1.139999999999858e+00, -1.110000000000142e+00, -1.080000000000426e+00, -1.049999880792842e+00, -1.020000059603863e+00, -9.900000596036499e-01, -9.599999999997867e-01, -9.299999999999291e-01, -8.999999403960659e-01, -8.699999403966343e-01, -8.400000596037922e-01, -8.10000059603508e-01, -7.799999999997158e-01, -7.5e-01, -7.200000000002842e-01, -6.89999940396492e-01, -6.599999403962078e-01, -6.300000596033657e-01, -6.000000596039341e-01, -5.700000000000709e-01, -5.400000000002133e-01, -5.099999403963501e-01, -4.799999105945961e-01, -4.50000059603579e-01, -4.200000298016829e-01, -3.899999999997869e-01, -3.600000000002131e-01, -3.299999701983171e-01, -2.99999940396421e-01, -2.700000894054039e-01, -2.400000447027374e-01, -2.100000149008413e-01, -1.799999999998936e-01, -1.499999701982107e-01, -1.199999329458938e-01, -9.000008940547513e-02, -6.000005587839531e-02, -3.000002793918877e-02, 0e+00] +mulSum_5.y=[-1.060000038146973e+01, -1.045699977555129e+01, -1.031400012330717e+01, -1.017099951738874e+01, -1.002799986514461e+01, -9.885000239536067e+00, -9.741999606982052e+00, -9.598999981373517e+00, -9.456000302493004e+00, -9.312999776483718e+00, -9.170000097602369e+00, -9.027000418722441e+00, -8.883999786168765e+00, -8.741000107289121e+00, -8.597999581277559e+00, -8.455000008939747e+00, -8.312000223516282e+00, -8.168999697506996e+00, -8.026000125168613e+00, -7.882999862909697e+00, -7.739999813735721e+00, -7.597000028311689e+00, -7.45399997913828e+00, -7.310999929964872e+00, -7.16800014454084e+00, -7.025000095367432e+00, -6.881999833108515e+00, -6.738999997020615e+00, -6.596000211596299e+00, -6.452999949335394e+00, -6.310000113249767e+00, -6.166999850988576e+00, -6.024000065564544e+00, -5.881000229475791e+00, -5.737999967217728e+00, -5.594999704957959e+00, -5.452000345704659e+00, -5.309000083446879e+00, -5.165999821186826e+00, -5.02299955892791e+00, -4.880000199674609e+00, -4.736999937414841e+00, -4.593999675156777e+00, -4.451000315903477e+00, -4.308000053643992e+00, -4.164999791385644e+00, -4.021999955297175e+00, -3.878999931454707e+00, -3.735999907613233e+00, -3.59300007152519e+00, -3.450000047683716e+00, -3.306999785425695e+00, -3.163999761586252e+00, -3.020999499328231e+00, -2.87800032782011e+00, -2.73500006556351e+00, -2.592000041723663e+00, -2.448999779464627e+00, -2.305999755625185e+00, -2.162999731782616e+00, -2.020000321859043e+00, -1.877000178810311e+00, -1.734000035761579e+00, -1.590999892712847e+00, -1.447999749664115e+00, -1.304999606615384e+00, -1.162000315899537e+00, -1.019000292058531e+00, -8.760000894053678e-01, -7.329999463554083e-01, -5.899998033076926e-01, -4.469996900609635e-01, -3.040003993442993e-01, -1.610002711965866e-01, -1.800013559825776e-02, 1.25e-01, 2.680001430488739e-01, 4.110002860974636e-01, 5.540004291461954e-01, 6.969997198629662e-01, 8.399998033076926e-01, 9.829999463554083e-01, 1.126000149009799e+00, 1.269000292058531e+00, 1.412000315899537e+00, 1.554999606615384e+00, 1.697999749664115e+00, 1.840999892712847e+00, 1.984000035761579e+00, 2.1270002980196e+00, 2.270000321859043e+00, 2.412999731782616e+00, 2.555999755625185e+00, 2.698999779464627e+00, 2.842000041723663e+00, 2.98500006556351e+00, 3.12800032782011e+00, 3.270999499328231e+00, 3.413999761586252e+00, 3.556999785425695e+00, 3.700000047683716e+00] +mulSum_5.u[4]=[-2e+00, -1.970000027939673e+00, -1.940000055879345e+00, -1.90999996460977e+00, -1.879999992549401e+00, -1.850000026077003e+00, -1.820000048428746e+00, -1.789999962747105e+00, -1.759999985098812e+00, -1.730000029802162e+00, -1.700000052153998e+00, -1.669999955296543e+00, -1.639999977648218e+00, -1.609999999999929e+00, -1.580000044703457e+00, -1.549999970197766e+00, -1.519999970197838e+00, -1.490000014901188e+00, -1.460000059604325e+00, -1.429999940395462e+00, -1.399999985098883e+00, -1.369999985098741e+00, -1.340000029802305e+00, -1.309999955296579e+00, -1.279999955296756e+00, -1.25e+00, -1.219999999999858e+00, -1.190000089406487e+00, -1.159999970197695e+00, -1.129999970197553e+00, -1.100000059604112e+00, -1.070000059604538e+00, -1.039999940395675e+00, -1.010000029802518e+00, -9.800000298022691e-01, -9.499999701977665e-01, -9.200000596044317e-01, -8.900000000000711e-01, -8.599999999999289e-01, -8.299999403955683e-01, -8.000000298022335e-01, -7.699999701977309e-01, -7.39999970197873e-01, -7.100000000001065e-01, -6.800000000000355e-01, -6.499999403955328e-01, -6.200000298021979e-01, -5.899999701976955e-01, -5.599999701978375e-01, -5.300000000001421e-01, -5e-01, -4.699999701981039e-01, -4.399999403962078e-01, -4.09999910594738e-01, -3.800000596036854e-01, -3.500000298017893e-01, -3.200000000001064e-01, -2.899999701981041e-01, -2.599999403963501e-01, -2.299999254955619e-01, -2.000000745045626e-01, -1.700000447027376e-01, -1.400000149009125e-01, -1.099999850990875e-01, -7.999995529726243e-02, -4.999992922068328e-02, -2.000007822977725e-02, 9.999949709432063e-03, 3.999997764863138e-02, 7.000000745066925e-02, 1.000000372522811e-01, 1.300000596036855e-01, 1.599999105945249e-01, 1.899999403963499e-01, 2.19999970198175e-01, 2.5e-01, 2.800000298018961e-01, 3.100000596037922e-01, 3.40000089405262e-01, 3.699999403963146e-01, 3.999999701982107e-01, 4.299999999998936e-01, 4.600000298018959e-01, 4.900000596036499e-01, 5.200000596038631e-01, 5.499999403967762e-01, 5.799999403962078e-01, 6.100000000001421e-01, 6.399999999998579e-01, 6.700000596037922e-01, 7.000000596032238e-01, 7.299999403961369e-01, 7.599999403963501e-01, 7.900000000002133e-01, 8.200000000000709e-01, 8.500000596039341e-01, 8.800000596033657e-01, 9.099999403962078e-01, 9.39999940396492e-01, 9.700000000002842e-01, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Multiply.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Multiply.txt new file mode 100644 index 0000000000..55dc2f87e3 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Multiply.txt @@ -0,0 +1,11 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +product1.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +product1.u2=[-1e+00, -9.700000279396727e-01, -9.399999962747139e-01, -9.100000242143751e-01, -8.799999925494277e-01, -8.500000260770252e-01, -8.199999888241416e-01, -7.900000223517407e-01, -7.599999850988655e-01, -7.300000298022691e-01, -6.999999925493972e-01, -6.700000149011524e-01, -6.399999776482982e-01, -6.099999999999289e-01, -5.799999850988476e-01, -5.500000298022336e-01, -5.199999701977309e-01, -4.900000149011345e-01, -4.600000298022158e-01, -4.3e-01, -4.000000149011168e-01, -3.699999850988388e-01, -3.4e-01, -3.100000149011611e-01, -2.799999850988388e-01, -2.5e-01, -2.199999701977486e-01, -1.900000298022424e-01, -1.59999999999991e-01, -1.299999701977398e-01, -1.000000372528142e-01, -7.000000745056284e-02, -3.999997764831148e-02, -1.000003911547481e-02, 1.999998882415249e-02, 5.000001862641812e-02, 7.999995529662296e-02, 1.099999850988743e-01, 1.400000149011257e-01, 1.70000044703377e-01, 1.999999850988833e-01, 2.300000149011345e-01, 2.600000298023223e-01, 2.899999701977842e-01, 3.2e-01, 3.500000298023224e-01, 3.79999970197802e-01, 4.099999999999999e-01, 4.400000298023223e-01, 4.699999701976776e-01, 5e-01, 5.299999999997158e-01, 5.60000059603508e-01, 5.900000596037922e-01, 6.199999403966343e-01, 6.499999403960659e-01, 6.799999999999291e-01, 7.099999999997867e-01, 7.400000596036499e-01, 7.700000596038631e-01, 7.999999403967762e-01, 8.299999403962078e-01, 8.600000000001421e-01, 8.899999999998579e-01, 9.200000596037922e-01, 9.500000596032238e-01, 9.799999403961369e-01, 1.009999940395853e+00, 1.039999940395995e+00, 1.070000059604645e+00, 1.100000059603579e+00, 1.130000059604005e+00, 1.159999880793268e+00, 1.190000000000568e+00, 1.220000000000284e+00, 1.25e+00, 1.279999999999716e+00, 1.309999999999432e+00, 1.340000119206732e+00, 1.369999940395995e+00, 1.399999940396421e+00, 1.429999940395355e+00, 1.460000059604005e+00, 1.490000059604147e+00, 1.520000059603863e+00, 1.549999880792842e+00, 1.580000000000426e+00, 1.610000000000142e+00, 1.639999999999858e+00, 1.669999999999574e+00, 1.700000119207158e+00, 1.729999940396137e+00, 1.759999940395853e+00, 1.789999940395995e+00, 1.820000059604645e+00, 1.850000059603579e+00, 1.880000059604005e+00, 1.909999880793268e+00, 1.940000000000568e+00, 1.970000000000284e+00, 2e+00] +product1.y=[2e+00, 1.901200053899884e+00, 1.804800029324279e+00, 1.71080004548252e+00, 1.619199983165286e+00, 1.529999977964155e+00, 1.44319998073223e+00, 1.358800056083205e+00, 1.276800022025058e+00, 1.197199968805464e+00, 1.12000001612895e+00, 1.045199985899922e+00, 9.727999973702217e-01, 9.027999908637505e-01, 8.352000157022442e-01, 7.700000192165183e-01, 7.07199968805357e-01, 6.467999922227886e-01, 5.888000538633404e-01, 5.332000126457337e-01, 4.800000048398786e-01, 4.291999612475442e-01, 3.80800003175733e-01, 3.348000237512006e-01, 2.911999893522698e-01, 2.5e-01, 2.111999632264212e-01, 1.748000316571716e-01, 1.408000031757241e-01, 1.091999755955357e-01, 8.000003187650792e-02, 5.320000519513086e-02, 2.87999830830445e-02, 6.800027679893472e-03, -1.279999301047575e-02, -3.000000872312006e-02, -4.479997860436594e-02, -5.719999423505268e-02, -6.720000168561552e-02, -7.480000840660841e-02, -7.999999568464292e-02, -8.280000139236056e-02, -8.319999886276018e-02, -8.120000574109125e-02, -7.680000225543641e-02, -6.999999047518948e-02, -6.08000095033342e-02, -4.91999968242692e-02, -3.519998324396963e-02, -1.880001628455318e-02, 0e+00, 2.120002096795705e-02, 4.480004616180527e-02, 7.08000774441898e-02, 9.919993985040314e-02, 1.299999573714438e-01, 1.631999977444513e-01, 1.988000240607829e-01, 2.368000658930474e-01, 2.772001231268431e-01, 3.199998885173765e-01, 3.651999468908919e-01, 4.127999908641666e-01, 4.628000206657075e-01, 5.152000959001592e-01, 5.700001269316927e-01, 6.271998549102407e-01, 6.867999019828859e-01, 7.487999346551485e-01, 8.132000126458961e-01, 8.800000765788678e-01, 9.492001261116404e-01, 1.020799786877195e+00, 1.094799852449942e+00, 1.171199963227307e+00, 1.25e+00, 1.331200082434323e+00, 1.414800210072127e+00, 1.500800263705827e+00, 1.589199828094172e+00, 1.679999838163842e+00, 1.773200012645329e+00, 1.868800113466951e+00, 1.966800140397485e+00, 2.067200212532638e+00, 2.169999828912732e+00, 2.27519973827698e+00, 2.382800050469167e+00, 2.492800050467746e+00, 2.60520021510817e+00, 2.720000305742785e+00, 2.837199616497133e+00, 2.956799782775586e+00, 3.078799875051357e+00, 3.203200131855327e+00, 3.330000076578157e+00, 3.459200185714367e+00, 3.590799667667905e+00, 3.724799852451079e+00, 3.861199963228444e+00, 4e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt new file mode 100644 index 0000000000..b394853149 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_MultiplyByParameter.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +gain1.u=[0e+00, 2e-02, 4e-02, 6e-02, 8e-02, 1e-01, 1.2e-01, 1.4e-01, 1.6e-01, 1.8e-01, 2e-01, 2.2e-01, 2.4e-01, 2.6e-01, 2.8e-01, 3e-01, 3.2e-01, 3.4e-01, 3.6e-01, 3.8e-01, 4e-01, 4.2e-01, 4.4e-01, 4.6e-01, 4.8e-01, 5e-01, 5.2e-01, 5.4e-01, 5.600000000000001e-01, 5.8e-01, 6e-01, 6.2e-01, 6.4e-01, 6.6e-01, 6.8e-01, 7e-01, 7.2e-01, 7.4e-01, 7.6e-01, 7.8e-01, 8e-01, 8.2e-01, 8.4e-01, 8.6e-01, 8.8e-01, 9e-01, 9.2e-01, 9.399999999999999e-01, 9.6e-01, 9.8e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00, 1.52e+00, 1.54e+00, 1.56e+00, 1.58e+00, 1.6e+00, 1.62e+00, 1.64e+00, 1.66e+00, 1.68e+00, 1.7e+00, 1.72e+00, 1.74e+00, 1.76e+00, 1.78e+00, 1.8e+00, 1.82e+00, 1.84e+00, 1.86e+00, 1.88e+00, 1.9e+00, 1.92e+00, 1.94e+00, 1.96e+00, 1.98e+00, 2e+00] +gain1.y=[0e+00, 5.000000186264474e-02, 1.000000037252895e-01, 1.500000093132189e-01, 2.000000074505756e-01, 2.499999962747083e-01, 3.00000018626444e-01, 3.499999925494183e-01, 4.000000149011346e-01, 4.499999701977309e-01, 4.999999925494416e-01, 5.500000149011524e-01, 6.00000037252863e-01, 6.500000000000711e-01, 6.999999850988478e-01, 7.499999701977664e-01, 8.000000298022691e-01, 8.500000149011346e-01, 8.999999403954617e-01, 9.499999999999645e-01, 9.999999850988832e-01, 1.049999985098741e+00, 1.100000029802305e+00, 1.149999955296579e+00, 1.200000074505726e+00, 1.25e+00, 1.299999999999858e+00, 1.349999970197838e+00, 1.399999970197696e+00, 1.450000089406843e+00, 1.499999940395533e+00, 1.549999940395391e+00, 1.600000059604538e+00, 1.649999910593228e+00, 1.700000029802376e+00, 1.750000029802234e+00, 1.799999880790923e+00, 1.850000000000071e+00, 1.899999999999929e+00, 1.950000119209077e+00, 1.999999970197766e+00, 2.049999970197624e+00, 2.099999970197482e+00, 2.150000059604751e+00, 2.200000059604609e+00, 2.250000059604467e+00, 2.299999910593157e+00, 2.349999910593015e+00, 2.400000149011452e+00, 2.450000000000142e+00, 2.5e+00, 2.549999999999148e+00, 2.599999999998295e+00, 2.650000238416022e+00, 2.699999940397274e+00, 2.749999940396421e+00, 2.799999940395213e+00, 2.849999940394715e+00, 2.900000178812442e+00, 2.950000178811589e+00, 2.999999880792842e+00, 3.049999880791989e+00, 3.099999880791137e+00, 3.150000119208863e+00, 3.200000119208011e+00, 3.250000119207158e+00, 3.299999821188411e+00, 3.349999821187558e+00, 3.400000059605285e+00, 3.450000059604787e+00, 3.500000059603579e+00, 3.550000059602726e+00, 3.599999761583978e+00, 3.650000000001705e+00, 3.700000000000852e+00, 3.75e+00, 3.799999999999148e+00, 3.849999999998295e+00, 3.900000238416022e+00, 3.949999940397274e+00, 3.999999940396421e+00, 4.050000178813508e+00, 4.099999940395568e+00, 4.150000178810452e+00, 4.199999940396137e+00, 4.24999988079e+00, 4.300000119208863e+00, 4.349999880791705e+00, 4.400000119208295e+00, 4.449999880791137e+00, 4.50000011921e+00, 4.550000059603863e+00, 4.599999821189548e+00, 4.650000059604432e+00, 4.699999821186492e+00, 4.750000059605e+00, 4.800000298018747e+00, 4.849999761587389e+00, 4.899999999999432e+00, 4.949999761583411e+00, 5e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PID.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PID.txt new file mode 100644 index 0000000000..93cd17da6d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PID.txt @@ -0,0 +1,16 @@ +last-generated=2020-10-15 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +limPID.u_s=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +limPID.u_m=[5e-01, 5e-01] +limPID.y=[5e-01, 5.049999953433857e-01, 5.099999906867714e-01, 5.149999860301567e-01, 5.199999813735693e-01, 5.24999975785618e-01, 5.29999972060354e-01, 5.350000260770249e-01, 5.400000223517285e-01, 5.450000149011879e-01, 5.50000011175882e-01, 5.550000074505762e-01, 5.600000037252704e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +noLimPID.y=[5e-01, 5.049999953433857e-01, 5.099999906867714e-01, 5.149999860301567e-01, 5.199999813735693e-01, 5.24999975785618e-01, 5.29999972060354e-01, 5.350000260770249e-01, 5.400000223517285e-01, 5.450000149011879e-01, 5.50000011175882e-01, 5.550000074505762e-01, 5.600000037252704e-01, -9.952290088252989e+00, -9.052030614875273e+00, -8.237973679077834e+00, -7.501870384452208e+00, -6.836279029675234e+00, -6.23449319202321e+00, -5.690451499972388e+00, -5.198658607042629e+00, -4.754133427134535e+00, -4.352372601280627e+00, -3.98933115239112e+00, -3.661329580766244e+00, -3.365019559860229e+00, 6.960971704256596e+00, 6.351591737898935e+00, 5.8007050191013e+00, 5.302713956885609e+00, 4.852592506524368e+00, 4.445779416682665e+00, 4.078145256666335e+00, 3.74596351470655e+00, 3.445863826758359e+00, 3.174799290371137e+00, 2.930009462690693e+00, 2.708991867097916e+00, -8.007813098757234e+00, -7.292609205784988e+00, -6.645978820816525e+00, -6.061356824613599e+00, -5.532839123044156e+00, -5.055091232277409e+00, -4.623283289384259e+00, -4.233044186743177e+00, -3.880417867810531e+00, -3.561817610306849e+00, -3.274007745282737e+00, -3.01406478829128e+00, -2.779341697692871e+00, 7.490917981460541e+00, 6.831112154355686e+00, 6.234584633073051e+00, 5.69529882897934e+00, 5.207799992553523e+00, 4.767168145892856e+00, 4.368945807517083e+00, 4.009095103929908e+00, 3.683965357884337e+00, 3.390244679198751e+00, 3.124947673692733e+00, 2.88537703985181e+00, -7.848211417913685e+00, -7.148197185545346e+00, -6.515319835095553e+00, -5.94315959038448e+00, -5.425887459776115e+00, -4.958320461878563e+00, -4.535723591436895e+00, -4.153816748590518e+00, -3.808730621090627e+00, -3.496962926543181e+00, -3.215338745630475e+00, -2.960990423273568e+00, -2.731321811676025e+00, 7.534368809725732e+00, 6.870428324297951e+00, 6.270159536016375e+00, 5.727487728321822e+00, 5.236925686520907e+00, 4.793522459424533e+00, 4.392791955273442e+00, 4.030672458608609e+00, 3.703489211834343e+00, 3.407910069650518e+00, 3.14093197280038e+00, 2.899841418905063e+00, -7.835122715376613e+00, -7.136355890073677e+00, -6.504606737191692e+00, -5.93346405788314e+00, -5.417114608259317e+00, -4.950382553132984e+00, -4.528540993492846e+00, -4.147317935728741e+00, -3.802850504922505e+00, -3.491642375993794e+00, -3.210524596755862e+00, -2.956634515413885e+00, -2.727380275726318e+00] +limP.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01, -5e-01] +limPI.y=[5e-01, 5.049999953433857e-01, 5.099999906867714e-01, 5.149999860301567e-01, 5.199999813735693e-01, 5.24999975785618e-01, 5.29999972060354e-01, 5.350000260770249e-01, 5.400000223517285e-01, 5.450000149011879e-01, 5.50000011175882e-01, 5.550000074505762e-01, 5.600000037252704e-01, -4.400000000000355e-01, -4.449999925494239e-01, -4.499999850988832e-01, -4.550000149011346e-01, -4.600000074505673e-01, -4.649999999999467e-01, -4.699999999999823e-01, -4.749999925494416e-01, -4.799999925494682e-01, -4.850000149011523e-01, -4.900000074505495e-01, -4.950000074505406e-01, -5e-01, 5.04999999999929e-01, 5.099999850989188e-01, 5.149999850988477e-01, 5.199999850990253e-01, 5.249999701977665e-01, 5.299999701976954e-01, 5.350000298022691e-01, 5.400000149008681e-01, 5.450000149011879e-01, 5.500000149011168e-01, 5.550000000001065e-01, 5.600000000000355e-01, -4.400000000000355e-01, -4.450000000001066e-01, -4.499999850988832e-01, -4.550000149011346e-01, -4.600000149010635e-01, -4.649999999999467e-01, -4.699999999999823e-01, -4.750000000000888e-01, -4.79999985098901e-01, -4.850000149011523e-01, -4.900000149010812e-01, -4.949999999999289e-01, -5e-01, 5.049999999998579e-01, 5.099999999997158e-01, 5.149999999995737e-01, 5.199999701979974e-01, 5.249999701978553e-01, 5.299999701976776e-01, 5.350000298022158e-01, 5.400000298020737e-01, 5.450000298019316e-01, 5.500000000003552e-01, 5.550000000002131e-01, 5.60000000000071e-01, -4.4e-01, -4.45e-01, -4.5e-01, -4.55e-01, -4.6e-01, -4.65e-01, -4.7e-01, -4.75e-01, -4.8e-01, -4.85e-01, -4.9e-01, -4.95e-01, -5e-01, 5.049999999998579e-01, 5.099999999997158e-01, 5.149999999995737e-01, 5.199999701979974e-01, 5.249999701978553e-01, 5.299999701976776e-01, 5.350000298022158e-01, 5.400000298020737e-01, 5.450000298019316e-01, 5.500000000003552e-01, 5.550000000002131e-01, 5.60000000000071e-01, -4.4e-01, -4.45e-01, -4.5e-01, -4.55e-01, -4.6e-01, -4.65e-01, -4.7e-01, -4.75e-01, -4.8e-01, -4.85e-01, -4.9e-01, -4.95e-01, -5e-01] +limPD.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt new file mode 100644 index 0000000000..c4e8eb30f9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialDerivativeOutput.txt @@ -0,0 +1,13 @@ +last-generated=2021-04-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 2.000000029802322e-01] +limPID.y=[2.000000029802322e-01, 1.637323956657642e-01, 1.340515780397024e-01, 1.09754651384102e-01, 8.985718578826983e-02, 7.356503337125767e-02, 6.022717387193266e-02, 4.930820801069234e-02, 4.036892047772475e-02, 3.305059706008012e-02, 2.706082340238934e-02, 2.215831070928619e-02, 1.814527410623112e-02, 1.485992618116706e-02, 1.21706925285995e-02, 9.967099716310648e-03, 8.162441600101095e-03, 6.684211996261016e-03, 5.473475251068925e-03, 4.482537654406879e-03, 3.670969908470475e-03, 3.006509154281315e-03, 2.462431107340098e-03, 2.016579381817847e-03, 1.651466543068693e-03, 1.352334162220359e-03, 1.107365857944015e-03, 9.068860641001513e-04, 7.42683778607608e-04, 6.082897544349083e-04, 4.981867461559625e-04, 4.079847521410948e-04, 3.341136744959179e-04, 2.736095271319089e-04, 2.242045912022062e-04, 1.839660849048837e-04, 1.512768050662869e-04, 1.248629106112001e-04, 1.033595493413561e-04, 8.538121270281738e-05, 7.0968813177785e-05, 5.925938804931915e-05, 4.945088970149428e-05, 4.10868915459759e-05, 3.399928178485262e-05, 2.794677580029565e-05, 2.278315771174431e-05, 1.822647352836766e-05, 1.445348601678522e-05, 1.158960614542508e-05, 8.962206266005524e-06, 6.87781013609358e-06, 5.382428668839482e-06, 4.229282179437137e-06, 3.341101553592752e-06, 2.712020327639719e-06, 2.280988483331259e-06, 1.986948322969379e-06, 1.768846750216611e-06, 1.619389787543014e-06, 1.688792042613292e-06, 1.793147954684967e-06, 1.892675225944911e-06, 1.947590360710273e-06, 1.918111517577516e-06, 1.764454254397068e-06, 1.732127867411867e-06, 1.794568299161417e-06, 1.824927797560019e-06, 1.809138302137314e-06, 1.733132219732508e-06, 1.582841951293076e-06, 1.370469477191658e-06, 1.315187765014957e-06, 1.257571048272755e-06, 1.197619326095723e-06, 1.135332012902917e-06, 1.070710151381813e-06, 1.003753285085139e-06, 9.3446141349261e-07, 8.628339384870768e-07, 7.888719844620687e-07, 7.125749685413921e-07, 6.339423527455374e-07, 5.52975253941089e-07, 4.701715763985888e-07, 4.464904567869981e-07, 4.228091323183344e-07, 3.99128012706161e-07, 3.754468646728182e-07, 3.517657450608672e-07, 3.280844205922038e-07, 3.044033009801152e-07, 2.807221529467724e-07, 2.570408568990455e-07, 2.33359708865888e-07, 2.096785750427311e-07, 1.859974412206259e-07, 1.623161309624308e-07, 1.386349971397998e-07, 1.149538633171687e-07] +limPD.y=[2.000000029802322e-01, 1.637323956657642e-01, 1.340515780397024e-01, 1.09754651384102e-01, 8.985718578826983e-02, 7.356503337125767e-02, 6.022717387193266e-02, 4.930820801069234e-02, 4.036892047772475e-02, 3.305059706008012e-02, 2.706082340238934e-02, 2.215831070928619e-02, 1.814527410623112e-02, 1.485992618116706e-02, 1.21706925285995e-02, 9.967099716310648e-03, 8.162441600101095e-03, 6.684211996261016e-03, 5.473475251068925e-03, 4.482537654406879e-03, 3.670969908470475e-03, 3.006509154281315e-03, 2.462431107340098e-03, 2.016579381817847e-03, 1.651466543068693e-03, 1.352334162220359e-03, 1.107365857944015e-03, 9.068860641001513e-04, 7.42683778607608e-04, 6.082897544349083e-04, 4.981867461559625e-04, 4.079847521410948e-04, 3.341136744959179e-04, 2.736095271319089e-04, 2.242045912022062e-04, 1.839660849048837e-04, 1.512768050662869e-04, 1.248629106112001e-04, 1.033595493413561e-04, 8.538121270281738e-05, 7.0968813177785e-05, 5.925938804931915e-05, 4.945088970149428e-05, 4.10868915459759e-05, 3.399928178485262e-05, 2.794677580029565e-05, 2.278315771174431e-05, 1.822647352836766e-05, 1.445348601678522e-05, 1.158960614542508e-05, 8.962206266005524e-06, 6.87781013609358e-06, 5.382428668839482e-06, 4.229292638655176e-06, 3.341136341748155e-06, 2.712093542017845e-06, 2.281117176774641e-06, 1.987152049854319e-06, 1.769147906936282e-06, 1.619804176113647e-06, 1.689299086122983e-06, 1.793752541310205e-06, 1.893381107719632e-06, 1.948400265734409e-06, 1.919026923774287e-06, 1.765475730988474e-06, 1.733257346290996e-06, 1.795806917185211e-06, 1.826274645236826e-06, 1.810591561272234e-06, 1.734689274737751e-06, 1.584499391575665e-06, 1.372223551816418e-06, 1.317038586938171e-06, 1.259516457453738e-06, 1.199657276179317e-06, 1.137460571884735e-06, 1.072927272227134e-06, 1.006056807752684e-06, 9.368492916266704e-07, 8.653041831810642e-07, 7.914224918991872e-07, 7.15203692365974e-07, 6.366471903184391e-07, 5.557542720185668e-07, 4.730222738656287e-07, 4.493711959405873e-07, 4.257199418035838e-07, 4.020688922999236e-07, 3.78417814374554e-07, 3.547667648708938e-07, 3.311155107338906e-07, 3.074644612302304e-07, 2.838133833048608e-07, 2.601621291678576e-07, 2.365110796641974e-07, 2.12860001738345e-07, 1.892089380243129e-07, 1.655576980981644e-07, 1.419066343836495e-07, 1.182555706691346e-07] +limPID.D.y=[2.000000029802322e-01, 1.637323956657642e-01, 1.340515780397024e-01, 1.09754651384102e-01, 8.985718578826983e-02, 7.356503337125767e-02, 6.022717387193266e-02, 4.930820801069234e-02, 4.036892047772475e-02, 3.305059706008012e-02, 2.706082340238934e-02, 2.215831070928619e-02, 1.814527410623112e-02, 1.485992618116706e-02, 1.21706925285995e-02, 9.967099716310648e-03, 8.162441600101095e-03, 6.684211996261016e-03, 5.473475251068925e-03, 4.482537654406879e-03, 3.670969908470475e-03, 3.006509154281315e-03, 2.462431107340098e-03, 2.016579381817847e-03, 1.651466543068693e-03, 1.352334162220359e-03, 1.107365857944015e-03, 9.068860641001513e-04, 7.42683778607608e-04, 6.082897544349083e-04, 4.981867461559625e-04, 4.079847521410948e-04, 3.341136744959179e-04, 2.736095271319089e-04, 2.242045912022062e-04, 1.839660849048837e-04, 1.512768050662869e-04, 1.248629106112001e-04, 1.033595493413561e-04, 8.538121270281738e-05, 7.0968813177785e-05, 5.925938804931915e-05, 4.945088970149428e-05, 4.10868915459759e-05, 3.399928178485262e-05, 2.794677580029565e-05, 2.278315771174431e-05, 1.822647352836766e-05, 1.445348601678522e-05, 1.158960614542508e-05, 8.962206266005524e-06, 6.87781013609358e-06, 5.382428668839482e-06, 4.229292638655176e-06, 3.341136341748155e-06, 2.712093542017845e-06, 2.281117176774641e-06, 1.987152049854319e-06, 1.769147906936282e-06, 1.619804176113647e-06, 1.689299086122983e-06, 1.793752541310205e-06, 1.893381107719632e-06, 1.948400265734409e-06, 1.919026923774287e-06, 1.765475730988474e-06, 1.733257346290996e-06, 1.795806917185211e-06, 1.826274645236826e-06, 1.810591561272234e-06, 1.734689274737751e-06, 1.584499391575665e-06, 1.372223551816418e-06, 1.317038586938171e-06, 1.259516457453738e-06, 1.199657276179317e-06, 1.137460571884735e-06, 1.072927272227134e-06, 1.006056807752684e-06, 9.368492916266704e-07, 8.653041831810642e-07, 7.914224918991872e-07, 7.15203692365974e-07, 6.366471903184391e-07, 5.557542720185668e-07, 4.730222738656287e-07, 4.493711959405873e-07, 4.257199418035838e-07, 4.020688922999236e-07, 3.78417814374554e-07, 3.547667648708938e-07, 3.311155107338906e-07, 3.074644612302304e-07, 2.838133833048608e-07, 2.601621291678576e-07, 2.365110796641974e-07, 2.12860001738345e-07, 1.892089380243129e-07, 1.655576980981644e-07, 1.419066343836495e-07, 1.182555706691346e-07] +limPD.D.y=[2.000000029802322e-01, 1.637323956657642e-01, 1.340515780397024e-01, 1.09754651384102e-01, 8.985718578826983e-02, 7.356503337125767e-02, 6.022717387193266e-02, 4.930820801069234e-02, 4.036892047772475e-02, 3.305059706008012e-02, 2.706082340238934e-02, 2.215831070928619e-02, 1.814527410623112e-02, 1.485992618116706e-02, 1.21706925285995e-02, 9.967099716310648e-03, 8.162441600101095e-03, 6.684211996261016e-03, 5.473475251068925e-03, 4.482537654406879e-03, 3.670969908470475e-03, 3.006509154281315e-03, 2.462431107340098e-03, 2.016579381817847e-03, 1.651466543068693e-03, 1.352334162220359e-03, 1.107365857944015e-03, 9.068860641001513e-04, 7.42683778607608e-04, 6.082897544349083e-04, 4.981867461559625e-04, 4.079847521410948e-04, 3.341136744959179e-04, 2.736095271319089e-04, 2.242045912022062e-04, 1.839660849048837e-04, 1.512768050662869e-04, 1.248629106112001e-04, 1.033595493413561e-04, 8.538121270281738e-05, 7.0968813177785e-05, 5.925938804931915e-05, 4.945088970149428e-05, 4.10868915459759e-05, 3.399928178485262e-05, 2.794677580029565e-05, 2.278315771174431e-05, 1.822647352836766e-05, 1.445348601678522e-05, 1.158960614542508e-05, 8.962206266005524e-06, 6.87781013609358e-06, 5.382428668839482e-06, 4.229292638655176e-06, 3.341136341748155e-06, 2.712093542017845e-06, 2.281117176774641e-06, 1.987152049854319e-06, 1.769147906936282e-06, 1.619804176113647e-06, 1.689299086122983e-06, 1.793752541310205e-06, 1.893381107719632e-06, 1.948400265734409e-06, 1.919026923774287e-06, 1.765475730988474e-06, 1.733257346290996e-06, 1.795806917185211e-06, 1.826274645236826e-06, 1.810591561272234e-06, 1.734689274737751e-06, 1.584499391575665e-06, 1.372223551816418e-06, 1.317038586938171e-06, 1.259516457453738e-06, 1.199657276179317e-06, 1.137460571884735e-06, 1.072927272227134e-06, 1.006056807752684e-06, 9.368492916266704e-07, 8.653041831810642e-07, 7.914224918991872e-07, 7.15203692365974e-07, 6.366471903184391e-07, 5.557542720185668e-07, 4.730222738656287e-07, 4.493711959405873e-07, 4.257199418035838e-07, 4.020688922999236e-07, 3.78417814374554e-07, 3.547667648708938e-07, 3.311155107338906e-07, 3.074644612302304e-07, 2.838133833048608e-07, 2.601621291678576e-07, 2.365110796641974e-07, 2.12860001738345e-07, 1.892089380243129e-07, 1.655576980981644e-07, 1.419066343836495e-07, 1.182555706691346e-07] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt new file mode 100644 index 0000000000..21a37f9c7f --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDInitialState.txt @@ -0,0 +1,13 @@ +last-generated=2021-04-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +limPID.I.y=[2.5e-01, 2.648347917490785e-01, 2.793437248907814e-01, 2.935335645527695e-01, 3.074113738859043e-01, 3.209841539373645e-01, 3.342584985179366e-01, 3.472410734633364e-01, 3.599384151450494e-01, 3.723565892071595e-01, 3.84501962060119e-01, 3.963803953958113e-01, 4.079977602711207e-01, 4.193598979527058e-01, 4.304722838989572e-01, 4.413404996562728e-01, 4.519699849445077e-01, 4.62365863864955e-01, 4.725333082123843e-01, 4.824772798567049e-01, 4.922026963116993e-01, 5.017144145513708e-01, 5.110171448205825e-01, 5.201153121517313e-01, 5.290136384380102e-01, 5.377163290977478e-01, 5.462277611718898e-01, 5.545521289999338e-01, 5.626935949242997e-01, 5.706561273333302e-01, 5.7844357762517e-01, 5.860599857452123e-01, 5.935089640737523e-01, 6.007941866605983e-01, 6.079193328397474e-01, 6.148878972985005e-01, 6.21703257434822e-01, 6.283689109770939e-01, 6.348879964029885e-01, 6.412638515819924e-01, 6.474994980213683e-01, 6.535981915060304e-01, 6.595627742698355e-01, 6.653963286052201e-01, 6.711016906808966e-01, 6.766816443276022e-01, 6.821389153168573e-01, 6.874763375838584e-01, 6.926963980626114e-01, 6.978017639540424e-01, 7.027949690818787e-01, 7.076783822237548e-01, 7.124545068026762e-01, 7.171256078028178e-01, 7.216941021078125e-01, 7.261621899264453e-01, 7.305320491001064e-01, 7.348058849934973e-01, 7.389857837848666e-01, 7.430738316465465e-01, 7.470719719828374e-01, 7.509822790020536e-01, 7.548066955611739e-01, 7.585470097974096e-01, 7.622051290645097e-01, 7.657827819116673e-01, 7.692818550709694e-01, 7.72703999580809e-01, 7.760509824867914e-01, 7.793244131159823e-01, 7.825259007918748e-01, 7.856569952502227e-01, 7.887192877721296e-01, 7.917142453799036e-01, 7.946434589354581e-01, 7.975082397460938e-01, 8.003101375240484e-01, 8.030504039839153e-01, 8.057304696397266e-01, 8.08351570753951e-01, 8.109151094667852e-01, 8.134223812853699e-01, 8.158744590899536e-01, 8.182727137961237e-01, 8.206182778974773e-01, 8.229122107658846e-01, 8.251557914397522e-01, 8.273500193716818e-01, 8.294960866534324e-01, 8.315949469627308e-01, 8.336477327950753e-01, 8.356553263929984e-01, 8.376188245719883e-01, 8.395391689039631e-01, 8.414173726685362e-01, 8.432542107254821e-01, 8.450507559665463e-01, 8.468077728996652e-01, 8.485262361465952e-01, 8.502069099751266e-01, 8.518506288528442e-01] +limPID.D.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +limPI.I.y=[2.5e-01, 2.648347917490785e-01, 2.793437248907814e-01, 2.935335645527695e-01, 3.074113738859043e-01, 3.209841539373645e-01, 3.342584985179366e-01, 3.472410734633364e-01, 3.599384151450494e-01, 3.723565892071595e-01, 3.84501962060119e-01, 3.963803953958113e-01, 4.079977602711207e-01, 4.193598979527058e-01, 4.304722838989572e-01, 4.413404996562728e-01, 4.519699849445077e-01, 4.62365863864955e-01, 4.725333082123843e-01, 4.824772798567049e-01, 4.922026963116993e-01, 5.017144145513708e-01, 5.110171448205825e-01, 5.201153121517313e-01, 5.290136384380102e-01, 5.377163290977478e-01, 5.462277611718898e-01, 5.545521289999338e-01, 5.626935949242997e-01, 5.706561273333302e-01, 5.7844357762517e-01, 5.860599857452123e-01, 5.935089640737523e-01, 6.007941866605983e-01, 6.079193328397474e-01, 6.148878972985005e-01, 6.21703257434822e-01, 6.283689109770939e-01, 6.348879964029885e-01, 6.412638515819924e-01, 6.474994980213683e-01, 6.535981915060304e-01, 6.595627742698355e-01, 6.653963286052201e-01, 6.711016906808966e-01, 6.766816443276022e-01, 6.821389153168573e-01, 6.874763375838584e-01, 6.926963980626114e-01, 6.978017639540424e-01, 7.027949690818787e-01, 7.076783822237548e-01, 7.124545068026762e-01, 7.171256078028178e-01, 7.216941021078125e-01, 7.261621899264453e-01, 7.305320491001064e-01, 7.348058849934973e-01, 7.389857837848666e-01, 7.430738316465465e-01, 7.470719719828374e-01, 7.509822790020536e-01, 7.548066955611739e-01, 7.585470097974096e-01, 7.622051290645097e-01, 7.657827819116673e-01, 7.692818550709694e-01, 7.72703999580809e-01, 7.760509824867914e-01, 7.793244131159823e-01, 7.825259007918748e-01, 7.856569952502227e-01, 7.887192877721296e-01, 7.917142453799036e-01, 7.946434589354581e-01, 7.975082397460938e-01, 8.003101375240484e-01, 8.030504039839153e-01, 8.057304696397266e-01, 8.08351570753951e-01, 8.109151094667852e-01, 8.134223812853699e-01, 8.158744590899536e-01, 8.182727137961237e-01, 8.206182778974773e-01, 8.229122107658846e-01, 8.251557914397522e-01, 8.273500193716818e-01, 8.294960866534324e-01, 8.315949469627308e-01, 8.336477327950753e-01, 8.356553263929984e-01, 8.376188245719883e-01, 8.395391689039631e-01, 8.414173726685362e-01, 8.432542107254821e-01, 8.450507559665463e-01, 8.468077728996652e-01, 8.485262361465952e-01, 8.502069099751266e-01, 8.518506288528442e-01] +limPID.D.u=[2.5e-01, 2.5e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDScale.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDScale.txt new file mode 100644 index 0000000000..6fef86583b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDScale.txt @@ -0,0 +1,14 @@ +last-generated=2020-10-27 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+02] +pidSca.y=[1e+00, 4.789353311061859e-01, 3.822728991508484e-01, 2.069125473499298e-01, 3.256407380104065e-02, -8.96126925945282e-02, -1.420066803693771e-01, -1.338689178228378e-01, -8.905824273824692e-02, -3.38137298822403e-02, 1.184174045920372e-02, 3.781681135296822e-02, 4.341181367635727e-02, 3.41964103281498e-02, 1.814253069460389e-02, 2.417445881292224e-03, -8.448862470686436e-03, -1.296756137162447e-02, -1.205309107899666e-02, -7.901253178715706e-03, -2.886770758777857e-03, 1.20341859292239e-03, 3.488563466817141e-03, 3.933259751647711e-03, 3.058372065424919e-03, 1.590027124620974e-03, -9.014930576086044e-02, -2.367985099554062e-01, -2.615013122558593e-01, -2.001792341470721e-01, -1.014385521411896e-01, -7.719055749475956e-03, 5.506547912955284e-02, 7.932742685079575e-02, 7.155080139636993e-02, 4.538770765066147e-02, 1.508557889610529e-02, -8.934730663895607e-03, -2.180192992091179e-02, -2.366667613387108e-02, -1.787730678915977e-02, -8.857160806655884e-03, -4.166644066572189e-04, 5.155478604137897e-03, 7.229476235806942e-03, 6.432235240936279e-03, 4.016883671283722e-03, 1.270608510822058e-03, -8.77715356182307e-04, -2.005331218242645e-03, -2.140825847163796e-03, 8.873914927244186e-02, 2.351881712675095e-01, 2.602470219135284e-01, 1.995226591825485e-01, 1.013631001114838e-01, 8.041718974708961e-03, -5.458016321063008e-02, -7.888056337833398e-02, -7.126054912805557e-02, -4.528459161520004e-02, -1.513375155627728e-02, 8.803180418908596e-03, 2.165543287992477e-02, 2.355383709073067e-02, 1.781958527863026e-02, 8.852324448525906e-03, 4.481221840251237e-04, -5.110226105898619e-03, -7.18884589150548e-03, -6.406914442777634e-03, -4.009198397397995e-03, -1.276727532967925e-03, 8.645629859529436e-04, 1.991549739614129e-03, 2.1307363640517e-03, -8.870939910411835e-02, -2.351909279823303e-01, -2.602469623088837e-01, -1.995230317115784e-01, -1.013630777597427e-01, -8.040299639105797e-03, 5.458372458815575e-02, 7.888416945934296e-02, 7.126276195049286e-02, 4.528495669364929e-02, 1.513325050473213e-02, -8.804482407867908e-03, -2.165680006146431e-02, -2.355478145182133e-02, -1.781991124153137e-02, -8.851906284689903e-03, -4.466319514904171e-04, 5.111661273986101e-03, 7.189638447016478e-03, 6.406730972230434e-03, 4.00816835463047e-03, 1.275305286981165e-03, -8.658168953843415e-04, -1.99226732365787e-03, -2.130822045728564e-03] +pidNoSca.y=[1e+00, 4.789353311061859e-01, 3.822728991508484e-01, 2.069125473499298e-01, 3.256407380104065e-02, -8.96126925945282e-02, -1.420066803693771e-01, -1.338689178228378e-01, -8.905824273824692e-02, -3.38137298822403e-02, 1.184174045920372e-02, 3.781681135296822e-02, 4.341181367635727e-02, 3.41964103281498e-02, 1.814253069460389e-02, 2.417445881292224e-03, -8.448862470686436e-03, -1.296756137162447e-02, -1.205309107899666e-02, -7.901253178715706e-03, -2.886770758777857e-03, 1.20341859292239e-03, 3.488563466817141e-03, 3.933259751647711e-03, 3.058372065424919e-03, 1.590027124620974e-03, -9.014930576086044e-02, -2.367985099554062e-01, -2.615013122558593e-01, -2.001792341470721e-01, -1.014385521411896e-01, -7.719055749475956e-03, 5.506547912955284e-02, 7.932742685079575e-02, 7.155080139636993e-02, 4.538770765066147e-02, 1.508557889610529e-02, -8.934730663895607e-03, -2.180192992091179e-02, -2.366667613387108e-02, -1.787730678915977e-02, -8.857160806655884e-03, -4.166644066572189e-04, 5.155478604137897e-03, 7.229476235806942e-03, 6.432235240936279e-03, 4.016883671283722e-03, 1.270608510822058e-03, -8.77715356182307e-04, -2.005331218242645e-03, -2.140825847163796e-03, 8.873914927244186e-02, 2.351881712675095e-01, 2.602470219135284e-01, 1.995226591825485e-01, 1.013631001114838e-01, 8.041718974708961e-03, -5.458016321063008e-02, -7.888056337833398e-02, -7.126054912805557e-02, -4.528459161520004e-02, -1.513375155627728e-02, 8.803180418908596e-03, 2.165543287992477e-02, 2.355383709073067e-02, 1.781958527863026e-02, 8.852324448525906e-03, 4.481221840251237e-04, -5.110226105898619e-03, -7.18884589150548e-03, -6.406914442777634e-03, -4.009198397397995e-03, -1.276727532967925e-03, 8.645629859529436e-04, 1.991549739614129e-03, 2.1307363640517e-03, -8.870939910411835e-02, -2.351909279823303e-01, -2.602469623088837e-01, -1.995230317115784e-01, -1.013630777597427e-01, -8.040299639105797e-03, 5.458372458815575e-02, 7.888416945934296e-02, 7.126276195049286e-02, 4.528495669364929e-02, 1.513325050473213e-02, -8.804482407867908e-03, -2.165680006146431e-02, -2.355478145182133e-02, -1.781991124153137e-02, -8.851906284689903e-03, -4.466319514904171e-04, 5.111661273986101e-03, 7.189638447016478e-03, 6.406730972230434e-03, 4.00816835463047e-03, 1.275305286981165e-03, -8.658168953843415e-04, -1.99226732365787e-03, -2.130822045728564e-03] +pla1.y=[0e+00, 5.1559033203125e+02, 9.565138549804688e+02, 1.254010986328125e+03, 1.37100830078125e+03, 1.336908569335938e+03, 1.215340942382812e+03, 1.07322900390625e+03, 9.598469848632812e+02, 8.985159912109375e+02, 8.889110717773438e+02, 9.155338745117188e+02, 9.576796875e+02, 9.973937377929688e+02, 1.023802917480469e+03, 1.033819091796875e+03, 1.03029248046875e+03, 1.019064758300781e+03, 1.006182922363281e+03, 9.960396118164062e+02, 9.906620483398438e+02, 9.8994873046875e+02, 9.924576416015625e+02, 9.963055419921875e+02, 9.998812255859375e+02, 1.002224792480469e+03, 6.671682739257812e+02, 4.928116455078125e+02, 2.346250152587882e+02, -1.384116291999078e+00, -1.533397521972656e+02, -2.061290283203125e+02, -1.793009490966797e+02, -1.090006256103516e+02, -3.140669250488281e+01, 2.796784400939941e+01, 5.80350341796875e+01, 6.029745101928711e+01, 4.39409065246582e+01, 2.039728736877441e+01, -8.29462468624115e-01, -1.428817462921143e+01, -1.875493621826172e+01, -1.609680938720703e+01, -9.624416351318359e+00, -2.601985216140747e+00, 2.700508117675781e+00, 5.325768947601318e+00, 5.446922779083252e+00, 3.915814161300659e+00, 1.770267128944397e+00, 3.3592041015625e+02, 5.087093811035156e+02, 7.654321899414062e+02, 1.000479064941406e+03, 1.152078125000001e+03, 1.205006713867188e+03, 1.178601928710938e+03, 1.108780639648438e+03, 1.031561401367188e+03, 9.723833618164062e+02, 9.423389282226562e+02, 9.399805297851562e+02, 9.561929931640625e+02, 9.796039428710938e+02, 1.00074462890625e+03, 1.014172607421875e+03, 1.018653625488281e+03, 1.016035705566406e+03, 1.009607849121094e+03, 1.002619445800781e+03, 9.973338012695312e+02, 9.947091064453125e+02, 9.945777587890625e+02, 9.96094970703125e+02, 9.982282104492188e+02, 6.64072509765625e+02, 4.912832946777344e+02, 2.345622406005859e+02, -4.835880100727081e-01, -1.520836639404297e+02, -2.050157165527344e+02, -1.7860791015625e+02, -1.087823944091797e+02, -3.155963516235352e+01, 2.762020492553711e+01, 5.766434860229492e+01, 6.002176284790039e+01, 4.380791091918945e+01, 2.039565658569336e+01, -7.457870244979858e-01, -1.417414283752441e+01, -1.865499687194824e+01, -1.603548431396484e+01, -9.606104850769043e+00, -2.616883277893066e+00, 2.668593168258667e+00, 5.292293071746826e+00, 5.422306537628174e+00, 3.904057502746582e+00, 1.770305633544922e+00] +pla2.y=[0e+00, 5.1559033203125e+02, 9.565138549804688e+02, 1.254010986328125e+03, 1.37100830078125e+03, 1.336908569335938e+03, 1.215340942382812e+03, 1.07322900390625e+03, 9.598469848632812e+02, 8.985159912109375e+02, 8.889110717773438e+02, 9.155338745117188e+02, 9.576796875e+02, 9.973937377929688e+02, 1.023802917480469e+03, 1.033819091796875e+03, 1.03029248046875e+03, 1.019064758300781e+03, 1.006182922363281e+03, 9.960396118164062e+02, 9.906620483398438e+02, 9.8994873046875e+02, 9.924576416015625e+02, 9.963055419921875e+02, 9.998812255859375e+02, 1.002224792480469e+03, 6.671682739257812e+02, 4.928116455078125e+02, 2.346250152587882e+02, -1.384116291999078e+00, -1.533397521972656e+02, -2.061290283203125e+02, -1.793009490966797e+02, -1.090006256103516e+02, -3.140669250488281e+01, 2.796784400939941e+01, 5.80350341796875e+01, 6.029745101928711e+01, 4.39409065246582e+01, 2.039728736877441e+01, -8.29462468624115e-01, -1.428817462921143e+01, -1.875493621826172e+01, -1.609680938720703e+01, -9.624416351318359e+00, -2.601985216140747e+00, 2.700508117675781e+00, 5.325768947601318e+00, 5.446922779083252e+00, 3.915814161300659e+00, 1.770267128944397e+00, 3.3592041015625e+02, 5.087093811035156e+02, 7.654321899414062e+02, 1.000479064941406e+03, 1.152078125000001e+03, 1.205006713867188e+03, 1.178601928710938e+03, 1.108780639648438e+03, 1.031561401367188e+03, 9.723833618164062e+02, 9.423389282226562e+02, 9.399805297851562e+02, 9.561929931640625e+02, 9.796039428710938e+02, 1.00074462890625e+03, 1.014172607421875e+03, 1.018653625488281e+03, 1.016035705566406e+03, 1.009607849121094e+03, 1.002619445800781e+03, 9.973338012695312e+02, 9.947091064453125e+02, 9.945777587890625e+02, 9.96094970703125e+02, 9.982282104492188e+02, 6.64072509765625e+02, 4.912832946777344e+02, 2.345622406005859e+02, -4.835880100727081e-01, -1.520836639404297e+02, -2.050157165527344e+02, -1.7860791015625e+02, -1.087823944091797e+02, -3.155963516235352e+01, 2.762020492553711e+01, 5.766434860229492e+01, 6.002176284790039e+01, 4.380791091918945e+01, 2.039565658569336e+01, -7.457870244979858e-01, -1.417414283752441e+01, -1.865499687194824e+01, -1.603548431396484e+01, -9.606104850769043e+00, -2.616883277893066e+00, 2.668593168258667e+00, 5.292293071746826e+00, 5.422306537628174e+00, 3.904057502746582e+00, 1.770305633544922e+00] +pidSca.u_s=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt new file mode 100644 index 0000000000..2500bae31e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithReset.txt @@ -0,0 +1,21 @@ +last-generated=2020-10-15 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "10", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +limPIDPar.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +limPIDPar.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -8.79280626828014e-02, -1.879213720517086e-01, -2.879234433172002e-01, -3.879229068745091e-01, -4.879210591316223e-01, -5.879210591316935e-01, -6.879212379456989e-01, -7.879218339918621e-01, -8.879218935966491e-01, -9.879218339920044e-01, -1.087921953201294e+00, -1.187921833992005e+00, -1.287921833992289e+00, -1.381839551714315e+00, -1.45594322681427e+00, -1.513909863363823e+00, -1.556925159839278e+00, -1.585616002250968e+00, -1.600569596667006e+00, -1.602407693862915e+00, -1.591777546102873e+00, -1.569351328362883e+00, -1.535826306404697e+00, -1.491918371093377e+00, -1.438355445861816e+00, -1.375874216550922e+00, -1.305217539666989e+00, -1.227130373851045e+00, -1.142356955786533e+00, -1.051634311676025e+00, -9.556918394485152e-01, -8.560215711587942e-01, -7.560193657903485e-01, -6.560179352788733e-01, -5.560178756713867e-01, -4.560212433356634e-01, -3.560218989834887e-01, -2.560220777988436e-01, -1.560226142398644e-01, -5.602335557341576e-02, 4.397630915040374e-02, 1.439763873819802e-01, 2.439760744568851e-01, 3.439761936663164e-01, 4.439762532711029e-01, 5.438222035577714e-01, 6.407830737459236e-01, 7.343493729497963e-01, 8.244631636811489e-01, 9.109043478965759e-01, 9.934408832596249e-01, 1.071879412470618e+00, 1.146054725771687e+00, 1.215826088923502e+00, 1.281080842018127e+00, 1.341734941354783e+00, 1.397730094303694e+00, 1.449032450825054e+00, 1.495633440282818e+00, 1.537546157836914e+00, 1.574805769434224e+00, 1.607467470043329e+00, 1.63560635785934e+00, 1.659314849890373e+00, 1.678702116012573e+00, 1.69389201424691e+00, 1.705022113340208e+00, 1.712242354021772e+00, 1.715713856685396e+00, 1.715607643127441e+00, 1.712103266027532e+00, 1.705387337573175e+00, 1.69565250567414e+00, 1.683095877988634e+00, 1.667918920516968e+00, 1.650324415253383e+00, 1.630516965781917e+00, 1.608701868188442e+00, 1.585082437090352e+00, 1.55986225605011e+00, 1.533240541017126e+00, 1.505414312433337e+00, 1.476576145548368e+00, 1.446913485237826e+00, 1.416609287261963e+00, 1.38583910337232e+00, 1.3547729851316e+00, 1.323573172025364e+00, 1.292395115476197e+00, 1.261385917663574e+00] +limPIDPar.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -8.315523503317991e-01, -6.571659445762634e-01, -5.037250889426798e-01, -3.575196356073688e-01, -2.171710226446507e-01, -8.290482958321294e-02, 4.505741223692894e-02, 1.664286778186083e-01, 2.809155348876749e-01, 3.883358731785239e-01, 4.88552417948793e-01, 5.81452488899231e-01, 6.669358787605854e-01, 7.449573516662384e-01, 8.155255632948994e-01, 8.786920926935432e-01, 9.345236420631409e-01, 9.831281130858944e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.883176297633638e-01, 9.522520859825896e-01, 9.187181644735511e-01, 8.831523409044501e-01, 8.451948165893555e-01, 8.051964248354775e-01, 7.633561270882084e-01, 7.199461106456174e-01, 6.752906871646882e-01, 6.296642422676086e-01, 5.833237322271572e-01, 5.365244446481083e-01, 4.895150366530458e-01, 4.425296038834719e-01, 3.957895338535309e-01, 3.495044866330811e-01, 3.038718733146516e-01, 2.59076650225576e-01, 2.152896936843513e-01, 1.726691275835037e-01, 1.31359046850277e-01, 9.149040303039171e-02, 5.318083346648168e-02, 1.653424354411175e-02, -1.835806481540203e-02, -5.141770063036036e-02, -8.25795432876338e-02, -1.117895076048865e-01, -1.390072056313474e-01, -1.642016470432281e-01, -1.873551649217861e-01, -2.084596834170176e-01, -2.275169143860018e-01, -2.445394254793154e-01, -2.59547233581543e-01, -2.725703547479723e-01, -2.836458574309051e-01, -2.928184408220585e-01, -3.001396893892218e-01, -3.056672513484955e-01, -3.094646215580948e-01, -3.11600240316983e-01, -3.121470810327165e-01, -3.111819852843394e-01, -3.087852001190186e-01] +limPIDInp.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +limPIDInp.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -8.371426761435474e-02, -1.837109744530678e-01, -2.837121367451687e-01, -3.837118387216607e-01, -4.837108850479126e-01, -5.83710825443339e-01, -6.837109446526997e-01, -7.837113022801416e-01, -8.837113022804259e-01, -9.837112426757812e-01, -1.083711361885071e+00, -1.183711242675781e+00, -1.283711361821691e+00, -1.374566357692213e+00, -1.445965051651001e+00, -1.501631900515733e+00, -1.542549116532241e+00, -1.569318660992175e+00, -1.582526199408328e+00, -1.582790851593018e+00, -1.57075903976725e+00, -1.547101511069753e+00, -1.512512664396392e+00, -1.467704700205489e+00, -1.41340172290802e+00, -1.350336129189652e+00, -1.279246007977496e+00, -1.200870713033018e+00, -1.11594840275344e+00, -1.025209903717041e+00, -9.293778194664486e-01, -8.297811627353893e-01, -7.297785997424855e-01, -6.297770500214366e-01, -5.297769904136658e-01, -4.29780775310598e-01, -3.297815203652483e-01, -2.297816693781387e-01, -1.297822803250366e-01, -2.978312224149704e-02, 7.021649032827604e-02, 1.702165722849829e-01, 2.702162742611911e-01, 3.702163636684421e-01, 4.702164530754089e-01, 5.693567724828519e-01, 6.650879979284234e-01, 7.575094154946715e-01, 8.464483380428528e-01, 9.316664934158325e-01, 1.012947992166304e+00, 1.090102814874307e+00, 1.162969215168103e+00, 1.231416281077994e+00, 1.295339226722717e+00, 1.354660207304443e+00, 1.409327367516065e+00, 1.459313181665179e+00, 1.504614550180082e+00, 1.545250058174133e+00, 1.581259639986827e+00, 1.612703020549413e+00, 1.639659714348636e+00, 1.662225941814408e+00, 1.680514216423035e+00, 1.694651376445346e+00, 1.704777851649411e+00, 1.711045732950188e+00, 1.713618277421118e+00, 1.712668061256409e+00, 1.708375832878995e+00, 1.700929147234723e+00, 1.690521381464301e+00, 1.677349988017718e+00, 1.661616206169128e+00, 1.643522692636159e+00, 1.623273570152632e+00, 1.601073308814556e+00, 1.5771242622085e+00, 1.551628947257996e+00, 1.524784788459216e+00, 1.496787612716273e+00, 1.467827972029084e+00, 1.43809152080111e+00, 1.407759189605713e+00, 1.377004502800933e+00, 1.345995009249002e+00, 1.314890801629196e+00, 1.283844829765231e+00, 1.253001809120178e+00] +limPIDInp.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99999973254151e-01, -8.000264236424139e-01, -6.328510046005249e-01, -4.818284304294963e-01, -3.374447009943612e-01, -1.988495689497846e-01, -6.630807851962334e-02, 5.993176251649857e-02, 1.795891284477222e-01, 2.92391694779745e-01, 3.981587476615014e-01, 4.967532139385454e-01, 5.880676507949829e-01, 6.720146102949381e-01, 7.485565192309829e-01, 8.177044104242848e-01, 8.795092736464234e-01, 9.340423941612244e-01, 9.814127498790235e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.741310147169567e-01, 9.409131376596037e-01, 9.072059457074095e-01, 8.711721057802945e-01, 8.328462243080139e-01, 7.924685678720118e-01, 7.503446115679606e-01, 7.067650801590964e-01, 6.620021893223066e-01, 6.163281202316284e-01, 5.70007339385441e-01, 5.232926905753459e-01, 4.764259159503862e-01, 4.29636850790459e-01, 3.831445872783661e-01, 3.371553880206348e-01, 2.91862819587753e-01, 2.474477981771719e-01, 2.04077240028109e-01, 1.619054675102234e-01, 1.210730067165422e-01, 8.170703173186773e-02, 4.392154890954791e-02, 7.816802021325057e-03, -2.651932835578918e-02, -5.901181511445989e-02, -8.959873416525865e-02, -1.182291870833367e-01, -1.448656396424864e-01, -1.694801449775696e-01, -1.920575563516094e-01, -2.125924299900059e-01, -2.310888578964286e-01, -2.475616024186451e-01, -2.620328068733215e-01, -2.745342999565994e-01, -2.851049483902419e-01, -2.93790980921989e-01, -3.00645433065888e-01, -3.0572709441185e-01, -3.091005877726137e-01, -3.10835273568125e-01, -3.110048481237108e-01, -3.096868014804011e-01, -3.06961864233017e-01] +limPIPar.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +limPIPar.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.233544684060405e-02, 1.087012239084785e-01, 1.681779168646253e-01, 2.299038321298853e-01, 2.930780947208405e-01, 3.569621589180014e-01, 4.20881062135091e-01, 4.842238129377911e-01, 5.464428213420117e-01, 6.070534586906433e-01, 6.656325408886753e-01, 7.218162750490399e-01, 7.752985604982948e-01, 8.258277899773936e-01, 8.732047080993652e-01, 9.172787471222633e-01, 9.579450300762851e-01, 9.951413441182685e-01, 1.028844087308555e+00, 1.059065341949463e+00, 1.085849189520695e+00, 1.10926782031304e+00, 1.129418977852546e+00, 1.146421894287514e+00, 1.160414576530457e+00, 1.171550402158582e+00, 1.179995414061235e+00, 1.185925247431159e+00, 1.189523098268862e+00, 1.190976619720459e+00, 1.190475819979041e+00, 1.18821143486229e+00, 1.184373029562502e+00, 1.179146891343071e+00, 1.172714591026306e+00, 1.16525220107507e+00, 1.156928760969079e+00, 1.147905248195928e+00, 1.138334045176416e+00, 1.128358244895935e+00, 1.118111362119171e+00, 1.107716659673296e+00, 1.09728684028416e+00, 1.086924681961259e+00, 1.076722025871277e+00, 1.066760769096268e+00, 1.057112675795662e+00, 1.047839658946958e+00, 1.038994201339286e+00, 1.030619740486145e+00, 1.02275108570813e+00, 1.015414939865637e+00, 1.00863040744913e+00, 1.00240934466729e+00, 9.96757447719574e-01, 9.916742994843118e-01, 9.871540585772814e-01, 9.831861329084927e-01, 9.797556431005917e-01, 9.768441319465637e-01, 9.7443002259598e-01, 9.724888769742362e-01, 9.709939981897857e-01, 9.699171790282443e-01, 9.692286849021912e-01, 9.688981770235613e-01, 9.688947800243571e-01, 9.691874973224223e-01, 9.697453373369734e-01, 9.705377817153931e-01, 9.715349633332634e-01, 9.72707929641105e-01, 9.740285847220238e-01, 9.754705486419477e-01, 9.770081639289856e-01, 9.786181387568439e-01, 9.802780779466905e-01, 9.819674459522106e-01, 9.836677377650966e-01, 9.853613376617432e-01, 9.87033182011973e-01, 9.886692197017489e-01, 9.902573198006168e-01, 9.917870220771028e-01, 9.93249237537384e-01, 9.946365304730354e-01, 9.959427142248976e-01, 9.971632934852386e-01, 9.982946556157427e-01, 9.993345737457275e-01] +limPIPar.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.450853011109351e-01, 5.806973424172009e-01, 6.073990567275639e-01, 6.257843407786541e-01, 6.36469841003418e-01, 6.400867698330044e-01, 6.372733141098353e-01, 6.286682430263679e-01, 6.149043997325625e-01, 5.966036915779114e-01, 5.743717915239932e-01, 5.487942823310853e-01, 5.204326368357647e-01, 4.898215235591296e-01, 4.574660062789917e-01, 4.238397749025439e-01, 3.893835709992872e-01, 3.545038533367642e-01, 3.195727204021954e-01, 2.849270403385162e-01, 2.508691527039111e-01, 2.176670439487871e-01, 1.855548172632807e-01, 1.547342529401153e-01, 1.253753006458282e-01, 9.761810732392881e-02, 7.157421575139448e-02, 4.732814072890985e-02, 2.493944778549746e-02, 4.444160964339972e-03, -1.414309987942256e-02, -3.082707882610681e-02, -4.563018605784491e-02, -5.859078790173513e-02, -6.976092606782913e-02, -7.920476854091935e-02, -8.699680678719619e-02, -9.322011144488272e-02, -9.796482671420013e-02, -1.013264805078506e-01, -1.034047318487777e-01, -1.043019969759631e-01, -1.041221629822797e-01, -1.029694243831414e-01, -1.009473279118538e-01, -9.81578945343002e-02, -9.470059740009892e-02, -9.067187520936021e-02, -8.616438209051297e-02, -8.126655220985413e-02, -7.606210049074007e-02, -7.062969790895993e-02, -6.504270018519835e-02, -5.936891383472603e-02, -5.367056280374527e-02, -4.800416737856335e-02, -4.242057791755788e-02, -3.696503401531982e-02, -3.167716910807649e-02, -2.65913438051939e-02, -2.173671050203403e-02, -1.71374780245221e-02, -1.281300058904001e-02, -8.778225639892051e-03, -5.043917335569859e-03, -1.616964867765253e-03, 1.499274978072234e-03, 4.304715905359772e-03, 6.802266060792552e-03, 8.997461758553982e-03, 1.089819491649592e-02, 1.251445056003914e-02, 1.385791922527596e-02, 1.49418020875133e-02, 1.578055508434772e-02, 1.638948159935722e-02, 1.67847187833652e-02, 1.698283827637153e-02, 1.700063204471304e-02, 1.685522124171257e-02, 1.656331812880113e-02, 1.614183093629522e-02, 1.560693251022519e-02, 1.497454959737543e-02, 1.42600042745471e-02, 1.347781373216321e-02, 1.264198146213004e-02, 1.176541654616715e-02, 1.086048804621077e-02, 9.938377887010574e-03] +limPIInp.u_s=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +limPIInp.u_m=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.608645812209094e-02, 1.537172124242489e-01, 2.320072577347836e-01, 3.101492411436375e-01, 3.874143958091736e-01, 4.631514370483004e-01, 5.367856871282899e-01, 6.078172060369745e-01, 6.758180418060683e-01, 7.404302358627319e-01, 8.013619147463339e-01, 8.583836887297627e-01, 9.113258959954695e-01, 9.600729493613611e-01, 1.004560828208923e+00, 1.044771826412477e+00, 1.08073042189106e+00, 1.112499489448125e+00, 1.140175675327759e+00, 1.163885235786438e+00, 1.183780329400195e+00, 1.200034730509394e+00, 1.21284032384205e+00, 1.222403637582935e+00, 1.228942155838013e+00, 1.232681514893786e+00, 1.233852624797976e+00, 1.232688902634492e+00, 1.229423407603012e+00, 1.224287390708923e+00, 1.217507355052242e+00, 1.209304315639185e+00, 1.199891824429887e+00, 1.189474473735582e+00, 1.178246736526489e+00, 1.166392672393033e+00, 1.154084539396968e+00, 1.141482735028626e+00, 1.128734720013893e+00, 1.115975856781006e+00, 1.103328335255912e+00, 1.090902066707691e+00, 1.078794025344245e+00, 1.067088972592511e+00, 1.055859804153442e+00, 1.045168270734611e+00, 1.035064559493531e+00, 1.025589006836088e+00, 1.016771801517401e+00, 1.008634209632874e+00, 1.001188986752134e+00, 9.944409011262563e-01, 9.883878937274736e-01, 9.830212641668414e-01, 9.783268570899963e-01, 9.74285301056167e-01, 9.708728732172121e-01, 9.680621673145471e-01, 9.658225197974294e-01, 9.641210436820984e-01, 9.629227510335446e-01, 9.621912232051946e-01, 9.6188867118849e-01, 9.619773028032907e-01, 9.62418794631958e-01, 9.631755360885004e-01, 9.642103337017737e-01, 9.654869411189086e-01, 9.669703230306922e-01, 9.686265587806702e-01, 9.704235721744019e-01, 9.723306931693113e-01, 9.743193349554273e-01, 9.763628919229648e-01, 9.784364104270935e-01, 9.805176178769667e-01, 9.825860301058597e-01, 9.846230110730149e-01, 9.866125658202803e-01, 9.8853999376297e-01, 9.903931548287117e-01, 9.921613368287969e-01, 9.938358633323364e-01, 9.954097328592115e-01, 9.968774318695068e-01, 9.982352206685629e-01, 9.994804881619698e-01, 1.000612256839806e+00, 1.001630548289003e+00, 1.002536416053772e+00] +limPIInp.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 7.701259812574753e-01, 7.810140812976732e-01, 7.83439873548849e-01, 7.781856633381188e-01, 7.660322189331055e-01, 7.477515984889085e-01, 7.24100780782858e-01, 6.958155485389337e-01, 6.636060990661925e-01, 6.281519532203674e-01, 5.900989991751754e-01, 5.500564769261771e-01, 5.08594314061478e-01, 4.662419963726553e-01, 4.234867691993713e-01, 3.807735633781033e-01, 3.385046324739895e-01, 2.970394297412139e-01, 2.566959045654549e-01, 2.177507430315018e-01, 1.80441255581594e-01, 1.449666188712954e-01, 1.114893774536151e-01, 8.013792262172278e-02, 5.100790038704872e-02, 2.41649485540805e-02, -3.532763978867821e-04, -2.253497637885324e-02, -4.239149448716678e-02, -5.995539948344231e-02, -7.527784103722571e-02, -8.842638910599764e-02, -9.948285205799845e-02, -1.085412795820342e-01, -1.157056391239166e-01, -1.210880544684909e-01, -1.248069085947258e-01, -1.269851594598463e-01, -1.277486977785001e-01, -1.272248178720474e-01, -1.255410738478538e-01, -1.228238654114844e-01, -1.191974283306721e-01, -1.147827327385727e-01, -1.096967682242393e-01, -1.040518227264132e-01, -9.795470819773575e-02, -9.150645644051054e-02, -8.480173251453403e-02, -7.792872190475464e-02, -7.096879263762979e-02, -6.399639860473072e-02, -5.707904518672367e-02, -5.027721347664993e-02, -4.364462569355965e-02, -3.722824303551557e-02, -3.106850360716937e-02, -2.519957326977693e-02, -1.964952754479794e-02, -1.444084011018276e-02, -9.590590614275276e-03, -5.110859207831562e-03, -1.008840011699738e-03, 2.71242307066287e-03, 6.053843069821596e-03, 9.01980307845811e-03, 1.161779731262847e-02, 1.385810291294451e-02, 1.575344260500007e-02, 1.731861941516399e-02, 1.857016735740225e-02, 1.952607334722362e-02, 2.020540724103641e-02, 2.062799142399704e-02, 2.081440389156342e-02, 2.078519244931444e-02, 2.056123811830473e-02, 2.016320912898916e-02, 1.961127985084094e-02, 1.892556436359882e-02, 1.812502876724874e-02, 1.722845813423258e-02, 1.625332986295078e-02, 1.521644893127395e-02, 1.413359586149454e-02, 1.301934160404057e-02, 1.188740662429479e-02, 1.075008262682264e-02, 9.618862904750352e-03, 8.50379467010498e-03] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt new file mode 100644 index 0000000000..da1812e4b7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_PIDWithResetScale.txt @@ -0,0 +1,15 @@ +last-generated=2020-10-27 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "6", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+02] +pidSca.y=[1e+00, 4.789353311061859e-01, 3.822728991508484e-01, 2.069125473499298e-01, 3.256407380104065e-02, -8.96126925945282e-02, -1.420066803693771e-01, -1.338689178228378e-01, -8.905824273824692e-02, -3.38137298822403e-02, 1.184174045920372e-02, 3.781681135296822e-02, 4.341181367635727e-02, 3.41964103281498e-02, 1.814253069460389e-02, 2.417445881292224e-03, -8.449100889265537e-03, -1.296858675777912e-02, -1.205248478800058e-02, -7.89909902960062e-03, -2.884963992983103e-03, 1.204618019983172e-03, 3.488857299089432e-03, 3.932801075279713e-03, 3.057450754567981e-03, 1.588993705809116e-03, -9.014783799648285e-02, -2.367986738681793e-01, -2.615011334419249e-01, -2.001790106296542e-01, -1.014383360743523e-01, 4.137855721637607e-04, 5.458060279488564e-02, 7.342061400413513e-02, 6.388809531927109e-02, 3.885588049888611e-02, 1.121398527175188e-02, -9.944651275873184e-03, -2.066577598452568e-02, -2.148099988698959e-02, -1.565990038216114e-02, -7.274489849805832e-03, 2.88546405499801e-04, 5.085897631943226e-03, 6.680207792669535e-03, 5.735563579946756e-03, 3.430895507335663e-03, 9.292137110605836e-04, -9.603649959899485e-04, -1.896467409096658e-03, -1.940432237461209e-03, 8.891788125038147e-02, 2.353428900241852e-01, 2.603276669979095e-01, 1.995340436697006e-01, 1.013261377811425e-01, 7.983366958796428e-03, -5.46367987990376e-02, -7.89192467927932e-02, -7.127602398395538e-02, -4.528040811419487e-02, -1.146174967288971e-02, 8.608768694102764e-03, 1.903318054974079e-02, 2.014057524502277e-02, 1.490404549986124e-02, 7.11924908682704e-03, -9.016035619424656e-06, -4.608259536325932e-03, -6.215888541191816e-03, -5.417254287749529e-03, -3.301070304587483e-03, -9.595282026566565e-04, 8.35668935906142e-04, 1.747739035636187e-03, 1.82018184568733e-03, -8.898844569921494e-02, -2.353599071502686e-01, -2.603070139884949e-01, -1.994939297437668e-01, -1.01285457611084e-01, -7.955091074109077e-03, 5.464806035161018e-02, 7.891583442687988e-02, 7.126430422067642e-02, 4.526663944125175e-02, 1.510731875896454e-02, -8.827473036944866e-03, -2.167111076414585e-02, -2.355927787721157e-02, -1.781675405800343e-02, -7.416092790663242e-03, -5.240460741333663e-04, 4.080183804035187e-03, 5.846962798386812e-03, 5.259867291897535e-03, 3.32660460844636e-03, 1.095537794753909e-03, -6.685389671474695e-04, -1.609862665645778e-03, -1.741873566061258e-03] +pidNoSca.y=[1e+00, 4.789353311061859e-01, 3.822728991508484e-01, 2.069125473499298e-01, 3.256407380104065e-02, -8.96126925945282e-02, -1.420066803693771e-01, -1.338689178228378e-01, -8.905824273824692e-02, -3.38137298822403e-02, 1.184174045920372e-02, 3.781681135296822e-02, 4.341181367635727e-02, 3.41964103281498e-02, 1.814253069460389e-02, 2.417445881292224e-03, -8.449100889265537e-03, -1.296858675777912e-02, -1.205248478800058e-02, -7.89909902960062e-03, -2.884963992983103e-03, 1.204618019983172e-03, 3.488857299089432e-03, 3.932801075279713e-03, 3.057450754567981e-03, 1.588993705809116e-03, -9.014783799648285e-02, -2.367986738681793e-01, -2.615011334419249e-01, -2.001790106296542e-01, -1.014383360743523e-01, 4.137855721637607e-04, 5.458060279488564e-02, 7.342061400413513e-02, 6.388809531927109e-02, 3.885588049888611e-02, 1.121398527175188e-02, -9.944651275873184e-03, -2.066577598452568e-02, -2.148099988698959e-02, -1.565990038216114e-02, -7.274489849805832e-03, 2.88546405499801e-04, 5.085897631943226e-03, 6.680207792669535e-03, 5.735563579946756e-03, 3.430895507335663e-03, 9.292137110605836e-04, -9.603649959899485e-04, -1.896467409096658e-03, -1.940432237461209e-03, 8.891788125038147e-02, 2.353428900241852e-01, 2.603276669979095e-01, 1.995340436697006e-01, 1.013261377811425e-01, 7.983366958796428e-03, -5.46367987990376e-02, -7.89192467927932e-02, -7.127602398395538e-02, -4.528040811419487e-02, -1.146174967288971e-02, 8.608768694102764e-03, 1.903318054974079e-02, 2.014057524502277e-02, 1.490404549986124e-02, 7.11924908682704e-03, -9.016035619424656e-06, -4.608259536325932e-03, -6.215888541191816e-03, -5.417254287749529e-03, -3.301070304587483e-03, -9.595282026566565e-04, 8.35668935906142e-04, 1.747739035636187e-03, 1.82018184568733e-03, -8.898844569921494e-02, -2.353599071502686e-01, -2.603070139884949e-01, -1.994939297437668e-01, -1.01285457611084e-01, -7.955091074109077e-03, 5.464806035161018e-02, 7.891583442687988e-02, 7.126430422067642e-02, 4.526663944125175e-02, 1.510731875896454e-02, -8.827473036944866e-03, -2.167111076414585e-02, -2.355927787721157e-02, -1.781675405800343e-02, -7.416092790663242e-03, -5.240460741333663e-04, 4.080183804035187e-03, 5.846962798386812e-03, 5.259867291897535e-03, 3.32660460844636e-03, 1.095537794753909e-03, -6.685389671474695e-04, -1.609862665645778e-03, -1.741873566061258e-03] +pla1.y=[0e+00, 5.1559033203125e+02, 9.565138549804688e+02, 1.254010986328125e+03, 1.37100830078125e+03, 1.336908569335938e+03, 1.215340942382812e+03, 1.07322900390625e+03, 9.598469848632812e+02, 8.985159912109375e+02, 8.889110717773438e+02, 9.155338745117188e+02, 9.576796875e+02, 9.973937377929688e+02, 1.023802917480469e+03, 1.033819091796875e+03, 1.030292602539062e+03, 1.019063049316406e+03, 1.006180297851562e+03, 9.960380859375e+02, 9.90662109375e+02, 9.899501342773438e+02, 9.924597778320312e+02, 9.963078002929688e+02, 9.998829345703125e+02, 1.002225646972656e+03, 6.671683349609375e+02, 4.92811279296875e+02, 2.346244201660147e+02, -1.384420633315294e+00, -1.533398132324219e+02, -1.899775238037109e+02, -1.595258483886719e+02, -9.272840881347656e+01, -2.22052001953125e+01, 2.988444328308105e+01, 5.468190383911133e+01, 5.453292083740234e+01, 3.832336044311523e+01, 1.653451728820801e+01, -2.417987108230591e+00, -1.393906307220459e+01, -1.725805854797363e+01, -1.430122852325439e+01, -8.16649341583252e+00, -1.792871713638306e+00, 2.851693868637085e+00, 5.007420063018799e+00, 4.919456481933594e+00, 3.409096240997314e+00, 1.426660895347595e+00, 3.357417297363281e+02, 5.087078857421875e+02, 7.655446166992188e+02, 1.000633850097656e+03, 1.152218017578126e+03, 1.2051005859375e+03, 1.17863623046875e+03, 1.10876611328125e+03, 1.03151953125e+03, 9.723362426757812e+02, 9.495113525390625e+02, 9.48788818359375e+02, 9.634554443359375e+02, 9.837218017578125e+02, 1.001614624023438e+03, 1.012687438964844e+03, 1.01608642578125e+03, 1.013528076171875e+03, 1.00787939453125e+03, 1.001904541015625e+03, 9.974844970703125e+02, 9.953741455078125e+02, 9.953784790039062e+02, 9.967467041015625e+02, 9.9859130859375e+02, 6.642059936523438e+02, 4.911957092285156e+02, 2.34359375e+02, -7.000811696052551e-01, -1.522427062988281e+02, -2.050886383056641e+02, -1.786044921875e+02, -1.087309417724609e+02, -3.149297904968262e+01, 2.767750358581543e+01, 5.769866561889648e+01, 6.003094482421875e+01, 4.379818344116211e+01, 2.037660789489746e+01, -7.652122378349304e-01, -1.135125350952148e+01, -1.518834590911865e+01, -1.317745399475098e+01, -7.985503673553467e+00, -2.273990392684937e+00, 2.085249662399292e+00, 4.283353328704834e+00, 4.43674373626709e+00, 3.224758863449097e+00, 1.489430665969849e+00] +pla2.y=[0e+00, 5.1559033203125e+02, 9.565138549804688e+02, 1.254010986328125e+03, 1.37100830078125e+03, 1.336908569335938e+03, 1.215340942382812e+03, 1.07322900390625e+03, 9.598469848632812e+02, 8.985159912109375e+02, 8.889110717773438e+02, 9.155338745117188e+02, 9.576796875e+02, 9.973937377929688e+02, 1.023802917480469e+03, 1.033819091796875e+03, 1.030292602539062e+03, 1.019063049316406e+03, 1.006180297851562e+03, 9.960380859375e+02, 9.90662109375e+02, 9.899501342773438e+02, 9.924597778320312e+02, 9.963078002929688e+02, 9.998829345703125e+02, 1.002225646972656e+03, 6.671683349609375e+02, 4.92811279296875e+02, 2.346244201660147e+02, -1.384420633315294e+00, -1.533398132324219e+02, -1.899775238037109e+02, -1.595258483886719e+02, -9.272840881347656e+01, -2.22052001953125e+01, 2.988444328308105e+01, 5.468190383911133e+01, 5.453292083740234e+01, 3.832336044311523e+01, 1.653451728820801e+01, -2.417987108230591e+00, -1.393906307220459e+01, -1.725805854797363e+01, -1.430122852325439e+01, -8.16649341583252e+00, -1.792871713638306e+00, 2.851693868637085e+00, 5.007420063018799e+00, 4.919456481933594e+00, 3.409096240997314e+00, 1.426660895347595e+00, 3.357417297363281e+02, 5.087078857421875e+02, 7.655446166992188e+02, 1.000633850097656e+03, 1.152218017578126e+03, 1.2051005859375e+03, 1.17863623046875e+03, 1.10876611328125e+03, 1.03151953125e+03, 9.723362426757812e+02, 9.495113525390625e+02, 9.48788818359375e+02, 9.634554443359375e+02, 9.837218017578125e+02, 1.001614624023438e+03, 1.012687438964844e+03, 1.01608642578125e+03, 1.013528076171875e+03, 1.00787939453125e+03, 1.001904541015625e+03, 9.974844970703125e+02, 9.953741455078125e+02, 9.953784790039062e+02, 9.967467041015625e+02, 9.9859130859375e+02, 6.642059936523438e+02, 4.911957092285156e+02, 2.34359375e+02, -7.000811696052551e-01, -1.522427062988281e+02, -2.050886383056641e+02, -1.786044921875e+02, -1.087309417724609e+02, -3.149297904968262e+01, 2.767750358581543e+01, 5.769866561889648e+01, 6.003094482421875e+01, 4.379818344116211e+01, 2.037660789489746e+01, -7.652122378349304e-01, -1.135125350952148e+01, -1.518834590911865e+01, -1.317745399475098e+01, -7.985503673553467e+00, -2.273990392684937e+00, 2.085249662399292e+00, 4.283353328704834e+00, 4.43674373626709e+00, 3.224758863449097e+00, 1.489430665969849e+00] +pidSca.u_s=[1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 1e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +pidSca.trigger=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Ramp.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Ramp.txt new file mode 100644 index 0000000000..0eb29a79ba --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Ramp.txt @@ -0,0 +1,19 @@ +last-generated=2023-03-28 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+01] +ramUp.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ramUp.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.000004656618207e-03, 9.999997392294135e-03, 1.500000204891456e-02, 1.999999478458825e-02, 2.500000037252903e-02, 3.000000409782466e-02, 3.499999776482761e-02, 4.000000149012324e-02, 4.499999701975355e-02, 5.000000074505806e-02, 5.500000447036257e-02, 5.999999627471149e-02, 6.500000000000712e-02, 6.999999552963745e-02, 7.500000298023224e-02, 8.000000298024643e-02, 8.499999850987679e-02, 9.000000596045381e-02, 9.499999403952133e-02, 1.000000014901161e-01, 1.050000014901303e-01, 1.100000089407251e-01, 1.14999992549391e-01, 1.199999925494407e-01, 1.25e-01, 1.300000000000142e-01, 1.350000149011896e-01, 1.399999910592749e-01, 1.449999910592891e-01, 1.500000059604645e-01, 1.550000059604787e-01, 1.600000059604929e-01, 1.649999970197394e-01, 1.699999970197536e-01, 1.749999970197678e-01, 1.800000119208721e-01, 1.850000119209573e-01, 1.899999880790426e-01, 1.949999880791279e-01, 2.000000029802322e-01, 2.050000029802464e-01, 2.100000029802607e-01, 2.149999940395071e-01, 2.199999940395213e-01, 2.249999940395355e-01, 2.30000008940711e-01, 2.350000089407251e-01, 2.399999850988104e-01, 2.449999999999858e-01, 2.5e-01, 2.550000000000853e-01, 2.600000000001705e-01, 2.649999761582558e-01, 2.700000059603792e-01, 2.750000059604645e-01, 2.800000059604076e-01, 2.85000005960635e-01, 2.899999821187203e-01, 2.949999821186634e-01, 3.00000011920929e-01, 3.049999880791848e-01, 3.100000119205878e-01, 3.14999988079412e-01, 3.200000119208153e-01, 3.24999988079071e-01, 3.299999940396492e-01, 3.350000178810523e-01, 3.399999940395924e-01, 3.450000178807113e-01, 3.499999940395355e-01, 3.549999701983597e-01, 3.600000238415169e-01, 3.650000000000569e-01, 3.700000238411758e-01, 3.75e-01, 3.799999761588242e-01, 3.849999999999431e-01, 3.899999761584832e-01, 3.950000298016403e-01, 4.000000059604645e-01] +ramUp1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000931323641e-02, 1.999999478458827e-02, 3.000000409782912e-02, 3.99999895691765e-02, 5.000000074505806e-02, 6.000000819564932e-02, 6.999999552965522e-02, 8.000000298024648e-02, 8.999999403950709e-02, 1.000000014901161e-01, 1.100000089407251e-01, 1.19999992549423e-01, 1.300000000000142e-01, 1.399999910592749e-01, 1.500000059604645e-01, 1.600000059604929e-01, 1.699999970197536e-01, 1.800000119209076e-01, 1.899999880790427e-01, 2.000000029802322e-01, 2.100000029802606e-01, 2.200000178814503e-01, 2.299999850987819e-01, 2.399999850988815e-01, 2.5e-01, 2.600000000000285e-01, 2.700000298023791e-01, 2.799999821185497e-01, 2.899999821185782e-01, 3.00000011920929e-01, 3.100000119209573e-01, 3.200000119209858e-01, 3.299999940394788e-01, 3.399999940395071e-01, 3.499999940395355e-01, 3.600000238417443e-01, 3.700000238419147e-01, 3.799999761580852e-01, 3.899999761582557e-01, 4.000000059604645e-01, 4.100000059604929e-01, 4.200000059605213e-01, 4.299999880790142e-01, 4.399999880790427e-01, 4.49999988079071e-01, 4.600000178814219e-01, 4.700000178814503e-01, 4.799999701976209e-01, 4.899999999999715e-01, 5e-01, 5.100000000001705e-01, 5.20000000000341e-01, 5.299999523165115e-01, 5.400000119207584e-01, 5.50000011920929e-01, 5.600000119208153e-01, 5.7000001192127e-01, 5.799999642374406e-01, 5.899999642373268e-01, 6.000000238418579e-01, 6.099999761583697e-01, 6.200000238411757e-01, 6.299999761588241e-01, 6.400000238416306e-01, 6.499999761581421e-01, 6.599999880792984e-01, 6.700000357621047e-01, 6.799999880791848e-01, 6.900000357614227e-01, 6.99999988079071e-01, 7.099999403967194e-01, 7.200000476830338e-01, 7.300000000001138e-01, 7.400000476823515e-01, 7.5e-01, 7.599999523176484e-01, 7.699999999998862e-01, 7.799999523169664e-01, 7.900000596032806e-01, 8.00000011920929e-01] +ramUp.active=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ramUpDow.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ramUpDow.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.800000190734863e-01, 9.599999594687848e-01, 9.399999594687278e-01, 9.200000548363869e-01, 8.999999952316852e-01, 8.799999952316284e-01, 8.599999952315714e-01, 8.399999356274386e-01, 8.20000030994529e-01, 8.00000030994472e-01, 7.799999713897705e-01, 7.599999713897138e-01, 7.399999713896568e-01, 7.200000667567472e-01, 7.000000071526141e-01, 6.800000071525574e-01, 6.600000071525004e-01, 6.399999475477991e-01, 6.20000042915458e-01, 6.00000042915117e-01, 5.799999833106995e-01, 5.599999833106427e-01, 5.399999833105857e-01, 5.200000190736001e-01, 5.000000190735431e-01, 4.799999892711639e-01, 4.59999989271107e-01, 4.399999594687278e-01, 4.200000250340644e-01, 4.000000250340078e-01, 3.799999952316284e-01, 3.599999952315717e-01, 3.399999654291925e-01, 3.20000030994529e-01, 3.000000309943299e-01, 2.800000011920929e-01, 2.599999713898559e-01, 2.399999564886377e-01, 2.200000369549933e-01, 2.000000220537043e-01, 1.800000071525574e-01, 1.600000727160747e-01, 1.399999624500118e-01, 1.20000035463897e-01, 9.999992519790442e-02, 7.999999821186066e-02, 6.000007495117825e-02, 3.999996095982466e-02, 2.000003769907083e-02, 1.654991040090673e-05, -1.337800787574832e-14, -1.152299585677677e-14, -9.667965300336471e-15, -7.812953281364924e-15, -5.957923571949559e-15, -4.102911129469583e-15, -2.247898686985601e-15, -3.928687922851386e-16, -3.674245277820885e-18, -3.464357956574596e-18, -3.25447243012328e-18] +ramUpDow.active=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +ramUpDow1.u=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999952316238438e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +ramUpDow1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.000001862647283e-02, 3.999998956917654e-02, 6.000000819565825e-02, 7.999997913835308e-02, 1.000000014901161e-01, 1.200000163912986e-01, 1.399999910593104e-01, 1.600000059604929e-01, 1.799999880790143e-01, 2.000000029802322e-01, 2.200000178814502e-01, 2.400000327826683e-01, 2.599999523164547e-01, 2.799999821185498e-01, 3.00000011920929e-01, 3.200000119209859e-01, 3.400000417233649e-01, 3.599999761580284e-01, 3.799999761580853e-01, 4.000000059604645e-01, 4.200000059605212e-01, 4.400000357629006e-01, 4.599999701975641e-01, 4.79999970197763e-01, 5e-01, 5.20000000000057e-01, 5.400000596047583e-01, 5.599999642370994e-01, 5.799999642371562e-01, 6.000000238418579e-01, 6.200000238419147e-01, 6.400000238419716e-01, 6.599999880789573e-01, 6.799999880790143e-01, 6.99999988079071e-01, 7.199999809262292e-01, 6.699999213218688e-01, 6.200001001358029e-01, 5.700000405311587e-01, 5.199999809265137e-01, 4.699999511241915e-01, 4.199998915195469e-01, 3.700001001358033e-01, 3.200000405313004e-01, 2.700000107288361e-01, 2.199999511241204e-01, 1.699999064205655e-01, 1.200000926852933e-01, 7.000004798177439e-02, 1.999999955296516e-02, 3.456860272040785e-12, 8.392204344646765e-15, 3.564259052427321e-15, 8.406577137190336e-18, 3.669769416798644e-18, 7.784740607393769e-21, 3.532305444331691e-22, 3.734793079691984e-24, 4.505978274761481e-37, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -0e+00] +ramUpDow1.active=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Round.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Round.txt new file mode 100644 index 0000000000..6cdc7c5e33 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Round.txt @@ -0,0 +1,14 @@ +last-generated=2017-09-15 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +round1.u=[-3.5e+00, -3.430000065192561e+00, -3.359999891966595e+00, -3.289999957159187e+00, -3.22000002235177e+00, -3.150000100582814e+00, -3.079999914318365e+00, -3.009999992549414e+00, -2.940000044703563e+00, -2.869999910593299e+00, -2.79999996274703e+00, -2.730000014901188e+00, -2.660000067055026e+00, -2.589999880790923e+00, -2.519999985098812e+00, -2.450000089406701e+00, -2.380000089406701e+00, -2.309999955296437e+00, -2.240000059604325e+00, -2.170000059604467e+00, -2.099999925494416e+00, -2.029999925494487e+00, -1.960000029802305e+00, -1.890000014901223e+00, -1.820000014901081e+00, -1.75e+00, -1.679999880791137e+00, -1.610000089406487e+00, -1.539999970197695e+00, -1.469999970197553e+00, -1.400000059604823e+00, -1.330000059604538e+00, -1.259999940395675e+00, -1.190000149011026e+00, -1.120000029802162e+00, -1.049999910593299e+00, -9.800001192090765e-01, -9.100000596045738e-01, -8.399999403954262e-01, -7.699998807909235e-01, -7.000000298022334e-01, -6.29999970197731e-01, -5.599999105932283e-01, -4.900000596044956e-01, -4.199999701977131e-01, -3.499999105932104e-01, -2.800000596045203e-01, -2.099999850988568e-01, -1.39999925494354e-01, -7.000006705508333e-02, 0e+00, 7.000006705408858e-02, 1.400001341081772e-01, 2.100001937118983e-01, 2.799998509909462e-01, 3.499999105944542e-01, 4.199999701974648e-01, 4.900000596034507e-01, 5.600001192072998e-01, 6.300001788108077e-01, 6.999998211889077e-01, 7.699998807924157e-01, 8.399999403959236e-01, 9.100000596040764e-01, 9.800001192075843e-01, 1.050000119207158e+00, 1.119999821188411e+00, 1.189999940396848e+00, 1.259999940396421e+00, 1.330000059604787e+00, 1.400000059603579e+00, 1.470000178810737e+00, 1.539999761585684e+00, 1.609999880792416e+00, 1.679999880792131e+00, 1.75e+00, 1.820000119207869e+00, 1.890000119207584e+00, 1.960000238414316e+00, 2.029999821189263e+00, 2.099999821187842e+00, 2.170000059604219e+00, 2.240000059603579e+00, 2.310000059602157e+00, 2.380000298019316e+00, 2.449999880794263e+00, 2.519999880792842e+00, 2.589999880791421e+00, 2.660000119208579e+00, 2.730000119207158e+00, 2.800000119205737e+00, 2.869999701980684e+00, 2.939999940397843e+00, 3.009999940396421e+00, 3.079999940395781e+00, 3.150000178812158e+00, 3.220000178810737e+00, 3.289999761585684e+00, 3.359999761584263e+00, 3.430000000000284e+00, 3.5e+00] +round1.y=[-4e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -3e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -5.006780019356505e-06, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +time=[0e+00, 1e+00] +round2.y=[-4.000000059604645e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -3.00000011920929e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -1.000000014901161e-01, -5.00678009385247e-07, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01, 3.00000011920929e-01] +round2.u=[-3.499999940395355e-01, -3.429999945983297e-01, -3.35999995157124e-01, -3.289999957159187e-01, -3.219999962747125e-01, -3.149999981373525e-01, -3.079999973923011e-01, -3.009999992549414e-01, -2.939999985098919e-01, -2.870000029802163e-01, -2.800000022351675e-01, -2.730000014901188e-01, -2.660000007450701e-01, -2.590000000000213e-01, -2.520000044703457e-01, -2.450000089406701e-01, -2.380000029802216e-01, -2.310000074505726e-01, -2.24000011920897e-01, -2.169999910593139e-01, -2.099999955296605e-01, -2.029999895692165e-01, -1.959999940395409e-01, -1.889999985098963e-01, -1.819999925494434e-01, -1.749999970197678e-01, -1.679999910593459e-01, -1.610000059604964e-01, -1.539999999999946e-01, -1.469999940395728e-01, -1.400000089406434e-01, -1.330000029802216e-01, -1.259999970197731e-01, -1.190000119208703e-01, -1.120000059604485e-01, -1.049999925494461e-01, -9.800000745056994e-02, -9.100000149011257e-02, -8.399999552965519e-02, -7.699998956919782e-02, -7.000000447034391e-02, -6.299999850988657e-02, -5.599999254942918e-02, -4.90000037252903e-02, -4.199999776483204e-02, -3.499999180437022e-02, -2.800000670550853e-02, -2.099999888241493e-02, -1.399999292196144e-02, -7.000006891771072e-03, 0e+00, 7.000006891671597e-03, 1.400001378334319e-02, 2.100001974369222e-02, 2.79999858441367e-02, 3.49999918044946e-02, 4.199999776480721e-02, 4.900000372518581e-02, 5.600001341082745e-02, 6.300001937121644e-02, 6.999998360898912e-02, 7.699998956934702e-02, 8.399999552970493e-02, 9.100000149006283e-02, 9.800000745042074e-02, 1.050000134107786e-01, 1.119999850991319e-01, 1.189999910594898e-01, 1.259999970198477e-01, 1.330000029802464e-01, 1.400000089405191e-01, 1.470000149008414e-01, 1.539999791388006e-01, 1.60999985099123e-01, 1.679999910594454e-01, 1.749999970197678e-01, 1.820000029801612e-01, 1.890000089405546e-01, 1.960000149009481e-01, 2.029999791386941e-01, 2.099999850990165e-01, 2.169999910592891e-01, 2.240000119208223e-01, 2.310000178811447e-01, 2.380000238414671e-01, 2.449999880792487e-01, 2.519999940397487e-01, 2.590000000000711e-01, 2.660000059603934e-01, 2.730000119207158e-01, 2.800000178810382e-01, 2.869999821189974e-01, 2.939999880793198e-01, 3.009999940396421e-01, 3.080000000000142e-01, 3.150000059602868e-01, 3.220000119206092e-01, 3.289999761585684e-01, 3.359999821188908e-01, 3.429999880792132e-01, 3.499999940395355e-01] +round3.u=[-3.5e+01, -3.42999992214144e+01, -3.35999984428288e+01, -3.290000147893922e+01, -3.220000070035486e+01, -3.150000005215383e+01, -3.079999914318365e+01, -3.01000004023313e+01, -2.939999949336132e+01, -2.870000101327736e+01, -2.800000010430746e+01, -2.729999919533756e+01, -2.660000019371374e+01, -2.589999928474639e+01, -2.520000080466244e+01, -2.450000041722985e+01, -2.379999898672264e+01, -2.310000050663868e+01, -2.240000011921292e+01, -2.170000059604524e+01, -2.100000020861492e+01, -2.029999877810771e+01, -1.960000029802262e+01, -1.889999991059515e+01, -1.820000038742747e+01, -1.75e+01, -1.679999856949279e+01, -1.610000113248345e+01, -1.539999970197681e+01, -1.469999922514335e+01, -1.400000083446538e+01, -1.33000003576268e+01, -1.25999998807905e+01, -1.190000053644219e+01, -1.120000005960475e+01, -1.049999958276731e+01, -9.800001192086501e+00, -9.100000715253605e+00, -8.399999284746395e+00, -7.699998807910088e+00, -7.000000417231268e+00, -6.29999994039525e+00, -5.599998986723776e+00, -4.900000596044956e+00, -4.199999642372629e+00, -3.499999165536038e+00, -2.800000536441055e+00, -2.099999821186316e+00, -1.399999225141218e+00, -7.000006556496721e-01, 0e+00, 7.000006556397247e-01, 1.400001311279449e+00, 2.100001907316234e+00, 2.799998450306096e+00, 3.499999165548476e+00, 4.199999642370146e+00, 4.900000596034507e+00, 5.600001072862714e+00, 6.300002026525093e+00, 6.999998331099787e+00, 7.699998807925009e+00, 8.399999284751368e+00, 9.100000715248632e+00, 9.80000119207158e+00, 1.05000016689059e+01, 1.119999797348116e+01, 1.189999845030411e+01, 1.259999988079796e+01, 1.330000035762929e+01, 1.400000083445294e+01, 1.470000131128044e+01, 1.539999761585684e+01, 1.609999904634501e+01, 1.679999856950274e+01, 1.75e+01, 1.820000143049726e+01, 1.890000095366409e+01, 1.960000238414316e+01, 2.029999773505547e+01, 2.099999916555274e+01, 2.170000059604276e+01, 2.240000011920545e+01, 2.310000154969589e+01, 2.380000107286953e+01, 2.449999833110547e+01, 2.519999976158909e+01, 2.589999928475137e+01, 2.660000071524863e+01, 2.730000023841091e+01, 2.800000166889453e+01, 2.869999892713047e+01, 2.939999845030411e+01, 3.009999988079455e+01, 3.079999940395724e+01, 3.150000083444726e+01, 3.220000226494452e+01, 3.28999995231509e+01, 3.359999713900547e+01, 3.429999856950273e+01, 3.5e+01] +round3.y=[-4e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -3e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -2e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -1e+01, -5.006780019378709e-05, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 1e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 2e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01, 3e+01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sin.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sin.txt new file mode 100644 index 0000000000..770e4eca1f --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sin.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +sin1.y=[0e+00, 6.279052189025491e-02, 1.25333237452147e-01, 1.87381316384595e-01, 2.486898953400241e-01, 3.090169981213527e-01, 3.681245524355013e-01, 4.257792813474344e-01, 4.817536869409441e-01, 5.358267832061716e-01, 5.877852363791168e-01, 6.37423995027516e-01, 6.845471385054688e-01, 7.289686406719382e-01, 7.705132341174212e-01, 8.090169803797332e-01, 8.443279385564225e-01, 8.763066475484895e-01, 9.048270389253867e-01, 9.297764951615509e-01, 9.510564745096004e-01, 9.685831765931435e-01, 9.822872294646928e-01, 9.921147192796552e-01, 9.980267305350982e-01, 1e+00, 9.980267244918735e-01, 9.921147307571708e-01, 9.822872294647284e-01, 9.685831532414171e-01, 9.510565627098908e-01, 9.29776495161622e-01, 9.048270389253867e-01, 8.763067518650643e-01, 8.44327938556529e-01, 8.09016980379911e-01, 7.705133529832707e-01, 7.289687002764409e-01, 6.845471043246666e-01, 6.374239225441147e-01, 5.877853337517847e-01, 5.358268428108165e-01, 4.817536344844248e-01, 4.257793831936812e-01, 3.681245902625959e-01, 3.090169610060254e-01, 2.486899853117014e-01, 1.873813495884997e-01, 1.253332124403766e-01, 6.279063242083509e-02, 5.358979393577101e-08, -6.279052811178046e-02, -1.253332938608835e-01, -1.873814290064919e-01, -2.486896995113108e-01, -3.090168716001222e-01, -3.681244710530986e-01, -4.257792639837872e-01, -4.817537090949232e-01, -5.358268812191928e-01, -5.877850626424818e-01, -6.374238629405072e-01, -6.845470447203491e-01, -7.289685810669899e-01, -7.70513233773134e-01, -8.090170302644712e-01, -8.443277778656753e-01, -8.763066019297819e-01, -9.048269793212442e-01, -9.297764355570579e-01, -9.510565031049077e-01, -9.685831993059969e-01, -9.822871933156057e-01, -9.921146473576923e-01, -9.980267244919351e-01, -1e+00, -9.980267244919351e-01, -9.921147069617686e-01, -9.822872529193979e-01, -9.685831993066364e-01, -9.510565627095525e-01, -9.297764951617027e-01, -9.048270985303206e-01, -8.763066615349241e-01, -8.443278970749648e-01, -8.090171494737608e-01, -7.705133529824235e-01, -7.289687002762795e-01, -6.845471639296387e-01, -6.374239821497968e-01, -5.877851818517713e-01, -5.358270004284823e-01, -4.817538581065351e-01, -4.257794129953991e-01, -3.681246200647105e-01, -3.090170206117341e-01, -2.486898634240839e-01, -1.87381592919265e-01, -1.253334577736566e-01, -6.279068457400852e-02, -1.07179587871542e-07] +sin1.u=[0e+00, 6.283185026418836e-02, 1.256637005283767e-01, 1.884955656937173e-01, 2.513274010567601e-01, 3.141592694199139e-01, 3.769911313874425e-01, 4.398229699482905e-01, 5.026548021134992e-01, 5.654866470699986e-01, 6.283185388398452e-01, 6.911503710050471e-01, 7.539822627748136e-01, 8.168140949400954e-01, 8.796459398965949e-01, 9.424777252486271e-01, 1.005309604227105e+00, 1.068141449183551e+00, 1.13097329414021e+00, 1.19380523272312e+00, 1.256637077679602e+00, 1.31946889705379e+00, 1.382300742010059e+00, 1.445132586966718e+00, 1.507964525549627e+00, 1.570796251296997e+00, 1.633628189880475e+00, 1.696459941210316e+00, 1.759291879793154e+00, 1.822123818376135e+00, 1.884955450497254e+00, 1.947787389080164e+00, 2.010619208454636e+00, 2.073450959784193e+00, 2.136282898367103e+00, 2.199114836950012e+00, 2.261946588280421e+00, 2.324778526863331e+00, 2.38761046544624e+00, 2.450442404029149e+00, 2.513274155358848e+00, 2.576105855524315e+00, 2.638937794106798e+00, 2.701769545437207e+00, 2.764601484020117e+00, 2.827433422603026e+00, 2.890265173933436e+00, 2.953097112516345e+00, 3.015929051099254e+00, 3.078760802428527e+00, 3.141592502593994e+00, 3.204424441176011e+00, 3.267256379758027e+00, 3.330088318340044e+00, 3.392919882422641e+00, 3.455751821004657e+00, 3.518583759586227e+00, 3.58141569816869e+00, 3.644247636750706e+00, 3.70707933691727e+00, 3.769910900996741e+00, 3.832742839578757e+00, 3.895574778160774e+00, 3.958406716742791e+00, 4.021238416907933e+00, 4.084070355491087e+00, 4.146901919573968e+00, 4.209733858154848e+00, 4.272565796735727e+00, 4.335397735317621e+00, 4.398229673900328e+00, 4.461061612483482e+00, 4.52389317656011e+00, 4.586725115143263e+00, 4.649557053726417e+00, 4.71238899230957e+00, 4.77522093089045e+00, 4.83805286947133e+00, 4.90088480805221e+00, 4.963716372135659e+00, 5.026548310718812e+00, 5.089379772464929e+00, 5.15221171104796e+00, 5.215043649631114e+00, 5.277875588214267e+00, 5.34070715229658e+00, 5.40353909087746e+00, 5.466371029458339e+00, 5.529202968040356e+00, 5.59203490662351e+00, 5.654866845206663e+00, 5.717698409283291e+00, 5.780530347866445e+00, 5.843362286449598e+00, 5.906194225032629e+00, 5.969026163613062e+00, 6.031858102193942e+00, 6.094689666275686e+00, 6.157521604858839e+00, 6.220353066607109e+00, 6.283185005187988e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sort.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sort.txt new file mode 100644 index 0000000000..5e36794404 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sort.txt @@ -0,0 +1,33 @@ +last-generated=2024-04-18 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +sorAsc.u[1]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +sorAsc.u[2]=[-1e+00, -9.700000279396727e-01, -9.399999962747139e-01, -9.100000242143751e-01, -8.799999925494277e-01, -8.500000260770252e-01, -8.199999888241416e-01, -7.900000223517407e-01, -7.599999850988655e-01, -7.300000298022691e-01, -6.999999925493972e-01, -6.700000149011524e-01, -6.399999776482982e-01, -6.099999999999289e-01, -5.799999850988476e-01, -5.500000298022336e-01, -5.199999701977309e-01, -4.900000149011345e-01, -4.600000298022158e-01, -4.3e-01, -4.000000149011168e-01, -3.699999850988388e-01, -3.4e-01, -3.100000149011611e-01, -2.799999850988388e-01, -2.5e-01, -2.199999701977486e-01, -1.900000298022424e-01, -1.59999999999991e-01, -1.299999701977398e-01, -1.000000372528142e-01, -7.000000745056284e-02, -3.999997764831148e-02, -1.000003911547481e-02, 1.999998882415249e-02, 5.000001862641812e-02, 7.999995529662296e-02, 1.099999850988743e-01, 1.400000149011257e-01, 1.70000044703377e-01, 1.999999850988833e-01, 2.300000149011345e-01, 2.600000298023223e-01, 2.899999701977842e-01, 3.2e-01, 3.500000298023224e-01, 3.79999970197802e-01, 4.099999999999999e-01, 4.400000298023223e-01, 4.699999701976776e-01, 5e-01, 5.299999999997158e-01, 5.60000059603508e-01, 5.900000596037922e-01, 6.199999403966343e-01, 6.499999403960659e-01, 6.799999999999291e-01, 7.099999999997867e-01, 7.400000596036499e-01, 7.700000596038631e-01, 7.999999403967762e-01, 8.299999403962078e-01, 8.600000000001421e-01, 8.899999999998579e-01, 9.200000596037922e-01, 9.500000596032238e-01, 9.799999403961369e-01, 1.009999940395853e+00, 1.039999940395995e+00, 1.070000059604645e+00, 1.100000059603579e+00, 1.130000059604005e+00, 1.159999880793268e+00, 1.190000000000568e+00, 1.220000000000284e+00, 1.25e+00, 1.279999999999716e+00, 1.309999999999432e+00, 1.340000119206732e+00, 1.369999940395995e+00, 1.399999940396421e+00, 1.429999940395355e+00, 1.460000059604005e+00, 1.490000059604147e+00, 1.520000059603863e+00, 1.549999880792842e+00, 1.580000000000426e+00, 1.610000000000142e+00, 1.639999999999858e+00, 1.669999999999574e+00, 1.700000119207158e+00, 1.729999940396137e+00, 1.759999940395853e+00, 1.789999940395995e+00, 1.820000059604645e+00, 1.850000059603579e+00, 1.880000059604005e+00, 1.909999880793268e+00, 1.940000000000568e+00, 1.970000000000284e+00, 2e+00] +sorAsc.u[3]=[2e+00, 1.960000037252901e+00, 1.919999955296513e+00, 1.879999992549417e+00, 1.840000029802316e+00, 1.799999955296522e+00, 1.759999985098829e+00, 1.720000029802327e+00, 1.679999940395462e+00, 1.64e+00, 1.600000029802322e+00, 1.559999940395391e+00, 1.519999970197678e+00, 1.48e+00, 1.440000059604609e+00, 1.4e+00, 1.36e+00, 1.320000059604538e+00, 1.28e+00, 1.24e+00, 1.200000059604467e+00, 1.159999940395355e+00, 1.12e+00, 1.080000059604645e+00, 1.039999940395355e+00, 1e+00, 9.599999403956394e-01, 9.20000059604325e-01, 8.799999999999999e-01, 8.39999940395604e-01, 8.000000596046448e-01, 7.6e-01, 7.2e-01, 6.800000596046447e-01, 6.399999999999999e-01, 6.000000000000001e-01, 5.600000596046448e-01, 5.2e-01, 4.799999701977486e-01, 4.399999403955683e-01, 4.000000298022335e-01, 3.600000000000001e-01, 3.199999403955507e-01, 2.800000298022158e-01, 2.399999850988566e-01, 1.999999552966052e-01, 1.600000298022601e-01, 1.199999925494328e-01, 7.999995529659643e-02, 4.000003725283197e-02, 0e+00, -4.000003725226355e-02, -8.000007450452709e-02, -1.200001117568972e-01, -1.599999105944718e-01, -1.99999955297316e-01, -2.399999850987147e-01, -2.800000298017893e-01, -3.200000596036499e-01, -3.600001192073355e-01, -3.999999105944538e-01, -4.39999940396421e-01, -4.799999701980329e-01, -5.199999999997158e-01, -5.600000596037922e-01, -6.00000119207158e-01, -6.399998807930554e-01, -6.799999403963501e-01, -7.200000000004265e-01, -7.600000000001419e-01, -8.000000596039341e-01, -8.400000596033657e-01, -8.799998807924156e-01, -9.19999940396492e-01, -9.599999403962078e-01, -1e+00, -1.039999999999432e+00, -1.080000119208153e+00, -1.120000119207584e+00, -1.15999988079199e+00, -1.200000000000711e+00, -1.239999999999858e+00, -1.279999999999573e+00, -1.3200001192073e+00, -1.360000119207726e+00, -1.399999880792131e+00, -1.440000000000853e+00, -1.480000000000284e+00, -1.519999999999716e+00, -1.559999999999147e+00, -1.600000119207869e+00, -1.639999880792274e+00, -1.6799998807927e+00, -1.720000000000427e+00, -1.760000000000142e+00, -1.799999999999289e+00, -1.84000011920801e+00, -1.879999880792416e+00, -1.919999880791847e+00, -1.960000000000568e+00, -2e+00] +sorAsc.u[4]=[3e+00, 2.990000009313215e+00, 2.980000018626431e+00, 2.970000027939647e+00, 2.960000037252861e+00, 2.95000004842872e+00, 2.940000055879292e+00, 2.930000067055204e+00, 2.920000074505726e+00, 2.910000089406701e+00, 2.900000096857437e+00, 2.890000104308102e+00, 2.880000111758589e+00, 2.869999880791066e+00, 2.859999895691898e+00, 2.849999910593299e+00, 2.839999910593299e+00, 2.829999925494274e+00, 2.819999940395675e+00, 2.809999940395533e+00, 2.799999955296649e+00, 2.789999955297005e+00, 2.779999970197766e+00, 2.769999985099025e+00, 2.759999985098599e+00, 2.75e+00, 2.739999999999574e+00, 2.730000029802802e+00, 2.720000029802234e+00, 2.710000029801949e+00, 2.700000059603757e+00, 2.690000059604467e+00, 2.680000059604325e+00, 2.67000008940599e+00, 2.660000089406701e+00, 2.650000089406701e+00, 2.640000119208224e+00, 2.630000119208934e+00, 2.619999880791066e+00, 2.609999880791776e+00, 2.599999910593299e+00, 2.589999910593299e+00, 2.57999991059401e+00, 2.569999940395675e+00, 2.559999940395533e+00, 2.549999940396243e+00, 2.539999970198051e+00, 2.529999970197766e+00, 2.519999970197198e+00, 2.510000000000426e+00, 2.5e+00, 2.489999999999716e+00, 2.479999999999432e+00, 2.469999999999148e+00, 2.460000059602726e+00, 2.450000059603579e+00, 2.440000059604503e+00, 2.430000059604432e+00, 2.420000059604147e+00, 2.410000059603863e+00, 2.400000119207158e+00, 2.390000119208011e+00, 2.380000119208863e+00, 2.369999880791137e+00, 2.359999880791989e+00, 2.349999880792842e+00, 2.339999940396137e+00, 2.329999940395853e+00, 2.319999940395568e+00, 2.309999940395497e+00, 2.299999940396421e+00, 2.289999940397274e+00, 2.280000000000852e+00, 2.270000000000568e+00, 2.260000000000284e+00, 2.25e+00, 2.239999999999716e+00, 2.229999999999432e+00, 2.219999999999148e+00, 2.210000059602726e+00, 2.200000059603579e+00, 2.190000059604503e+00, 2.180000059604432e+00, 2.170000059604147e+00, 2.160000059603863e+00, 2.150000119207158e+00, 2.140000119208011e+00, 2.130000119208863e+00, 2.119999880791137e+00, 2.109999880791989e+00, 2.099999880792842e+00, 2.089999940396137e+00, 2.079999940395853e+00, 2.069999940395568e+00, 2.059999940395497e+00, 2.049999940396421e+00, 2.039999940397274e+00, 2.030000000000852e+00, 2.020000000000568e+00, 2.010000000000284e+00, 2e+00] +sorAsc.u[5]=[0e+00, 4e-02, 8e-02, 1.2e-01, 1.6e-01, 2e-01, 2.4e-01, 2.8e-01, 3.2e-01, 3.6e-01, 4e-01, 4.4e-01, 4.8e-01, 5.2e-01, 5.600000000000001e-01, 6e-01, 6.4e-01, 6.8e-01, 7.2e-01, 7.6e-01, 8e-01, 8.4e-01, 8.8e-01, 9.2e-01, 9.6e-01, 1e+00, 1.04e+00, 1.08e+00, 1.12e+00, 1.16e+00, 1.2e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00, 3.04e+00, 3.08e+00, 3.12e+00, 3.16e+00, 3.2e+00, 3.24e+00, 3.28e+00, 3.32e+00, 3.36e+00, 3.4e+00, 3.44e+00, 3.48e+00, 3.52e+00, 3.56e+00, 3.6e+00, 3.64e+00, 3.68e+00, 3.72e+00, 3.76e+00, 3.8e+00, 3.84e+00, 3.88e+00, 3.92e+00, 3.96e+00, 4e+00] +sorAsc.y[1]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, -4.000003725226355e-02, -8.000007450452709e-02, -1.200001117568972e-01, -1.599999105944718e-01, -1.99999955297316e-01, -2.399999850987147e-01, -2.800000298017893e-01, -3.200000596036499e-01, -3.600001192073355e-01, -3.999999105944538e-01, -4.39999940396421e-01, -4.799999701980329e-01, -5.199999999997158e-01, -5.600000596037922e-01, -6.00000119207158e-01, -6.399998807930554e-01, -6.799999403963501e-01, -7.200000000004265e-01, -7.600000000001419e-01, -8.000000596039341e-01, -8.400000596033657e-01, -8.799998807924156e-01, -9.19999940396492e-01, -9.599999403962078e-01, -1e+00, -1.039999999999432e+00, -1.080000119208153e+00, -1.120000119207584e+00, -1.15999988079199e+00, -1.200000000000711e+00, -1.239999999999858e+00, -1.279999999999573e+00, -1.3200001192073e+00, -1.360000119207726e+00, -1.399999880792131e+00, -1.440000000000853e+00, -1.480000000000284e+00, -1.519999999999716e+00, -1.559999999999147e+00, -1.600000119207869e+00, -1.639999880792274e+00, -1.6799998807927e+00, -1.720000000000427e+00, -1.760000000000142e+00, -1.799999999999289e+00, -1.84000011920801e+00, -1.879999880792416e+00, -1.919999880791847e+00, -1.960000000000568e+00, -2e+00] +sorAsc.y[2]=[-1e+00, -9.700000279396727e-01, -9.399999962747139e-01, -9.100000242143751e-01, -8.799999925494277e-01, -8.500000260770252e-01, -8.199999888241416e-01, -7.900000223517407e-01, -7.599999850988655e-01, -7.300000298022691e-01, -6.999999925493972e-01, -6.700000149011524e-01, -6.399999776482982e-01, -6.099999999999289e-01, -5.799999850988476e-01, -5.500000298022336e-01, -5.199999701977309e-01, -4.900000149011345e-01, -4.600000298022158e-01, -4.3e-01, -4.000000149011168e-01, -3.699999850988388e-01, -3.4e-01, -3.100000149011611e-01, -2.799999850988388e-01, -2.5e-01, -2.199999701977486e-01, -1.900000298022424e-01, -1.59999999999991e-01, -1.299999701977398e-01, -1.000000372528142e-01, -7.000000745056284e-02, -3.999997764831148e-02, -1.000003911547481e-02, 1.999998882415249e-02, 5.000001862641812e-02, 7.999995529662296e-02, 1.099999850988743e-01, 1.400000149011257e-01, 1.70000044703377e-01, 1.999999850988833e-01, 2.300000149011345e-01, 2.600000298023223e-01, 2.800000154972077e-01, 2.399999850988566e-01, 1.999999552966052e-01, 1.600000298022601e-01, 1.199999925494328e-01, 7.999995529659643e-02, 4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +sorAsc.y[3]=[0e+00, 4e-02, 8e-02, 1.2e-01, 1.6e-01, 2e-01, 2.4e-01, 2.8e-01, 3.2e-01, 3.6e-01, 4e-01, 4.4e-01, 4.8e-01, 5.2e-01, 5.600000000000001e-01, 6e-01, 6.4e-01, 6.8e-01, 7.2e-01, 7.6e-01, 8e-01, 8.4e-01, 8.8e-01, 9.2e-01, 9.6e-01, 1e+00, 9.599999403956394e-01, 9.20000059604325e-01, 8.799999999999999e-01, 8.39999940395604e-01, 8.000000596046448e-01, 7.6e-01, 7.2e-01, 6.800000596046447e-01, 6.399999999999999e-01, 6.000000000000001e-01, 5.600000596046448e-01, 5.2e-01, 4.799999701977486e-01, 4.399999403955683e-01, 4.000000298022335e-01, 3.600000000000001e-01, 3.199999403955507e-01, 2.899999845027924e-01, 3.2e-01, 3.500000298023224e-01, 3.79999970197802e-01, 4.099999999999999e-01, 4.400000298023223e-01, 4.699999701976776e-01, 5e-01, 5.299999999997158e-01, 5.60000059603508e-01, 5.900000596037922e-01, 6.199999403966343e-01, 6.499999403960659e-01, 6.799999999999291e-01, 7.099999999997867e-01, 7.400000596036499e-01, 7.700000596038631e-01, 7.999999403967762e-01, 8.299999403962078e-01, 8.600000000001421e-01, 8.899999999998579e-01, 9.200000596037922e-01, 9.500000596032238e-01, 9.799999403961369e-01, 1.009999940395853e+00, 1.039999940395995e+00, 1.070000059604645e+00, 1.100000059603579e+00, 1.130000059604005e+00, 1.159999880793268e+00, 1.190000000000568e+00, 1.220000000000284e+00, 1.25e+00, 1.279999999999716e+00, 1.309999999999432e+00, 1.340000119206732e+00, 1.369999940395995e+00, 1.399999940396421e+00, 1.429999940395355e+00, 1.460000059604005e+00, 1.490000059604147e+00, 1.520000059603863e+00, 1.549999880792842e+00, 1.580000000000426e+00, 1.610000000000142e+00, 1.639999999999858e+00, 1.669999999999574e+00, 1.700000119207158e+00, 1.729999940396137e+00, 1.759999940395853e+00, 1.789999940395995e+00, 1.820000059604645e+00, 1.850000059603579e+00, 1.880000059604005e+00, 1.909999880793268e+00, 1.940000000000568e+00, 1.970000000000284e+00, 2e+00] +sorAsc.y[4]=[2e+00, 1.960000037252901e+00, 1.919999955296513e+00, 1.879999992549417e+00, 1.840000029802316e+00, 1.799999955296522e+00, 1.759999985098829e+00, 1.720000029802327e+00, 1.679999940395462e+00, 1.64e+00, 1.600000029802322e+00, 1.559999940395391e+00, 1.519999970197678e+00, 1.48e+00, 1.440000059604609e+00, 1.4e+00, 1.36e+00, 1.320000059604538e+00, 1.28e+00, 1.24e+00, 1.200000059604467e+00, 1.159999940395355e+00, 1.12e+00, 1.080000059604645e+00, 1.039999940395355e+00, 1e+00, 1.04e+00, 1.08e+00, 1.12e+00, 1.16e+00, 1.2e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.390000119208011e+00, 2.380000119208863e+00, 2.369999880791137e+00, 2.359999880791989e+00, 2.349999880792842e+00, 2.339999940396137e+00, 2.329999940395853e+00, 2.319999940395568e+00, 2.309999940395497e+00, 2.299999940396421e+00, 2.289999940397274e+00, 2.280000000000852e+00, 2.270000000000568e+00, 2.260000000000284e+00, 2.25e+00, 2.239999999999716e+00, 2.229999999999432e+00, 2.219999999999148e+00, 2.210000059602726e+00, 2.200000059603579e+00, 2.190000059604503e+00, 2.180000059604432e+00, 2.170000059604147e+00, 2.160000059603863e+00, 2.150000119207158e+00, 2.140000119208011e+00, 2.130000119208863e+00, 2.119999880791137e+00, 2.109999880791989e+00, 2.099999880792842e+00, 2.089999940396137e+00, 2.079999940395853e+00, 2.069999940395568e+00, 2.059999940395497e+00, 2.049999940396421e+00, 2.039999940397274e+00, 2.030000000000852e+00, 2.020000000000568e+00, 2.010000000000284e+00, 2e+00] +sorAsc.y[5]=[3e+00, 2.990000009313215e+00, 2.980000018626431e+00, 2.970000027939647e+00, 2.960000037252861e+00, 2.95000004842872e+00, 2.940000055879292e+00, 2.930000067055204e+00, 2.920000074505726e+00, 2.910000089406701e+00, 2.900000096857437e+00, 2.890000104308102e+00, 2.880000111758589e+00, 2.869999880791066e+00, 2.859999895691898e+00, 2.849999910593299e+00, 2.839999910593299e+00, 2.829999925494274e+00, 2.819999940395675e+00, 2.809999940395533e+00, 2.799999955296649e+00, 2.789999955297005e+00, 2.779999970197766e+00, 2.769999985099025e+00, 2.759999985098599e+00, 2.75e+00, 2.739999999999574e+00, 2.730000029802802e+00, 2.720000029802234e+00, 2.710000029801949e+00, 2.700000059603757e+00, 2.690000059604467e+00, 2.680000059604325e+00, 2.67000008940599e+00, 2.660000089406701e+00, 2.650000089406701e+00, 2.640000119208224e+00, 2.630000119208934e+00, 2.619999880791066e+00, 2.609999880791776e+00, 2.599999910593299e+00, 2.589999910593299e+00, 2.57999991059401e+00, 2.569999940395675e+00, 2.559999940395533e+00, 2.549999940396243e+00, 2.539999970198051e+00, 2.529999970197766e+00, 2.519999970197198e+00, 2.510000000000426e+00, 2.5e+00, 2.489999999999716e+00, 2.479999999999432e+00, 2.469999999999148e+00, 2.460000059602726e+00, 2.450000059603579e+00, 2.440000059604503e+00, 2.430000059604432e+00, 2.420000059604147e+00, 2.410000059603863e+00, 2.400000119207158e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00, 3.04e+00, 3.08e+00, 3.12e+00, 3.16e+00, 3.2e+00, 3.24e+00, 3.28e+00, 3.32e+00, 3.36e+00, 3.4e+00, 3.44e+00, 3.48e+00, 3.52e+00, 3.56e+00, 3.6e+00, 3.64e+00, 3.68e+00, 3.72e+00, 3.76e+00, 3.8e+00, 3.84e+00, 3.88e+00, 3.92e+00, 3.96e+00, 4e+00] +sorDes.y[1]=[3e+00, 2.990000009313215e+00, 2.980000018626431e+00, 2.970000027939647e+00, 2.960000037252861e+00, 2.95000004842872e+00, 2.940000055879292e+00, 2.930000067055204e+00, 2.920000074505726e+00, 2.910000089406701e+00, 2.900000096857437e+00, 2.890000104308102e+00, 2.880000111758589e+00, 2.869999880791066e+00, 2.859999895691898e+00, 2.849999910593299e+00, 2.839999910593299e+00, 2.829999925494274e+00, 2.819999940395675e+00, 2.809999940395533e+00, 2.799999955296649e+00, 2.789999955297005e+00, 2.779999970197766e+00, 2.769999985099025e+00, 2.759999985098599e+00, 2.75e+00, 2.739999999999574e+00, 2.730000029802802e+00, 2.720000029802234e+00, 2.710000029801949e+00, 2.700000059603757e+00, 2.690000059604467e+00, 2.680000059604325e+00, 2.67000008940599e+00, 2.660000089406701e+00, 2.650000089406701e+00, 2.640000119208224e+00, 2.630000119208934e+00, 2.619999880791066e+00, 2.609999880791776e+00, 2.599999910593299e+00, 2.589999910593299e+00, 2.57999991059401e+00, 2.569999940395675e+00, 2.559999940395533e+00, 2.549999940396243e+00, 2.539999970198051e+00, 2.529999970197766e+00, 2.519999970197198e+00, 2.510000000000426e+00, 2.5e+00, 2.489999999999716e+00, 2.479999999999432e+00, 2.469999999999148e+00, 2.460000059602726e+00, 2.450000059603579e+00, 2.440000059604503e+00, 2.430000059604432e+00, 2.420000059604147e+00, 2.410000059603863e+00, 2.400000119207158e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00, 3.04e+00, 3.08e+00, 3.12e+00, 3.16e+00, 3.2e+00, 3.24e+00, 3.28e+00, 3.32e+00, 3.36e+00, 3.4e+00, 3.44e+00, 3.48e+00, 3.52e+00, 3.56e+00, 3.6e+00, 3.64e+00, 3.68e+00, 3.72e+00, 3.76e+00, 3.8e+00, 3.84e+00, 3.88e+00, 3.92e+00, 3.96e+00, 4e+00] +sorDes.y[2]=[2e+00, 1.960000037252901e+00, 1.919999955296513e+00, 1.879999992549417e+00, 1.840000029802316e+00, 1.799999955296522e+00, 1.759999985098829e+00, 1.720000029802327e+00, 1.679999940395462e+00, 1.64e+00, 1.600000029802322e+00, 1.559999940395391e+00, 1.519999970197678e+00, 1.48e+00, 1.440000059604609e+00, 1.4e+00, 1.36e+00, 1.320000059604538e+00, 1.28e+00, 1.24e+00, 1.200000059604467e+00, 1.159999940395355e+00, 1.12e+00, 1.080000059604645e+00, 1.039999940395355e+00, 1e+00, 1.04e+00, 1.08e+00, 1.12e+00, 1.16e+00, 1.2e+00, 1.24e+00, 1.28e+00, 1.32e+00, 1.36e+00, 1.4e+00, 1.44e+00, 1.48e+00, 1.52e+00, 1.56e+00, 1.6e+00, 1.64e+00, 1.68e+00, 1.72e+00, 1.76e+00, 1.8e+00, 1.84e+00, 1.88e+00, 1.92e+00, 1.96e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.390000119208011e+00, 2.380000119208863e+00, 2.369999880791137e+00, 2.359999880791989e+00, 2.349999880792842e+00, 2.339999940396137e+00, 2.329999940395853e+00, 2.319999940395568e+00, 2.309999940395497e+00, 2.299999940396421e+00, 2.289999940397274e+00, 2.280000000000852e+00, 2.270000000000568e+00, 2.260000000000284e+00, 2.25e+00, 2.239999999999716e+00, 2.229999999999432e+00, 2.219999999999148e+00, 2.210000059602726e+00, 2.200000059603579e+00, 2.190000059604503e+00, 2.180000059604432e+00, 2.170000059604147e+00, 2.160000059603863e+00, 2.150000119207158e+00, 2.140000119208011e+00, 2.130000119208863e+00, 2.119999880791137e+00, 2.109999880791989e+00, 2.099999880792842e+00, 2.089999940396137e+00, 2.079999940395853e+00, 2.069999940395568e+00, 2.059999940395497e+00, 2.049999940396421e+00, 2.039999940397274e+00, 2.030000000000852e+00, 2.020000000000568e+00, 2.010000000000284e+00, 2e+00] +sorDes.y[3]=[0e+00, 4e-02, 8e-02, 1.2e-01, 1.6e-01, 2e-01, 2.4e-01, 2.8e-01, 3.2e-01, 3.6e-01, 4e-01, 4.4e-01, 4.8e-01, 5.2e-01, 5.600000000000001e-01, 6e-01, 6.4e-01, 6.8e-01, 7.2e-01, 7.6e-01, 8e-01, 8.4e-01, 8.8e-01, 9.2e-01, 9.6e-01, 1e+00, 9.599999403956394e-01, 9.20000059604325e-01, 8.799999999999999e-01, 8.39999940395604e-01, 8.000000596046448e-01, 7.6e-01, 7.2e-01, 6.800000596046447e-01, 6.399999999999999e-01, 6.000000000000001e-01, 5.600000596046448e-01, 5.2e-01, 4.799999701977486e-01, 4.399999403955683e-01, 4.000000298022335e-01, 3.600000000000001e-01, 3.199999403955507e-01, 2.899999845027924e-01, 3.2e-01, 3.500000298023224e-01, 3.79999970197802e-01, 4.099999999999999e-01, 4.400000298023223e-01, 4.699999701976776e-01, 5e-01, 5.299999999997158e-01, 5.60000059603508e-01, 5.900000596037922e-01, 6.199999403966343e-01, 6.499999403960659e-01, 6.799999999999291e-01, 7.099999999997867e-01, 7.400000596036499e-01, 7.700000596038631e-01, 7.999999403967762e-01, 8.299999403962078e-01, 8.600000000001421e-01, 8.899999999998579e-01, 9.200000596037922e-01, 9.500000596032238e-01, 9.799999403961369e-01, 1.009999940395853e+00, 1.039999940395995e+00, 1.070000059604645e+00, 1.100000059603579e+00, 1.130000059604005e+00, 1.159999880793268e+00, 1.190000000000568e+00, 1.220000000000284e+00, 1.25e+00, 1.279999999999716e+00, 1.309999999999432e+00, 1.340000119206732e+00, 1.369999940395995e+00, 1.399999940396421e+00, 1.429999940395355e+00, 1.460000059604005e+00, 1.490000059604147e+00, 1.520000059603863e+00, 1.549999880792842e+00, 1.580000000000426e+00, 1.610000000000142e+00, 1.639999999999858e+00, 1.669999999999574e+00, 1.700000119207158e+00, 1.729999940396137e+00, 1.759999940395853e+00, 1.789999940395995e+00, 1.820000059604645e+00, 1.850000059603579e+00, 1.880000059604005e+00, 1.909999880793268e+00, 1.940000000000568e+00, 1.970000000000284e+00, 2e+00] +sorDes.y[4]=[-1e+00, -9.700000279396727e-01, -9.399999962747139e-01, -9.100000242143751e-01, -8.799999925494277e-01, -8.500000260770252e-01, -8.199999888241416e-01, -7.900000223517407e-01, -7.599999850988655e-01, -7.300000298022691e-01, -6.999999925493972e-01, -6.700000149011524e-01, -6.399999776482982e-01, -6.099999999999289e-01, -5.799999850988476e-01, -5.500000298022336e-01, -5.199999701977309e-01, -4.900000149011345e-01, -4.600000298022158e-01, -4.3e-01, -4.000000149011168e-01, -3.699999850988388e-01, -3.4e-01, -3.100000149011611e-01, -2.799999850988388e-01, -2.5e-01, -2.199999701977486e-01, -1.900000298022424e-01, -1.59999999999991e-01, -1.299999701977398e-01, -1.000000372528142e-01, -7.000000745056284e-02, -3.999997764831148e-02, -1.000003911547481e-02, 1.999998882415249e-02, 5.000001862641812e-02, 7.999995529662296e-02, 1.099999850988743e-01, 1.400000149011257e-01, 1.70000044703377e-01, 1.999999850988833e-01, 2.300000149011345e-01, 2.600000298023223e-01, 2.800000154972077e-01, 2.399999850988566e-01, 1.999999552966052e-01, 1.600000298022601e-01, 1.199999925494328e-01, 7.999995529659643e-02, 4.000003725283197e-02, 0e+00, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +sorDes.y[5]=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 0e+00, -4.000003725226355e-02, -8.000007450452709e-02, -1.200001117568972e-01, -1.599999105944718e-01, -1.99999955297316e-01, -2.399999850987147e-01, -2.800000298017893e-01, -3.200000596036499e-01, -3.600001192073355e-01, -3.999999105944538e-01, -4.39999940396421e-01, -4.799999701980329e-01, -5.199999999997158e-01, -5.600000596037922e-01, -6.00000119207158e-01, -6.399998807930554e-01, -6.799999403963501e-01, -7.200000000004265e-01, -7.600000000001419e-01, -8.000000596039341e-01, -8.400000596033657e-01, -8.799998807924156e-01, -9.19999940396492e-01, -9.599999403962078e-01, -1e+00, -1.039999999999432e+00, -1.080000119208153e+00, -1.120000119207584e+00, -1.15999988079199e+00, -1.200000000000711e+00, -1.239999999999858e+00, -1.279999999999573e+00, -1.3200001192073e+00, -1.360000119207726e+00, -1.399999880792131e+00, -1.440000000000853e+00, -1.480000000000284e+00, -1.519999999999716e+00, -1.559999999999147e+00, -1.600000119207869e+00, -1.639999880792274e+00, -1.6799998807927e+00, -1.720000000000427e+00, -1.760000000000142e+00, -1.799999999999289e+00, -1.84000011920801e+00, -1.879999880792416e+00, -1.919999880791847e+00, -1.960000000000568e+00, -2e+00] +sorAsc.yIdx[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +sorAsc.yIdx[2]=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.999996423728557e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00] +sorAsc.yIdx[3]=[5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 2.000003576271443e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00] +sorAsc.yIdx[4]=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4.000011920727175e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +sorAsc.yIdx[5]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.999988079272825e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] +sorDes.yIdx[1]=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4.999988079272825e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00] +sorDes.yIdx[2]=[3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 4.000011920727175e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 2e+00] +sorDes.yIdx[3]=[5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 5e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 2.000003576271443e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 1e+00] +sorDes.yIdx[4]=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.999996423728557e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 4e+00] +sorDes.yIdx[5]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sqrt.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sqrt.txt new file mode 100644 index 0000000000..297265a295 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Sqrt.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +sqrt1.y=[0e+00, 3.000000151209753e-01, 4.242640780004506e-01, 5.19615238657952e-01, 6.000000304655717e-01, 6.708204099709842e-01, 7.348469577225347e-01, 7.937253696589017e-01, 8.485281561682698e-01, 8.999999581764024e-01, 9.486833143720352e-01, 9.949874308719141e-01, 1.039230477455221e+00, 1.081665416452227e+00, 1.122497198567804e+00, 1.161895013535162e+00, 1.200000061053048e+00, 1.236931675108415e+00, 1.272792194757011e+00, 1.307669647770564e+00, 1.341640820018859e+00, 1.374772689295461e+00, 1.407124761570393e+00, 1.438749419485452e+00, 1.469693915545359e+00, 1.5e+00, 1.529705910072892e+00, 1.558845727408914e+00, 1.587450739336255e+00, 1.615549468355506e+00, 1.643167582235586e+00, 1.67032932591816e+00, 1.697056312424043e+00, 1.723368729631927e+00, 1.749285569514204e+00, 1.774823919128662e+00, 1.79999991650415e+00, 1.824828732160109e+00, 1.849324237967186e+00, 1.873499427778869e+00, 1.897366628797627e+00, 1.92093730809587e+00, 1.944222242152729e+00, 1.967231495689451e+00, 1.989974861761983e+00, 2.012461212082147e+00, 2.034698944689646e+00, 2.056696417552923e+00, 2.078460954982385e+00, 2.0999998841758e+00, 2.121320247650146e+00, 2.142428656561722e+00, 2.163330833015845e+00, 2.184032975916038e+00, 2.204540685682676e+00, 2.224859451957013e+00, 2.244994397148328e+00, 2.264950289619251e+00, 2.284731897771634e+00, 2.304343751580789e+00, 2.323790027187542e+00, 2.343074771088151e+00, 2.362202396838752e+00, 2.381176242295471e+00, 2.400000122167513e+00, 2.418677374339996e+00, 2.437211465061093e+00, 2.4556057147093e+00, 2.473863350246226e+00, 2.491987232695804e+00, 2.509979984659744e+00, 2.527844944024971e+00, 2.5455843896188e+00, 2.563201155531373e+00, 2.580697519828445e+00, 2.598076105117798e+00, 2.615339295572717e+00, 2.632489236991108e+00, 2.649528313558764e+00, 2.666458332066031e+00, 2.683281640075675e+00, 2.700000043707468e+00, 2.716615450301871e+00, 2.733130005642796e+00, 2.749545378666097e+00, 2.765863379767072e+00, 2.78208563396725e+00, 2.79821371264906e+00, 2.814249523153747e+00, 2.830194257581026e+00, 2.846049823292036e+00, 2.861817557081525e+00, 2.877498839013571e+00, 2.893095243766897e+00, 2.908607963433942e+00, 2.924038428522723e+00, 2.939387831140108e+00, 2.954657272610858e+00, 2.9698483654793e+00, 2.984962210576912e+00, 3e+00] +sqrt1.u=[0e+00, 9.000000558793503e-02, 1.800000111758684e-01, 2.70000016763792e-01, 3.600000223517301e-01, 4.499999813735582e-01, 5.400000335276152e-01, 6.29999992549414e-01, 7.200000447034036e-01, 8.099999701977308e-01, 8.999999627471637e-01, 9.900000149011523e-01, 1.080000067055185e+00, 1.169999999999929e+00, 1.259999985098848e+00, 1.349999970197766e+00, 1.440000089406701e+00, 1.529999955296543e+00, 1.619999940395462e+00, 1.710000059604609e+00, 1.799999925494238e+00, 1.890000044703386e+00, 1.980000029802305e+00, 2.069999895692183e+00, 2.160000134110051e+00, 2.25e+00, 2.340000000000426e+00, 2.429999970197198e+00, 2.519999970197767e+00, 2.609999970198051e+00, 2.699999940394822e+00, 2.789999940395533e+00, 2.880000178813401e+00, 2.969999910592447e+00, 3.059999910593299e+00, 3.150000149011168e+00, 3.239999880790071e+00, 3.329999880791066e+00, 3.420000119208934e+00, 3.510000119209929e+00, 3.599999850988832e+00, 3.690000089406701e+00, 3.780000089407553e+00, 3.869999821186599e+00, 3.960000059604467e+00, 4.050000298020914e+00, 4.13999979138536e+00, 4.230000029802375e+00, 4.320000268218823e+00, 4.409999761583268e+00, 4.5e+00, 4.590000238415453e+00, 4.679999999998295e+00, 4.770000238416022e+00, 4.859999940397274e+00, 4.949999701980684e+00, 5.039999940394929e+00, 5.130000178811589e+00, 5.219999940393863e+00, 5.310000178811589e+00, 5.399999880792842e+00, 5.489999642376821e+00, 5.579999880791137e+00, 5.670000119208863e+00, 5.760000357623179e+00, 5.850000119207158e+00, 5.939999821188411e+00, 6.030000059606137e+00, 6.119999821188411e+00, 6.210000059605071e+00, 6.300000298019316e+00, 6.390000059602726e+00, 6.479999761583978e+00, 6.570000000001705e+00, 6.659999761584547e+00, 6.75e+00, 6.840000238415453e+00, 6.929999999998295e+00, 7.020000238416022e+00, 7.109999940397274e+00, 7.199999701980684e+00, 7.289999940394929e+00, 7.380000178811589e+00, 7.469999940393863e+00, 7.560000178811589e+00, 7.649999880792842e+00, 7.739999642376821e+00, 7.829999880791137e+00, 7.920000119208863e+00, 8.010000357623179e+00, 8.100000596038631e+00, 8.189999344357505e+00, 8.279999582772959e+00, 8.369999821188411e+00, 8.460000059604502e+00, 8.550000298019315e+00, 8.640000536434769e+00, 8.729999284753642e+00, 8.819999523169095e+00, 8.909999761584547e+00, 9e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Subtract.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Subtract.txt new file mode 100644 index 0000000000..3231475f65 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Subtract.txt @@ -0,0 +1,11 @@ +last-generated=2022-01-28 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +sub.u1=[-2e+00, -1.960000037252901e+00, -1.919999955296513e+00, -1.879999992549417e+00, -1.840000029802316e+00, -1.799999955296522e+00, -1.759999985098829e+00, -1.720000029802327e+00, -1.679999940395462e+00, -1.64e+00, -1.600000029802322e+00, -1.559999940395391e+00, -1.519999970197678e+00, -1.48e+00, -1.440000059604609e+00, -1.4e+00, -1.36e+00, -1.320000059604538e+00, -1.28e+00, -1.24e+00, -1.200000059604467e+00, -1.159999940395355e+00, -1.12e+00, -1.080000059604645e+00, -1.039999940395355e+00, -1e+00, -9.599999403956394e-01, -9.20000059604325e-01, -8.799999999999999e-01, -8.39999940395604e-01, -8.000000596046448e-01, -7.6e-01, -7.2e-01, -6.800000596046447e-01, -6.399999999999999e-01, -6.000000000000001e-01, -5.600000596046448e-01, -5.2e-01, -4.799999701977486e-01, -4.399999403955683e-01, -4.000000298022335e-01, -3.600000000000001e-01, -3.199999403955507e-01, -2.800000298022158e-01, -2.399999850988566e-01, -1.999999552966052e-01, -1.600000298022601e-01, -1.199999925494328e-01, -7.999995529659643e-02, -4.000003725283197e-02, 1.332267629550188e-15, 4.000003725226355e-02, 8.000007450452709e-02, 1.200001117568972e-01, 1.599999105944718e-01, 1.99999955297316e-01, 2.399999850987147e-01, 2.800000298017893e-01, 3.200000596036499e-01, 3.600001192073355e-01, 3.999999105944538e-01, 4.39999940396421e-01, 4.799999701980329e-01, 5.199999999997158e-01, 5.600000596037922e-01, 6.00000119207158e-01, 6.399998807930554e-01, 6.799999403963501e-01, 7.200000000004265e-01, 7.600000000001419e-01, 8.000000596039341e-01, 8.400000596033657e-01, 8.799998807924156e-01, 9.19999940396492e-01, 9.599999403962078e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00] +sub.u2=[-5e-01, -4.799999888241316e-01, -4.60000007450579e-01, -4.399999962747085e-01, -4.199999850988488e-01, -4.000000074505834e-01, -3.799999925494144e-01, -3.60000014901159e-01, -3.4e-01, -3.2e-01, -3.00000014901139e-01, -2.8e-01, -2.599999850988788e-01, -2.399999850988743e-01, -2.2e-01, -2.000000149011168e-01, -1.8e-01, -1.6e-01, -1.400000149011079e-01, -1.199999925494283e-01, -1.000000074505695e-01, -7.999998509886325e-02, -5.999999627471636e-02, -4.000000745056503e-02, -1.99999888241541e-02, 3.33066907387547e-16, 2.000001862641598e-02, 3.999997764829821e-02, 5.999999627471642e-02, 8.000001490113007e-02, 9.99999776483026e-02, 1.199999925494283e-01, 1.400000149011079e-01, 1.599999701977753e-01, 1.8e-01, 2.000000149011167e-01, 2.199999701977842e-01, 2.399999850988743e-01, 2.6e-01, 2.800000298023224e-01, 3e-01, 3.2e-01, 3.400000298023224e-01, 3.6e-01, 3.8e-01, 4.000000298023224e-01, 4.19999970197802e-01, 4.399999999999999e-01, 4.600000298021625e-01, 4.799999701978197e-01, 5e-01, 5.199999999997158e-01, 5.400000596040764e-01, 5.600000596037922e-01, 5.799999403959948e-01, 6.000000000003554e-01, 6.199999999999291e-01, 6.399999999997867e-01, 6.600000596036499e-01, 6.800000596038631e-01, 6.999999403960657e-01, 7.200000000004263e-01, 7.400000000001421e-01, 7.599999999998579e-01, 7.799999999995737e-01, 8.000000596039343e-01, 8.199999403961369e-01, 8.399999403963501e-01, 8.600000000002133e-01, 8.800000000000709e-01, 8.999999999996446e-01, 9.200000596040052e-01, 9.399999403962078e-01, 9.599999403959236e-01, 9.800000000002842e-01, 1e+00, 1.02e+00, 1.04e+00, 1.06e+00, 1.08e+00, 1.1e+00, 1.12e+00, 1.14e+00, 1.16e+00, 1.18e+00, 1.2e+00, 1.22e+00, 1.24e+00, 1.26e+00, 1.28e+00, 1.3e+00, 1.32e+00, 1.34e+00, 1.36e+00, 1.38e+00, 1.4e+00, 1.42e+00, 1.44e+00, 1.46e+00, 1.48e+00, 1.5e+00] +sub.y=[-1.5e+00, -1.480000018626444e+00, -1.460000037252888e+00, -1.440000055879333e+00, -1.41999995529654e+00, -1.399999977648283e+00, -1.379999992549454e+00, -1.360000014901154e+00, -1.340000029802269e+00, -1.320000059604538e+00, -1.299999955296561e+00, -1.279999970197695e+00, -1.259999985098919e+00, -1.239999999999858e+00, -1.220000029802305e+00, -1.200000059604467e+00, -1.179999940395462e+00, -1.159999970197731e+00, -1.140000000000213e+00, -1.120000000000071e+00, -1.100000029802234e+00, -1.080000029802127e+00, -1.059999940395391e+00, -1.039999970197802e+00, -1.019999970197838e+00, -1e+00, -9.8e-01, -9.6e-01, -9.399999999999999e-01, -9.2e-01, -9e-01, -8.8e-01, -8.6e-01, -8.4e-01, -8.2e-01, -8e-01, -7.8e-01, -7.6e-01, -7.4e-01, -7.2e-01, -7e-01, -6.8e-01, -6.6e-01, -6.4e-01, -6.2e-01, -6e-01, -5.8e-01, -5.600000000000001e-01, -5.4e-01, -5.2e-01, -5e-01, -4.799999701981039e-01, -4.59999970198246e-01, -4.399999403962078e-01, -4.200000298016828e-01, -4.00000029801967e-01, -3.800000000000709e-01, -3.600000000002133e-01, -3.399999701981751e-01, -3.199999403965277e-01, -3.00000059603579e-01, -2.800000298018961e-01, -2.599999999998579e-01, -2.399999850990164e-01, -2.199999701982105e-01, -1.999999552972269e-01, -1.800000596036677e-01, -1.600000298018249e-01, -1.400000149008946e-01, -1.199999925493573e-01, -9.999997764865798e-02, -7.99999552972359e-02, -6.00000558784486e-02, -4.000003725226355e-02, -2.000001862613177e-02, 1.110223024625157e-15, 2.000001862613177e-02, 4.000003725226355e-02, 6.00000558784486e-02, 7.99999552972359e-02, 9.999997764865798e-02, 1.199999925493573e-01, 1.400000149008946e-01, 1.600000298018249e-01, 1.800000596036677e-01, 1.999999552972269e-01, 2.199999701982105e-01, 2.399999850990164e-01, 2.599999999998579e-01, 2.800000298018961e-01, 3.00000059603579e-01, 3.199999403965277e-01, 3.399999701981751e-01, 3.600000000002133e-01, 3.800000000000709e-01, 4.00000029801967e-01, 4.200000298016828e-01, 4.399999403962078e-01, 4.59999970198246e-01, 4.799999701981039e-01, 5e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Switch.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Switch.txt new file mode 100644 index 0000000000..4d3b037e50 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Switch.txt @@ -0,0 +1,12 @@ +last-generated=2019-05-21 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +switch1.u1=[-1e+00, -9.399999985098856e-01, -8.799999970197717e-01, -8.200000000000107e-01, -7.599999940395409e-01, -6.99999988079071e-01, -6.4e-01, -5.799999761581776e-01, -5.19999988079071e-01, -4.599999940395711e-01, -4.000000059604645e-01, -3.400000178814005e-01, -2.800000298021661e-01, -2.199999701978339e-01, -1.599999821185994e-01, -1.000000014901161e-01, -4.000001341106101e-02, 1.999997094288099e-02, 8.000002682195148e-02, 1.400000149011683e-01, 2.000000029802322e-01, 2.600000476838864e-01, 3.19999964237199e-01, 3.800000238418723e-01, 4.399999403953267e-01, 5e-01, 5.600000596048154e-01, 6.199999761580569e-01, 6.800000357627302e-01, 7.399999523161136e-01, 8.00000011920929e-01, 8.600000715254601e-01, 9.199999880789859e-01, 9.800000476836591e-01, 1.039999904632682e+00, 1.100000023841858e+00, 1.160000023842312e+00, 1.219999999999773e+00, 1.280000000000227e+00, 1.339999976157688e+00, 1.399999976158142e+00, 1.460000095367318e+00, 1.520000095367204e+00, 1.579999928473517e+00, 1.63999992847454e+00, 1.700000047683716e+00, 1.760000047683602e+00, 1.820000166892778e+00, 1.879999880790938e+00, 1.939999999999545e+00, 2e+00, 2.060000000000454e+00, 2.12000000000091e+00, 2.179999952315375e+00, 2.23999995231583e+00, 2.299999952316284e+00, 2.359999952316739e+00, 2.420000190733499e+00, 2.479999904631659e+00, 2.53999990463325e+00, 2.599999904632568e+00, 2.660000143050465e+00, 2.720000143052057e+00, 2.779999856947943e+00, 2.839999856949535e+00, 2.900000095367432e+00, 2.96000009536675e+00, 3.020000095368341e+00, 3.079999809266501e+00, 3.140000047683261e+00, 3.200000047683716e+00, 3.26000004768417e+00, 3.320000047684625e+00, 3.37999999999909e+00, 3.439999999999546e+00, 3.5e+00, 3.560000000000454e+00, 3.62000000000091e+00, 3.679999952315375e+00, 3.73999995231583e+00, 3.799999952316284e+00, 3.859999666222175e+00, 3.92000019073077e+00, 3.979999904634387e+00, 4.040000190731226e+00, 4.099999904632568e+00, 4.159999618533911e+00, 4.219999904630749e+00, 4.280000095369251e+00, 4.340000381466089e+00, 4.400000095367432e+00, 4.459999809268774e+00, 4.520000095365614e+00, 4.579999809266956e+00, 4.640000095363793e+00, 4.699999809265137e+00, 4.760000000003638e+00, 4.820000286095929e+00, 4.88000000000182e+00, 4.940000286098657e+00, 5e+00] +switch1.u2=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +switch1.u3=[-1e+00, -9.800000193715102e-01, -9.599999791383756e-01, -9.400000000000035e-01, -9.200000178813952e-01, -8.999999761581421e-01, -8.8e-01, -8.600000119209289e-01, -8.39999976158142e-01, -8.19999988079071e-01, -8.00000011920929e-01, -7.799999761581563e-01, -7.599999999999716e-01, -7.400000000000284e-01, -7.200000238418437e-01, -6.99999988079071e-01, -6.800000119209432e-01, -6.600000357626163e-01, -6.399999761581705e-01, -6.199999999999858e-01, -6.000000238418579e-01, -5.799999642371563e-01, -5.600000119209574e-01, -5.400000119209005e-01, -5.200000000000569e-01, -5e-01, -4.799999701977629e-01, -4.600000178813508e-01, -4.399999880790426e-01, -4.200000059605213e-01, -4.000000059604645e-01, -3.799999761580852e-01, -3.600000238418152e-01, -3.39999994039507e-01, -3.200000119209857e-01, -3.00000011920929e-01, -2.799999821185498e-01, -2.600000000000284e-01, -2.39999985098846e-01, -2.200000178814502e-01, -2.000000029802322e-01, -1.799999880790143e-01, -1.59999958276777e-01, -1.400000387429907e-01, -1.200000163912986e-01, -1.000000014901161e-01, -7.999997913835291e-02, -5.999996051191588e-02, -4.000003725294565e-02, -2.000001862647274e-02, -3.774758283725532e-15, 2.000001862647274e-02, 4.000003725294565e-02, 5.999996051191588e-02, 7.999997913835308e-02, 1.000000014901161e-01, 1.200000163912987e-01, 1.400000387429906e-01, 1.59999958276777e-01, 1.799999880790141e-01, 2.000000029802322e-01, 2.200000178814502e-01, 2.400000327826683e-01, 2.599999523164547e-01, 2.799999821185498e-01, 3.00000011920929e-01, 3.200000119209859e-01, 3.400000417233651e-01, 3.599999761580285e-01, 3.799999761580851e-01, 4.000000059604645e-01, 4.200000059605212e-01, 4.400000357629004e-01, 4.599999701975639e-01, 4.79999970197763e-01, 5e-01, 5.200000000000568e-01, 5.400000596047585e-01, 5.599999642370996e-01, 5.799999642371564e-01, 6.000000238418579e-01, 6.199999284760181e-01, 6.40000023841062e-01, 6.599999880798666e-01, 6.800000834449111e-01, 6.99999988079071e-01, 7.199999523178757e-01, 7.400000476829199e-01, 7.599999523170801e-01, 7.800000476821243e-01, 8.00000011920929e-01, 8.199999165550889e-01, 8.400000119201334e-01, 8.59999976158938e-01, 8.800000715239819e-01, 8.999999761581421e-01, 9.199999403969468e-01, 9.40000035761991e-01, 9.599999403961511e-01, 9.800000953658401e-01, 1e+00] +time=[0e+00, 5e+00] +switch1.y=[-1e+00, -9.399999985098856e-01, -8.799999970197717e-01, -8.200000000000107e-01, -7.599999940395409e-01, -6.99999988079071e-01, -6.4e-01, -5.799999761581776e-01, -5.19999988079071e-01, -4.599999940395711e-01, -4.000000059604645e-01, -3.400000178814005e-01, -2.800000298021661e-01, -2.199999701978339e-01, -1.599999821185994e-01, -1.000000014901161e-01, -4.000001341106101e-02, 1.999997094288099e-02, 8.000002682195148e-02, 1.400000149011683e-01, 2.000000029802322e-01, -5.799999642371563e-01, -5.600000119209574e-01, -5.400000119209005e-01, -5.200000000000569e-01, -5e-01, -4.799999701977629e-01, -4.600000178813508e-01, -4.399999880790426e-01, -4.200000059605213e-01, -4.000000059604645e-01, -3.799999761580852e-01, -3.600000238418152e-01, -3.39999994039507e-01, -3.200000119209857e-01, -3.00000011920929e-01, -2.799999821185498e-01, -2.600000000000284e-01, -2.39999985098846e-01, -2.200000178814502e-01, -2.000000029802322e-01, 1.460000095367318e+00, 1.520000095367204e+00, 1.579999928473517e+00, 1.63999992847454e+00, 1.700000047683716e+00, 1.760000047683602e+00, 1.820000166892778e+00, 1.879999880790938e+00, 1.939999999999545e+00, 2e+00, 2.060000000000454e+00, 2.12000000000091e+00, 2.179999952315375e+00, 2.23999995231583e+00, 2.299999952316284e+00, 2.359999952316739e+00, 2.420000190733499e+00, 2.479999904631659e+00, 2.53999990463325e+00, 2.599999904632568e+00, 2.200000178814502e-01, 2.400000327826683e-01, 2.599999523164547e-01, 2.799999821185498e-01, 3.00000011920929e-01, 3.200000119209859e-01, 3.400000417233651e-01, 3.599999761580285e-01, 3.799999761580851e-01, 4.000000059604645e-01, 4.200000059605212e-01, 4.400000357629004e-01, 4.599999701975639e-01, 4.79999970197763e-01, 5e-01, 5.200000000000568e-01, 5.400000596047585e-01, 5.599999642370996e-01, 5.799999642371564e-01, 6.000000238418579e-01, 3.859999666222175e+00, 3.92000019073077e+00, 3.979999904634387e+00, 4.040000190731226e+00, 4.099999904632568e+00, 4.159999618533911e+00, 4.219999904630749e+00, 4.280000095369251e+00, 4.340000381466089e+00, 4.400000095367432e+00, 4.459999809268774e+00, 4.520000095365614e+00, 4.579999809266956e+00, 4.640000095363793e+00, 4.699999809265137e+00, 4.760000000003638e+00, 4.820000286095929e+00, 4.88000000000182e+00, 4.940000286098657e+00, 5e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Tan.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Tan.txt new file mode 100644 index 0000000000..b74ef1621d --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Reals_Validation_Tan.txt @@ -0,0 +1,10 @@ +last-generated=2017-03-22 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +tan1.u=[-1.5e+00, -1.470000027939673e+00, -1.440000055879345e+00, -1.40999996460977e+00, -1.379999992549401e+00, -1.350000026077003e+00, -1.320000048428746e+00, -1.289999962747105e+00, -1.259999985098812e+00, -1.230000029802162e+00, -1.200000052153998e+00, -1.169999955296543e+00, -1.139999977648218e+00, -1.109999999999929e+00, -1.080000044703457e+00, -1.049999970197766e+00, -1.019999970197838e+00, -9.900000149011345e-01, -9.600000000001065e-01, -9.300000000000355e-01, -8.999999850988831e-01, -8.699999850989365e-01, -8.399999701976953e-01, -8.10000014901099e-01, -7.799999552965964e-01, -7.5e-01, -7.199999999998579e-01, -6.900000298021625e-01, -6.600000298023045e-01, -6.29999970197802e-01, -6.000000596044672e-01, -5.699999999999645e-01, -5.399999999998935e-01, -5.10000029802127e-01, -4.799999999999999e-01, -4.499999701977665e-01, -4.200000298023224e-01, -3.9e-01, -3.6e-01, -3.299999701976776e-01, -3.000000298022335e-01, -2.700000000000001e-01, -2.399999552966142e-01, -2.100000149011612e-01, -1.8e-01, -1.499999701976776e-01, -1.200000223517106e-01, -9.000000000000452e-02, -5.99999664724673e-02, -3.000002793961509e-02, 0e+00, 3.000002793918877e-02, 6.000005587839531e-02, 9.000008940547513e-02, 1.199999329458938e-01, 1.499999701982107e-01, 1.799999999998936e-01, 2.100000149008413e-01, 2.400000447027374e-01, 2.700000894054039e-01, 2.99999940396421e-01, 3.299999701983171e-01, 3.600000000002131e-01, 3.899999999997869e-01, 4.200000298016829e-01, 4.50000059603579e-01, 4.799999105945961e-01, 5.099999403963501e-01, 5.400000000002133e-01, 5.700000000000709e-01, 6.000000596039341e-01, 6.300000596033657e-01, 6.599999403962078e-01, 6.89999940396492e-01, 7.200000000002842e-01, 7.5e-01, 7.799999999997158e-01, 8.10000059603508e-01, 8.400000596037922e-01, 8.699999403966343e-01, 8.999999403960659e-01, 9.299999999999291e-01, 9.599999999997867e-01, 9.900000596036499e-01, 1.020000059603863e+00, 1.049999880792842e+00, 1.080000000000426e+00, 1.110000000000142e+00, 1.139999999999858e+00, 1.169999999999574e+00, 1.200000119207158e+00, 1.229999940396137e+00, 1.259999940395853e+00, 1.289999940395995e+00, 1.320000059604645e+00, 1.350000059603579e+00, 1.380000059604005e+00, 1.409999880793268e+00, 1.440000000000568e+00, 1.470000000000284e+00, 1.5e+00] +tan1.y=[-1.410142040252686e+01, -9.887374815413839e+00, -7.601826115546201e+00, -6.165356083530985e+00, -5.177437233115566e+00, -4.45522170086631e+00, -3.903347666807665e+00, -3.467205774752797e+00, -3.113269034344981e+00, -2.819815733372622e+00, -2.572151695499103e+00, -2.359981048444761e+00, -2.175875141371414e+00, -2.014338183442734e+00, -1.871217378173971e+00, -1.743315412078084e+00, -1.628130397153165e+00, -1.523676771027147e+00, -1.428357547756727e+00, -1.340873817618058e+00, -1.26015820450566e+00, -1.185324860331316e+00, -1.1156322876344e+00, -1.050455119880158e+00, -9.892614763328818e-01, -9.315964579582214e-01, -8.770678731914811e-01, -8.253361530519888e-01, -7.761049328202556e-01, -7.291146731090656e-01, -6.841368606368048e-01, -6.409685713026726e-01, -5.994295783279446e-01, -5.593587678331688e-01, -5.206108826104062e-01, -4.830550331510841e-01, -4.465725938031347e-01, -4.110549259930083e-01, -3.764028386242348e-01, -3.425248084765659e-01, -3.093362646890255e-01, -2.767581228335295e-01, -2.447166622575337e-01, -2.131424621844687e-01, -1.819695160484656e-01, -1.511351845767373e-01, -1.205793649804371e-01, -9.024378296992214e-02, -6.007207308656847e-02, -3.000903199753029e-02, 0e+00, 3.000903199710351e-02, 6.007216282527954e-02, 9.024387314962294e-02, 1.20579274302436e-01, 1.511351845772821e-01, 1.819695160483558e-01, 2.131424621841338e-01, 2.447167570358983e-01, 2.767582192099088e-01, 3.09336166835865e-01, 3.425248084772789e-01, 3.764028386244776e-01, 4.110549259927585e-01, 4.465725938023656e-01, 4.830551436131802e-01, 5.206107692398058e-01, 5.593586504977714e-01, 5.99429578328378e-01, 6.409685713028234e-01, 6.84136860636019e-01, 7.291148103115863e-01, 7.761047901712893e-01, 8.253360029476939e-01, 8.770678731922313e-01, 9.315964579582214e-01, 9.892615649350229e-01, 1.050455214508243e+00, 1.115632489564646e+00, 1.185324753580106e+00, 1.26015808933166e+00, 1.340873817617763e+00, 1.428357547755746e+00, 1.523676920883134e+00, 1.628130726014354e+00, 1.743315053177988e+00, 1.87121717899742e+00, 2.0143381834438e+00, 2.175875270036343e+00, 2.359981346009297e+00, 2.572152214189558e+00, 2.81981494312602e+00, 3.113268565123776e+00, 3.467205489147122e+00, 3.903347849554273e+00, 4.455222419078826e+00, 5.17743915277855e+00, 6.165352930281273e+00, 7.601822973838238e+00, 9.887372210631513e+00, 1.410142040252686e+01] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractSignal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractSignal.txt new file mode 100644 index 0000000000..1ecab3563c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractSignal.txt @@ -0,0 +1,20 @@ +last-generated=2022-10-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extBooSig.u[1]=[1e+00, 1e+00] +extBooSig.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extBooSig.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940395475961e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extBooSig.u[4]=[0e+00, 0e+00] +extBooSig.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940395475961e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extBooSig.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extBooSig.y[3]=[0e+00, 0e+00] +extBooSig1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940395475961e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extBooSig1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extBooSig1.y[3]=[0e+00, 0e+00] +extBooSig1.y[4]=[1e+00, 1e+00] +extBooSig1.y[5]=[1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractor.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractor.txt new file mode 100644 index 0000000000..dccb636019 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanExtractor.txt @@ -0,0 +1,22 @@ +last-generated=2022-10-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extIndBoo.u[1]=[1e+00, 1e+00] +extIndBoo.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndBoo.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940395475961e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIndBoo.u[4]=[0e+00, 0e+00] +extIndBoo.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +extIndBoo.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndBoo1.index=[6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +extIndBoo1.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndBoo2.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndBoo2.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIndBoo3.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +extIndBoo3.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIndBoo4.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +extIndBoo4.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.192072717545907e-05, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanScalarReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanScalarReplicator.txt new file mode 100644 index 0000000000..e5c1b92dff --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanScalarReplicator.txt @@ -0,0 +1,12 @@ +last-generated=2018-06-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +booRep.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 1e+00] +booRep.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booRep.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booRep.y[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorFilter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorFilter.txt new file mode 100644 index 0000000000..2499499edf --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorFilter.txt @@ -0,0 +1,13 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +booFil.u[1]=[1e+00, 1e+00] +booFil.u[2]=[1e+00, 1e+00] +booFil.u[3]=[0e+00, 0e+00] +booFil.y[1]=[1e+00, 1e+00] +booFil.y[2]=[0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorReplicator.txt new file mode 100644 index 0000000000..9d13cdae4c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_BooleanVectorReplicator.txt @@ -0,0 +1,12 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +booRep.u[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booRep.y[1, 1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booRep.y[2, 2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +booRep.y[3, 2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractSignal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractSignal.txt new file mode 100644 index 0000000000..487d0525af --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractSignal.txt @@ -0,0 +1,20 @@ +last-generated=2022-10-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extIntSig.u[1]=[1e+00, 1e+00] +extIntSig.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIntSig.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880790951923e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIntSig.u[4]=[4e+00, 4e+00] +extIntSig.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880790951923e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIntSig.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIntSig.y[3]=[4e+00, 4e+00] +extIntSig1.y[1]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880790951923e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIntSig1.y[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIntSig1.y[3]=[4e+00, 4e+00] +extIntSig1.y[4]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIntSig1.y[5]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880790951923e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractor.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractor.txt new file mode 100644 index 0000000000..4a7d27356b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerExtractor.txt @@ -0,0 +1,22 @@ +last-generated=2022-10-12 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extIndInt.u[1]=[0e+00, 0e+00] +extIndInt.u[2]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndInt.u[3]=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880790951923e-01, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +extIndInt.u[4]=[4e+00, 4e+00] +extIndInt.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +extIndInt.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999940396364401e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999880792728245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndInt1.index=[6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +extIndInt1.y=[4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00, 4e+00] +extIndInt2.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndInt2.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndInt3.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +extIndInt3.y=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndInt4.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +extIndInt4.y=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -9.99976158545649e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerScalarReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerScalarReplicator.txt new file mode 100644 index 0000000000..7dbcc61e61 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerScalarReplicator.txt @@ -0,0 +1,13 @@ +last-generated=2017-07-25 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +ram.y=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +time=[0e+00, 1e+00] +reaToInt.y=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[1]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[2]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[3]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorFilter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorFilter.txt new file mode 100644 index 0000000000..cb46360ea9 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorFilter.txt @@ -0,0 +1,13 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +intFil.u[1]=[1e+00, 1e+00] +intFil.u[2]=[2e+00, 2e+00] +intFil.u[3]=[3e+00, 3e+00] +intFil.y[1]=[1e+00, 1e+00] +intFil.y[2]=[3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorReplicator.txt new file mode 100644 index 0000000000..21a991457e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_IntegerVectorReplicator.txt @@ -0,0 +1,13 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +ram[1].y=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980225988213903e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaToInt[1].y=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[1, 1]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[2, 2]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +intRep.y[3, 2]=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.00000596036356e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2.000011920727176e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractSignal.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractSignal.txt new file mode 100644 index 0000000000..7be69a0c20 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractSignal.txt @@ -0,0 +1,22 @@ +last-generated=2022-10-14 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extSig.u[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extSig.u[2]=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extSig.u[3]=[1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299991011771211e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299982071226054e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01] +extSig.u[4]=[-1e+00, -9.599999776482632e-01, -9.200000149011579e-01, -8.79999992549417e-01, -8.399999701976976e-01, -8.000000149011668e-01, -7.599999850988288e-01, -7.200000298023179e-01, -6.799999999999999e-01, -6.4e-01, -6.00000029802278e-01, -5.600000000000001e-01, -5.199999701977576e-01, -4.799999701977486e-01, -4.399999999999999e-01, -4.000000298022336e-01, -3.6e-01, -3.2e-01, -2.800000298022158e-01, -2.399999850988566e-01, -2.000000149011389e-01, -1.599999701977265e-01, -1.199999925494327e-01, -8.000001490113007e-02, -3.99999776483082e-02, 6.661338147750939e-16, 4.000003725283197e-02, 7.999995529659643e-02, 1.199999925494328e-01, 1.600000298022601e-01, 1.999999552966052e-01, 2.399999850988566e-01, 2.800000298022158e-01, 3.199999403955507e-01, 3.600000000000001e-01, 4.000000298022335e-01, 4.399999403955683e-01, 4.799999701977486e-01, 5.2e-01, 5.600000596046448e-01, 6.000000000000001e-01, 6.399999999999999e-01, 6.800000596046447e-01, 7.2e-01, 7.6e-01, 8.000000596046448e-01, 8.39999940395604e-01, 8.799999999999999e-01, 9.20000059604325e-01, 9.599999403956394e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00] +extSig.u[5]=[-2e+00, -1.970000027939673e+00, -1.940000055879345e+00, -1.90999996460977e+00, -1.879999992549401e+00, -1.850000026077003e+00, -1.820000048428746e+00, -1.789999962747105e+00, -1.759999985098812e+00, -1.730000029802162e+00, -1.700000052153998e+00, -1.669999955296543e+00, -1.639999977648218e+00, -1.609999999999929e+00, -1.580000044703457e+00, -1.549999970197766e+00, -1.519999970197838e+00, -1.490000014901188e+00, -1.460000059604325e+00, -1.429999940395462e+00, -1.399999985098883e+00, -1.369999985098741e+00, -1.340000029802305e+00, -1.309999955296579e+00, -1.279999955296756e+00, -1.25e+00, -1.219999999999858e+00, -1.190000089406487e+00, -1.159999970197695e+00, -1.129999970197553e+00, -1.100000059604112e+00, -1.070000059604538e+00, -1.039999940395675e+00, -1.010000029802518e+00, -9.800000298022691e-01, -9.499999701977665e-01, -9.200000596044317e-01, -8.900000000000711e-01, -8.599999999999289e-01, -8.299999403955683e-01, -8.000000298022335e-01, -7.699999701977309e-01, -7.39999970197873e-01, -7.100000000001065e-01, -6.800000000000355e-01, -6.499999403955328e-01, -6.200000298021979e-01, -5.899999701976955e-01, -5.599999701978375e-01, -5.300000000001421e-01, -5e-01, -4.699999701981039e-01, -4.399999403962078e-01, -4.09999910594738e-01, -3.800000596036854e-01, -3.500000298017893e-01, -3.200000000001064e-01, -2.899999701981041e-01, -2.599999403963501e-01, -2.299999254955619e-01, -2.000000745045626e-01, -1.700000447027376e-01, -1.400000149009125e-01, -1.099999850990875e-01, -7.999995529726243e-02, -4.999992922068328e-02, -2.000007822977725e-02, 9.999949709432063e-03, 3.999997764863138e-02, 7.000000745066925e-02, 1.000000372522811e-01, 1.300000596036855e-01, 1.599999105945249e-01, 1.899999403963499e-01, 2.19999970198175e-01, 2.5e-01, 2.800000298018961e-01, 3.100000596037922e-01, 3.40000089405262e-01, 3.699999403963146e-01, 3.999999701982107e-01, 4.299999999998936e-01, 4.600000298018959e-01, 4.900000596036499e-01, 5.200000596038631e-01, 5.499999403967762e-01, 5.799999403962078e-01, 6.100000000001421e-01, 6.399999999998579e-01, 6.700000596037922e-01, 7.000000596032238e-01, 7.299999403961369e-01, 7.599999403963501e-01, 7.900000000002133e-01, 8.200000000000709e-01, 8.500000596039341e-01, 8.800000596033657e-01, 9.099999403962078e-01, 9.39999940396492e-01, 9.700000000002842e-01, 1e+00] +extSig.y[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extSig.y[2]=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extSig.y[3]=[-2e+00, -1.970000027939673e+00, -1.940000055879345e+00, -1.90999996460977e+00, -1.879999992549401e+00, -1.850000026077003e+00, -1.820000048428746e+00, -1.789999962747105e+00, -1.759999985098812e+00, -1.730000029802162e+00, -1.700000052153998e+00, -1.669999955296543e+00, -1.639999977648218e+00, -1.609999999999929e+00, -1.580000044703457e+00, -1.549999970197766e+00, -1.519999970197838e+00, -1.490000014901188e+00, -1.460000059604325e+00, -1.429999940395462e+00, -1.399999985098883e+00, -1.369999985098741e+00, -1.340000029802305e+00, -1.309999955296579e+00, -1.279999955296756e+00, -1.25e+00, -1.219999999999858e+00, -1.190000089406487e+00, -1.159999970197695e+00, -1.129999970197553e+00, -1.100000059604112e+00, -1.070000059604538e+00, -1.039999940395675e+00, -1.010000029802518e+00, -9.800000298022691e-01, -9.499999701977665e-01, -9.200000596044317e-01, -8.900000000000711e-01, -8.599999999999289e-01, -8.299999403955683e-01, -8.000000298022335e-01, -7.699999701977309e-01, -7.39999970197873e-01, -7.100000000001065e-01, -6.800000000000355e-01, -6.499999403955328e-01, -6.200000298021979e-01, -5.899999701976955e-01, -5.599999701978375e-01, -5.300000000001421e-01, -5e-01, -4.699999701981039e-01, -4.399999403962078e-01, -4.09999910594738e-01, -3.800000596036854e-01, -3.500000298017893e-01, -3.200000000001064e-01, -2.899999701981041e-01, -2.599999403963501e-01, -2.299999254955619e-01, -2.000000745045626e-01, -1.700000447027376e-01, -1.400000149009125e-01, -1.099999850990875e-01, -7.999995529726243e-02, -4.999992922068328e-02, -2.000007822977725e-02, 9.999949709432063e-03, 3.999997764863138e-02, 7.000000745066925e-02, 1.000000372522811e-01, 1.300000596036855e-01, 1.599999105945249e-01, 1.899999403963499e-01, 2.19999970198175e-01, 2.5e-01, 2.800000298018961e-01, 3.100000596037922e-01, 3.40000089405262e-01, 3.699999403963146e-01, 3.999999701982107e-01, 4.299999999998936e-01, 4.600000298018959e-01, 4.900000596036499e-01, 5.200000596038631e-01, 5.499999403967762e-01, 5.799999403962078e-01, 6.100000000001421e-01, 6.399999999998579e-01, 6.700000596037922e-01, 7.000000596032238e-01, 7.299999403961369e-01, 7.599999403963501e-01, 7.900000000002133e-01, 8.200000000000709e-01, 8.500000596039341e-01, 8.800000596033657e-01, 9.099999403962078e-01, 9.39999940396492e-01, 9.700000000002842e-01, 1e+00] +extSig1.y[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extSig1.y[2]=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extSig1.y[3]=[-2e+00, -1.970000027939673e+00, -1.940000055879345e+00, -1.90999996460977e+00, -1.879999992549401e+00, -1.850000026077003e+00, -1.820000048428746e+00, -1.789999962747105e+00, -1.759999985098812e+00, -1.730000029802162e+00, -1.700000052153998e+00, -1.669999955296543e+00, -1.639999977648218e+00, -1.609999999999929e+00, -1.580000044703457e+00, -1.549999970197766e+00, -1.519999970197838e+00, -1.490000014901188e+00, -1.460000059604325e+00, -1.429999940395462e+00, -1.399999985098883e+00, -1.369999985098741e+00, -1.340000029802305e+00, -1.309999955296579e+00, -1.279999955296756e+00, -1.25e+00, -1.219999999999858e+00, -1.190000089406487e+00, -1.159999970197695e+00, -1.129999970197553e+00, -1.100000059604112e+00, -1.070000059604538e+00, -1.039999940395675e+00, -1.010000029802518e+00, -9.800000298022691e-01, -9.499999701977665e-01, -9.200000596044317e-01, -8.900000000000711e-01, -8.599999999999289e-01, -8.299999403955683e-01, -8.000000298022335e-01, -7.699999701977309e-01, -7.39999970197873e-01, -7.100000000001065e-01, -6.800000000000355e-01, -6.499999403955328e-01, -6.200000298021979e-01, -5.899999701976955e-01, -5.599999701978375e-01, -5.300000000001421e-01, -5e-01, -4.699999701981039e-01, -4.399999403962078e-01, -4.09999910594738e-01, -3.800000596036854e-01, -3.500000298017893e-01, -3.200000000001064e-01, -2.899999701981041e-01, -2.599999403963501e-01, -2.299999254955619e-01, -2.000000745045626e-01, -1.700000447027376e-01, -1.400000149009125e-01, -1.099999850990875e-01, -7.999995529726243e-02, -4.999992922068328e-02, -2.000007822977725e-02, 9.999949709432063e-03, 3.999997764863138e-02, 7.000000745066925e-02, 1.000000372522811e-01, 1.300000596036855e-01, 1.599999105945249e-01, 1.899999403963499e-01, 2.19999970198175e-01, 2.5e-01, 2.800000298018961e-01, 3.100000596037922e-01, 3.40000089405262e-01, 3.699999403963146e-01, 3.999999701982107e-01, 4.299999999998936e-01, 4.600000298018959e-01, 4.900000596036499e-01, 5.200000596038631e-01, 5.499999403967762e-01, 5.799999403962078e-01, 6.100000000001421e-01, 6.399999999998579e-01, 6.700000596037922e-01, 7.000000596032238e-01, 7.299999403961369e-01, 7.599999403963501e-01, 7.900000000002133e-01, 8.200000000000709e-01, 8.500000596039341e-01, 8.800000596033657e-01, 9.099999403962078e-01, 9.39999940396492e-01, 9.700000000002842e-01, 1e+00] +extSig1.y[4]=[1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299991011771211e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299982071226054e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01] +extSig1.y[5]=[-1e+00, -9.599999776482632e-01, -9.200000149011579e-01, -8.79999992549417e-01, -8.399999701976976e-01, -8.000000149011668e-01, -7.599999850988288e-01, -7.200000298023179e-01, -6.799999999999999e-01, -6.4e-01, -6.00000029802278e-01, -5.600000000000001e-01, -5.199999701977576e-01, -4.799999701977486e-01, -4.399999999999999e-01, -4.000000298022336e-01, -3.6e-01, -3.2e-01, -2.800000298022158e-01, -2.399999850988566e-01, -2.000000149011389e-01, -1.599999701977265e-01, -1.199999925494327e-01, -8.000001490113007e-02, -3.99999776483082e-02, 6.661338147750939e-16, 4.000003725283197e-02, 7.999995529659643e-02, 1.199999925494328e-01, 1.600000298022601e-01, 1.999999552966052e-01, 2.399999850988566e-01, 2.800000298022158e-01, 3.199999403955507e-01, 3.600000000000001e-01, 4.000000298022335e-01, 4.399999403955683e-01, 4.799999701977486e-01, 5.2e-01, 5.600000596046448e-01, 6.000000000000001e-01, 6.399999999999999e-01, 6.800000596046447e-01, 7.2e-01, 7.6e-01, 8.000000596046448e-01, 8.39999940395604e-01, 8.799999999999999e-01, 9.20000059604325e-01, 9.599999403956394e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00] +extSig1.y[6]=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractor.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractor.txt new file mode 100644 index 0000000000..bd436e9e8a --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealExtractor.txt @@ -0,0 +1,22 @@ +last-generated=2022-10-14 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +extIndSig.u[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extIndSig.u[2]=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndSig.u[3]=[1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299991011771211e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299982071226054e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01] +extIndSig.u[4]=[-1e+00, -9.599999776482632e-01, -9.200000149011579e-01, -8.79999992549417e-01, -8.399999701976976e-01, -8.000000149011668e-01, -7.599999850988288e-01, -7.200000298023179e-01, -6.799999999999999e-01, -6.4e-01, -6.00000029802278e-01, -5.600000000000001e-01, -5.199999701977576e-01, -4.799999701977486e-01, -4.399999999999999e-01, -4.000000298022336e-01, -3.6e-01, -3.2e-01, -2.800000298022158e-01, -2.399999850988566e-01, -2.000000149011389e-01, -1.599999701977265e-01, -1.199999925494327e-01, -8.000001490113007e-02, -3.99999776483082e-02, 6.661338147750939e-16, 4.000003725283197e-02, 7.999995529659643e-02, 1.199999925494328e-01, 1.600000298022601e-01, 1.999999552966052e-01, 2.399999850988566e-01, 2.800000298022158e-01, 3.199999403955507e-01, 3.600000000000001e-01, 4.000000298022335e-01, 4.399999403955683e-01, 4.799999701977486e-01, 5.2e-01, 5.600000596046448e-01, 6.000000000000001e-01, 6.399999999999999e-01, 6.800000596046447e-01, 7.2e-01, 7.6e-01, 8.000000596046448e-01, 8.39999940395604e-01, 8.799999999999999e-01, 9.20000059604325e-01, 9.599999403956394e-01, 1e+00, 1.039999999999432e+00, 1.080000119208153e+00, 1.120000119207584e+00, 1.15999988079199e+00, 1.200000000000711e+00, 1.239999999999858e+00, 1.279999999999573e+00, 1.3200001192073e+00, 1.360000119207726e+00, 1.399999880792131e+00, 1.440000000000853e+00, 1.480000000000284e+00, 1.519999999999716e+00, 1.559999999999147e+00, 1.600000119207869e+00, 1.639999880792274e+00, 1.6799998807927e+00, 1.720000000000427e+00, 1.760000000000142e+00, 1.799999999999289e+00, 1.84000011920801e+00, 1.879999880792416e+00, 1.919999880791847e+00, 1.960000000000568e+00, 2e+00, 2.04e+00, 2.08e+00, 2.12e+00, 2.16e+00, 2.2e+00, 2.24e+00, 2.28e+00, 2.32e+00, 2.36e+00, 2.4e+00, 2.44e+00, 2.48e+00, 2.52e+00, 2.56e+00, 2.6e+00, 2.64e+00, 2.68e+00, 2.72e+00, 2.76e+00, 2.8e+00, 2.84e+00, 2.88e+00, 2.92e+00, 2.96e+00, 3e+00] +extIndSig.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +extIndSig.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.9999701981822e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 4.999940396364123e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndSig1.index=[6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00, 6e+00] +extIndSig1.y=[-2e+00, -1.970000027939673e+00, -1.940000055879345e+00, -1.90999996460977e+00, -1.879999992549401e+00, -1.850000026077003e+00, -1.820000048428746e+00, -1.789999962747105e+00, -1.759999985098812e+00, -1.730000029802162e+00, -1.700000052153998e+00, -1.669999955296543e+00, -1.639999977648218e+00, -1.609999999999929e+00, -1.580000044703457e+00, -1.549999970197766e+00, -1.519999970197838e+00, -1.490000014901188e+00, -1.460000059604325e+00, -1.429999940395462e+00, -1.399999985098883e+00, -1.369999985098741e+00, -1.340000029802305e+00, -1.309999955296579e+00, -1.279999955296756e+00, -1.25e+00, -1.219999999999858e+00, -1.190000089406487e+00, -1.159999970197695e+00, -1.129999970197553e+00, -1.100000059604112e+00, -1.070000059604538e+00, -1.039999940395675e+00, -1.010000029802518e+00, -9.800000298022691e-01, -9.499999701977665e-01, -9.200000596044317e-01, -8.900000000000711e-01, -8.599999999999289e-01, -8.299999403955683e-01, -8.000000298022335e-01, -7.699999701977309e-01, -7.39999970197873e-01, -7.100000000001065e-01, -6.800000000000355e-01, -6.499999403955328e-01, -6.200000298021979e-01, -5.899999701976955e-01, -5.599999701978375e-01, -5.300000000001421e-01, -5e-01, -4.699999701981039e-01, -4.399999403962078e-01, -4.09999910594738e-01, -3.800000596036854e-01, -3.500000298017893e-01, -3.200000000001064e-01, -2.899999701981041e-01, -2.599999403963501e-01, -2.299999254955619e-01, -2.000000745045626e-01, -1.700000447027376e-01, -1.400000149009125e-01, -1.099999850990875e-01, -7.999995529726243e-02, -4.999992922068328e-02, -2.000007822977725e-02, 9.999949709432063e-03, 3.999997764863138e-02, 7.000000745066925e-02, 1.000000372522811e-01, 1.300000596036855e-01, 1.599999105945249e-01, 1.899999403963499e-01, 2.19999970198175e-01, 2.5e-01, 2.800000298018961e-01, 3.100000596037922e-01, 3.40000089405262e-01, 3.699999403963146e-01, 3.999999701982107e-01, 4.299999999998936e-01, 4.600000298018959e-01, 4.900000596036499e-01, 5.200000596038631e-01, 5.499999403967762e-01, 5.799999403962078e-01, 6.100000000001421e-01, 6.399999999998579e-01, 6.700000596037922e-01, 7.000000596032238e-01, 7.299999403961369e-01, 7.599999403963501e-01, 7.900000000002133e-01, 8.200000000000709e-01, 8.500000596039341e-01, 8.800000596033657e-01, 9.099999403962078e-01, 9.39999940396492e-01, 9.700000000002842e-01, 1e+00] +extIndSig2.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +extIndSig2.y=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extIndSig3.index=[2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00] +extIndSig3.y=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +extIndSig4.index=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00, 3e+00] +extIndSig4.y=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299991011771211e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299999952316284e+00, 1.299982071226054e+00, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01, -2.000000029802322e-01] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealScalarReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealScalarReplicator.txt new file mode 100644 index 0000000000..6263174260 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealScalarReplicator.txt @@ -0,0 +1,12 @@ +last-generated=2017-07-25 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +reaRep.u=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +time=[0e+00, 1e+00] +reaRep.y[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaRep.y[2]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaRep.y[3]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980226121440666e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorFilter.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorFilter.txt new file mode 100644 index 0000000000..5d9c676d30 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorFilter.txt @@ -0,0 +1,13 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +reaFil.u[1]=[1e+00, 1e+00] +reaFil.u[2]=[2e+00, 2e+00] +reaFil.u[3]=[3e+00, 3e+00] +reaFil.y[1]=[1e+00, 1e+00] +reaFil.y[2]=[3e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorReplicator.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorReplicator.txt new file mode 100644 index 0000000000..5ec9c5a39e --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Routing_Validation_RealVectorReplicator.txt @@ -0,0 +1,12 @@ +last-generated=2021-06-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +reaRep.u[1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980225988213903e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaRep.y[1, 1]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980225988213903e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaRep.y[2, 2]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980225988213903e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] +reaRep.y[3, 2]=[-2e+00, -1.95000004656613e+00, -1.89999997392297e+00, -1.850000020489104e+00, -1.799999947845941e+00, -1.750000003725286e+00, -1.700000040978201e+00, -1.649999977648259e+00, -1.600000014901188e+00, -1.549999970197624e+00, -1.500000007450558e+00, -1.450000044703492e+00, -1.399999962747137e+00, -1.350000000000071e+00, -1.299999955296507e+00, -1.250000029802234e+00, -1.200000029802376e+00, -1.149999985098812e+00, -1.100000059604538e+00, -1.049999940395391e+00, -1.000000014901117e+00, -9.499999552966142e-01, -8.999999701976954e-01, -8.500000447034214e-01, -7.999999850989188e-01, -7.5e-01, -6.999999403954973e-01, -6.500000298024822e-01, -6.000000298023045e-01, -5.49999970197802e-01, -5.000000596044671e-01, -4.5e-01, -3.999999701976776e-01, -3.500000596046447e-01, -3.00000029802269e-01, -2.499999701977221e-01, -2.000000745055929e-01, -1.500000298022514e-01, -9.999997764831148e-02, -4.999992921961749e-02, -2.980225988213903e-08, 5.00000186264114e-02, 1.000000670550787e-01, 1.499999701977309e-01, 2.000000149011257e-01, 2.500000596044672e-01, 2.999999701976777e-01, 3.499999999999999e-01, 4.000000596044848e-01, 4.499999403954973e-01, 5e-01, 5.500000596037922e-01, 6.000001192075843e-01, 6.500001192075844e-01, 6.999998807926291e-01, 7.499999403964213e-01, 7.999999999998582e-01, 8.50000059604005e-01, 9.000000596036498e-01, 9.500001192069446e-01, 9.99999880792842e-01, 1.049999880791989e+00, 1.100000000000426e+00, 1.149999999999574e+00, 1.200000119208011e+00, 1.250000119207158e+00, 1.299999821188411e+00, 1.349999940396847e+00, 1.399999940395995e+00, 1.450000059604787e+00, 1.500000059603579e+00, 1.550000059602726e+00, 1.599999880793268e+00, 1.649999880792416e+00, 1.700000000000853e+00, 1.75e+00, 1.799999999999147e+00, 1.850000119207584e+00, 1.900000119206732e+00, 1.949999940397274e+00, 1.999999940396421e+00, 2.049999940395213e+00, 2.099999940394715e+00, 2.150000178812442e+00, 2.200000178811589e+00, 2.249999880792842e+00, 2.299999880791989e+00, 2.349999880791137e+00, 2.400000119208863e+00, 2.450000119208011e+00, 2.500000119207158e+00, 2.549999821188411e+00, 2.599999821187558e+00, 2.650000059605285e+00, 2.700000059604787e+00, 2.750000059603579e+00, 2.800000059602726e+00, 2.849999761583978e+00, 2.900000000001705e+00, 2.950000000000852e+00, 3e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_Assert.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_Assert.txt new file mode 100644 index 0000000000..fa3676f443 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_Assert.txt @@ -0,0 +1,9 @@ +last-generated=2018-07-13 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +assert.u=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +time=[0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSet.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSet.txt new file mode 100644 index 0000000000..92ceab0879 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSet.txt @@ -0,0 +1,20 @@ +last-generated=2022-01-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.1536e+07] +sunRiseSetArctic.nextSunRise=[2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.63381025e+06, 2.88969725e+06, 3.2331195e+06, 3.490975e+06, 3.834971e+06, 4.17909625e+06, 4.437246e+06, 4.781496e+06, 5.1257885e+06, 5.384027e+06, 5.728365e+06, 6.072718e+06, 6.3309895e+06, 6.6753565e+06, 7.019726e+06, 7.2780025e+06, 7.6223665e+06, 7.9667225e+06, 8.224981e+06, 8.569311e+06, 8.913617e+06, 9.171825e+06, 9.516067e+06, 9.860251e+06, 1.0118336e+07, 1.0462344e+07, 1.0806156e+07, 1.1063772e+07, 1.1406247e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.8404958e+07, 1.866682e+07, 1.8927732e+07, 1.927516e+07, 1.962233e+07, 1.9882604e+07, 2.0229542e+07, 2.0576398e+07, 2.08365e+07, 2.1183264e+07, 2.1529992e+07, 2.1790022e+07, 2.2136712e+07, 2.2396722e+07, 2.2743396e+07, 2.3090074e+07, 2.3350086e+07, 2.3696784e+07, 2.4043502e+07, 2.430356e+07, 2.4650338e+07, 2.4997164e+07, 2.5257322e+07, 2.5604268e+07, 2.5864544e+07, 2.6211702e+07, 2.6559072e+07, 2.681985e+07, 2.7168508e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07, 3.4169436e+07] +sunRiseSetArctic.nextSunSet=[2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.63677075e+06, 2.8994075e+06, 3.160341e+06, 3.507811e+06, 3.8550245e+06, 4.11533025e+06, 4.4623075e+06, 4.809202e+06, 5.069331e+06, 5.416126e+06, 5.7628825e+06, 6.02293e+06, 6.369641e+06, 6.6296635e+06, 6.9763525e+06, 7.3230385e+06, 7.5830555e+06, 7.9297545e+06, 8.27647e+06, 8.536523e+06, 8.88329e+06, 9.230101e+06, 9.490246e+06, 9.837172e+06, 1.009743e+07, 1.0444561e+07, 1.0791906e+07, 1.1052669e+07, 1.1401365e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.840076e+07, 1.8657282e+07, 1.9000628e+07, 1.9258438e+07, 1.960238e+07, 1.9946458e+07, 2.0204572e+07, 2.0548782e+07, 2.0893036e+07, 2.115125e+07, 2.1495558e+07, 2.1839886e+07, 2.2098142e+07, 2.244249e+07, 2.2786848e+07, 2.3045116e+07, 2.3389476e+07, 2.3733832e+07, 2.3992094e+07, 2.4336432e+07, 2.468075e+07, 2.4938972e+07, 2.5283234e+07, 2.5627446e+07, 2.5885554e+07, 2.6229598e+07, 2.6573452e+07, 2.683111e+07, 2.7173708e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07, 3.4173204e+07] +sunRiseSetArctic.sunUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sunRiseSetSf.nextSunRise=[2.6792416015625e+04, 3.724201875e+05, 6.316188125e+05, 9.771905625e+05, 1.32273225e+06, 1.581869125e+06, 1.92735975e+06, 2.2728225e+06, 2.53190175e+06, 2.8773185e+06, 3.22271075e+06, 3.48174e+06, 3.82709325e+06, 4.17242675e+06, 4.431415e+06, 4.7767175e+06, 5.1220055e+06, 5.380963e+06, 5.7262295e+06, 6.0714865e+06, 6.3304245e+06, 6.67567e+06, 7.0209115e+06, 7.2798415e+06, 7.6250815e+06, 7.884013e+06, 8.229258e+06, 8.574508e+06, 8.833451e+06, 9.178717e+06, 9.523993e+06, 9.782959e+06, 1.012826e+07, 1.0473576e+07, 1.0732576e+07, 1.1077925e+07, 1.1423295e+07, 1.1682338e+07, 1.2027748e+07, 1.2373184e+07, 1.2632278e+07, 1.2977759e+07, 1.3323269e+07, 1.3582419e+07, 1.3927977e+07, 1.4273564e+07, 1.4532772e+07, 1.4878406e+07, 1.5137649e+07, 1.5483328e+07, 1.582903e+07, 1.608832e+07, 1.6434056e+07, 1.677981e+07, 1.7039134e+07, 1.738491e+07, 1.7730696e+07, 1.799004e+07, 1.8335836e+07, 1.8681636e+07, 1.8940988e+07, 1.928679e+07, 1.9632592e+07, 1.9891942e+07, 2.0237742e+07, 2.058354e+07, 2.0842886e+07, 2.118868e+07, 2.1448026e+07, 2.1793818e+07, 2.2139612e+07, 2.2398956e+07, 2.2744752e+07, 2.309055e+07, 2.3349902e+07, 2.3695706e+07, 2.4041516e+07, 2.4300878e+07, 2.46467e+07, 2.4992528e+07, 2.5251904e+07, 2.5597744e+07, 2.5943588e+07, 2.6202976e+07, 2.654883e+07, 2.6808224e+07, 2.7154082e+07, 2.749994e+07, 2.7759332e+07, 2.8105184e+07, 2.8451028e+07, 2.8710404e+07, 2.905623e+07, 2.9402038e+07, 2.9661382e+07, 3.0007156e+07, 3.0352908e+07, 3.0612206e+07, 3.095791e+07, 3.1303588e+07, 3.1562826e+07] +sunRiseSetSf.nextSunSet=[6.100040625e+04, 3.203701875e+05, 6.66171625e+05, 1.01198925e+06, 1.27136125e+06, 1.617200125e+06, 1.96304725e+06, 2.22243625e+06, 2.5682915e+06, 2.91414775e+06, 3.17353975e+06, 3.519394e+06, 3.86524475e+06, 4.12463e+06, 4.4704725e+06, 4.8163095e+06, 5.0756835e+06, 5.421511e+06, 5.680878e+06, 6.0266965e+06, 6.372511e+06, 6.631869e+06, 6.977678e+06, 7.3234855e+06, 7.58284e+06, 7.9286465e+06, 8.2744535e+06, 8.53381e+06, 8.879619e+06, 9.225431e+06, 9.484792e+06, 9.830608e+06, 1.0176426e+07, 1.043579e+07, 1.0781609e+07, 1.1040974e+07, 1.1386791e+07, 1.1732604e+07, 1.1991961e+07, 1.2337763e+07, 1.2683554e+07, 1.294289e+07, 1.3288657e+07, 1.3634408e+07, 1.3893707e+07, 1.423942e+07, 1.4585109e+07, 1.4844359e+07, 1.5190001e+07, 1.5535614e+07, 1.5794804e+07, 1.6140366e+07, 1.6399517e+07, 1.6745026e+07, 1.7090504e+07, 1.7349596e+07, 1.7695026e+07, 1.804043e+07, 1.8299466e+07, 1.8644828e+07, 1.8990166e+07, 1.9249158e+07, 1.9594462e+07, 1.993975e+07, 2.0198706e+07, 2.054397e+07, 2.0889222e+07, 2.1148154e+07, 2.1493392e+07, 2.1838624e+07, 2.2097546e+07, 2.2442774e+07, 2.2788004e+07, 2.3046926e+07, 2.3392162e+07, 2.3737404e+07, 2.399634e+07, 2.4341598e+07, 2.460055e+07, 2.494583e+07, 2.5291126e+07, 2.5550108e+07, 2.5895436e+07, 2.6240784e+07, 2.6499808e+07, 2.6845194e+07, 2.7190606e+07, 2.744968e+07, 2.7795138e+07, 2.8140622e+07, 2.8399754e+07, 2.8745288e+07, 2.9090854e+07, 2.9350046e+07, 2.9695664e+07, 3.004131e+07, 3.0300564e+07, 3.064626e+07, 3.0905548e+07, 3.125129e+07, 3.1597054e+07] +sunRiseSetSf.sunUp=[0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00] +sunRiseSetAntarctic.nextSunRise=[3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.54663475e+06, 3.808946e+06, 4.15711275e+06, 4.417872e+06, 4.7653025e+06, 5.112556e+06, 5.372918e+06, 5.719993e+06, 6.067007e+06, 6.3272395e+06, 6.674192e+06, 7.021129e+06, 7.2813305e+06, 7.628273e+06, 7.8884935e+06, 8.235484e+06, 8.582527e+06, 8.842856e+06, 9.190054e+06, 9.537404e+06, 9.798073e+06, 1.0146011e+07, 1.0407642e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.930895e+07, 1.9564998e+07, 1.9907952e+07, 2.0251428e+07, 2.0509202e+07, 2.0853038e+07, 2.1196974e+07, 2.1454974e+07, 2.1799018e+07, 2.2143096e+07, 2.2401168e+07, 2.2745278e+07, 2.3089394e+07, 2.3347476e+07, 2.3691574e+07, 2.4035648e+07, 2.4293678e+07, 2.463767e+07, 2.4981576e+07, 2.5239422e+07, 2.5583038e+07, 2.5926268e+07, 2.618305e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07, 3.508222e+07] +sunRiseSetAntarctic.nextSunSet=[3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.54135425e+06, 3.7975315e+06, 4.14055975e+06, 4.4840885e+06, 4.7418975e+06, 5.0857725e+06, 5.429745e+06, 5.6877675e+06, 6.0318375e+06, 6.375937e+06, 6.6340245e+06, 6.978148e+06, 7.322271e+06, 7.5803575e+06, 7.9244565e+06, 8.2685255e+06, 8.526549e+06, 8.870526e+06, 9.214412e+06, 9.47224e+06, 9.815823e+06, 1.0159006e+07, 1.0415718e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9313894e+07, 1.9576208e+07, 1.9924354e+07, 2.018509e+07, 2.0532488e+07, 2.087971e+07, 2.1140048e+07, 2.1487096e+07, 2.1834086e+07, 2.2094304e+07, 2.2441238e+07, 2.2788164e+07, 2.3048358e+07, 2.3395294e+07, 2.3655514e+07, 2.4002506e+07, 2.4349554e+07, 2.460989e+07, 2.49571e+07, 2.5304464e+07, 2.5565142e+07, 2.591309e+07, 2.6262256e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07, 3.5077808e+07] +sunRiseSetAntarctic.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sunRiseSetSyd.nextSunRise=[1.7566767578125e+04, 3.633510625e+05, 7.0914275e+05, 9.68495375e+05, 1.314308375e+06, 1.66013e+06, 1.91950025e+06, 2.2653305e+06, 2.52470475e+06, 2.87053675e+06, 3.21636725e+06, 3.47573825e+06, 3.8215625e+06, 4.16738175e+06, 4.4267425e+06, 4.772552e+06, 5.118355e+06, 5.3777035e+06, 5.723497e+06, 6.0692855e+06, 6.3286235e+06, 6.6744055e+06, 7.020184e+06, 7.279517e+06, 7.625294e+06, 7.8846265e+06, 8.2304035e+06, 8.576182e+06, 8.835518e+06, 9.1813e+06, 9.527086e+06, 9.786426e+06, 1.0132216e+07, 1.0478008e+07, 1.0737353e+07, 1.1083146e+07, 1.1428938e+07, 1.1688281e+07, 1.2034067e+07, 1.2379848e+07, 1.2639177e+07, 1.2984941e+07, 1.3330692e+07, 1.3589996e+07, 1.3935718e+07, 1.4194998e+07, 1.4540685e+07, 1.4886349e+07, 1.5145582e+07, 1.5491202e+07, 1.5836796e+07, 1.6095974e+07, 1.6441521e+07, 1.678704e+07, 1.7046162e+07, 1.7391634e+07, 1.7737082e+07, 1.799615e+07, 1.8341556e+07, 1.8686938e+07, 1.8945962e+07, 1.9291308e+07, 1.9636638e+07, 1.9895626e+07, 2.0240928e+07, 2.0499898e+07, 2.084518e+07, 2.1190452e+07, 2.1449402e+07, 2.1794664e+07, 2.2139924e+07, 2.2398866e+07, 2.2744126e+07, 2.3089386e+07, 2.3348334e+07, 2.3693604e+07, 2.4038884e+07, 2.4297848e+07, 2.4643146e+07, 2.4988458e+07, 2.524745e+07, 2.559279e+07, 2.5938148e+07, 2.6197178e+07, 2.654257e+07, 2.6887986e+07, 2.7147062e+07, 2.749252e+07, 2.7838002e+07, 2.809713e+07, 2.8442658e+07, 2.8701822e+07, 2.9047398e+07, 2.9393002e+07, 2.9652222e+07, 2.9997872e+07, 3.0343548e+07, 3.0602822e+07, 3.094854e+07, 3.129428e+07, 3.1553598e+07] +sunRiseSetSyd.nextSunSet=[6.87860546875e+04, 3.280208125e+05, 6.7363075e+05, 1.0192130625e+06, 1.278381625e+06, 1.62391575e+06, 1.969423125e+06, 2.2285365e+06, 2.57399875e+06, 2.91943675e+06, 3.1785e+06, 3.5238985e+06, 3.86927625e+06, 4.128297e+06, 4.4736425e+06, 4.732641e+06, 5.07796e+06, 5.4232655e+06, 5.6822375e+06, 6.027525e+06, 6.372805e+06, 6.6317615e+06, 6.977033e+06, 7.322303e+06, 7.581255e+06, 7.9265265e+06, 8.2718015e+06, 8.530761e+06, 8.876048e+06, 9.221343e+06, 9.480322e+06, 9.825638e+06, 1.0170968e+07, 1.0429976e+07, 1.0775335e+07, 1.1120712e+07, 1.1379759e+07, 1.1725172e+07, 1.1984246e+07, 1.2329699e+07, 1.2675176e+07, 1.29343e+07, 1.3279821e+07, 1.3625367e+07, 1.3884543e+07, 1.4230134e+07, 1.4575749e+07, 1.4834976e+07, 1.5180633e+07, 1.552631e+07, 1.5785582e+07, 1.6131293e+07, 1.647702e+07, 1.6736324e+07, 1.7082074e+07, 1.7427832e+07, 1.7687156e+07, 1.8032926e+07, 1.8292258e+07, 1.8638032e+07, 1.898381e+07, 1.9243142e+07, 1.9588916e+07, 1.993469e+07, 2.0194018e+07, 2.0539788e+07, 2.0885554e+07, 2.1144878e+07, 2.1490642e+07, 2.1836406e+07, 2.2095728e+07, 2.2441492e+07, 2.2787258e+07, 2.3046584e+07, 2.3392356e+07, 2.3738132e+07, 2.3997468e+07, 2.4343254e+07, 2.4602598e+07, 2.4948396e+07, 2.52942e+07, 2.555356e+07, 2.5899376e+07, 2.62452e+07, 2.650457e+07, 2.6850402e+07, 2.7196236e+07, 2.7455612e+07, 2.7801446e+07, 2.8147276e+07, 2.8406644e+07, 2.8752464e+07, 2.9098272e+07, 2.9357618e+07, 2.9703402e+07, 2.9962726e+07, 3.0308476e+07, 3.0654204e+07, 3.0913484e+07, 3.1259168e+07, 3.1604826e+07] +sunRiseSetSyd.sunUp=[0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetNegativeStartTime.txt new file mode 100644 index 0000000000..8556ecbff2 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetNegativeStartTime.txt @@ -0,0 +1,20 @@ +last-generated=2022-01-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-4.32e+04, 2.592e+05] +sunRiseSetArctic.nextSunRise=[2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06] +sunRiseSetArctic.nextSunSet=[2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06] +sunRiseSetArctic.sunUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sunRiseSetSf.nextSunRise=[2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 2.678694921875e+04, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.132045390625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05] +sunRiseSetSf.nextSunSet=[-2.542112890625e+04, -2.542112890625e+04, -2.542112890625e+04, -2.542112890625e+04, -2.542112890625e+04, -2.542112890625e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 6.1031375e+04, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05] +sunRiseSetSf.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sunRiseSetAntarctic.nextSunRise=[3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06] +sunRiseSetAntarctic.nextSunSet=[3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06] +sunRiseSetAntarctic.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sunRiseSetSyd.nextSunRise=[1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.7546154296875e+04, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.040175390625e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 1.90461e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05] +sunRiseSetSyd.nextSunSet=[-1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, -1.762033203125e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 6.87953671875e+04, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05] +sunRiseSetSyd.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetPositiveStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetPositiveStartTime.txt new file mode 100644 index 0000000000..dbef0fb455 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_CDL_Utilities_Validation_SunRiseSetPositiveStartTime.txt @@ -0,0 +1,20 @@ +last-generated=2022-01-07 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[4.32e+04, 3.456e+05] +sunRiseSetArctic.nextSunRise=[2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06, 2.63302625e+06] +sunRiseSetArctic.nextSunSet=[2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06, 2.6375645e+06] +sunRiseSetArctic.sunUp=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sunRiseSetSf.nextSunRise=[1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.13197421875e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 1.99611625e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 2.8601684375e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05, 3.724201875e+05] +sunRiseSetSf.nextSunSet=[6.102227734375e+04, 6.102227734375e+04, 6.102227734375e+04, 6.102227734375e+04, 6.102227734375e+04, 6.102227734375e+04, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 1.47476390625e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 2.33922671875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 3.203701875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05, 4.06818875e+05] +sunRiseSetSf.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +sunRiseSetAntarctic.nextSunRise=[3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06, 3.4592835e+06] +sunRiseSetAntarctic.nextSunSet=[3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06, 3.4559035e+06] +sunRiseSetAntarctic.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +sunRiseSetSyd.nextSunRise=[1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.03987671875e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 1.90460984375e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 2.7690553125e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05, 3.633510625e+05] +sunRiseSetSyd.nextSunSet=[6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 6.879203125e+04, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 1.55205546875e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 2.4161403125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 3.280208125e+05, 4.14425875e+05, 4.14425875e+05, 4.14425875e+05, 4.14425875e+05, 4.14425875e+05, 4.14425875e+05] +sunRiseSetSyd.sunUp=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureReset.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureReset.txt new file mode 100644 index 0000000000..3c43e545a1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureReset.txt @@ -0,0 +1,14 @@ +last-generated=2017-07-18 +statistics-simulation= +{ + "numerical Jacobians": "0", + "nonlinear": " ", + "linear": " " +} +heaCur.TRet=[3.131499938964844e+02, 3.127863769449941e+02, 3.124227294759326e+02, 3.120590820068676e+02, 3.116954650553807e+02, 3.113318176540447e+02, 3.109681701172508e+02, 3.106045532334929e+02, 3.102409056966991e+02, 3.098772584308751e+02, 3.095136414116049e+02, 3.091499938748112e+02, 3.087863768555546e+02, 3.084227293188018e+02, 3.080590820529232e+02, 3.076954653046228e+02, 3.073318174969139e+02, 3.069681702310626e+02, 3.066045534827348e+02, 3.062409056750259e+02, 3.058772584091928e+02, 3.055136411190165e+02, 3.05149993853138e+02, 3.047863771048375e+02, 3.044227292971286e+02, 3.0405908203125e+02, 3.036954647411192e+02, 3.03331818017071e+02, 3.029681702093802e+02, 3.026045529192313e+02, 3.022409061951831e+02, 3.018772583875105e+02, 3.015136410973433e+02, 3.011499943732951e+02, 3.007863770831643e+02, 3.004227292754554e+02, 3.000590825514071e+02, 2.996954652612764e+02, 2.993318174535674e+02, 2.989681696458585e+02, 2.986045534393884e+02, 2.982409056316795e+02, 2.978772578239705e+02, 2.975136416175005e+02, 2.971499938097915e+02, 2.967863765194788e+02, 2.964227297956125e+02, 2.960590819879036e+02, 2.956954646977728e+02, 2.953318179737246e+02, 2.949681701660156e+02, 2.9460455287589e+02, 2.942409050681862e+02, 2.938772572604825e+02, 2.93513642137646e+02, 2.931499943299422e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +heaCur.TSup=[3.331499938964844e+02, 3.324227294759326e+02, 3.316954650553739e+02, 3.309681701172508e+02, 3.30240905696699e+02, 3.29513641411605e+02, 3.287863768555749e+02, 3.280590820529279e+02, 3.273318174969139e+02, 3.266045534827348e+02, 3.258772584091701e+02, 3.25149993853138e+02, 3.244227292971286e+02, 3.236954647410464e+02, 3.229681702093711e+02, 3.222409061951831e+02, 3.215136410973433e+02, 3.207863770831643e+02, 3.200590825515163e+02, 3.193318174535674e+02, 3.186045534393884e+02, 3.178772578239705e+02, 3.171499938097915e+02, 3.164227297956125e+02, 3.156954646976909e+02, 3.149681701660156e+02, 3.142409050681759e+02, 3.135136421376576e+02, 3.127863770398179e+02, 3.120590814244e+02, 3.113318184938817e+02, 3.10604553396042e+02, 3.098772577806241e+02, 3.091499948501058e+02, 3.084227297522661e+02, 3.076954646543354e+02, 3.069681712065482e+02, 3.062409061084902e+02, 3.055136410106504e+02, 3.047863759125924e+02, 3.040590824648053e+02, 3.033318173668745e+02, 3.026045522688347e+02, 3.018772588210475e+02, 3.011499937230986e+02, 3.004227286252589e+02, 2.996954656947406e+02, 2.989681700793228e+02, 2.98240904981483e+02, 2.975136420509647e+02, 2.96786376953125e+02, 2.960590813377175e+02, 2.95331816239888e+02, 2.946045511416221e+02, 2.938772598615569e+02, 2.931499947634001e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +heaCur.TOut=[2.631499938964844e+02, 2.635499878019114e+02, 2.639500122249096e+02, 2.643500061303332e+02, 2.647500000357568e+02, 2.651499938666871e+02, 2.655499878466244e+02, 2.659500121951078e+02, 2.66350006175029e+02, 2.667499998569731e+02, 2.671499938368898e+02, 2.675499878168156e+02, 2.679500123143014e+02, 2.683500062942181e+02, 2.687499999761622e+02, 2.691499936581063e+02, 2.695499879360502e+02, 2.699500121354906e+02, 2.703500058173528e+02, 2.707500000953513e+02, 2.711499937772953e+02, 2.715499880552847e+02, 2.719500122547068e+02, 2.723500059365873e+02, 2.727500002145403e+02, 2.731499938964844e+02, 2.735499881745192e+02, 2.73950011777787e+02, 2.743500060558218e+02, 2.747500003337293e+02, 2.751499934197282e+02, 2.755499876976175e+02, 2.75950012493085e+02, 2.763500055788838e+02, 2.767499998569731e+02, 2.771499941349534e+02, 2.775499872208613e+02, 2.77950012016256e+02, 2.783500062942181e+02, 2.787500005721074e+02, 2.791499936581063e+02, 2.795499879360502e+02, 2.79950012731463e+02, 2.803500058173528e+02, 2.807500000953513e+02, 2.811499943734224e+02, 2.815499874592394e+02, 2.819500122547068e+02, 2.823500065325962e+02, 2.827499996185951e+02, 2.831499938964844e+02, 2.835499881745135e+02, 2.839500129698297e+02, 2.843500072477133e+02, 2.847499991418517e+02, 2.851499934197353e+02, 2.855499876976161e+02, 2.859500124930807e+02, 2.863500067709643e+02, 2.867500010488479e+02, 2.871499929429863e+02, 2.875499872208699e+02, 2.879500120162589e+02, 2.883500062942152e+02, 2.887500005720989e+02, 2.891499948503463e+02, 2.895499867441208e+02, 2.899500115393279e+02, 2.90350005817357e+02, 2.907500000953527e+02, 2.911499943734153e+02, 2.915499886514444e+02, 2.91950011062397e+02, 2.923500053404261e+02, 2.927499996186008e+02, 2.931499938964844e+02, 2.935499881745135e+02, 2.939500129698297e+02, 2.943500072477133e+02, 2.947499991418517e+02, 2.951499934197353e+02, 2.955499876976161e+02, 2.959500124930807e+02, 2.963500067709643e+02, 2.967500010488479e+02, 2.971499929429863e+02, 2.975499872208699e+02, 2.979500120162589e+02, 2.983500062942152e+02, 2.987500005720989e+02, 2.991499948503463e+02, 2.995499867441208e+02, 2.999500115393279e+02, 3.00350005817357e+02, 3.007500000953527e+02, 3.011499943734153e+02, 3.015499886514444e+02, 3.01950011062397e+02, 3.023500053404261e+02, 3.027499996186008e+02, 3.031499938964844e+02] +time=[0e+00, 1e+00] +heaCur1.TSetZon=[2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02] +heaCur1.TRet=[3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.131499938964844e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02, 3.014833374023438e+02] +heaCur1.TSup=[3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.331499938964844e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02, 3.148166809082031e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureResetExponent.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureResetExponent.txt new file mode 100644 index 0000000000..a33d4c05a8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_SetPoints_Validation_SupplyReturnTemperatureResetExponent.txt @@ -0,0 +1,12 @@ +last-generated=2021-02-08 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +heaCur.TSup=[3.176954650878906e+02, 3.174227294860927e+02, 3.171499938842949e+02, 3.16877258282497e+02, 3.166045531982636e+02, 3.16331817647269e+02, 3.160590819946815e+02, 3.157863769612513e+02, 3.155136413086367e+02, 3.152409058592346e+02, 3.1496817020667e+02, 3.146954650716289e+02, 3.144227294190507e+02, 3.141499937664633e+02, 3.13877258317043e+02, 3.136045533851826e+02, 3.133318175294373e+02, 3.130590820800352e+02, 3.127863771481566e+02, 3.125136412923749e+02, 3.122409058429819e+02, 3.119681699872366e+02, 3.116954650553672e+02, 3.11422729605956e+02, 3.111499937502106e+02, 3.108772583007812e+02, 3.106045529624685e+02, 3.103318179195006e+02, 3.100590820637735e+02, 3.097863767254607e+02, 3.095136416824746e+02, 3.092409058267293e+02, 3.08968169970984e+02, 3.086954654454486e+02, 3.084227295897034e+02, 3.08149993733958e+02, 3.078772586910628e+02, 3.076045533526773e+02, 3.07331817496932e+02, 3.070590816411867e+02, 3.067863771156514e+02, 3.065136412598515e+02, 3.062409054041607e+02, 3.059681703611564e+02, 3.056954650228437e+02, 3.054227291671348e+02, 3.051499941241486e+02, 3.04877258268276e+02, 3.04604552929945e+02, 3.043318178869953e+02, 3.0405908203125e+02, 3.037863766929411e+02, 3.035136408370542e+02, 3.032409049816038e+02, 3.029681707514293e+02, 3.026954654129385e+02, 3.02422729557199e+02, 3.021499937014556e+02, 3.018772578457142e+02, 3.016045525071507e+02, 3.013318182770489e+02, 3.010590824215258e+02, 3.007863770831441e+02, 3.0051364122733e+02, 3.002409053716613e+02, 2.999681695159198e+02, 2.99695465802996e+02, 2.994227299472545e+02, 2.991499940916223e+02, 2.988772582357697e+02, 2.986045528974265e+02, 2.983318170418669e+02, 2.980590828118015e+02, 2.977863774732016e+02, 2.975136416174602e+02, 2.972409057617188e+02, 2.969681699059773e+02, 2.966954645675229e+02, 2.964227287120725e+02, 2.96149994481898e+02, 2.95877258626011e+02, 2.956045532876678e+02, 2.953318174319244e+02, 2.95059081576183e+02, 2.947863762376194e+02, 2.945136420075177e+02, 2.942409061517762e+02, 2.939681702961075e+02, 2.936954649577987e+02, 2.9342272910213e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +heaCur.TRet=[3.1155908203125e+02, 3.113545532180826e+02, 3.11149993887344e+02, 3.109454650741698e+02, 3.107409057434379e+02, 3.10536376968359e+02, 3.103318175995319e+02, 3.101272583068794e+02, 3.099227294555986e+02, 3.097181702391934e+02, 3.095136413878899e+02, 3.093090820190628e+02, 3.091045531677729e+02, 3.088999937989867e+02, 3.086954651000779e+02, 3.084909058836818e+02, 3.082863768799472e+02, 3.08081817663542e+02, 3.078772584471369e+02, 3.076727294434023e+02, 3.074681702269971e+02, 3.072636412232626e+02, 3.070590820068756e+02, 3.068545533079667e+02, 3.066499937867995e+02, 3.064454650878906e+02, 3.062409055667235e+02, 3.060363771724947e+02, 3.058318176513457e+02, 3.056272581301604e+02, 3.054227297359316e+02, 3.052181702148008e+02, 3.050136412110663e+02, 3.048090822995686e+02, 3.046045532957795e+02, 3.043999937746123e+02, 3.041954653803836e+02, 3.039909058592892e+02, 3.037863768555546e+02, 3.035818173344602e+02, 3.033772584227443e+02, 3.031727294190097e+02, 3.029681698978972e+02, 3.027636415036683e+02, 3.025590819825012e+02, 3.023545529787303e+02, 3.021499940672326e+02, 3.01945465063498e+02, 3.017409055423491e+02, 3.015363771481203e+02, 3.013318176269531e+02, 3.011272581057889e+02, 3.009227291019117e+02, 3.007181695810385e+02, 3.005136417961547e+02, 3.003090822751723e+02, 3.001045532714058e+02, 2.998999937502401e+02, 2.996954647463994e+02, 2.994909052254898e+02, 2.992863774406059e+02, 2.9908181791966e+02, 2.988772583983502e+02, 2.986727293946186e+02, 2.984681698735271e+02, 2.982636408695772e+02, 2.980590825678792e+02, 2.978545535638929e+02, 2.976499940428378e+02, 2.974454650391047e+02, 2.972409055179783e+02, 2.970363765140648e+02, 2.968318182123668e+02, 2.96627258691057e+02, 2.964227296871799e+02, 2.962181701660156e+02, 2.96013641162284e+02, 2.958090816412653e+02, 2.956045526372426e+02, 2.953999943355446e+02, 2.951954653316311e+02, 2.949909058105047e+02, 2.947863768067716e+02, 2.945818172857165e+02, 2.943772577645523e+02, 2.941727299796684e+02, 2.939681704587225e+02, 2.937636414549181e+02, 2.935590819337538e+02, 2.933545529299494e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +heaCurM.TSup=[3.167040405273438e+02, 3.164946289015638e+02, 3.162847595120916e+02, 3.16074432358927e+02, 3.1586364744207e+02, 3.156523742833351e+02, 3.154406432821024e+02, 3.152283935610176e+02, 3.150156554794885e+02, 3.14802429275507e+02, 3.145886535963536e+02, 3.1437438963565e+02, 3.141596068758864e+02, 3.139442747995347e+02, 3.137283935675659e+02, 3.13511963019773e+02, 3.132949828324492e+02, 3.130774231346385e+02, 3.128592836034437e+02, 3.126405333950244e+02, 3.124212036787193e+02, 3.122012632832705e+02, 3.11980682346708e+02, 3.117594910591741e+02, 3.115376280546482e+02, 3.113151245117188e+02, 3.110919492497055e+02, 3.108681032678318e+02, 3.106435547142937e+02, 3.104182737374617e+02, 3.101922915295212e+02, 3.099655457084299e+02, 3.097380674638993e+02, 3.095098269596886e+02, 3.092807618007681e+02, 3.090509337005572e+02, 3.088202517953171e+02, 3.085887452277091e+02, 3.083563536487347e+02, 3.081231075757539e+02, 3.078889466729922e+02, 3.076538390270727e+02, 3.074178158517722e+02, 3.071808168202111e+02, 3.069428100016959e+02, 3.06703765583378e+02, 3.064636842827018e+02, 3.062225036332784e+02, 3.059802243487507e+02, 3.057367861213565e+02, 3.054921875e+02, 3.0524633765547e+02, 3.049992671051958e+02, 3.047508842964428e+02, 3.045011296876746e+02, 3.042500308175244e+02, 3.039974671013705e+02, 3.037434385383343e+02, 3.034878535758325e+02, 3.032306816959577e+02, 3.029718328942004e+02, 3.027112430494681e+02, 3.024488221469925e+02, 3.021845396683224e+02, 3.019182735431451e+02, 3.016499322185081e+02, 3.013794257607321e+02, 3.011066288748184e+02, 3.008314516135545e+02, 3.005537108708878e+02, 3.002732540582058e+02, 2.999899591051902e+02, 2.997036141041469e+02, 2.994140020198444e+02, 2.99120910925524e+02, 2.988240661621094e+02, 2.985231320346405e+02, 2.982177423320344e+02, 2.979075003240293e+02, 2.975918891097347e+02, 2.972702945757999e+02, 2.969419861629659e+02, 2.966060178224839e+02, 2.962611688481437e+02, 2.959058828386566e+02, 2.955379342405353e+02, 2.951540838116103e+02, 2.947492372584496e+02, 2.943140256592488e+02, 2.938270561107623e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] +heaCurM.TRet=[3.105676879882812e+02, 3.104264526335571e+02, 3.102847595151406e+02, 3.101426391505997e+02, 3.099999999872307e+02, 3.098569336044252e+02, 3.097133483693951e+02, 3.095693054242192e+02, 3.094247436264505e+02, 3.092796936554658e+02, 3.091341247775735e+02, 3.089880371006439e+02, 3.088414306246496e+02, 3.086942748319854e+02, 3.085465698330408e+02, 3.083983460357593e+02, 3.082495116654355e+02, 3.081001282005945e+02, 3.079501954198929e+02, 3.077996215460517e+02, 3.076484680627344e+02, 3.074967040018184e+02, 3.073443298157763e+02, 3.071913147611848e+02, 3.070376280912371e+02, 3.0688330078125e+02, 3.067283323712475e+02, 3.065726320032478e+02, 3.06416259784306e+02, 3.062591856596121e+02, 3.061013795829782e+02, 3.059428406140432e+02, 3.057835081865126e+02, 3.056234438138085e+02, 3.054625855068442e+02, 3.053009337412115e+02, 3.051384279672779e+02, 3.049750977343209e+02, 3.048109130073573e+02, 3.046458127514493e+02, 3.044798584975722e+02, 3.043129271862309e+02, 3.041450803455086e+02, 3.039762574452541e+02, 3.03806426961317e+02, 3.036355893951554e+02, 3.034636842257857e+02, 3.032906799109406e+02, 3.03116576960991e+02, 3.02941345382336e+02, 3.02764892578125e+02, 3.025872495857504e+02, 3.024083553700533e+02, 3.022281488963141e+02, 3.020466007324001e+02, 3.018636781971545e+02, 3.016792908155772e+02, 3.014934385871188e+02, 3.013060299591942e+02, 3.011170344138966e+02, 3.009263615401792e+02, 3.007339480302425e+02, 3.005397339797039e+02, 3.00343627835611e+02, 3.001455380450109e+02, 2.999454035725293e+02, 2.997430730427932e+02, 2.995384524914567e+02, 2.993314515647701e+02, 2.99121887156681e+02, 2.98909637195972e+02, 2.986945185773881e+02, 2.984763495047121e+02, 2.982549137549868e+02, 2.980299989952437e+02, 2.978013305664062e+02, 2.975685727736602e+02, 2.973313899227728e+02, 2.970893242496359e+02, 2.968418889633813e+02, 2.965884707642056e+02, 2.963283386857664e+02, 2.960605466798621e+02, 2.957839045576773e+02, 2.954967948823672e+02, 2.95197022212686e+02, 2.948813786359163e+02, 2.945446778997547e+02, 2.941776731527093e+02, 2.937588799385817e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02, 2.931499938964844e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingNegativeStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingNegativeStartTime.txt new file mode 100644 index 0000000000..8f204feff4 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingNegativeStartTime.txt @@ -0,0 +1,13 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[-6.6e+05, 0e+00] +optStaCoo.tOpt=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 8.6932861328125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.79079345703125e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.74376025390625e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.69676220703125e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03, 5.6539560546875e+03] +TSetCoo.y=[2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02] +optStaCoo.TZon=[2.971499938964844e+02, 2.971503601074219e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971364135742188e+02, 2.96923095703125e+02, 2.967496643066406e+02, 2.969124145507812e+02, 2.975598449707031e+02, 2.986782531738281e+02, 3.001107482910156e+02, 2.988165283203125e+02, 2.971484680175781e+02, 2.971499328613281e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971443481445312e+02, 2.969462890625e+02, 2.967550659179688e+02, 2.968787536621094e+02, 2.97480224609375e+02, 2.985603942871094e+02, 2.999738464355469e+02, 2.992104187011719e+02, 2.971481628417969e+02, 2.971499328613281e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.9714892578125e+02, 2.969696350097656e+02, 2.967630615234375e+02, 2.968489379882812e+02, 2.974045104980469e+02, 2.984452819824219e+02, 2.998375854492188e+02, 3.0133984375e+02, 2.972657165527344e+02, 2.971495666503906e+02, 2.971499633789062e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.969927978515625e+02, 2.967736511230469e+02, 2.968233642578125e+02, 2.973331298828125e+02, 2.983332824707031e+02, 2.997023620605469e+02, 3.012062683105469e+02, 2.999542846679688e+02, 2.971524963378906e+02, 2.971501159667969e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970155029296875e+02, 2.967864685058594e+02, 2.968015441894531e+02, 2.972656860351562e+02, 2.982242431640625e+02, 2.995681762695312e+02, 3.010713500976562e+02, 3.004169921875e+02, 2.971433715820312e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970374755859375e+02, 2.968014526367188e+02, 2.967834777832031e+02, 2.972025756835938e+02, 2.981185607910156e+02, 2.994353942871094e+02, 3.009355163574219e+02, 3.008950500488281e+02, 2.971517944335938e+02, 2.971497192382812e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970584106445312e+02, 2.96818359375e+02, 2.967693481445312e+02, 2.971436767578125e+02, 2.980162658691406e+02, 2.993041687011719e+02, 3.007987670898438e+02, 3.013853759765625e+02, 2.971623229980469e+02, 2.971502075195312e+02, 2.971499633789062e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970780334472656e+02, 2.968369445800781e+02, 2.967586059570312e+02, 2.970889587402344e+02, 2.979174499511719e+02] +optStaCoo.optOn=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingPositiveStartTime.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingPositiveStartTime.txt new file mode 100644 index 0000000000..7e0ba4a507 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartCoolingPositiveStartTime.txt @@ -0,0 +1,13 @@ +last-generated=2020-10-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[3.4e+04, 8.64e+05] +optStaCoo.tOpt=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 8.6933232421875e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.79068359375e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.7437607421875e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.6966845703125e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65401416015625e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.65121240234375e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03, 5.64937060546875e+03] +TSetCoo.y=[2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02] +optStaCoo.TZon=[2.971499938964844e+02, 2.971498413085938e+02, 2.971499938964844e+02, 2.97109375e+02, 2.96818359375e+02, 2.968193664550781e+02, 2.975328063964844e+02, 2.989842834472656e+02, 3.00844482421875e+02, 2.971523742675781e+02, 2.971499328613281e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.969385070800781e+02, 2.967481994628906e+02, 2.971436767578125e+02, 2.983148498535156e+02, 3.000650634765625e+02, 2.978899230957031e+02, 2.971496276855469e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970651245117188e+02, 2.967797546386719e+02, 2.968895568847656e+02, 2.977460327148438e+02, 2.993042297363281e+02, 3.011838989257812e+02, 2.971517639160156e+02, 2.971501159667969e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971443176269531e+02, 2.968817749023438e+02, 2.967654418945312e+02, 2.972988586425781e+02, 2.985993347167969e+02, 3.004089660644531e+02, 3.012548828125e+02, 2.971474609375e+02, 2.971500244140625e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970117492675781e+02, 2.967550048828125e+02, 2.969850769042969e+02, 2.979830627441406e+02, 2.996351013183594e+02, 3.015155639648438e+02, 2.979967346191406e+02, 2.971498718261719e+02, 2.971499633789062e+02, 2.971499938964844e+02, 2.971189880371094e+02, 2.968306274414062e+02, 2.968048400878906e+02, 2.974801330566406e+02, 2.989011840820312e+02, 3.007530822753906e+02, 3.002462463378906e+02, 2.971492004394531e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.969540710449219e+02, 2.967471618652344e+02, 2.971068420410156e+02, 2.982422790527344e+02, 2.999738464355469e+02, 3.018363037109375e+02, 2.971840209960938e+02, 2.971499328613281e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.970780029296875e+02, 2.967888488769531e+02, 2.968683471679688e+02, 2.97686767578125e+02, 2.992177124023438e+02, 3.010939331054688e+02, 2.99263916015625e+02, 2.971489868164062e+02, 2.971499633789062e+02, 2.971499938964844e+02, 2.971477661132812e+02, 2.96896484375e+02, 2.967586669921875e+02, 2.972549438476562e+02, 2.985216979980469e+02, 3.003171081542969e+02, 3.016982727050781e+02, 2.971435546875e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.97026611328125e+02, 2.967600402832031e+02, 2.969569396972656e+02, 2.9791748046875e+02] +optStaCoo.optOn=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeating.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeating.txt new file mode 100644 index 0000000000..4bb07af542 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeating.txt @@ -0,0 +1,13 @@ +last-generated=2021-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "2", + "numerical Jacobians": "0" +} +time=[-1.728e+05, 6.048e+05] +optStaHea.tOpt=[0e+00, 0e+00, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 1.08e+04, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 7.3458525390625e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 5.564533203125e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.725474365234375e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750643798828125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.750772705078125e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.7474794921875e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.747568359375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03, 3.74755859375e+03] +TSetHea.y=[2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02] +optStaHea.TZon=[2.941499938964844e+02, 2.896638488769531e+02, 2.901727905273438e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.940346984863281e+02, 2.930039978027344e+02, 2.908515625e+02, 2.881498718261719e+02, 2.881499938964844e+02, 2.941452941894531e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.940999755859375e+02, 2.931686096191406e+02, 2.911500244140625e+02, 2.881551208496094e+02, 2.881499938964844e+02, 2.914275512695312e+02, 2.941499938964844e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.933190307617188e+02, 2.914343566894531e+02, 2.884085083007812e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941503601074219e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.934559326171875e+02, 2.917038879394531e+02, 2.887902526855469e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941492614746094e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.935798950195312e+02, 2.919584045410156e+02, 2.891625061035156e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941535949707031e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.936916198730469e+02, 2.921978149414062e+02, 2.895242919921875e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941408996582031e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.937920227050781e+02, 2.924220275878906e+02, 2.898748474121094e+02, 2.8814990234375e+02, 2.881499938964844e+02, 2.939381408691406e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.938818054199219e+02, 2.926309509277344e+02, 2.902132873535156e+02, 2.881502380371094e+02, 2.881499938964844e+02, 2.926377868652344e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.939624328613281e+02, 2.92824951171875e+02, 2.905391540527344e+02] +optStaHea.optOn=[0e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeatingCooling.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeatingCooling.txt new file mode 100644 index 0000000000..f5993b9705 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartHeatingCooling.txt @@ -0,0 +1,18 @@ +last-generated=2021-01-30 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 2.4192e+06] +optSta.tOpt=[0e+00, 7.95337939453125e+03, 7.95337939453125e+03, 7.95337939453125e+03, 7.95337939453125e+03, 4.31832470703125e+03, 4.31832470703125e+03, 4.31832470703125e+03, 3.24136181640625e+03, 3.24136181640625e+03, 3.24136181640625e+03, 3.24136181640625e+03, 2.161732421875e+03, 2.161732421875e+03, 2.161732421875e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.16497900390625e+03, 2.16497900390625e+03, 2.16497900390625e+03, 0e+00, 0e+00, 0e+00, 0e+00, 5.74002783203125e+03, 5.74002783203125e+03, 5.74002783203125e+03, 2.12517529296875e+03, 2.12517529296875e+03, 2.12517529296875e+03, 2.12517529296875e+03, 1.59286767578125e+03, 1.59286767578125e+03, 1.59286767578125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060423217773438e+03, 1.060423217773438e+03, 1.060423217773438e+03, 0e+00, 0e+00, 0e+00, 0e+00, 2.165054931640625e+03, 2.165054931640625e+03, 2.165054931640625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164999755859375e+03, 2.164999755859375e+03, 2.164999755859375e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.165001708984375e+03, 2.165001708984375e+03, 2.165001708984375e+03, 0e+00, 0e+00, 0e+00, 0e+00, 1.060263061523438e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265625e+03, 1.060265625e+03, 1.060265625e+03] +optSta.optCoo.tOpt=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 5.74002783203125e+03, 5.74002783203125e+03, 5.74002783203125e+03, 2.12517529296875e+03, 2.12517529296875e+03, 2.12517529296875e+03, 2.12517529296875e+03, 1.59286767578125e+03, 1.59286767578125e+03, 1.59286767578125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.061448486328125e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060780151367188e+03, 1.060423217773438e+03, 1.060423217773438e+03, 1.060423217773438e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.060263061523438e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.0602626953125e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.060263061523438e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060266479492188e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265747070312e+03, 1.060265625e+03, 1.060265625e+03, 1.060265625e+03] +optSta.optHea.tOpt=[0e+00, 7.95337939453125e+03, 7.95337939453125e+03, 7.95337939453125e+03, 7.95337939453125e+03, 4.31832470703125e+03, 4.31832470703125e+03, 4.31832470703125e+03, 3.24136181640625e+03, 3.24136181640625e+03, 3.24136181640625e+03, 3.24136181640625e+03, 2.161732421875e+03, 2.161732421875e+03, 2.161732421875e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.163635009765625e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.1644345703125e+03, 2.16497900390625e+03, 2.16497900390625e+03, 2.16497900390625e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 2.165054931640625e+03, 2.165054931640625e+03, 2.165054931640625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164988525390625e+03, 2.164999755859375e+03, 2.164999755859375e+03, 2.164999755859375e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.165007080078125e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.164992431640625e+03, 2.165001708984375e+03, 2.165001708984375e+03, 2.165001708984375e+03, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +optSta.optOn=[0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.50350909079134e-14, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +optSta.optCoo.optOn=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +optSta.optHea.optOn=[0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 9.50350909079134e-14, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +TSetHea.y=[2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964838e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02] +TSetCoo.y=[3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964849e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02] +optSta.TZon=[2.921499938964844e+02, 2.941534118652344e+02, 2.941499938964844e+02, 2.937181701660156e+02, 2.924385375976562e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.928896789550781e+02, 2.924524230957031e+02, 2.941499938964844e+02, 2.940725708007812e+02, 2.924861755371094e+02, 2.941502380371094e+02, 2.941499938964844e+02, 2.93120849609375e+02, 2.924315490722656e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.925740661621094e+02, 2.941640625e+02, 2.941499938964844e+02, 2.933986206054688e+02, 2.924234008789062e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.9270751953125e+02, 2.956985473632812e+02, 2.971499938964844e+02, 2.972089538574219e+02, 2.984024353027344e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.97513916015625e+02, 2.993062438964844e+02, 2.971499938964844e+02, 2.971586608886719e+02, 2.981323852539062e+02, 2.971500549316406e+02, 2.971499938964844e+02, 2.973801574707031e+02, 2.989988403320312e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.97891357421875e+02, 2.971493835449219e+02, 2.971499938964844e+02, 2.972803649902344e+02, 2.986942138671875e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976842346191406e+02, 2.963826904296875e+02, 2.950361022949219e+02, 2.937181091308594e+02, 2.924384155273438e+02, 2.941500549316406e+02, 2.941499938964844e+02, 2.928897094726562e+02, 2.924524536132812e+02, 2.941499938964844e+02, 2.940725708007812e+02, 2.924861450195312e+02, 2.941502380371094e+02, 2.941499938964844e+02, 2.93120849609375e+02, 2.924315185546875e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.925740661621094e+02, 2.941640625e+02, 2.941499938964844e+02, 2.933986206054688e+02, 2.924233703613281e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.9270751953125e+02, 2.956984558105469e+02, 2.971499938964844e+02, 2.972089538574219e+02, 2.984023742675781e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.975139465332031e+02, 2.993062133789062e+02, 2.971499938964844e+02, 2.971586608886719e+02, 2.981323547363281e+02, 2.971500854492188e+02, 2.971499938964844e+02, 2.973802185058594e+02, 2.989988403320312e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.978913269042969e+02, 2.971493835449219e+02, 2.971499938964844e+02, 2.972803344726562e+02, 2.986942138671875e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976842956542969e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartNoHeatingNoCooling.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartNoHeatingNoCooling.txt new file mode 100644 index 0000000000..3d5db3063c --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_OptimalStartNoHeatingNoCooling.txt @@ -0,0 +1,14 @@ +last-generated=2020-03-25 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "3", + "numerical Jacobians": "0" +} +time=[0e+00, 2.4192e+06] +optSta.tOpt=[0e+00, 0e+00] +optSta.optOn=[0e+00, 0e+00] +optSta.TZon=[2.921499938964844e+02, 2.920377197265625e+02, 2.941499938964844e+02, 2.937181701660156e+02, 2.924384155273438e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.928896484375e+02, 2.92452392578125e+02, 2.941499938964844e+02, 2.940725708007812e+02, 2.92486083984375e+02, 2.941501770019531e+02, 2.941499938964844e+02, 2.931207885742188e+02, 2.924315490722656e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.925739135742188e+02, 2.941924743652344e+02, 2.941499938964844e+02, 2.933985595703125e+02, 2.924233093261719e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.9270751953125e+02, 2.956985168457031e+02, 2.971499938964844e+02, 2.972090148925781e+02, 2.984024963378906e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.975139770507812e+02, 2.993063354492188e+02, 2.971499938964844e+02, 2.971586608886719e+02, 2.9813232421875e+02, 2.971501770019531e+02, 2.971499938964844e+02, 2.973801574707031e+02, 2.989988403320312e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.978911743164062e+02, 2.971519470214844e+02, 2.971499938964844e+02, 2.972803039550781e+02, 2.986942138671875e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976842346191406e+02, 2.963827209472656e+02, 2.950361022949219e+02, 2.937181396484375e+02, 2.924383544921875e+02, 2.941500244140625e+02, 2.941499938964844e+02, 2.928896179199219e+02, 2.92452392578125e+02, 2.941499938964844e+02, 2.940725708007812e+02, 2.924860229492188e+02, 2.941501770019531e+02, 2.941499938964844e+02, 2.931207580566406e+02, 2.924315795898438e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.925740051269531e+02, 2.941924743652342e+02, 2.941499938964844e+02, 2.933985290527344e+02, 2.924232788085938e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.9270751953125e+02, 2.956984558105469e+02, 2.971499938964844e+02, 2.972089538574219e+02, 2.984023742675781e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.975139465332031e+02, 2.993062133789062e+02, 2.971499938964844e+02, 2.971586608886719e+02, 2.981323547363281e+02, 2.971501770019531e+02, 2.971499938964844e+02, 2.973802185058594e+02, 2.989988403320312e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.978912963867188e+02, 2.971519470214844e+02, 2.971499938964844e+02, 2.972803344726562e+02, 2.986941833496094e+02, 2.971499938964844e+02, 2.971499938964844e+02, 2.976842956542969e+02] +TSetCoo.y=[3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964849e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02, 3.031499938964844e+02, 2.971499938964844e+02, 2.971499938964844e+02, 3.031499938964844e+02] +TSetHea.y=[2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964838e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02, 2.881499938964844e+02, 2.941499938964844e+02, 2.941499938964844e+02, 2.881499938964844e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_PIDWithInputGains.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_PIDWithInputGains.txt new file mode 100644 index 0000000000..b722033bb8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Controls_OBC_Utilities_Validation_PIDWithInputGains.txt @@ -0,0 +1,17 @@ +last-generated=2022-05-20 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "4", + "numerical Jacobians": "0" +} +time=[0e+00, 1e+00] +PID.k=[1e+00, 1e+00] +PIDWitInpGai.k=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00, 1.200000047683716e+00] +PID.Ti=[5e-01, 5e-01] +PIDWitInpGai.Ti=[5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 5e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01, 6.99999988079071e-01] +PID.Td=[1.000000014901161e-01, 1.000000014901161e-01] +PIDWitInpGai.Td=[1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 1.000000014901161e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01, 2.000000029802322e-01] +PID.y=[5e-01, 5.09999990686778e-01, 5.19999981373556e-01, 5.299999720603333e-01, 5.400000223517302e-01, 5.500000111758584e-01, 5.600000037252728e-01, 5.699999925494228e-01, 5.799999850988654e-01, 5.899999701977309e-01, 6.000000223517196e-01, 6.100000149011523e-01, 6.200000074505406e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 8.137588987134604e-01, 7.079578216303023e-01, 6.75346736289788e-01, 6.697009218262596e-01, 6.739532864769328e-01, 6.818436353351124e-01, 6.910501775726797e-01, 7.007831194056565e-01, 7.1069317582545e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 8.774170243203979e-01, 7.716368014726137e-01, 7.390448492627223e-01, 7.333810937881043e-01, 7.376160141842284e-01, 7.455072635850436e-01, 7.547188771106752e-01, 7.644033888020471e-01, 7.742881131527446e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 9.219928346223786e-01, 8.162043864878715e-01, 7.836006921384461e-01, 7.779276979318089e-01, 7.82165300588035e-01, 7.900578016496561e-01, 7.992791903056254e-01, 8.089927294509028e-01, 8.18887348207449e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +PIDWitInpGai.y=[5e-01, 5.09999990686778e-01, 5.19999981373556e-01, 5.299999720603333e-01, 5.400000223517302e-01, 5.500000111758584e-01, 5.600000037252728e-01, 5.699999925494228e-01, 5.799999850988654e-01, 5.899999701977309e-01, 6.000000223517196e-01, 6.100000149011523e-01, 6.200000074505406e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 8.137588987134604e-01, 7.079578216303023e-01, 6.75346736289788e-01, 6.697009218262596e-01, 6.739532864769328e-01, 6.818436353351124e-01, 6.910501775726797e-01, 7.007831194056565e-01, 7.1069317582545e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 8.774170243203979e-01, 7.716368014726137e-01, 7.390448492627223e-01, 7.333810937881043e-01, 7.376160141842284e-01, 7.455072635850436e-01, 7.547188771106752e-01, 8.631590484799047e-01, 8.715933520988245e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 9.999999413593323e-01, 9.626983615673881e-01, 9.395208008269087e-01, 9.288343820753084e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] From 0b7339539bbfa4e90d7ec72c1e5230745e49cec4 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 22:53:01 +0000 Subject: [PATCH 02/21] Added images --- .../OBC/CDL/Integers/Sources/Constant.png | Bin 0 -> 793 bytes .../OBC/CDL/Integers/Sources/Pulse.png | Bin 0 -> 13714 bytes .../OBC/CDL/Integers/Sources/Pulse.svg | 429 +++ .../Controls/OBC/CDL/Logical/Constant.png | Bin 0 -> 873 bytes .../Images/Controls/OBC/CDL/Logical/Latch.png | Bin 0 -> 103777 bytes .../Images/Controls/OBC/CDL/Logical/Latch.svg | 2678 ++++++++++++++++ .../OBC/CDL/Logical/Sources/Pulse.png | Bin 0 -> 10769 bytes .../OBC/CDL/Logical/Sources/Pulse.svg | 380 +++ .../OBC/CDL/Logical/Sources/SampleTrigger.png | Bin 0 -> 10145 bytes .../OBC/CDL/Logical/Sources/SampleTrigger.svg | 274 ++ .../Controls/OBC/CDL/Logical/Toggle.png | Bin 0 -> 100429 bytes .../Controls/OBC/CDL/Logical/Toggle.svg | 2840 +++++++++++++++++ .../Controls/OBC/CDL/Logical/TrueDelay1.png | Bin 0 -> 500 bytes .../Controls/OBC/CDL/Logical/TrueDelay2.png | Bin 0 -> 490 bytes .../OBC/CDL/Logical/TrueFalseHold.png | Bin 0 -> 11138 bytes .../OBC/CDL/Logical/VariablePulse.png | Bin 0 -> 16752 bytes .../OBC/CDL/Logical/VariablePulse.svg | 517 +++ .../CDL/Psychrometrics/Media/Water/plotCp.png | Bin 0 -> 14760 bytes .../Images/Controls/OBC/CDL/Reals/Acos.png | Bin 0 -> 1017 bytes .../Images/Controls/OBC/CDL/Reals/Asin.png | Bin 0 -> 1135 bytes .../Images/Controls/OBC/CDL/Reals/Atan.png | Bin 0 -> 859 bytes .../Images/Controls/OBC/CDL/Reals/Atan2.png | Bin 0 -> 1054 bytes .../Controls/OBC/CDL/Reals/Constant.png | Bin 0 -> 858 bytes .../Images/Controls/OBC/CDL/Reals/Cos.png | Bin 0 -> 1267 bytes .../Images/Controls/OBC/CDL/Reals/Exp.png | Bin 0 -> 1065 bytes .../Controls/OBC/CDL/Reals/Hysteresis.png | Bin 0 -> 5884 bytes .../Controls/OBC/CDL/Reals/Hysteresis.svg | 298 ++ .../OBC/CDL/Reals/HysteresisWithHold.svg | 1290 ++++++++ .../Images/Controls/OBC/CDL/Reals/Log.png | Bin 0 -> 1153 bytes .../Images/Controls/OBC/CDL/Reals/Log10.png | Bin 0 -> 1153 bytes .../Images/Controls/OBC/CDL/Reals/Sin.png | Bin 0 -> 903 bytes .../Controls/OBC/CDL/Reals/Sources/Pulse.png | Bin 0 -> 13714 bytes .../Controls/OBC/CDL/Reals/Sources/Pulse.svg | 429 +++ .../Controls/OBC/CDL/Reals/Sources/Ramp.png | Bin 0 -> 7088 bytes .../Controls/OBC/CDL/Reals/Sources/Ramp.svg | 281 ++ .../Controls/OBC/CDL/Reals/Sources/Sin.png | Bin 0 -> 11830 bytes .../Images/Controls/OBC/CDL/Reals/Tan.png | Bin 0 -> 963 bytes .../Images/Controls/OBC/CDL/Reals/int.pdf | Bin 0 -> 14695 bytes .../Images/Controls/OBC/CDL/Reals/int.png | Bin 0 -> 3494 bytes .../Controls/OBC/OBC_logo-only_150dpi.png | Bin 0 -> 82520 bytes .../Controls/OBC/OBC_stacked_150dpi_small.png | Bin 0 -> 49807 bytes .../SupplyReturnTemperatureReset.png | Bin 0 -> 10618 bytes 42 files changed, 9416 insertions(+) create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Constant.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Constant.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueDelay1.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueDelay2.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueFalseHold.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/VariablePulse.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Logical/VariablePulse.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Psychrometrics/Media/Water/plotCp.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Acos.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Asin.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan2.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Constant.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Cos.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Exp.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Hysteresis.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Hysteresis.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/HysteresisWithHold.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Log.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Log10.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sin.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.svg create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Sin.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Tan.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/int.pdf create mode 100644 IBPSA/Resources/Images/Controls/OBC/CDL/Reals/int.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/OBC_logo-only_150dpi.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/OBC_stacked_150dpi_small.png create mode 100644 IBPSA/Resources/Images/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.png diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Constant.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Constant.png new file mode 100644 index 0000000000000000000000000000000000000000..309e8ad4e4a06ef20a83d378d34c6d19541efcbf GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0y~yVAKa<4Gw0Yh#hM?P=LWKz$e7@|Ns9$rmwGWO-;>* z4L@kwU6_cV(bw1uGfoQ~H`(^ua#G2< z{o?vD&)pk7KH8eHtMYPJxNOnQYr)rU9WE7rGov#4`JQm=IMe4pl3&WW$4!^nc75x& zg1>xkW~JKqZhic9+SV+uuSZueTY0Z|#kq>LJJ*;$?pV#ZEk#bkJ+9Q_*{ix1J~S;w9JnkG}Y^}wWwXSLR6U&}hOT5#QR*2hP?#n&Bg{`jc% z_0NM9K#E&J|9tYNM@PN)0C`8drz4T#`XCW;{WxTD&k>Lal&t6!UvJ+J;saSA@}m$E z`A8Kc0y7$`1*-8U!NyhW^}D?EcK7wdQ&Hx%zaN?I(K{Jc8@H!y-M&hb{^h-^FLz(x zRcyL<${No&tG!cF=1oqXKYdbv)!ZW451am5spkKU+w*F|o^RD3S82*K$L;Amx$=H@ z_}-MLUwbRA&SBR7ZVhusRSc4oNcSz0?;t*f`VsEabIq5JytZ*UmL1S@-9mDGp;6r9 zq&>G%_OzX>=S~_wp0}-LI?1{4c7# z`n5Xl9skb%FaB+NuCC%aY05A5q@&)RK`XsfZ}NTjf1fHBJT>=kWkSIFZ=D%;y03?Q rJ+@j-Q2)8U>dz-%bP0l+XkKo=K+^ literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..84526dbddec039b2dba4c245a4b0f7a5055923c7 GIT binary patch literal 13714 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 GxBnMx6Hs^n literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.svg new file mode 100644 index 0000000000..bd62064c51 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Integers/Sources/Pulse.svg @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + offset + 0 + time + amplitude + width + period + y + + + + shift + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Constant.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Constant.png new file mode 100644 index 0000000000000000000000000000000000000000..ec036582adc43893bed68f4a6126ea4f6328152b GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0y~yU^DU%vd|!-p9e8Jjk3dinC@&6_v(?%mtd)5E~t=`Ln`9l-p$Tl93awm@$agg-_8F2KhGzu)an)WeTq=m>z@~rxqfasVW-7$&27?> zg>?oAQf=`%Y&;SMarZ@-x1Ih`_o4K_s~Lw&?>-OduFyStZsxkzQ>I4=ZkSc{Z~L0L z9trI->+8e)R5t8NG0#su4O9_Vyhp-pgudmqTMcuIEbh+ri1XeUyX>3`)9Pd+ zQ-+4QlWUn7B7ARNRf?ORn{<`qhMhkzL&EOUe>RBNIGxb-~)c+4QwX$!_>OBX}*}4Mkr41YiAx-_yi51fS-G2W<)iX9Pd2JB> z>z!(2>6V62*`5jgx4tyqJUk_ZG0ao$ovP=gCHs5#=$^j&>O=)F!!UTd`njxgN@xNA D6~|#0 literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.png new file mode 100644 index 0000000000000000000000000000000000000000..dac872a78fd346c6eed7c32eecc108927fdb2276 GIT binary patch literal 103777 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≶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 CU3IYl literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.svg new file mode 100644 index 0000000000..12c81e8c61 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Latch.svg @@ -0,0 +1,2678 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + At same moments, latch input rises (falls), clear input rises (falls) + At same moments, latch input falls (rises), clear input rises (falls) + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + falCleTruIni.u + falCleTruIni.clr + falCleTruIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + falCleFalIni.u + falCleFalIni.clr + falCleFalIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + truCleTruIni.u + truCleTruIni.clr + truCleTruIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + truCleFalIni.u + truCleFalIni.clr + truCleFalIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + swiCleInp.u + swiCleInp.clr + swiCleInp.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + swiCleInp1.u + swiCleInp1.clr + swiCleInp1.y + clear input: false +initial latch input: true + clear input: false +initial latch input: false + clear input: true +initial latch input: true + clear input: true +initial latch input: false + + + + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..2530f61c4b6d0f8f8951745ff946a4d6dca7321a GIT binary patch literal 10769 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%0AA$=W+0Jvrv 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 literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.svg new file mode 100644 index 0000000000..8d115bbbd9 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/Pulse.svg @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + 0 + time + width + period + y + true + + + + shift + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.png new file mode 100644 index 0000000000000000000000000000000000000000..339a13706d72bdf0c526a8074af1139d84348cce GIT binary patch literal 10145 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 YoE5!3i`qnxw$}mBdAoC!zj`J8A9ZzEng9R* literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.svg new file mode 100644 index 0000000000..306f78695d --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Sources/SampleTrigger.svg @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + true + false + 0 + time + period + y + + shift + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..4393734965cbdd9bbe4bf7aed668f94c71c308a8 GIT binary patch literal 100429 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 QE+pVbOHB`6q-r1bUl?agHUIzs literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.svg new file mode 100644 index 0000000000..a06875da33 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/Toggle.svg @@ -0,0 +1,2840 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + At same moments, latch input rises (falls), clear input rises (falls) + At same moments, latch input falls (rises), clear input rises (falls) + clear input: false +initial latch input: true + clear input: false +initial latch input: false + clear input: true +initial latch input: true + clear input: true +initial latch input: false + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + falCleTruIni.u + falCleTruIni.clr + falCleTruIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + falCleFalIni.u + falCleFalIni.clr + falCleFalIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + truCleTruIni.u + truCleTruIni.clr + truCleTruIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + truCleFalIni.u + truCleFalIni.clr + truCleFalIni.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + swiCleInp.u + swiCleInp.clr + swiCleInp.y + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 8 + + false + + true + + false + + true + + false + + true + + + + swiCleInp1.u + swiCleInp1.clr + swiCleInp1.y + + + + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueDelay1.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueDelay1.png new file mode 100644 index 0000000000000000000000000000000000000000..217bfedf46cc0551d9fa9d2415aa239a1fad6630 GIT binary patch literal 500 zcmVSaXM<-kn*ad<1PBl*o-mt9fGE#1&I)$#9})Z< z27j>7=j}*@pMk^^ly2c{5CjMiAV7fl%>N!N8F%xxTS8Yp^n%! zX|mB{Bf_JP`-Yh+*O*N-)RNgLf;_SE#3ZWc62&!cqdp?U5zVrVnkLi{#V$;kBlwI} zaI5a6U6t_*DeRgw+33(92!f~)5gWCE#PLKxyFuCiA+oy qN`!Azowad~J0MIHO`QJfA;@2w@>FyJ1p=5Qfnin1vK6Mqu?hLT-=|IK2eBO)itm zxN?#7X>zGlF02GBW6)x+6nlbk{;wJa!b58X%wlp5p+uz4gqbfmSPoG ze0k!j-?bx>CNVM3r=W_RiH57d#N<>hk|=7&%;X%CJ0T=f0E7^#lUtF7l!hKA40m$| zxfKEg2oNAZs6WxV6RbCJP|E3LeYDShXtOT&-Vbf}o7IG;csvZ{r?}4sxgmnCg#ZBp z1PBly>JwiNJ`O{narioqn9A3@EcQ598BLYumkK)!^Mkhv1>2i0lg{c)4~ gOH1VVuje272B!FY49P^f0000007*qoM6N<$f|vf%b^rhX literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueFalseHold.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/TrueFalseHold.png new file mode 100644 index 0000000000000000000000000000000000000000..10084130c622c507534bb8acc80e043304b2dc40 GIT binary patch literal 11138 zcmdsdcT`hryC)tMP*hL^Lh+|}@mUmOb1 zzqncZb#-}7QRBjii+9)ALaeQ%UeI0t$#F&L;)>kesr(eL@Dy3b+p9L$EN;kgafhWl zZ(N?L5C3gUv$M+ZHhHmWOllZa>cR<*XD2>T-t%ueG-X=+K~Y&%II}P|zuUj$QOoZ? z)#_2|!CzFwA&)r$mvqrQ&Gi`kyc!OFzdgoBPeSr|t=SBI({i2oEA}uYQWBE)V*kVo z%kmv&a<8taifjA%)ew3+-ici?&U6_BSQxrNN5B{q3W#0S7^F+`xOSHqsqGemt&>Au$=QOUYz4hKrZiX7O&%nsYjb^`b!@BkjouTJly$Tlj&CN|_ z|DB}7#KgeBz>JJ(+x(jJDlIcJv+bp!Wxbc5#W9+inzKKy-+QYkKcy8WBj1$7V)_8X z`z@EnC0j0;WxV)NbwRTdQm@8)^UG6;r&J6=_Jg&4Ri%ErYmsKFdZ~K9dCR5*HkoJOi?(B605L|-JG1BrFUb%1qlaR2qxac?A z#oA2)Pc^Ff$uise>MFLQgHGxUvxM)=_avNqsI0n%#>CRnO|-DrS}Jec9rp!oWo6~? zCRW8L;X8Mha3!rxO-LS|e8uRS&imy~;{umM6LS4lK9jw><7U&fv)&Ex^r< z+FJObS8Df$r?EX=#ARn?bai#r+S3M{RN16P1wb%L; zM#gYBFqq;$bCQxq;cUr8q?DC;piql`i6~eWT(#g^?3F85Hax8SW7NXnxqEqewZ-1fe*fNhqWKNk zxhrq)xMf+N98UE0&dJNmJ2@}W!vy8a-$R;jAlN@J@WIdTaBp*N&gS~Vob2p4Q4jkE z4<1-pr03@54qB~rrQS_QNVpuDo|BWKS7wiETCO`9?(6GoUS=)!41@ObvZ0v9x*k`c zX1wD{B^58~aUYL~kGDIBQdCrQ7_RKf?D=RBC+kLxXlke~EE-fu#vDn+U zZ`+jYH9V)D?nq?5W&HRJez`Y0S~qvN*t)yKwx9IOrIqn8$@Gkj?L~Z9VWBfT%H^7E z!`2oiXk7Fu>Qeh5T@8(kSFY&m>c+;#;xg4U;A4Wz`l_m(`9_kIlwr^cpEtyzL8q{V z9pTW5p^Tz};^KZom2TUM-)sH$VI|(be;*MMk($aPDq6L$u#jg^b-BWilQUa7=v*k1 zxNb_P-C%h^b@jo@Xg%Bg_?7K#N#}`XxF9|KT{@nhqK?Nvx&H2D#s~kIe1nC*Bjk|BNk|?r{cA6jh=l_Rl4&_AvZUp{~C9h8!Nl6F+0RaT!b8GAT zkjDt4h_ji3Ld!>!`e1VslArRX-G#m0+e_SaD{E_~Po3&4%}7o4-Rynn@9*DaXZH0K zqmlovxvZ?LhDO97AK>Tf*RRoNGzwojyQPt-f$JBadgt#==;!9d9~fwFD%qm4Dl02X z1baEEqYX4F(Q+S32#yE6O#B4Ls1LdR_e&S+Vy&uz^f+xykUp=m;cN`_&1fp0t%cQ% zjWg%YuYO#wJs(mCf3%OTa_76@7@_?)1D+DF<#OY2^SF-o>_jNuAbs&U}UsBKVM}( zR5>-oBHvYGc#4GNdufR?(l)Q4Ky_ailltY0)S_OA?qRoz(o%cP>dJ1dPLN0rG}=;^&CTOxDy%53zUU0ja;_8T8R zzj6-H*r&qc12LT{_eC_-?CdPS4Up*eA~h{-X}}R7+Q?sog(dal$6L_F0st(!sfg@lAu0VqB>Nnt-y>o+2S zFGa=in#$h4-`X6A?Ib@uwEJyaDCnZ} zMkpYX;$sKHzsmey(;WZ2O8M{k2~&O@P*SkCQ1aFvrz>2h0S^=uURXZ`_z=7Mvc>G= z$&I6TyJ)p&nsvupp51$q)LLA@u$Z@IA9p#&NGQ@ zaeU@2(}@8$(d1{(x;Z&jIE_D}8Uy4B*ljiP-x&=8rt|Xjl#!9i(JmOPjY%mk7U1Po zP3eq?jI5}tlDl`0m4(I1r?0mc2x@VpuI~N&PmPVNVqyn?Ih!jhw+i>xr#qPMxLP&6 zq=(YwcMn_sIx=$fl+Msg*!W*CAu|_8egQQrjFJJQ6OG1OER55 z-&y7`GBBVGj8a`)eU?G+V6Bx0`boL3#$~$wgKCO`f~_19BXU7gRbvx)BO z?MKqM6@GSBz?d`Nu=%AqJ=xCvl1y~j_adFP0x+Li!iNlRR|he8O4`-+%iuXPKAjGNmghE;KJa8ONMT_s)^fgY&x$X}v`Um)+tv)8q^v|Nya zE1ubZeNh@7-z5%K zq$MRK$;il5R66<%eUv?NLA@;vRSAv!fkNdL6|INx)PBHw&U{B88q$^HTp6;nvNjgp zT>Ezo4SJd#dud7wQ_*`}731{srCQUiIiF}{VNp?|3TIYsZf-a~9BgbEg@s)>TqV(! zJeDM^h5=nVdU#NtIdg`boSc%9S(IJ3A&`ult#M$9ghu5ogHp~jHuCBVex{i)3V~rvC`W1z663}T0 zA}+GITJt)seSPj<(5C|S@gtz=ilc2k7IEg5mTX_|LLDXPVzBOuxXmU8hXEW8s`1qo z5$De2d(corH9j8e2^^6&AblL_4&5y*rj7{9M@UxIT>T0@paZB<;2tm|wY9bLeYv)^ z$t?1u`49JYc7PNp5YH%?C0u77psHk3Zg6lodw9@E#fy1$y%qmoB>&}rB(3>CN{N}C zO!e@l!~lZM{@zSy3MhHd6vKt)A=PpGmhD$0d_94AK?D-iQc_aX)zqNs9+{dxrGhKP zfoKJlT2xfT>jR|rty|i%5QrY|i}d74a|;U`4%ZU8cCUU)0W|JlIj`f-Pv)&r+r>)BTi@RDO6O`FZFH;r`RAWnT1Vb2a`yIlH8nLigkEzSR%@R#YieyH9;hy1 zhhZ@}xvvuw6Cfy2S8c7Vi02rp^4PRnyql5~8545@{fClL&(ajo(wF*rsLX-y-yKKz zU+I4S{Mn$=^+%aQVmubEe`&Zz6onHwJh}!-+J*AaCps-HO~_$*0U%27H4P1oxw*MK zrU!&o>N?b>pRex(Ljs!W)vH%LH5(WzsU>LLe8UBw6DOMAq%{HtF}X+X53BU0 z$WbC-SzJ&kl&&srZL;TpDPW6azu-hTNt#46Q`E)zq|N)PTe7O-36Lotfm( zu8M=hGU&VF9Iz+G61r-UjY(p!=#$GPb^&4w= z4n)duq>jN+lz@(4xMlnaQjE6=3B$mU06$P1)!V~9+?+n}FsPAA1C?&JaED+Bpx&r91SG(N1cMqhVn3x#QI~mH<)pdg{(N|4dyByGpZTinj&~_%=V%?_5FJHbi zy<&_@Nbnyavmr;|ptm9;X)a!jfNPA105cx_?%hy{?ZfM3M-KojTmG;7+??Rv{{Hq% zXMIb{TuHy7t|YAiY`u`c zY`O)H?tyUN)Pky8G2^=t&Wc20h+b6bYl$NKm@K&!o(rN{B~d~u_+AKYrbbp_VPOaz zPnJd&Pz~T19*^JO>^Gv5`k;{oXgHg9iJE$RZZ6AD@8QETo8BxSd2opZpzR9^3LfSg z-Zt@o^Kz+C@arfkDcRU$Q9Xh<2XYG_FXw&eNsDi9M}PiYIau#t82m$8TH4CWN=oWU zbaa2!a;+#7Kajae{j>9}@LSCNAMN1#%I*pKGlk!Uc$VHp{gP{^8^ zk%MF73?trd@o{xyQ*nJux!t=?cNbKp;r=iUEH|L4%EoVRljY!?x^!7d=w^VSN zVl=ef*7<%Sps?`Gi9t>-MegIXFQ*TD@`<{|5lQrPAQ7HYB_$;Ro;r^ML_B%&q|$Zv zk%Pks&_&s>H$c-|ZFY22RC|JW6@*csHzDQm+FvYlBf7a<-4Yu}mBGhAG+_xs0yMLp zX&n(*o{!o_gHyFB@os!UBQGysA4Ewfbw$!&?Ao{4y^5O-g8q9QbY-KWXa+a2s{e6A7A3s3CjJNXCeQRzGe(?emeLqn`9Bd8(VFI94 ziC4|kKrW0^xA^?Hm!?SajWOty?n!FwHGS>PmtCxvjC;fh$}DVbY^)Yal zKxp8rGaw?Sl1k~U-on|gxpmYX9WLY2{yp95Gi=*{72Di|;MFR8v011XtHBYOl445H z;_sT3o!yq3N|Bww3;c$P_>1DK8!-wJ^uru@YkW$NF3wS2DfKJ%jH1mwZmd~*d;7yY zeR)O2){b8X7Mq!qQ(RhVKg@si>d&x%gK?;j!J#1-y+9lVDmmyZ12S=&gNuucn|pDv z!X>-}e5&pP8lb{S8?4I#xE7FY#Bc|S1o(kT*wGkbqirIBmpY6P4!1|xSXcxE1zS8) zAq4L2=^;nV&CmP!`KbuFY|N+*QJX?tpoXOr*|PsJHutqwBQF5P+IPRn&0XU(-UPNL z8mxick3z_HVJcxaTTx{Q5UhzInD)eCA|rdD z_hiGEayzXA?FY3D4gF!70zv-H{ywva^8^HnmG63ON@P=3x3~MP1Yo27@9}H^pbrun%?iQVgwgXi{rKSpvlWM$O)bzF zT{PknFpGdI1K+5O3jkac8u4|3H^AI!baeFSaO7wxHIQ&OJ3k+M5$gBfA45O?{`;pO zW`D4xD^}YR=gVQzN0d~aD?f>dy*wf*C|H`DELB$jl!DICZ?iWe(Z3P|8yG6WXb`h& z^yMoj0t4;N1Li?YJOxu8uwK*CWxxYX~ z@z$uo=gbPIaYt&YE28dP?Ci~-Kab94Boew439jo?%0p?$`;mg~<>JB5)f?6L1I*XPeGdQ)xzLyHxXys$j>wzmjS+E4r%Fyul_@KLIQr{Xxiq!Lh6XOf>hfPA z6%s%cSzw@`$C5sx0kWKOyB~bu?GO!d4z;^GTUoaODM(34Pb02fzb?7+GZ5-oPfrhw zX+(5%Dkhcy(F|=8IuZk za~c67jvB|&FEHCWjri@i-!5Oi4DW!oa4ZKd5@Ubux;$*KWICo%F!;^*SWHeq!D@_U z!t8JjkZ=EF6dHX3A>-{`S@=}k29OV+i(cHjSWG9*tPp|?a>Q`J+mKY)3qZk6+zW8z zx4Rh0`LNP$UJ$06ySbn5Ryj|;h>X)Z^+^);LDlRDK+$tjnPf9ISeYl0k zMSc6GglJ%Js7BPiT_AoM!xq zL{AS7?hqTC`RLbs8h5ww4!}flW_*F_jSVptH^5fdTUrVo9_@qLpZt4mazPV7X~G>q zkOE8llnVYAIT92p-`=&%hlJ>J5c>B*GZKLM?H%Ks?bReOBLf592fXH% zGBt%0FxJ=CyD>~=MkXfm(DQ0;P(Jy5x0DOk6cRi*l=)%^nUD6AiY|g6+1}jr`>sYU z83A{MltU%3b~W6oLEsPw1kgu4r7#yGM@*RT3R}T1 z-QC@RZgA%yj{+GKbvp|#5N4r^ohd=3_b{n@dwV1P`^x01Fj+P*$Q31*3WmuV>=L+0 zLv!jn>D{BNdT7YhfQ%u+3Ft$?oSIh3b*@MLl91-cnO}DdQ`yn&k$^h4`99<#G{7u> z+qFM18rs^z5E&q3%*`huFpG1&btsMPq7?d7zf{+*U6aC(&CTiR=ZJdd!Yi%{w;>TvhK(mR7Gnv z4<+Lr4KYtDbUXVj{V%}7mDoZwR}IqRGy;+gK)2}l_-cTMQ`E?2=77Bng%Hcwj~`Sq zG$7_!Sh%!58Ux`f)6OPxAln5LiNQD#v!kNCy}U%=TZM(sFo_9+NHDY+3sS=i52C4H zI-w%IsR2pAuUOLtqpuv#ftq#f&dSeE6hz@bE`JSU<|z|PreqCiCf56eD(q(|vQL5N zlPbBoT0bT>BHdDH;vOm4A|(FGQ7w#I+n;Eq;)R{Y(xMFuOG^nIM+Yhm@*vZLZ-IdCjf1t&s&r@YlrREeyRHrjWW;aV01|M>(TYQuY$BN4({<2L z_n`O>U|zcTJ*nPL^zAR~uyAmY^jI2%{tH;cvUR5`>wzdQ8}Xn2`ICx{F2k=_Vcwrz zXG|t5Cx?rZ6ZAO@o_Aq#qm^%Hpru6%@q*9jOG?&UP>0Y{zz9!f-RCDK;p!>Qo~>~p zJNyetA@BeJw-Y3Ja2MYNaqL4wuSuxeql0Nl<%0({{6TRcA+7M_B=#4IU`(YH!#DZP z17>m9f}$c=hRj<4H$Y4Mkd4Et4|~sZ4>iecCz%n54HqL843S#D9I-s`K>u-x7G^F7Gep>ikb?Xf+8AP!E>$zJYe&<}SY%z-=}<{O|QT7<5)G6|4N zSw{Q?7346k!j(IjIyn{CkH6(LMN_S%AU9PaX*&c=R8uwpo?-h6$Y|Q5`{Yireq&>g zyo`WmsV!sg%|l>Htoy+R%Cu6a@>2+K6p%Sn(a@x!X7OeDVPPGxZmjZrzsgrRJ1NNo z5FN&8khFE70%VvKXy4FtT@4St#4AOfRKvuBE(du{9MS~rmj$Tju}{J)V;}`8gnMj3)_Z}xbG?R{#tOX@B4TJnX)ZJUUp1+&Z>6PFRymlwT|_$i7(L)N~wN&;G`&x{l6` zGO&&m2$)Vpa4!_VhBWH71Qn!Yh9_)^TEoA1@d5%&iS0p`(9lrK`9P#(j3W$}oR461 z6dX(r*xTwIJPEUdr^8?A4rf&Yh>!z(KUroJa99F;u~jfmO7@FDKofw#D$&jLi&6oT znw?+Efo{fP-@JUw@%KAmELwACf=%t!C0^nNI^r438Z>yF(sfSko<~3_beCSdcyR!a z4|?{j#erDh$AjWngd7+~?|PXRp}ns;4Uzl$O?lOAB|W z{)-z=P>9ubskZ2Umg}WGBN@Y13Mq`VW-o|&(Bi9 zAclzY5-I6;n}fp!WG+xYjTB)1&(%duTSpg{dFYHBi(#*6#tLaCCnw0Yp)?=Dcp7{q zqycw;b;4L9W|@Cc3rt6m=$Y<}4%m$c-7q&j&F1Pq_dB0}=9zOuHWglrOhMM=rUEnz zcXNFK=A7g|3$Z!)zWh3ZH|)TRfA+WpV>JY5jds9kI#WMFR-F zFrWlZOZ4BHg*`QN7cb7(H~hSM>5ADpY-f8L6SMn;f~UN^Tv$Ye*ln;az}9)`?vVzs zF!>(9;Gj@AeLRsuLssw(bv5hlL|0K%R<^yi77N=%Kn2*7{hNkTQ&w)v(#$?MJY>9b z1twG=SBbnk=l&OeEpE(qO9ew0Nqh(dk0He$sDMe0GTJ!-JFsj&KK40)jSINyqvOp1 XyIQBbyFOw%_{N#TC@V?BR literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/VariablePulse.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Logical/VariablePulse.png new file mode 100644 index 0000000000000000000000000000000000000000..905efe7235967444f9a3b786f8669fc43f2329e2 GIT binary patch literal 16752 zcmeIac{r5&|37})N()-vB}<$#Op+x+)~S@-*@{z^Y-QhzEMprjQYWSE8OA<2Sz3h1 zGRP>EMg|eGi?Ng#W^7}&-#w~xKJU-#zkZIs>! z0Du^1cH9O41n1zN=c4Q2PmWeP+QPqtLyv)fio*Y5L_Kc7&l@h8IfMeh)_43Lf!FcW z6!=4_D<|x)*amxDiMSBr2}DFhsQCu@hq_<57J8Dv?_`@(`3EJU^Tn2A2T2pm0n;`BNJ%>I$c@hIlkci&u&oH%n_Sm5Z^ zqsP4jq&#tGIU&U6^vQ1s@5ijBz7sv)7EU`mJ4crkw@sp#I-?_I`WBZ!D?;$|sGdIZ z4`MKMH&9Xl0LH$whYP5#^dcexYDEEHS5uM5%5`jjHGO-aq#*otS_Oa!hd9`*ErEvs z;7^}!K{m%GZsPi*yX%1XjTD=B)M4^b3b)edkpS@USowcO zd3(_ab~0iB(3PG7pazV!9`a{?Z#flD7&g}WHSmGMhB-#R_qw%NDGs7@n=0BiuPwR1 ze9MTWKSAp7o<1J{c>MN&@XEWsUjy&nUcV9-Vv1sVlyhc9CwYDCOo@z3di~{*td@8k zn6pn`_=**yPeZjjEP0u)Z1aG zqV@~Z+6^TyW4(^>Nzbm76Jj6!J@RFR=p1K<3x=?P#I1%uL>}jl*i!Nc+5GwM>UEOIKY!ASX;FF~r^R0ufY{rp5c&k@>9;X1FHC%-{ylOJr4 zndw?PE?-(#+TRMrsQ0E*Q5lV@pv!01KQ=F8Pb#8^Zn(x({60;drT>+|Nkz1Mv&;>G z6+JzUt`4e!A@-2Gb;vL-JX05mUJ!N(-3E`pu9MMbITZx}8e9FhjYN}AvdCImx^LnN zy=1~KLnjgFsT(fgHhhZmVnRxzuk{E6@n;>%!{DI|tl?pDv`wGiI<-^uH;9ODit->m z0Z|fMNh=;zM0WjVX}ZUV^Pi~RtPcH9OLbznn9IdzND`rUua)NB3avlEZ-dbkE ze7&`}WrUVlk)8C6uaK>ejT%Zkf9Z|B`~GL`MY#s~MOzrJwzduDPzw+}&*#GKSxJr4 zO6Jf2(6B!%mAX=S2LR$PcMTmA0syTO@vt)eB?{Y#(_01P0AT;#23STXgd<_Ky#+`B zz>cjW@EzGJXb9h<Z{!qXioP<10B}2s+C0ah<{>Z-s7;CW zJWd?F5Ok^T_+!|5D2>{xkQEiCPW)Im$#sATP7~tb7D;fZCY(HYXfoU4~0Z;481Omxw0ol?+&sjV#S*%UBr}S#@V5n@Jgy z&l>SJE+9^5bExqma+0vX+yrDG!@6Exn+yHANGtj*V=*Z%@@nik=M_P66a-esNY~`(a@r=D`=<{V8XXJN6oWzBY&)(tsioufA5bXC)~;YY;LT9 zs?#0D_(QG%;_{!>AJHEjHdI_emFo?4$daBq>40=-BCcE zCQpycoLIR)nYTXFly<@4(UYs2XFi!&`9zr)${a)LHbn&A!yv&pBXq-a>@wSjJ_%pG z9k1eumpc!FFr(R&W5`8paG`K-;UYwmn@m_G=PIkJpT`>3;p@;X(+iLjZdpm6T(`qnTgKlD=0;?|!&EKWy zXo$WRGRO>c>#6G*Frr1a)s4lSa~->fZc=%UE|Jz%W0# zpF$DqiQUt7bS)h#b2PGT*D9HI2(#4Kf9<&)ps|5NT@m5Vyx1nK71(aO^cEp+8R7-e z7CwGhdXQdgKFx?CM>nCb#--C%LMdO%B3vv(%$lXgNd4+YL&Lt`4G(%ko>0twvhDjP z@P+iN+yh2=o=vSSD4HtM^W5;ZR*`uTa{Zwi*O?=qcjKG7+Pw6#6>(2z6I2&;Bf~h8 z>Iv3olpSlHu{9lwR*vw9je=MUkcw&bPS|_}bIM*)&u}y^SA=n>rEwu1q$0O+M@OG? zM>mN9odpT&f@ZxwYA!ZY+fM|S9SVF!?WpvJy-zVeeuMqd)c+lR=Kpv{`u`L7e^uP{ z|1IvaCo^y!_Ru|tKxHF>&FRlm{fSci_;RT-7+Q}cMnKQ7F$U!GP>do-dRGJS1JKem zp^TX{L}7u#1s8sxIUc6evWfq>=JT6q{@nMviyG>1c-r7$p}6*q2HJn;ga{m}+MnMp z#^8sj7Hv-(>-b^o%r2Fd<$|-$k^@G>wkGWIlK!Rj&rbz5Q-&9IcbTjCJ=z6ylj1^R zAjU*&v^O-UiZj{mGGrbXmeLb>rkNKVNK`Vv!7NT{Sk_F?-7W)(z4DlLB()wO9_qbc zCeZNKIX&R;%Ea){K)@xf=u_R#j4}`CX%43V7*nXWWbsZ6Qt$F}SNEMx8BUCARMqp) zZgn%cOb@$$ZGlqbLH%C#OX@gC&m>##zAyVZ-11641{q;SPde)|aSQycx#zkD<`RU( z)`b)}`pl+e&3~er1opfTkEypC5)*9rynroHA_n${wWHOi6|G&ywfll{rKvEai6ib6Y@s^RxPF>gr`%OnotF}sPqs!XO|*i>c-W3_ z5&#~5{_7Y^0~XEW*Ii(JZ}`^IQ|^gN7X%H*RvcRt0JoarV4cU5kSL%zdgmxMb}x#_+}tsFVF!WRob9 zs&r4vfPts#kjff8FZ9NT8UCFVfxUd1|^S;#qc=9_kR+6)qpKs!S6=JZ<# zo(^Z5cWXVUQ|T-WXn96JGW}|T9X3Al-QR#=>)8j?mWjC&j5n+Xo(262q94ol5?=BB z^1#Eo{{*06tLCfYV=@g>Qz#SzB}&Zj8jm3tpy^dIso-VjKrKNQR==!MVdc-346+1( z1D@um+(??9L+=bAr*^*+6;t?~>2WAx9qFyJJB#d|$ynu3k@#w=Z~Clr1rSgEl1lwh zdB@F*Z4W)_SG#ynrccdHsw%iXhtxv-Tp}?;D7(3MdSEZvm>>IE=A-pO^nO zcPrXkD2DVo{CH^ffFH7P8j>&9*>R8>{$d*d98uAi8NvR*6D!lr@p{WO=r$ps8~+T7 z$%mu1O*MwM!=~H0AyroOzCN!0O?|A3&2Pnlv{ac4F)tUq5c`r33eEtk#AaNprW`Dq zPr!i}pz*9`;8>_hv!x6a!lLHO9(oz<0be>oBX*#WzbL$6=2`FhL0P%7mTygBGnnX4 z3_izoaHZ9In+jqdo7Ec-S>1mU~kLvr0E40$&U%ISb{Dc0qRbV zYIfP7^oj^Ek2ZXZUM0gL;nYoX0ZS80V0l+LPjA-SPCIN}JwAp+S#{gpi=&>QaCZdmEK92OC~oBily7nK zD>kDuVTJm;Qc+JoT4H06MM%fqNeq&l<3++#-+E!J8DEYC^*U*Rtse)BZU&`j{(-iD zc7ydf)IbXN*ladExb2{_t_+8UpqZEXKVV39n#1=pT1jv3`0$`PHs$~sdGq`A+xTb!HSFCgdD_CPs8(3^8u zW8CVgMDqX~S8GNjb}{?k=T6?+K7tyIiH(NV7qU@dkx(cU<2zLsip|QRKE)m3;lbGl zn%6KE%_IZ7L^iL@ye>|ioH^08nh4IObx=z8kd?t4d`NlOYqYiVXokj4ti5k0AW`0g z=w9?!?YSy1KF2{|YCfP7+YFXRaonZQoqD_X+&2d^(y$v(z$Vt&^q*Jg<+%{oyZ~C7u@8@=`VlXWLU49UlMz%)nw;k z?|Qs=HZSu|_R9-5HocC)=hyXTosDQ2peW>Y#{`EqQ*jb`b&Ya$(U|CobLI}WJF#_t zkSA@7-%KNkn&c*|A<}bOYY4aJbas>Ouz@m}2c}1ARnJD>%qb6>(o^5{qPrYhXGpHH z@tUAnF|}6O5Z2a2X7ee-ePkKP>Aog;stiY9Nx3_1vPTu0F|$R-qQF#_@o_E2J)T$k zv={+XDE?PSfQkZ4P8a_jPPtSh_w-xqP+FWx^4ZdJ_3g zvu8ErRLR4wk@1V}jtX-TE)yBcGWyFMTm2%J+L^qFt4%z&srhkJ#`;PRH6f>$U%<0P zLK3?x^~lq<-HET%6x-tz6-5atn%|U^&h^vQda zu|YxUn%j9@lxb4P4So4EO?v$v&;LxjD_`JF;dH-Gjr*<74E0MYOpsO5^;JHFIJ9e4ym93N@FB`L8U3 zljfVnn{BRB;){iwX9y`FjMry=Sdpg^3oNe9B(E6ScaYO(&fWaFb;X&|lZ@00zZxo! z?+7|{m{*lrJv*J)YM@J&+LTqUoUiRQH_NU;RJl;28WrYrwJW&cLG?Fzb7fAC?ltf@ z?Py((uVMbyS$2(z%Gmau^r>9N5`uYmAg1Dx3ARolnnx_@*}Br%rv~VM;A=L_-9)ue zih)?RL9=CJj?NXXtJ>U3ZK9lf#CeTisjJ?yO@(#Sb;UEs^xfQ>PdcFpNslF3F+T(+>)fa2U3cf+ zysp{P7H7FLPRrPEm6MQE8OPhFFxMudKlw<(iSfi_(zWu)^G2gYI}fIHgxrHyJa*5R zC|jW)=88|~68G)>MfX=QJEz;n+ID@7QYhajHntMk{MSAl3AgF4u|$71)%E5*jK|Oz zD{tYwSgZ5*n_GnJ@-4C~PffWLkB^3>J4p<35|>=H-!OSu#ItwA$rR*PF;|+U0~ecJ zmCt531oWn-U@nRV>PPtS7C;yKcyHOB_b2s*COw(pLC`@Zd_;{QXJF)s*rRNYl*=O4 z=BibQCEq8MwoF?;-Tesv3R!$lQxFr@T$Uolz}yxiF<0J-_S7o(nY--_ywyFt=ojhx zJwfSu_xD#OEYyPyt?~3jkE{IUVaT}G${2_UA;DPUdi5dvTQf0H?#;)C4Dt^A znEQaUref6Y3@jgq#UkkuqEJ(D-e+ccyfqUOdh6?$iS4=MZ%?1u#-YXgeD0Y$IC$w* z$@US3TeaA1m{Z9z^M-Dm>itTkCEji3^v5_om-7(2MR1aB`F+zIC>2K9@7a}+cfjd# z_h_NI^(I)iLW+bnE`7w+w~Pi{7A@Ntm+$V#VHob-|vtleU^QbtsJ4v>%u7(T;1R>qd$it zHR#dWI{eA^+#`3doWYk!d+uJD6whXS-CE4V~gP_s(UE5CnIBD)Gn4yH~-+%q~v?k`^^)WVyX#3$Yai%Rurpo89c z62jGz-i>etH@xxAUtoyU>5^R!Tz=k!)YBhVco_(C_mgRb3vXhP`RcRrh^nAs1A7z) zr8IxNs67}#Jl|}YU70`dZLu8Ws(4;w1VV;~JynPE>TaWBpgTK>L(?|KRxtsmF7X(+ zuE?Pjy6I>hLc-c1gpsKnoF-?`E5Bi?+T5n^2e7L#wPi_o3byxE`8Q^hy=ay9nEm}B zjKwy|GDXkyA{jh!$gMwxYAs3ZcD&bsRJ0&@-jF8Y=}#yjI*RCV*gyI;-*w_fO+}lI z2&5^Sj!2!nYkv57{wA9~hn)MG`(yfXwa;BL%HFi7*qElBylmS%wL~aPvL|G3vzM@B zvZ6ejeb{)YPJR6D>x4T_(<$K4;16{j`m6S7R8=qOLV9S4g_JhR!1Lm4a$a3}Z-%DL zQUWfXSC$lhy}(%+#qfvNAGFYfuUBT%JB$T@2Hb`@;D}hUwL|Joub~4~M>Xmh zD zhI_}udm1|AvOBtU%}I$Dw8g;?eC3^ZwY2=58KKY*-77_Ry<#FjIuU{Ar^zm$mBofR zJ4IsktB!}#x_Nb9U%5h?pcunh%?%BrUWyG8a2IlOpHGo#dB`gS5~*k4`7$;#kW-@6 z+i7~{bh>qZjAmqHc{W6a5Gb=U%$=~Kj)FV({l)^=IcHK0*636bh^vnEa%(qLXeen} zLcsUpHO+BkehfBQf2v&5542z!9V%5MAEbnbKzcR$f~<;-DVRC-Fp%G+_v5#vwQ`~n z%qU0&>x88`QX0`8Ez+-B-OA6V}`st%{%-A@w=@YFWVo*Mc9Vpw{fXbpz+c=1%hp_;$+Q(-s(zkfbh zshywDN$P5;tJpZl!O1)@BSAr*a9>mAU7!Db^9;Q4y1+w9<@Y8&;CKbP zaM=XVa*uANzoP{c#eD`HE8FXQe0aB&X<2wiX!<6aycPZ3**b1^VsV9R;31XJCfu1V z08kL1D#V_IV(NNP2gr>lBU`a>1X9-AgF=!kcVwaXScjU)?>NPz3lq;55#5p!GbqpW zP+Ar>hr)&Lf9YR6&LB)0px5fr{oEAY7x+ut@wEC(TB7DC@PX&mOm zOHsz0X{vyh(ggw!Jz^b&cEhR!Xx!=6Zx~Lao~6L46?Ugy@Oh|d^KMc=N=a?U+Q@e2 z#42Z?{b{4-GHBHD(zi&6H`+3�DKAHK*sOUA$BD{IhjKKVb}}p{9@tzZ??k)h_}( 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + time + period + y + true + + + + + + + + + y + + + + + + + + + + + 0 + 0.75 + + u + 0 + time + + + + u + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Psychrometrics/Media/Water/plotCp.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Psychrometrics/Media/Water/plotCp.png new file mode 100644 index 0000000000000000000000000000000000000000..da4b6983959fa482ae912891fc5cfba83bfd44ec GIT binary patch literal 14760 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%0ALr?VodJp4O+CEiVEl6@nA{% zg=0^kv?2jQu)vo4KNp-7R)97@ehpSX19SnHGU~DoV^hGFNgwI6K=xWN=)944LgL8h zv%Z%*VZk&SNrOeOd`ZB6DlvU6NKL490gw_2_6Ax2GY6W+*8Zn2&Oyuedv;dLE-`0# z<9*v}iYhW&AY+~&QzcObTBjc`ON~)TIdnhlZ&~yaWCNRlk)V;$Tq)e@`+PxF6$u!Z z>H^s$B*is5JDdJZbXhlUE{8|CE=Or(nV4Zo`vYLE4f;YDl`u74WmVNfUolUatQ;1= z7|NGeJ36YGMeAsh?Ck7-u$BMT@cHu{APq0m<=99EeLzo4|J8G_h@*h-6bzBhAnd*M zfch6?`!MdBDct0qApTi*#y1=Um_Q$vU0O;2C`KzVDBVP%DiHz1PO-YKZYU5$PXl`} z;&CBmyC^TojR^;jNCqhQN6b#}A2LwJ{7Y1FSz5j?=El8W_Y0yZb;ZynlH7v^nP~C> zLXX2zw7Yikz5AYx$nlu5$f&UFthfuP?xwqR3h_in-cSe_cSr%XS571%@F)VImQ%n6 z{OI?{$oqHnRA%M4l|*zN;mnT_ySplEbO>i=(=0^_qneMoV8SbHYiqk`Su)NJh~#MA zZXc=J#vp>6{CwGwk&y?!7HMYDVDmv-a-sj)KabEi)=b;auNg1{l3Js` z%G6jM;Gj$8&`dC;EVt5sm%@F%octpo0g8S8VBc9}G&qOFE*=Lfq?Lu8Jy5`= zy2br6B#sZvwAt9$;-cF$#`kX4bQKegUNtIJ-QxfMtrZFXERfZ8_Erp04lVNuj@XLb6z5v z>43DM1b}QMCL&O{fVAu9!sA(wH5!rAX=l)U>jJi5cC?R`Gy+Xk?EJx_<|`QF;P!lb zvVur7(wpw{_&YT0-vGG+*)6r-)qdC#@V1&+Pj*Okz!*3Z(9epwi_mUQltKU5xB{AV z6yxcE45T#*sd1yK2zjj)wMGfoxX5wPad2>u;jAXM2lg8oasakt`&MucV*^C>z1w^+ zEMMQ+YTc=s%jCJ!#@8wSuYFO1x*!8eQ=0k%<)QTFC+Pp1PZP!g=LWVo0MooK`)ILt z>@EUw7;+oYcDi(e=*O;%&;vd1wD{H4)w_-TK;p}H!3miCNxSy$M0Ozl{yj7l=Wb|f z$~abHRAQYGW_2Mfi@+ivv|Tj=mtx7-^fe;4K_LP+KzqtI}d|K+DU*qEb4>Y z60Gj`_&5gSYhj_3yu3Ve5S-oAL<_K~Zj-miqPqaKtdtZKH9+D8IK}fY6jH(!ppN(7 z-QE2)06w(7u>puGtUIVnnO`a@h(Hn4{o%q2fp54lq3MF~0)(CtRx#ugC>=dXoQfNi z(g~LW7!hFq(R~8{;SD9B)x&eZNd}9$fq*p4R8%MCFl=!D#SK)(KuV8~UAzd~Ia1a% zyoxDDAGs;5JhRJ8Qe9nrs0@T3K+B&^!M-CjG&Ix9!XG~KvIq6`h(J(hz0Vr`#t^_D!I&#n7hOt~eM!t0q-(U9C20sbdorV-Q zf>c+A+<&FS)K{V?JsEG$k5PGWrjEbCbFou9vFNpzygs2sE+)dKfpT#fOo*& zfyFyIasgb##Xt}bToU}xCAbOIch5GE;7+cnbU zM>JFaA@l${1QYCp`=9RkJII_v$oeX-GzP)+#X8rp0&!0cPaN+-~S^u|h-+ue{?X_#y9yoB|=HV!!wQ zmnfPo`OtRY*P*z8m3b`1-xVjY*zQc-d~=`pw1=+)itaC0nH^XA#rM8?<*Q!Dd+*Lc|Z9tSMpb7Y5p#GlTW9c*Uex0 zC04)i68~*G%_ld0ZgKOBuexdZWXeNr<+*BmqZ8MMgie~$ALq$sRV4MRWOekV{_V@- z*?vCz;<^4;NY(z*Kd;tp;V%2T`Q@AsW>(*KP4Q#eHP`N?WP{$q=~Lw-YcHwqUGqia z{(f=e?-w`L0@dF* z`sEXtQ(N-J&Z~ z_xHtmfW*Zw9R%7{Tk^rq>Ko81?w1dM#yDA3z?ADP0V$_cc&T}Xye;cJxBA1{FCXMm z)q;MIr$C;Shj^A`HZU-^UrJt*EPnYkEM&nU@+PdR2NW+qLBRvzK%xK|V?d6st^Bh8 zs}f&)HT>n>>u|iz_V2p3g~{#r&VJhW-u_jdO4YjM*UuLpTXcQvmtrHSz3Y~wn^gVt zp8usPHvkyjJD0qlJZHh>7hjfMf3ih(ZXf%vb^o_Wy{wF=+U@4C+;hL{K*9!z!g)9Co@Dn3owm MUHx3vIVCg!0O|fAwg3PC literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Asin.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Asin.png new file mode 100644 index 0000000000000000000000000000000000000000..a10340dfa560ad86dcfbcb311d073f12ce5b89f1 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0vp^-+=fJ2Q!c?4qrJ3NCgJ?gt-3y|35xHo`K>2f&~js zoH+6D;luv^{%_yDtzWeZ{ypFe-|=FRr)+xPDM|M21e+qZ9j{P=P0+O@vE|CcZS zf8oOa0|ySAKYxDKtp7DN|1&cFA3y$IbbaMQ1_tJvo-U3d6>)FxoXq=dA;9qP-M4AA zKetET`|nua-|VSqFzIy9ji#>B1rGP^E@U`~A3cz^Irv>g&Muy=iW9p#ES}suYWKw1 z<p3=PSbb#miz9|@qPBs=DPG+pMUFo{NB@dVGEA!UHYnaZSmSSv)TT*<|QpY z);p_+`AyfV?ukba?3?kL+bruA!|&YI-l)TRb*fFfeal+A|9-XEEqPbMZ1%Ow>lRLy z`Fic}1=UK$LvN@TT&tHz()4G0ftw-gNpDAB0r3?s-$R zF>v;c6;t0BY&w0^EjMX#*rvlL^u(pNcJ|&n;-;H2y$3|EO=<7!jXI$x2^9ybGus%b zeKRp>vDhZ>V<3G%{_7j9w+_0kO>QpRKpI;dmxu9hBD)7zm zSLx0F?%$Ycv#xu2R{CPOV|Bl-ony1@`5RGhwmFbL<@)y*sm*dH>$<|sUTu7nk=iV_ zF;M@oo$HaiuWl?5PkdigA0}_V;dPL@^jD`hxBo2vyX(e+=}E^w>-GPBH_^v9UU4D1zIkqxut3|zcEl*qB`1?Yw?ETiO2j97G-=JJ| zRrXC?3A^>Kt7>K$g1|uJjXL6X_vky*>^NV|A$q zMW@-}v`LHaS{y^w-jz*s{UqjbD3IoXWHhQZ_HJ*MS0@fI$D4w2!p4q KpUXO@geCwjm0TeJ literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan.png new file mode 100644 index 0000000000000000000000000000000000000000..61fbea59bb519672ef5c7378c5a80c53d9f74c63 GIT binary patch literal 859 zcmeAS@N?(olHy`uVBq!ia0vp^H-Y#$2Q!ddBEUQoNSOurgt-3y|DS>3e|&uWf&~lC zpFjWb;ls6S*IvDPwZFgr+qZAepFclv;K26n+uyu-^YP=y_3PK)zJ2?|i4%MU=c*YP zm>zh#IEGZjy}fn1>#hS2+r#}OdBy&p{^?5}D!6bc^68OzFP&JAz2@J#)nIOYp4P@S z)$4-yhp%6CY426}?Y7n-xdj0F_xxJg_yjp3;vSIC;plN4!+*K?sJEiy3q9^*+*1W)zQq{dd-$L>u z)$HUGxL`i5CpV@8|ETS?tyJ$}6=hW}BmBiiwv>_H^HCIuqB#nn}JDI(cj9 zWYg2i+0z5q1ZJ*@b&_=G*;KYOg~9L?gVI!0FUcdC%@L^+Pi;7*;3s)Rt2?AElx^cF zrKyQi9oKB~NUeZKg+(qg+5_ayNS&6Id*g(_=|@u(r=_lSYl{$D&a+V`+tldDrZrcA z;z}Nh(vnG$*RoPNQX^MSRGj8I!O09L`R4WsHxSJcbONNwQCT=;+Q#*3UU8@1-27{D zc-Ye^wSs-kDaRix{61~9eof)l@__c`b8i|h{CiG;{glvBozB2%iyuow_VH(xM+!CO zdwbV%7$_A`aSMI(E<`!&6VJPJmU zyGx81I(*%B`)o>EnQ}JhLpmpE7MTI$b-Vx2GbdJnXQ}CWrhQhW?z(C&V&RUYi(2D}Ofk b-Os2#PvDAV@{e|4Zej3r^>bP0l+XkKKFgd< literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan2.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Atan2.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f8f29e0e9a8481fc33a3c8b12fb57247b74a7d GIT binary patch literal 1054 zcmV+(1mXLMP)+uP~g zh3EhP1EWbqK~#8N?cLi>D@hPU(TKFUUuNe2e|CXukj~{p(T+co~ z`2h%j@QaObkLS&ANch?Q58)oqo8OV}JD)^^KRo&s!up>7%KmZ5GL zaMpP6ihIZ`b~1~d%wi|A*vSAk0$v0ATX4N@+@{0Pe;Stx$FLmIh zs*5)8mC=EhR0Dj;-|r-UiYxBpYm?Hg@H)758+|*x7S?XR$Kzg8d;O|c{_>gE4{Ap^ zp@uh{R>No3@PF2?kJ~SRH@x8uZ+OFNyOrUUDDY8u{LCUJv&hK|^6l_}%z(!%4m@fU zyut>-qej7_2En5y!NaD(qsG9)#=$FY3_NTcJZua+Y!p0hARNJ#40X#;w+wa5P`3`o+(hT@~d(DA|?m1O?W|~%6`*bX}Y9d@y-LeF{>ZK`g)Lcl|u(^<^=U3Vp zu47a?!*wXPELtTPymwNdaP0v1@$P%=0UvxhDqeXf#X2BdKL-y?-ULsC7Y!cwH27pU z5?=G+p2IFpgim$vC&*H|t#}n+TC&1@82A&$;a9Rzg)o^AFzrBWcUDtL0 Y1BsU?VQ5#;o&W#<07*qoM6N<$f~z* z4<9aExR8;Nv3&XRS+i#C-MjbY%a;!yK0JQ>cu!ByrcImT#pBwR}! ze}0_j=HKay4U^4MZ{)@uUBfps`}L%)a*EZBW#=NIlkHyZopE)>=WUriYMU+FbN}X> zOx)`hZDgyL{r=dS8C$bFm>VK_ook;2^v+m2^ZMNkrRqkr)SN!G%~mSOTa(KC^uBW3 zoSl)pEbC}aR=?V2@4TyBH@CcT6TYdvWyx=c(>a;4=V!ik{?@+0F!>nI&HT<|J(8R3 zS$ZXn(@yN;l`{U%n|jRW%nYC;CfPF+Bu;>oGzO_5M5ZNy)S!@F`*s6GfL2@c9=>Cg zTqd{a+W%j#XMbPbf)@42~aV(FO~Yd!OLja4O&Ke=O=T(m@OJ^X;A>62R~$-wXc37j_gdIlJ(%*OWvfL>4o+EN>e!;{qX_U`+u zWjC*Vb!^S~V{6`Hl4arEXLI(Q$=Nk;XMUAkF<-&GlxKU}zNg>2{7Y`Zd1H_}RXiuD zoV`8i%I!?g<390Aj{4kORrM!NGA}fH)3s}bCkxihKl)~x%I6t>n#;~!i`YHo&u+EH zA;*tfg`B;eCuMy7^NiY@-E-vHuKR?VK8-q`yv@8OWIiyIulC&hdh%-g$(NlsRS)lc zHRG?XgSXM28*7f`@Gh5au$#6#tu$uR;p-DU>zVUf3omV$R&pJfLl`_={an^LB{Ts5 D*6gi@ literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Cos.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Cos.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1fb26b956ba4e6dd0a434a84af8a16facf7dc0 GIT binary patch literal 1267 zcmV540000sP)t-s|Ns90 z0RLZKU!b6%$jHc#kB{Nu;r90S)z#JK=jXS#x9sfft*x!w+uQN+@xZ{qudlDq&(B=z zn0x>L1b9hAK~#8N?c2+0V@VJO;fR!c@5{{lzwFTT&~kHDwp=GGt1>rQ8b0DLj6i(o z`ud*Ya{Jimg7^0tFTi75cSd-OSKwzn?qv{vD_r6U9)hhAp5tGB#JAlH{#JO3hhGqT zBXEt!*Ld3;;Vr&JY-ezM8sq2o2#*opw=+0Cjqzi9gy*=hJHp#TyliO@@t)<%<_MR# zJnw1{!A@r*U?U(N40cnHMgZ_=@c-?J&CSZP*p!Whb0(P zz3)vZuW(n*af95}fM5XyRlWiNbyEX^@(L<^6$0v(1_ad=lrKd zP)(r`z*7+1Cj^3$DR>fs+k`++F$Eg|H!A3wi z7r{oDG6l~^aEA~Gilxv9UsmD3d}XfY}Hx9Rfj-6wF6(ldeG(KyHUa5YRb8 z5J2?6wI2cqCm=ZQlOTwIr~~GZnt~ri5HJNHKZKjcXapMpopcSdG{OfAPD5};1P^K> z5zqK>G@D`5bF z$!o}e6F?^pfrG&A2rv-Agf%4m$C#ahavuWhjsTp1V8R*_zE8+aVSw@wghm*wU-X|gA_E8yuA_z7DI(7|>Kp6xZ0Uf!9M&MqAC*WmogiBoE<>4Fz=UfBN z@$0T36QfneDX2xdq@SqGsJthxq* z{1i~OM{pek9Kcr(!AAIW3a*7<%@7E(Q*bo|(?iHdpb08rl2f}V6ibkkeGrCBUmg1g1i)58o^oy1ZfH~5kk@+TpqznArK^` z;06e$8{{LPbqokd7=*hZm~N1dfX-{+0pWCoe1kI)oYdgN5>RIxgPe(g>U0KhF2Yek zm7Nfd@vF*y2&kHyK|TWBE}1~}hCuwef0D022?^gku8lw=%y>tHMree-MredaXoN;+ dghuG=`wyb26%cxY?^*x=002ovPDHLkV1gSl6GZ?3 literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Exp.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Exp.png new file mode 100644 index 0000000000000000000000000000000000000000..c1123f4ffb5c91358fd05f2569f5c09f33531ec8 GIT binary patch literal 1065 zcmeAS@N?(olHy`uVBq!ia0vp^zZe)889A7NtTX|SL?9I#;1lBd|NnmmhX3*L@ijI7 zKYaM_>-#?=ZUIEGZj zy}fa>>$Zb{+r$6*mG{%)H|_hM+}7#Y6~V*BW1IK;%FY1sUB3l%JFm@Ly=~*4%?w+O~lz)D`RlVr`SLgoA>-zIVW9M1S-fgzab?NUXR`*_(&%d93(z^1M--q;* z#Ty(-}Gm#+Fi;XH1K=a-<8 zJHe9M7)tbjO7wT>GR*bHsl*1T#C)cn)ZQ0rms=MC%|xeM7mMFb*<}DU5=doySv1>6 zybb6EAk`aJGWq493*8`U5zqxju@WGM7{!`YUG!bn?WVu$WXVN@=@5e;CiKUZ1ioau z?7CFiM|^6YL2SsbgLnmW?ut#*)4H3mYeh-(%SD%XmvwuYPs`)>25JUMO##{&uuE6t zu0z$S%r8@tUp8IJb$rQoDcEoEav5*&DS6yp<`d=>N!dO%0V}xtLeu@y+#){Pryf;@ zEWb=38JsN!`|I=NI4dQ(!?(cAz2w+lLNShaA7OY+snKDqFSmx9--3`pK%Y zW^*qI-)q>{zdh{kMd5or>)xNfvF3{W-8_Z&|K;uO>QwED{8F;{h4S}a&MzhD_Ph&z z&v2S4S9`bQ|Jx^zx6S_jG3sTfU*e^wM<+*JQa+dE_hrUE71L$zC5>{Iug666XX4z>c|TsLSl=r7&gby_^&S7Yp6}ne zY}2g0RlEPgpR}@<+p?cO4BPC!AH?zezFXI3vdZs8FOxlY zE&sHqyh{1x+Xu1Rzbq5F{r%OndqJNJ_AL7gls)<7=7*dQ@3>whpEQXzK3{sV)*)&2 z^(fD0^E@v#i@(|$HmRE5_@!dGN4@D}o_}|Hcdeb9vVB9ldTf>E!SK+l`VN28ckg0f SbrYEP89ZJ6T-G@yGywon3p0QK literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Hysteresis.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Hysteresis.png new file mode 100644 index 0000000000000000000000000000000000000000..efc8cd7b28ce9b92957a7c80b4643b27402f7a04 GIT binary patch literal 5884 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 RzuZ& + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + uLow + uHigh + + true + false + u + y + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/HysteresisWithHold.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/HysteresisWithHold.svg new file mode 100644 index 0000000000..8d70b69e60 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/HysteresisWithHold.svg @@ -0,0 +1,1290 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 200 + + 400 + + 600 + + 800 + + 1000 + + 1200 + + 1400 + + 1600 + + 1800 + + + + + + + + + + + + -0.4 + + -0.2 + + 0.0 + + 0.2 + + 0.4 + + 0.6 + + 0.8 + + 1.0 + + 1.2 + + + offHold_300s.u + + offHold_300s.y + + offHold_300s.uLow + + offHold_300s.uHigh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 200 + + 400 + + 600 + + 800 + + 1000 + + 1200 + + 1400 + + 1600 + + 1800 + + + + + + + + + + + + -0.4 + + -0.2 + + 0.0 + + 0.2 + + 0.4 + + 0.6 + + 0.8 + + 1.0 + + 1.2 + + + onHold_150s.u + + onHold_150s.y + + onHold_150s.uLow + + onHold_150s.uHigh + + + + + + + + Instants when y should be true, but is kept false due to the offHold. + + + + + + + + + Instants when y should be false, but is kept true due to the onHold. + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Log.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Log.png new file mode 100644 index 0000000000000000000000000000000000000000..2595d274d58869dc8a40bd8fff3041ed8fe2d50b GIT binary patch literal 1153 zcmeAS@N?(olHy`uVBq!ia0y~yU}Ofee{z6Gk-`N=Kq?`?C&cyt|NjgO|KsE1eSQD$ z-TS|%=l_KZ{}(J+@bcyVO`HDL)cikj;>7ah|NHy(_t#_U+-r{}~zo zuU@_S{Q2|a$N%5F`G5QN?Qh<^xqbWgfddEDu3h`_?P3haFyEB=Hgog=YH>hdWfy3$#BZ`P2bvrzuy0_%bv^G_wnkbv!h-< z40dEZ|CQlEgmrRrvMuwENO$d~UmY7(Nk0fEFx#>I|A*amGX-m0cC0+Sx_K*OS!vBW z@%-lLze1n7U6|MP_43^Z5nm7YF0d7Sy?yt=+O-LJABtA6t242Bq_XEXhpv5hmP5ow z>1Cb+!xuA!6a^;M=}8Qm6a&c*o z)p6jO1JgP-r46RYQu)lB5@0EoZ6GOu#F{UW`iA%UEq$V z8(5|>U*9V|C+)@uL568E>by6mA2d1Kw7sIYTbS*|$%Lpxg?o=4Bwa9?P$ea?LSK4= zJ#%ZhWYBrDO;s;;sr|lH>9FYe{e#EfAA0+wyir!#A=iTGz=^X<7!y9kM(qFZzh|rA zk0<*Qk{VXZi8H@fd*A!!+=D-V58mN8rdzo^)0}CSd0GC3r_s?4(u|S}Y;4te*AHAi z@b`)vgBTn0eQ~9;ZV%pMJ#$yOnZu%Icz`Fm`1TzJJ<}WKeI9lBpUwT@)a-ulbizs7 ze{&g6hKCmAvHZWn@c6*$NXeWX`DRSwQXldtxbh}POiqKP z@0S}Y&~a7bfl5*LRUqtP1T(JF#wXVQ7CX@BbLdq$%M69t=(>KYipaCnYnilcXf5m&CTg_czk@E zrsky$8V1C&tC5pL%~@ugm-6Ft76WDoJPCI2s(DXo*gWduZ*VB zstFF|H66|ti;jC5yyk;eLZ3AbKSWC(h=!> zHXJFkg+Tz~38Jk0h3Q--dOa_}fFQKgzps8z}@?OU5T&s?7k zB(IyihOl?{^Tjl(g&?zvU0_#h9~0ii-eaYuUh4g5#Z-XMRh>OD)@T~Bng=BEP%C`` zEE8uSs@(^`3l6;W0N@77-ra&jOr2`sV(qILtK)dLw>i+K}$D@(-K;_@v= z^`I-zpaZSmAizl7$gv$>cT!(wC1Xv1APff9d_F z#;IXfBdv8Vj&%6rL3wp*2vy#b|GIi5f{3ylb2x8sBmL@!Av;6qKpYYXPYRg9up#xU zjDLs z{pPuN)=3$&$HfHB(3ZFvpkjBF0YryO063W)zhS!zZy=kTh+=ZG!f1A~OOs=1t9B9# zU~>{=HaY1NOiuPS8lBv67AKFB$;t94nViItO>X+*CXnv(!A+2w)Na`$INhjr%k0_dNblI|0Q10{n%iCJn&`9BO=?#bE~s7hIa<1? zb4~L6uN`|GmM*DW69j2p=;X4}6)a2Zawk_*uH8>iy41-=reC+>Jac?P}DvjEybBS2j4=*qEs5@)(WpHfE`osKuaS=?ufyIjR# z&7}=j_Z@Azn?zu8^|}{1T7+gYxSkB)z|v!2f`C>(hS5funT?mx~Iwdg~lJ^mIkxHg53;T=!k*=Sbt?ic1Q| z{T!=YY8@1gHr!x$5x{UeaNBQf`wsnFQMuB%ta723Bb|$lODe~`94lS>b*FOF%SD}Q zzm|2b{W^ELtaQcW+WnB$#U@{!<35hnE-f9Dj{3N$a&7QI>#%f1<=Q8++JzpD^e#5( z>KuDrf)wi=EgXCWOX5yZjbq)D_mhzll{olXuu z-^I!5lEulvlg+W5q{YeOY;;K$Y;Y1|FuF;+!AYNFagqmF9myZPlSXWE5=byP5ykA{ z>SacUj??NZ^P!`%cDXzrI?S>?%R0dcoE?s4%*o*PekE2&et))GKOFrq0`NHWbNEl) dhr54$)NjRL=_8)$JHG$`002ovPDHLkV1n6_zY+id literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..84526dbddec039b2dba4c245a4b0f7a5055923c7 GIT binary patch literal 13714 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 GxBnMx6Hs^n literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg new file mode 100644 index 0000000000..bd62064c51 --- /dev/null +++ b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Pulse.svg @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + offset + 0 + time + amplitude + width + period + y + + + + shift + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Ramp.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdfd8e495959e9c38dfee4129d9acdf9c1cdff5 GIT binary patch literal 7088 zcmd6M`9GBH`~ED3><=MpB9g2n@mRx1q-^bQGtVeA-aeV3xBr| zlv9u^2!%q)dir?>yEp~7%K8Vn7p|-EgFpf@25>FQ@S?Tph!;wkn~3S!PM+7(s|ZT{u=$$bq+y80;aZSkwhsLHmgcmAk}jV-k;`RKMhg+%xD>ZrH;K^Dx^;<+YKQP+1@`qsk0 zdUyB|6ZIwM3%27yB#`~(R9(1OP>Wc*4brxZS^m~!037}**JxA#>a!Bt5gmt1OoYom zFK>3C9QyXxc29$eb@_W8tkj&YKsY@4ZAJNWS>NwLGJ&zIYV6y?G_oE6LV0Tk;o^|2 z%*!Hs@EegD>(hfXa+J) zPmbdF&AJVsQ*q;>H9kvy*ux4MfVOi-%c3$2>FO5tajr{4h`OoS5Kv_v#ZFXIH+$H)o@cecFm-UVpi-@GsIEzr6wzc?}HrMcbr^Bj@_hLNJ2QvaVcjdjp}JahO# z4ssLsawO_6>Zz})Bzu*WOSpJX(#V}H5sMvz!AC8f}P_D7t2Bu#K7ROG17HFf+ zyc%GY`e31Zd^XD}Xs?&Rkg`RU@Yk$gKMDB7FozF?!p+-rw!3kE6Lg$4e+OQdZskL) ztB6+nC8;${Ukn#{ds{3$O8_E=Y37<-r|UX^__w7SzAbc%oHd&@r$s(N@v_*?sqklF z*X$WCjg|W;i%n>G*&qYZ9|FW~{V0-VQ*&S@8&fRaXby+oY? zCQ3$ZQhRW@?lOmg#b|b-7(0v&H1yo z=PHy6o3n09*DE)(`R|!vdHi4Xh}f%0cOap8U=of&uerT>nWvMEXHm}QHk-qbW9X@L zf{a}n!9r>J-qrYAw;wxOQJWVTJyTe z2KnK@p2UVV0fGkRY>S!p{~>5m?#6$s{|J=hXc(E504v7!q)Z?e7V2JeNX7wEv3tut zhR3e1ogM@*bXX#87v^S6b$`uX;qkMDkSj^Q14fNkw05Jv%2?(dm?G3DdWavr2Bdoa~`> z2yJwF?Noq|&Ss<8(mWxLyLSky*cEdC7OoT^os`B782#*@4h1&};M@@~blt;$!({)5@4HQ-8&?BNSug<_&%P**IsXSI< z4TthyIV0u|;C$8KUjh$7Qa-X`)nij$D7+@IFN*7h6(Ob%Y=myoP1QBjH;}U`A+zBX zL;?j;A9aV`j98%yk(~YWiSCmuvSXLf`>&4@2MtYz73qkU=j9S-F%@r^1N|BX@%>f&ihujD=eWurR@wgfK9*vPGEOsVrQ%!gSF^A0@>Ar;X} z)4RcXo9KpM^pFjRHK+?s7vS<+Q0UkfwUu$`en~y*B9q{+*w~A-+|%QFbYsL(4JSCa z8TX6|BR{+ZyL?JjDX{uYuLceQm3-zjVKNHxj7Gx<*9i&)J4%4`pHOBW6qmdPEfU=^ zh(NN@{>|$i>NOn0M&aW2xv+dR(^$u9Q7@A^M8E2#7J75lkLl&GK}Cs~RQt;$P5E*5 zHw-51se=$QeJg!$tILPh6o^YG;Vx#P8L7~ObevW4JB7GFJn#&Ww){HVS|qPpn~}*oRHh*y$yL4>ybancV%(nS= zqqxE^59}&HXX>Ggu-RufD$A|M7DMUk7|0ltv61ZO%Qo}Y1p1S`c3d|Kd~1LyMhLb& z95h9D%lnaLSJcJ=@4)75LG#{*XZOauVpz$y^{EW1T%#rT{A^n7>&T~D+BJ5p15Jq( zCk1@k4Se%;S|AvwpFe6`?=|MjTm+i}U%nV1bT>&FqCpqdZ57t#_|wf7#Egl?K5(>g zM3Nvb2AZjj_LxH>c+U3QENduhj463iSzTfnD%)GPTAZPH^NDy#G#Xm?bI;HR=SPnf zlIP!-da5Y@M8*d#IvI|1+=hV=(beeq!DWWZruvHQKIa~CD$M*g?Ot12ClY!Om7k_5_GqwKJ&58G; z=T|$KSD`*xPLH5985j9CTmA7VgZCu?7kmfbBHlAc_!Mxa@xpO0FZsQm+HURK9{awiGbXbly>phU&^ z?e1JQ_r3XDN@@$0@DTd7<7=pxZh3wQ+(e;0c^es}{}r?mjo48I;#+b8@>A}&1b%{s zA~Wi3CT-wMuQ!{d%bRwiHr*QWzCHg_INN)8y71)^eCe5ja8~1MuU5NY)G^tBl9zI9GhMtKYROX?wg1^#gzmW+5aW`N{fUVV2 z)rl9qM%5!O0B%@5D!H87o+be%ff(LOn3gwKlJo4my!Gqi<{jkcx(Y6oo|!eB3=92AiwF! zp8)9$yu-{VeotvUa?>2RZ0H96&zAFYpRScT(bK>+$}@l$jsXZi`0K?<^QBzcnNRvy zwRy|DzqUrg|75!Ea-co{w+XNW`g`-@CMcmKeMO51TORW}Pns_T(5G4giXM0Kd$6B_ z5>1w&1hZFnX6udLjfYzbByY3R*vxCXQv86(hUX*n znMGkp2>2}Ef(iq}V0xWdByZDKAg$4yFQixb%@wCbcm}&W=5GHJewBL)LLQ(E%Zbdy z?zAtYETfBzRMsQ~r+L*g*aZf+4ZR$cC`=R>BCr;~V^&|GJk4&3q9@9%M!KB8)X1wTN$8UsC#E(v;7^5MSAEo`W8VT-6iu{ zWxm5ho{*>ATol-w;uVzwCM+XXX@nel$$WbA#qyxqKk?KH_E+y!*JHw1D>OGI+keeD z$gi2dP^SxT-M(%a2PUKw5(v);1AbkZUeE80l2!s}O=+?@SEXSNkX~iwy~ilZOI2i; zHBu)eQ=@Q*5Jqq##>z8vl!=*ew)m@r(@mK(nzaEoZrZxZiEwcbTeiHQVKGqADZFV2ZyzzU^G)ok{MMKY<_Zh z2Pt#SbYHVd|G~TNrz`=@WzSY4B%BrAEaB#NG~}6SXpxg!0)OkfT$jKn;r^$g?x#D_ zlwfH_^~Dac6#??|H^=?e)54c`6dt zZVqjau3$=C6BUcLPv{<{O)C_JrN^GMLtNfr#0fkYoG0SFWrc`%)l-&cJr{#@XJoNv z6P?G}lKT`ow_Ga)tw`Ky6~bmkg0b8q)#%{VzN|$f4DKCH?BXZ;KXL?H%*38Es(M?J zf)}lQHPhf%;qFo&*XzjS|Dwv+RFd!UAXd-0IVu`spKXLh>Ed&pN_|xR9!j&MO+f3v zH;gS#kF3faX(|oTO7zQtzx6xv=?7mAy#4RSrBl97zVdj-$rTot=KZ;7%sRqZRH}CLK&&EJa=9h9B$Jgjjh(sOAzi%YuJ#;hA-p90q)7=X4C_S= zVSUwQtU)_O7T<6Wywo`2*d{$NDW@o_#MYn&=6b_w1tY^!#4}k34(CxW=#5`^dArWk z#o=jgL)7<=$Q#!NPBxq;_*I(&zS?4R(5G9D&7F12jeT`HNtSB0WW8YWFQV6~HL(%D zK>Vy1u)|XmI?qha58eQ!U}mx+c6Q&eEd9%7``bn|puww1AS4 zVC_$WqW+TbN#bMNgbbY}d)6Wjeu4a7OXnq34I{r5qb}DtZk+Sc{h)9wo4Nk&E`)8T zdHTOoe#5!OM*h>#J?SOBb4MeZdP+Xy$~l#$Qhpo$syRFEWrgm_i~so0t8hf6S`kh7 zdOsXL5_Q!zsJ}5JB|12wsLqkZEq>NKH>ih(T|R0jCM+I}3;VMdF;2~8I8wz_II0b0 zv&kD6BP@4Ep9gilgXyE7_lIzneSi2;2g^s9S1u{~+*fzCdzTOcIz(qG{gHEjQ<;3B zhd*XiJ6@kJd4)_WA+DJSe>f2Wc?#k3l5}7G2_xDw{Q5&VJU%+s+{!2&TtuwuJ+4%m zNl9$D`aGX(MG)i{uvMqp8Oj+VOmv7V&k08fAl6dvCe^&&j?z z23JS?9-&T^6uFGm`x!`tN<9e_iW6_C!X~(|^<*vFkp5fg-sEyTQ5rYo_;tA4Y!px> z8S(ZlTz81E$0NDeqj&=1Agr2Z5vIC7H}SN$%BjDhg1vl_>42OjAdiB00m>0!+(f1E>O+SccuTq{dEk^zZaUeG{A3 z%01;>t?R!e+@hi*xb@paEcmnMlW2OM$v$Fo@IKB^)VwG80eOgE zky%JUfFG;gkngS_v7V@3+&s2hydG;^lfvTLOT8^YEdv5LMPq6k} zpOf&F;+R((Oh}D1VN0Q#=RTf~`hrbRZ`pIDmXHS_q%mZ4+#X2s6mPpkQ&==ysMUWu zutz4PXTotY><+Tme~Y{l-Aub$`u_cmS99@EG`sFgqTGh;9Nd|Rd!y(7A2mT?O!5Vy zi*KD{^x_lsacgnW)KzDyf`18g5#r6Pj#QLrr`t8~RJ?rw*+L3{mvcuRI7WdqUvV>H z3$jZX1X;ErerL95({K%J6+8+JXFaqdW!N)_ie~<&3LeiotSaK(n&U9)>58E}((JG0 zZFP2SOysJ&dy!Omp0Z95AqWxhG`&UwbA;f{Qs04|M-$*g{m$_P+?qLs+ox&o-0olE zUCXElDbX>RD)@!+atYDgD;sAU)+Mc=%V-sfQ6DZb=ZPHpxupCznB;P&74ge3Ys0Hw z*Pnn1D2y%o{t3~trVanEFu0@hq-&i;&A$5u{Mz6~+@lU{hGH-^yc){%EyzHb#vN(8~z6l%|M^_FaDA zIx|GLRA$Sz^z$5V>JGgLErZmazjlhTFZ^$!l8{#utLbc8Q~Sn3;V_hN!gjzNV3J9! z{!y+Z7|v*Pd%6DUNmO4#uR5TwN-%R`R>VR3gojPZ5X=u+2VFT{s~ZZKGDgKcG>X(Y zijHUK)nJf?tTPI3>6Xa_T%}cOHqq}t_#N(x?k8AdqDvW?1_Jyt%?sj=ZKaKJ3$`7) zvj*IVr$>cQiGz($a12Hq(@EgD9edh7h%SXfaeSlWgkxgbaOck-cGCG%FrU?pnG4Ee zn(HPffgQObO^>q4L6qmjnoxIXElrp-fkz_}($U8`gC=}>?!qjpNm#!_hJ^EmXDqtM zi}s8_5s)M0t|$wvk&3IQ(FB;w19sP4LrW&NS*snmt7lFfgz>l%I}{guo67eBJldp= z*7RV#tsqw7FbsP=?CzhMkxzxl33+zUD;k;3zmtwt)q6rOJ)6<)70A@(s6E8x50xOY zB6y9=TZlr+;KGU>rc`!N$vJ#XylAa-W0~ys0aUtE{XDO2`tc%lt>a>{y~`9tS)$=| zf~csG`6dL$M(dd2c=0>-)Df`RDC*3jCgjk#Th>4Z!p3j_8a^Q1M4mRW_r1;gi>T5; z2v9REyRhB|k`xg_O4rI72eIJ*No}>gL&+c*5dBMicDw3Ik2$3Ho+D#3*_{^rMn-4j zi|#AqZXrK39*pd(@NYaYo;f8ISMFUWCpFR~!Yh<$Qm2Pcu>A~#`-o9h&O$^8D^-E{ zBO_6uEyR+!h{3q4ReHUT)7hG$P4TH&F<4#j{{Rh(7}(m2rBlWxYTD|0WY|}2VP_!7 z*yW3N>wTwnzXt`Cb*vd+a4p2xM6AxSZ`ZpXt-pEA+1jLHwwfXAsXMVz^T;Lq=1CK` zWaHu&lJUg08ubE-HbV`GrG`=u6cIP@!iCT1Bt+SvrPveg>2=~f1@9GW_ech-McMJ9 z_A`&{7rNq3-La2gM$dlnP4h(*sgeSX)*evq)-?EDh^!X^o_%g^g97|1J86iNaUDc8 zlhwl1WBXOo-2r8=j*1|0hcioAIQDuScA-(|pC`8reB8GG+2zW2 zMMw=4Bc#3*BW8)*t7G1EVr-E-g^y?EVmp$1d!CxxBn-NJ*PPMBX8p1y`i~xa9^DZ$ zm*t6fkn?lGU)Vj}H#^|nP-wP47k>S^Ymmj}x ziJW>zUWn^GIGpQ???r9(?a>@JRy#`cdB$Syn!=}SlkMF+>)aa=CuuSV$3{SbEK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + height + duration + offset + startTime + time + y + + diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Sin.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Sources/Sin.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5d35c9879f0853e31e6a398838c7e85d30c0c6 GIT binary patch literal 11830 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 VJKb?490W(`o;Sd}*S`P!{{WAG!_)u( literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Tan.png b/IBPSA/Resources/Images/Controls/OBC/CDL/Reals/Tan.png new file mode 100644 index 0000000000000000000000000000000000000000..85f7a3a6785dfdccd64941b0ea6bb429d7f899d8 GIT binary patch literal 963 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 z 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 D9kKfM literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.png b/IBPSA/Resources/Images/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.png new file mode 100644 index 0000000000000000000000000000000000000000..102f675b802a5425c9a18c2d65dfcc374a6a8d33 GIT binary patch literal 10618 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 literal 0 HcmV?d00001 From 8709d188c540a91552bcaf61bcc171de14031da1 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 22:54:49 +0000 Subject: [PATCH 03/21] Addded mos scripts --- .../Conversions/Validation/BooleanToInteger.mos | 3 +++ .../Conversions/Validation/BooleanToReal.mos | 3 +++ .../Conversions/Validation/IntegerToReal.mos | 3 +++ .../Conversions/Validation/RealToInteger.mos | 2 ++ .../CDL/Discrete/Validation/FirstOrderHold.mos | 2 ++ .../OBC/CDL/Discrete/Validation/Sampler.mos | 2 ++ .../CDL/Discrete/Validation/TriggeredMax.mos | 3 +++ .../Discrete/Validation/TriggeredMovingMean.mos | 5 +++++ .../Discrete/Validation/TriggeredSampler.mos | 2 ++ .../OBC/CDL/Discrete/Validation/UnitDelay.mos | 2 ++ .../CDL/Discrete/Validation/ZeroOrderHold.mos | 2 ++ .../Integers/Sources/Validation/Constant.mos | 2 ++ .../CDL/Integers/Sources/Validation/Pulse.mos | 5 +++++ .../Integers/Sources/Validation/TimeTable.mos | 4 ++++ .../Validation/TimeTableNegativeStartTime.mos | 4 ++++ .../OBC/CDL/Integers/Validation/Abs.mos | 2 ++ .../OBC/CDL/Integers/Validation/Add.mos | 2 ++ .../CDL/Integers/Validation/AddParameter.mos | 2 ++ .../OBC/CDL/Integers/Validation/Change.mos | 6 ++++++ .../OBC/CDL/Integers/Validation/Equal.mos | 3 +++ .../OBC/CDL/Integers/Validation/Greater.mos | 3 +++ .../CDL/Integers/Validation/GreaterEqual.mos | 3 +++ .../Validation/GreaterEqualThreshold.mos | 3 +++ .../Integers/Validation/GreaterThreshold.mos | 3 +++ .../OBC/CDL/Integers/Validation/Less.mos | 3 +++ .../OBC/CDL/Integers/Validation/LessEqual.mos | 3 +++ .../Integers/Validation/LessEqualThreshold.mos | 3 +++ .../CDL/Integers/Validation/LessThreshold.mos | 3 +++ .../OBC/CDL/Integers/Validation/Max.mos | 2 ++ .../OBC/CDL/Integers/Validation/Min.mos | 2 ++ .../OBC/CDL/Integers/Validation/MultiSum.mos | 2 ++ .../OBC/CDL/Integers/Validation/Multiply.mos | 2 ++ .../OBC/CDL/Integers/Validation/OnCounter.mos | 4 ++++ .../OBC/CDL/Integers/Validation/Stage.mos | 6 ++++++ .../OBC/CDL/Integers/Validation/Subtract.mos | 2 ++ .../OBC/CDL/Integers/Validation/Switch.mos | 2 ++ .../CDL/Logical/Sources/Validation/Constant.mos | 2 ++ .../CDL/Logical/Sources/Validation/Pulse.mos | 4 ++++ .../Validation/PulseNegativeStartTime.mos | 4 ++++ .../Validation/PulsePositiveStartTime.mos | 4 ++++ .../Sources/Validation/SampleTrigger.mos | 6 ++++++ .../SampleTriggerNegativeStartTime.mos | 6 ++++++ .../SampleTriggerPositiveStartTime.mos | 6 ++++++ .../Logical/Sources/Validation/TimeTable.mos | 4 ++++ .../Validation/TimeTableNegativeStartTime.mos | 4 ++++ .../Controls/OBC/CDL/Logical/Validation/And.mos | 2 ++ .../OBC/CDL/Logical/Validation/Change.mos | 3 +++ .../OBC/CDL/Logical/Validation/Edge.mos | 3 +++ .../OBC/CDL/Logical/Validation/FallingEdge.mos | 3 +++ .../OBC/CDL/Logical/Validation/Latch.mos | 8 ++++++++ .../OBC/CDL/Logical/Validation/MultiAnd.mos | 4 ++++ .../OBC/CDL/Logical/Validation/MultiOr.mos | 4 ++++ .../OBC/CDL/Logical/Validation/Nand.mos | 2 ++ .../Controls/OBC/CDL/Logical/Validation/Nor.mos | 2 ++ .../Controls/OBC/CDL/Logical/Validation/Not.mos | 2 ++ .../Controls/OBC/CDL/Logical/Validation/Or.mos | 2 ++ .../OBC/CDL/Logical/Validation/Proof.mos | 14 ++++++++++++++ .../OBC/CDL/Logical/Validation/Switch.mos | 2 ++ .../OBC/CDL/Logical/Validation/Timer.mos | 10 ++++++++++ .../Logical/Validation/TimerAccumulating.mos | 11 +++++++++++ .../TimerAccumulatingNegativeStartTime.mos | 13 +++++++++++++ .../Validation/TimerNegativeStartTime.mos | 8 ++++++++ .../OBC/CDL/Logical/Validation/Toggle.mos | 7 +++++++ .../OBC/CDL/Logical/Validation/TrueDelay.mos | 3 +++ .../CDL/Logical/Validation/TrueFalseHold.mos | 10 ++++++++++ .../CDL/Logical/Validation/VariablePulse.mos | 16 ++++++++++++++++ .../Logical/Validation/VariablePulseMinHold.mos | 4 ++++ .../Controls/OBC/CDL/Logical/Validation/Xor.mos | 2 ++ .../Validation/DewPoint_TDryBulPhi.mos | 7 +++++++ .../Validation/SpecificEnthalpy_TDryBulPhi.mos | 3 +++ .../Validation/WetBulb_TDryBulPhi.mos | 7 +++++++ .../Sources/Validation/CalendarTimeMonths.mos | 7 +++++++ .../Validation/CalendarTimeMonthsMinus.mos | 7 +++++++ .../Validation/CalendarTimeMonthsPlus.mos | 7 +++++++ .../CDL/Reals/Sources/Validation/CivilTime.mos | 2 ++ .../CDL/Reals/Sources/Validation/Constant.mos | 2 ++ .../OBC/CDL/Reals/Sources/Validation/Pulse.mos | 2 ++ .../OBC/CDL/Reals/Sources/Validation/Ramp.mos | 2 ++ .../OBC/CDL/Reals/Sources/Validation/Sin.mos | 2 ++ .../CDL/Reals/Sources/Validation/TimeTable.mos | 4 ++++ .../Validation/TimeTableNegativeStartTime.mos | 4 ++++ .../Controls/OBC/CDL/Reals/Validation/Abs.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Acos.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Add.mos | 2 ++ .../OBC/CDL/Reals/Validation/AddParameter.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Asin.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Atan.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Atan2.mos | 2 ++ .../OBC/CDL/Reals/Validation/Average.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Cos.mos | 2 ++ .../OBC/CDL/Reals/Validation/Derivative.mos | 3 +++ .../OBC/CDL/Reals/Validation/Divide.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Exp.mos | 2 ++ .../OBC/CDL/Reals/Validation/Greater.mos | 3 +++ .../CDL/Reals/Validation/GreaterThreshold.mos | 3 +++ .../OBC/CDL/Reals/Validation/Hysteresis.mos | 4 ++++ .../Reals/Validation/IntegratorWithReset.mos | 6 ++++++ .../Controls/OBC/CDL/Reals/Validation/Less.mos | 3 +++ .../OBC/CDL/Reals/Validation/LessThreshold.mos | 3 +++ .../OBC/CDL/Reals/Validation/LimitSlewRate.mos | 2 ++ .../OBC/CDL/Reals/Validation/Limiter.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Line.mos | 5 +++++ .../Controls/OBC/CDL/Reals/Validation/Log.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Log10.mos | 3 +++ .../OBC/CDL/Reals/Validation/MatrixGain.mos | 7 +++++++ .../OBC/CDL/Reals/Validation/MatrixMax.mos | 5 +++++ .../OBC/CDL/Reals/Validation/MatrixMin.mos | 5 +++++ .../Controls/OBC/CDL/Reals/Validation/Max.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Min.mos | 2 ++ .../OBC/CDL/Reals/Validation/Modulo.mos | 2 ++ .../OBC/CDL/Reals/Validation/MovingAverage.mos | 4 ++++ .../Validation/MovingAverage_nonZeroStart.mos | 4 ++++ .../OBC/CDL/Reals/Validation/MultiMax.mos | 3 +++ .../OBC/CDL/Reals/Validation/MultiMin.mos | 3 +++ .../OBC/CDL/Reals/Validation/MultiSum.mos | 4 ++++ .../OBC/CDL/Reals/Validation/Multiply.mos | 2 ++ .../Reals/Validation/MultiplyByParameter.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/PID.mos | 4 ++++ .../Validation/PIDInitialDerivativeOutput.mos | 2 ++ .../CDL/Reals/Validation/PIDInitialState.mos | 2 ++ .../OBC/CDL/Reals/Validation/PIDScale.mos | 3 +++ .../OBC/CDL/Reals/Validation/PIDWithReset.mos | 5 +++++ .../CDL/Reals/Validation/PIDWithResetScale.mos | 4 ++++ .../Controls/OBC/CDL/Reals/Validation/Ramp.mos | 8 ++++++++ .../Controls/OBC/CDL/Reals/Validation/Round.mos | 4 ++++ .../Controls/OBC/CDL/Reals/Validation/Sin.mos | 2 ++ .../Controls/OBC/CDL/Reals/Validation/Sort.mos | 8 ++++++++ .../Controls/OBC/CDL/Reals/Validation/Sqrt.mos | 2 ++ .../OBC/CDL/Reals/Validation/Subtract.mos | 2 ++ .../OBC/CDL/Reals/Validation/Switch.mos | 3 +++ .../Controls/OBC/CDL/Reals/Validation/Tan.mos | 2 ++ .../Routing/Validation/BooleanExtractSignal.mos | 4 ++++ .../CDL/Routing/Validation/BooleanExtractor.mos | 17 +++++++++++++++++ .../Validation/BooleanScalarReplicator.mos | 5 +++++ .../Routing/Validation/BooleanVectorFilter.mos | 3 +++ .../Validation/BooleanVectorReplicator.mos | 5 +++++ .../Routing/Validation/IntegerExtractSignal.mos | 14 ++++++++++++++ .../CDL/Routing/Validation/IntegerExtractor.mos | 16 ++++++++++++++++ .../Validation/IntegerScalarReplicator.mos | 6 ++++++ .../Routing/Validation/IntegerVectorFilter.mos | 3 +++ .../Validation/IntegerVectorReplicator.mos | 6 ++++++ .../Routing/Validation/RealExtractSignal.mos | 16 ++++++++++++++++ .../CDL/Routing/Validation/RealExtractor.mos | 16 ++++++++++++++++ .../Routing/Validation/RealScalarReplicator.mos | 5 +++++ .../CDL/Routing/Validation/RealVectorFilter.mos | 3 +++ .../Routing/Validation/RealVectorReplicator.mos | 5 +++++ .../OBC/CDL/Utilities/Validation/Assert.mos | 2 ++ .../OBC/CDL/Utilities/Validation/SunRiseSet.mos | 14 ++++++++++++++ .../Validation/SunRiseSetNegativeStartTime.mos | 14 ++++++++++++++ .../Validation/SunRiseSetPositiveStartTime.mos | 14 ++++++++++++++ .../Validation/SupplyReturnTemperatureReset.mos | 3 +++ .../SupplyReturnTemperatureResetExponent.mos | 2 ++ .../OptimalStartCoolingNegativeStartTime.mos | 4 ++++ .../OptimalStartCoolingPositiveStartTime.mos | 4 ++++ .../Validation/OptimalStartHeating.mos | 4 ++++ .../Validation/OptimalStartHeatingCooling.mos | 6 ++++++ .../OptimalStartNoHeatingNoCooling.mos | 4 ++++ .../Utilities/Validation/PIDWithInputGains.mos | 6 ++++++ 158 files changed, 694 insertions(+) create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Abs.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Add.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/AddParameter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Change.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Equal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Greater.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Less.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqual.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Max.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Min.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/MultiSum.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Multiply.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/OnCounter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Stage.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Subtract.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Switch.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/And.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Change.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Edge.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/FallingEdge.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Latch.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiAnd.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiOr.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nand.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nor.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Not.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Or.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Proof.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Switch.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Timer.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Toggle.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueDelay.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulse.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Xor.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractor.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/Assert.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeating.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/PIDWithInputGains.mos diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mos new file mode 100644 index 0000000000..4d4ccff733 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Conversions.Validation.BooleanToInteger", stopTime = 4.0, method="Cvode", tolerance=1e-06, resultFile="BooleanToInteger1"); +createPlot(id=1, position={15, 10, 730, 200}, y={"booToInt.u"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={15, 250, 730, 200}, y={"booToInt.y"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mos new file mode 100644 index 0000000000..769ac2fa05 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Conversions.Validation.BooleanToReal", stopTime = 4.0, method="Cvode", tolerance=1e-06, resultFile="BooleanToReal1"); +createPlot(id=1, position={15, 10, 730, 200}, y={"booToRea.u"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={15, 250, 730, 200}, y={"booToRea.y"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mos new file mode 100644 index 0000000000..501db4ee85 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Conversions.Validation.IntegerToReal", stopTime = 1.0, method="Cvode", tolerance=1e-06, resultFile="IntegerToReal1"); +createPlot(id=1, position={15, 10, 730, 220}, y={"intToRea.u"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={15, 220, 730, 220}, y={"intToRea.y"}, range={0.0, 1.0, -2.0, 5.0}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mos new file mode 100644 index 0000000000..650ebcc3cd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Conversions.Validation.RealToInteger", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="RealToInteger1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"reaToInt.u", "reaToInt.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos new file mode 100644 index 0000000000..b4cd09e1c5 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.FirstOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="FirstOrderHold1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"firOrdHol.u", "firOrdHol.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos new file mode 100644 index 0000000000..aa38db656f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.Sampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Sampler1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sampler1.u", "sampler1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos new file mode 100644 index 0000000000..d78a181a38 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.TriggeredMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMax1"); +createPlot(id=1, position={15, 10, 750, 230}, y={"triggeredMax.u", "triggeredMax.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); +createPlot(id=2, position={15, 270, 750, 180}, y={"triggeredMax.trigger"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos new file mode 100644 index 0000000000..3af0a04d7f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.TriggeredMovingMean", startTime = -0.5, stopTime=15.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredMovingMean1"); +createPlot(id=1, position={15, 10, 590, 420}, subPlot=1, y={"triMovMea.u", "triMovMea.y", "triMovMea1.y"}, range={-1, 15.0, -2.0, 2.0}, grid=true, colors={{0,0,255}, {255,0,0}, {0,255,0}}); +createPlot(id=1, position={15, 10, 590, 420}, subPlot=2, y={"booPul.y"}, range={-1, 15.0, -1, 1}, grid=true, colors={{0,0,255}}); +createPlot(id=1, position={15, 10, 590, 420}, subPlot=3, y={"triMovMea.u", "triMovMea2.y"}, range={-1, 15.0, -2.0, 2.0}, grid=true, colors={{0,0,255}, {255,0,0}}); +createPlot(id=1, position={15, 10, 590, 420}, subPlot=4, y={"booPul1.y"}, range={-1, 15.0, -1, 1}, grid=true, colors={{0,0,255}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos new file mode 100644 index 0000000000..d72fd775b7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.TriggeredSampler", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="TriggeredSampler1"); +createPlot(id=1, position={55, 50, 615, 494}, y={"booPul.y", "sin1.y", "triSam.y", "triSam1.y"}, range={0.0, 1.0, -1.2, 1.2000000000000004}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos new file mode 100644 index 0000000000..144ba6730f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.UnitDelay", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="unitDelay1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"unitDelay1.u", "unitDelay1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos new file mode 100644 index 0000000000..62a595c2b3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Discrete.Validation.ZeroOrderHold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="ZeroOrderHold1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"zerOrdHol.u", "zerOrdHol.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mos new file mode 100644 index 0000000000..f27ea050ff --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Sources.Validation.Constant", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="IntCon1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"con.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mos new file mode 100644 index 0000000000..429ce5229d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Sources.Validation.Pulse", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="IntegerPulse1"); +createPlot(id=1, subPlot=1, position={15, 10, 590, 750}, y={"pul.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, subPlot=2, position={15, 10, 590, 750}, y={"pul1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, subPlot=3, position={15, 10, 590, 750}, y={"pul2.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, subPlot=4, position={15, 10, 590, 750}, y={"pul3.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mos new file mode 100644 index 0000000000..ef89f261dc --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Sources.Validation.TimeTable", startTime=0, tolerance=1e-6, stopTime=15, method="Cvode", resultFile="IntegerTimeTable"); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"intTimTab.y[1]", "intTimTab.y[2]"}, range={0.0, 15.0, -2.0, 8.0}, grid=true, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"intTimTab1.y[1]", "intTimTab1.y[2]"}, range={0.0, 15.0, -4.0, 8.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"tabOneRow.y[1]"}, range={0.0, 15.0, -1.2000000000000002, 0.3999999999999999}, grid=true, subPlot=103, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mos new file mode 100644 index 0000000000..b490f39630 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Sources.Validation.TimeTableNegativeStartTime", startTime=-5, tolerance=1e-6, stopTime=10, method="Cvode", resultFile="TimeTableNegativeStartTime3"); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"intTimTab.y[1]", "intTimTab.y[2]"}, grid=true, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"intTimTab1.y[1]", "intTimTab1.y[2]"}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 6, 1488, 1268}, y={"tabOneRow.y[1]"}, grid=true, subPlot=103, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Abs.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Abs.mos new file mode 100644 index 0000000000..fe0fa8acf7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Abs.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Abs", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Abs2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"abs1.u", "abs1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{28,108,200}, {238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Add.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Add.mos new file mode 100644 index 0000000000..cb05373cd6 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Add.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Add", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Add2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"add1.u1", "add1.u2", "add1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/AddParameter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/AddParameter.mos new file mode 100644 index 0000000000..1c9f554b58 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/AddParameter.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.AddParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="AddParameter3"); +createPlot(id=1, position={15, 10, 590, 420}, y={"addPar.u", "addPar.y"}, range={0.0, 1.0, -4, 5}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Change.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Change.mos new file mode 100644 index 0000000000..67eae9d2df --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Change.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Change", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="IntChange"); +createPlot(id=1, position={15, 10, 2072, 1231}, y={"reaToInt.y"}, range={0.0, 1.0, -1.5, 1.5}, grid=true, colors={{0,140,72}}); +createPlot(id=1, position={15, 10, 2072, 407}, y={"cha.u", "cha.up", "cha.y", "cha.down"}, range={0.0, 1.0, -1.5, 1.5}, grid=true, subPlot=2, colors={{217,67,180}, {28,108,200}, {0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 2072, 407}, y={"changeSampler.u", "changeSampler.y"}, range={0.0, 1.0, -5.0, 25.0}, grid=true, subPlot=3, colors={{28,108,200}, {0,140,72}}); +createPlot(id=1, position={15, 10, 2072, 407}, y={"increaseSampler.u", "increaseSampler.y"}, range={0.0, 1.0, -5.0, 25.0}, grid=true, subPlot=4, colors={{28,108,200}, {0,140,72}}); +createPlot(id=1, position={15, 10, 2072, 407}, y={"decreaseSampler.u", "decreaseSampler.y"}, range={0.0, 1.0, -5.0, 25.0}, grid=true, subPlot=5, colors={{28,108,200}, {0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Equal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Equal.mos new file mode 100644 index 0000000000..3a8778383c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Equal.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Equal", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Equal2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intEqu.u1", "intEqu.u2"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intEqu.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Greater.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Greater.mos new file mode 100644 index 0000000000..e3e9c65045 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Greater.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Greater", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Greater2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intGre.u1", "intGre.u2"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intGre.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mos new file mode 100644 index 0000000000..9af0591b0c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.GreaterEqual", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="GreaterEqual2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intGreEqu.u1", "intGreEqu.u2"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intGreEqu.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mos new file mode 100644 index 0000000000..532015066a --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.GreaterEqualThreshold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="GreaterEqualThreshold2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intGreEquThr.t", "intGreEquThr.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intGreEquThr.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mos new file mode 100644 index 0000000000..93bf7c36e2 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.GreaterThreshold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="GreaterThreshold2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intGreThr.t", "intGreThr.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intGreThr.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Less.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Less.mos new file mode 100644 index 0000000000..e52fddafb2 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Less.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Less", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Less2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intLes.u1", "intLes.u2"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intLes.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqual.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqual.mos new file mode 100644 index 0000000000..b02ef53c8f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqual.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.LessEqual", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="LessEqual2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intLesEqu.u1", "intLesEqu.u2"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intLesEqu.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mos new file mode 100644 index 0000000000..3bb3b3f69e --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.LessEqualThreshold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="LessEqualThreshold2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intLesEquThr.t", "intLesEquThr.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intLesEquThr.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessThreshold.mos new file mode 100644 index 0000000000..8ef203f4a7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.LessThreshold", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="LessThreshold2"); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=1, y={"intLesThr.t", "intLesThr.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}}); +createPlot(id=1, position={15, 10, 590, 450}, subPlot=2, y={"intLesThr.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Max.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Max.mos new file mode 100644 index 0000000000..7657635021 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Max.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Max", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Max2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"max1.u1", "max1.u2", "max1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Min.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Min.mos new file mode 100644 index 0000000000..fc2c0b0829 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Min.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Min", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Min2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"min1.u1", "min1.u2", "min1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/MultiSum.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/MultiSum.mos new file mode 100644 index 0000000000..ca07a079d9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/MultiSum.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.MultiSum", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiSum2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"add1.u[1]", "add1.u[2]", "add1.u[3]", "add1.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {238,46,47}, {217,67,180}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Multiply.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Multiply.mos new file mode 100644 index 0000000000..db80fbb9c9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Multiply.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Multiply", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Multiply2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"product.u1", "product.u2", "product.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/OnCounter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/OnCounter.mos new file mode 100644 index 0000000000..b3850cea79 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/OnCounter.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.OnCounter", stopTime=2.0, method="Cvode", tolerance=1e-06, resultFile="OnCounter1"); +createPlot(id=1, position={15, 10, 750, 450}, subPlot=1, y={"onCounter.trigger"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={15, 10, 750, 450}, subPlot=2, y={"onCounter.reset"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={15, 10, 750, 450}, subPlot=3, y={"onCounter.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Stage.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Stage.mos new file mode 100644 index 0000000000..15460bca04 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Stage.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Stage", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Stage"); +createPlot(id=1, position={15, 15, 1152, 1184}, y={"sta.u"}, range={0.0, 10.0, -0.2, 1.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 1152, 1184}, y={"sta.y", "zerHolTim.y"}, range={0.0, 10.0, -0.1, 1.0}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1187, 17, 1214, 1182}, y={"sta1.u"}, range={0.0, 10.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1187, 17, 1214, 1182}, y={"sta1.y", "lesHolTim.y"}, range={0.0, 10.0, -1.5, 1.5}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Subtract.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Subtract.mos new file mode 100644 index 0000000000..276f663817 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Subtract.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Subtract", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="sub2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sub.u1", "sub.u2", "sub.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Switch.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Switch.mos new file mode 100644 index 0000000000..3301aec93b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Switch.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Integers.Validation.Switch", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="IntegerSwitch1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"integerSwitch.u1", "integerSwitch.u2", "integerSwitch.u3", "integerSwitch.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200},{28,108,200},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mos new file mode 100644 index 0000000000..bd659c048f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.Constant", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="BooCon1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"con.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mos new file mode 100644 index 0000000000..9d461130a3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.Pulse", stopTime=10, tolerance=1e-06, method="Cvode", resultFile="Pulse"); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_a1.y", "booPul_a2.y", "booPul_a3.y", "booPul_a4.y", "booPul_a5.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_b1.y", "booPul_b2.y", "booPul_b3.y", "booPul_b4.y", "booPul_b5.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_c1.y", "booPul_c2.y", "booPul_c3.y", "booPul_c4.y", "booPul_c5.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mos new file mode 100644 index 0000000000..9f6f059e7d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.PulseNegativeStartTime", startTime=-10, stopTime=1, tolerance=1e-06, method="Cvode", resultFile="PulseNegativeStartTime"); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_a1.y", "booPul_a2.y", "booPul_a3.y", "booPul_a4.y", "booPul_a5.y"}, range={-10, 1, 1.5}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_b1.y", "booPul_b2.y", "booPul_b3.y", "booPul_b4.y", "booPul_b5.y"}, range={-10, 1, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_c1.y", "booPul_c2.y", "booPul_c3.y", "booPul_c4.y", "booPul_c5.y"}, range={-10, 1, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mos new file mode 100644 index 0000000000..6c8bb88fb3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.PulsePositiveStartTime", startTime=9, stopTime=20, tolerance=1e-06, method="Cvode", resultFile="PulsePositiveStartTime"); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_a1.y", "booPul_a2.y", "booPul_a3.y", "booPul_a4.y", "booPul_a5.y"}, range={9, 20, -0.5, 1.5}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_b1.y", "booPul_b2.y", "booPul_b3.y", "booPul_b4.y", "booPul_b5.y"}, range={9, 20, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 1385, 860}, y={"booPul_c1.y", "booPul_c2.y", "booPul_c3.y", "booPul_c4.y", "booPul_c5.y"}, range={9, 20, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mos new file mode 100644 index 0000000000..a5ec2f62a9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.SampleTrigger", startTime=0.0, stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="SampleTrigger"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"samTri.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); + +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=1, y={"samTri1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=2, y={"triggeredSampler1.u", "triggeredSampler1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mos new file mode 100644 index 0000000000..c7ac6c9b11 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.SampleTriggerNegativeStartTime", startTime=-2.0, stopTime=3.0, method="Cvode", tolerance=1e-06, resultFile="SampleTriggerNegativeStartTime"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"samTri.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); + +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=1, y={"samTri1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=2, y={"triggeredSampler1.u", "triggeredSampler1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mos new file mode 100644 index 0000000000..8f1c00da49 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.SampleTriggerPositiveStartTime", startTime=1.0, stopTime=6.0, method="Cvode", tolerance=1e-06, resultFile="SampleTriggerPositiveStartTime"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"samTri.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); + +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=1, y={"samTri1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); +createPlot(id=2, position={35, 30, 1000, 600}, subPlot=2, y={"triggeredSampler1.u", "triggeredSampler1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mos new file mode 100644 index 0000000000..2fdf7b2069 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.TimeTable", startTime=0, tolerance=1e-6, stopTime=15, method="Cvode", resultFile="TimeTable2"); +createPlot(id=1, subPlot=1, position={15, 10, 1936, 1264}, y={"booTimTab.y[1]", "booTimTab.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); +createPlot(id=1, subPlot=2, position={15, 10, 1936, 1264}, y={"booTimTabTwi.y[1]", "booTimTabTwi.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); +createPlot(id=1, subPlot=3, position={15, 10, 1936, 1264}, y={"booTimTabOneRow.y[1]", "booTimTabOneRow.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mos new file mode 100644 index 0000000000..413aa81543 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.TimeTableNegativeStartTime", startTime=-5, tolerance=1e-6, stopTime=10, method="Cvode", resultFile="TimeTableNegativeStartTime2"); +createPlot(id=1, subPlot=1, position={15, 10, 1936, 1264}, y={"booTimTab.y[1]", "booTimTab.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); +createPlot(id=1, subPlot=2, position={15, 10, 1936, 1264}, y={"booTimTabTwi.y[1]", "booTimTabTwi.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); +createPlot(id=1, subPlot=3, position={15, 10, 1936, 1264}, y={"booTimTabOneRow.y[1]", "booTimTabOneRow.y[2]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/And.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/And.mos new file mode 100644 index 0000000000..402b6037b1 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/And.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.And", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="And1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"and1.u1","and1.u2","and1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Change.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Change.mos new file mode 100644 index 0000000000..0178051186 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Change.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Change", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Change11"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"change.u", "change.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Edge.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Edge.mos new file mode 100644 index 0000000000..3e25c70da6 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Edge.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Edge", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Edge1"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"edge1.u", "edge1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/FallingEdge.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/FallingEdge.mos new file mode 100644 index 0000000000..0a4aa1cab4 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/FallingEdge.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.FallingEdge", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="FallingEdge1"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"falEdg.u", "falEdg.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"triggeredSampler.u", "triggeredSampler.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Latch.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Latch.mos new file mode 100644 index 0000000000..0db00899f0 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Latch.mos @@ -0,0 +1,8 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Latch", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Latch1"); +createPlot(id=1, position={10, 10, 550, 800}, y={"falCleTruIni.u","falCleTruIni.clr","falCleTruIni.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=1, position={10, 10, 550, 800}, y={"falCleFalIni.u","falCleFalIni.clr","falCleFalIni.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=2, position={570, 10, 550, 800}, y={"truCleTruIni.u","truCleTruIni.clr","truCleTruIni.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=2, position={570, 10, 550, 800}, y={"truCleFalIni.u","truCleFalIni.clr","truCleFalIni.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=3, position={1130, 10, 550, 800}, y={"swiCleInp.u","swiCleInp.clr","swiCleInp.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=3, position={1130, 10, 550, 800}, y={"swiCleInp1.u","swiCleInp1.clr","swiCleInp1.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiAnd.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiAnd.mos new file mode 100644 index 0000000000..930410396f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiAnd.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.MultiAnd", method="Cvode", tolerance=1e-06, stopTime=10.0, resultFile="MultiAnd1"); +createPlot(id=1, position={15, 10, 600, 350}, y={"mulAnd0.y", "mulAnd1.u[1]", "mulAnd1.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); +createPlot(id=2, position={15, 400, 600, 350}, y={"mulAnd2.u[1]","mulAnd2.u[2]", "mulAnd2.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); +createPlot(id=3, position={630, 10, 600, 750}, y={"mulAnd5.u[1]", "mulAnd5.u[2]", "mulAnd5.u[3]", "mulAnd5.u[4]", "mulAnd5.u[5]","mulAnd5.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {238,46,47}, {217,67,180}, {238,46,47}, {217,67,180},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiOr.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiOr.mos new file mode 100644 index 0000000000..0807471b9f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiOr.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.MultiOr", method="Cvode", tolerance=1e-06, stopTime=10.0, resultFile="MultiOr1"); +createPlot(id=1, position={15, 10, 600, 350}, y={"mulOr0.y", "mulOr1.u[1]", "mulOr1.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); +createPlot(id=2, position={15, 400, 600, 350}, y={"mulOr2.u[1]","mulOr2.u[2]", "mulOr2.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); +createPlot(id=3, position={630, 10, 600, 750}, y={"mulOr5.u[1]", "mulOr5.u[2]", "mulOr5.u[3]", "mulOr5.u[4]", "mulOr5.u[5]","mulOr5.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {238,46,47}, {217,67,180}, {238,46,47}, {217,67,180},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nand.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nand.mos new file mode 100644 index 0000000000..87a5b10483 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nand.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Nand", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Nand1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"nand1.u1","nand1.u2","nand1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nor.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nor.mos new file mode 100644 index 0000000000..3edbb81a71 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nor.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Nor", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Nor1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"nor1.u1","nor1.u2","nor1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Not.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Not.mos new file mode 100644 index 0000000000..0391a451c7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Not.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Not", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Not1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"not1.u","not1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Or.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Or.mos new file mode 100644 index 0000000000..0ceefb21a5 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Or.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Or", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Or1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"or1.u1","or1.u2","or1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Proof.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Proof.mos new file mode 100644 index 0000000000..bcb912d2f9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Proof.mos @@ -0,0 +1,14 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Proof", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Proof"); +createPlot(id=1, position={5, 20, 450, 1300}, y={"pro.u_m", "pro.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={5, 20, 450, 1300}, y={"pro.yLocFal", "pro.yLocTru"}, range={0.0, 10.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={465, 20, 450, 1300}, y={"pro1.u_m", "pro1.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={465, 20, 450, 1300}, y={"pro1.yLocFal", "pro1.yLocTru"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={925, 20, 450, 1300}, y={"pro2.u_m", "pro2.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={925, 20, 450, 1300}, y={"pro2.yLocFal", "pro2.yLocTru"}, range={0.0, 10.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1385, 20, 450, 1300}, y={"pro3.u_m", "pro3.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=4, position={1385, 20, 450, 1300}, y={"pro3.yLocFal", "pro3.yLocTru"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1845, 20, 450, 1300}, y={"pro4.u_m", "pro4.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1845, 20, 450, 1300}, y={"pro4.yLocFal", "pro4.yLocTru"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=6, position={2295, 20, 450, 1300}, y={"pro5.u_m", "pro5.u_s"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=6, position={2295, 20, 450, 1300}, y={"pro5.yLocFal", "pro5.yLocTru"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Switch.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Switch.mos new file mode 100644 index 0000000000..32ed0ee90c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Switch.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Switch", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="LogicalSwitch1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"logicalSwitch.u1", "logicalSwitch.u2", "logicalSwitch.u3", "logicalSwitch.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200},{28,108,200},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Timer.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Timer.mos new file mode 100644 index 0000000000..9233345ff1 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Timer.mos @@ -0,0 +1,10 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Timer", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Timer1"); +createPlot(id=1, position={15, 15, 750, 1200}, y={"noThr.u"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=1, position={15, 15, 750, 1200}, y={"noThr.y", "noThr.t"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=1, position={15, 15, 750, 1200}, y={"noThr.passed"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=2, position={775, 15, 750, 1200}, y={"thrTim.u"}, range={0.0, 5.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=2, position={775, 15, 750, 1200}, y={"thrTim.y", "thrTim.t"}, range={0.0, 5.0, -0.5, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=2, position={775, 15, 750, 1200}, y={"thrTim.passed"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=3, position={1535, 15, 750, 1200}, y={"thrTim1.u"}, range={0.0, 5.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=3, position={1535, 15, 750, 1200}, y={"thrTim1.y", "thrTim1.t"}, range={0.0, 5.0, -0.5, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=3, position={1535, 15, 750, 1200}, y={"thrTim1.passed"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mos new file mode 100644 index 0000000000..c092192fb8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mos @@ -0,0 +1,11 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.TimerAccumulating", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="AccTim"); +createPlot(id=1, position={15, 15, 800, 1200}, y={"noThr.u"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"noThr.y"}, range={0.0, 5.0, -2.0, 4.0}, grid=true, subPlot=2, colors={{28,108,200}}, displayUnits={"s"}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"thrTim.u", "thrTim.passed"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"thrTim.y", "thrTim.t"}, range={0.0, 5.0, -2.0, 4.0}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"noThrWitRes.u", "noThrWitRes.reset"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"noThrWitRes.y"}, range={0.0, 5.0, -1.0, 3.0}, grid=true, subPlot=2, colors={{28,108,200}}, displayUnits={"s"}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"thrTimWitRes.u", "thrTimWitRes.reset", "thrTimWitRes.passed"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"thrTimWitRes.y", "thrTimWitRes.t"}, range={0.0, 5.0, -1.0, 3.0}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); + + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mos new file mode 100644 index 0000000000..c80a16108b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mos @@ -0,0 +1,13 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.TimerAccumulatingNegativeStartTime", startTime=-10, stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="AccTimNegSta"); +createPlot(id=1, position={15, 15, 800, 1200}, y={"noThr.u"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"noThr.y", "noThr.t"}, range={-10.0, 5.0, -2.0, 6.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"thrTim.u", "thrTim.passed"}, range={-10.0, 5.0, -1.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}); +createPlot(id=1, position={15, 15, 800, 1200}, y={"thrTim.y", "thrTim.t"}, range={-10.0, 5.0, -5.0, 10.0}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"noThrWitRes.u", "noThrWitRes.reset"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {28,108,200}}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"noThrWitRes.y", "noThrWitRes.t"}, range={-10.0, 5.0, -1.0, 3.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"thrTimWitRes.u", "thrTimWitRes.reset", "thrTimWitRes.passed"}, range={-10.0, 5.0, -1.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}, {28,108,200}}); +createPlot(id=2, position={825, 15, 800, 1200}, y={"thrTimWitRes.y", "thrTimWitRes.t"}, range={-10.0, 5.0, -2.0, 4.0}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); + + + + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mos new file mode 100644 index 0000000000..1715c61fc8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mos @@ -0,0 +1,8 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.TimerNegativeStartTime", startTime=-10, stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="NegStaTim"); + +createPlot(id=1, position={15, 15, 1000, 1200}, y={"noThr.u"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=1, position={15, 15, 1000, 1200}, y={"noThr.y", "noThr.t"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=1, position={15, 15, 1000, 1200}, y={"noThr.passed"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=2, position={1025, 15, 1000, 1200}, y={"thrTim.u"}, range={-10.0, 5.0, -0.2, 1.2}, grid=true, subPlot=1, colors={{28,108,200}}); +createPlot(id=2, position={1025, 15, 1000, 1200}, y={"thrTim.y", "thrTim.t"}, range={-10.0, 5.0, -0.5, 2.0}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, displayUnits={"s", "s"}); +createPlot(id=2, position={1025, 15, 1000, 1200}, y={"thrTim.passed"}, range={-10.0, 5.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Toggle.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Toggle.mos new file mode 100644 index 0000000000..fe3d90fbf8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Toggle.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Toggle", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Toggle1"); +createPlot(id=1, position={10, 10, 550, 800}, y={"falCleTruIni.u","falCleTruIni.clr","falCleTruIni.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=1, position={10, 10, 550, 800}, y={"falCleFalIni.u","falCleFalIni.clr","falCleFalIni.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=2, position={570, 10, 550, 800}, y={"truCleTruIni.u","truCleTruIni.clr","truCleTruIni.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=2, position={570, 10, 550, 800}, y={"truCleFalIni.u","truCleFalIni.clr","truCleFalIni.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=3, position={1130, 10, 550, 800}, y={"swiCleInp.u","swiCleInp.clr","swiCleInp.y"}, subPlot=1, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); +createPlot(id=3, position={1130, 10, 550, 800}, y={"swiCleInp1.u","swiCleInp1.clr","swiCleInp1.y"}, subPlot=2, range={0.0, 10.0, -3.5, 3.5}, grid=true, autoscale=false, colors={{238,46,47},{238,46,47},{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueDelay.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueDelay.mos new file mode 100644 index 0000000000..7858312534 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueDelay.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.TrueDelay", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="TrueDelay1"); +createPlot(id=1, subPlot = 1, position={15, 10, 1087, 700}, y={"onDelay0.u", "onDelay0.y", "onDelay1.y", "onDelay2.y", "onDelay3.y", "onDelay4.y", "onDelay5.y","onDelay6.y","onDelay7.y"}, range={0.0, 5.0, -0.1, 1.1}, grid=true, colors={{238,46,47}, {28,108,200}, {28,108,200}, {28,108,200}, {0,140,72}, {217,67,180}, {0,0,0}, {217,67,180}, {0,0,0}}); +createPlot(id=1, subPlot = 2, position={15, 10, 1087, 700}, y={"onDelay00.u", "onDelay00.y", "onDelay11.y", "onDelay22.y", "onDelay33.y", "onDelay44.y", "onDelay55.y","onDelay66.y","onDelay77.y"}, range={0.0, 5.0, -0.1, 1.1}, grid=true, colors={{238,46,47}, {28,108,200}, {28,108,200}, {28,108,200}, {0,140,72}, {217,67,180}, {0,0,0}, {217,67,180}, {0,0,0}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mos new file mode 100644 index 0000000000..7d2ea6765b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mos @@ -0,0 +1,10 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.TrueFalseHold", stopTime=7200.0, method="Cvode", tolerance=1e-06, resultFile="TrueFalseHold1"); +createPlot(id=1, position={15, 10, 817, 263}, y={"truFalHol.u", "truFalHol.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{238,46,47}, {28,108,200}}); +createPlot(id=2, position={18, 310, 810, 253}, y={"truFalHol1.u", "truFalHol1.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=3, position={20, 599, 815, 247}, y={"truFalHol2.u", "truFalHol2.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=4, position={25, 903, 810, 299}, y={"truFalHol3.u", "truFalHol3.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=5, position={872, 14, 707, 256}, y={"truFalHol4.u", "truFalHol4.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=6, position={869, 309, 714, 245}, y={"truFalHol5.u", "truFalHol5.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=7, position={879, 604, 720, 245}, y={"truFalHol6.u", "truFalHol6.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=8, position={874, 898, 750, 308}, y={"truFalHol7.u", "truFalHol7.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=9, position={25, 1245, 817, 266}, y={"truFalHol8.u", "truFalHol8.y"}, range={0.0, 7500.0, -0.2, 1.2}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulse.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulse.mos new file mode 100644 index 0000000000..34ce698da0 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulse.mos @@ -0,0 +1,16 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.VariablePulse", stopTime=3600.0, method="Cvode", tolerance=1e-06, resultFile="VariablePulse"); +createPlot(id=1, position={10, 10, 900, 1400}, y={"fal.u"}, range={0.0, 3600.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 900, 1400}, y={"fal.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 900, 1400}, y={"tru.u"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 900, 1400}, y={"tru.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={10, 10, 900, 1400}, y={"conTru.u"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=5, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={10, 10, 900, 1400}, y={"conTru.y"}, range={0.0, 3600.0, -2.0, 2.0}, autoscale=false, grid=true, subPlot=6, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={920, 10, 900, 1400}, y={"truFal.u"}, range={0.0, 3600.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={920, 10, 900, 1400}, y={"truFal.y"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={920, 10, 900, 1400}, y={"falTru.u"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={920, 10, 900, 1400}, y={"falTru.y"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={920, 10, 900, 1400}, y={"falTru1.u"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=5, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={920, 10, 900, 1400}, y={"falTru1.y"}, range={0.0, 3600.0, -0.5, 1.5}, autoscale=false, grid=true, subPlot=6, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1833, 11, 884, 622}, y={"conChaWid.u"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=3, position={1833, 11, 884, 622}, y={"conChaWid.y"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mos new file mode 100644 index 0000000000..3e3c088f29 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.VariablePulseMinHold", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="VariablePulse"); +createPlot(id=1, position={21, 13, 1198, 950}, y={"conChaWid.u"}, range={0.0, 5.0, 0.48, 0.62}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={21, 13, 1198, 950}, y={"conChaWid.y"}, range={0.0, 5.0, -0.2, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Xor.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Xor.mos new file mode 100644 index 0000000000..9d937c108a --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Xor.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Logical.Validation.Xor", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Xor1"); +createPlot(id=1, position={15, 10, 900, 420}, y={"xor1.u1","xor1.u2","xor1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mos new file mode 100644 index 0000000000..33b9a538ef --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Psychrometrics.Validation.DewPoint_TDryBulPhi", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="DewPoint_TDryBulPhi1"); +createPlot(id=1, position={13, 9, 900, 1100}, y={"dewBulPhi.TDryBul"}, range={0.0, 1.0, 260.0, 340.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=1, position={13, 9, 900, 1100}, y={"dewBulPhi.phi"}, range={0.0, 1.0, -0.2, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=1, position={13, 9, 900, 1100}, y={"dewBulPhi.TDewPoi"}, range={0.0, 1.0, 200.0, 320.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=2, position={927, 7, 860, 1100}, y={"dewBulPhi1.TDryBul"}, range={0.0, 1.0, 270.0, 320.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=2, position={927, 7, 860, 1100}, y={"dewBulPhi1.phi"}, range={0.0, 1.0, 0.4, 0.46}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s", displayUnits={"1"}); +createPlot(id=2, position={927, 7, 860, 1100}, y={"dewBulPhi1.TDewPoi"}, range={0.0, 1.0, 260.0, 300.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mos new file mode 100644 index 0000000000..96fde87f8d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Psychrometrics.Validation.SpecificEnthalpy_TDryBulPhi", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="SpecificEnthalpy_TDryBulPhi1"); +createPlot(id=1, position={15, 10, 1000, 700}, subPlot=1, y={"hBulPhi.h"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={15, 10, 1000, 700}, subPlot=2, y={"phi.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mos new file mode 100644 index 0000000000..0963594408 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Psychrometrics.Validation.WetBulb_TDryBulPhi", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="WetBulb_TDryBulPhi1"); +createPlot(id=1, position={9, 15, 820, 1106}, y={"wetBulPhi.TDryBul"}, range={0.0, 1.0, 260.0, 340.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=1, position={9, 15, 820, 1106}, y={"wetBulPhi.phi"}, range={0.0, 1.0, 0.0, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={9, 15, 820, 1106}, y={"wetBulPhi.TWetBul"}, range={0.0, 1.0, 280.0, 305.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=2, position={839, 15, 758, 1104}, y={"wetBulPhi1.TDryBul"}, range={0.0, 1.0, 270.0, 320.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); +createPlot(id=2, position={839, 15, 758, 1104}, y={"wetBulPhi1.phi"}, range={0.0, 1.0, 0.5, 0.7}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={839, 15, 758, 1104}, y={"wetBulPhi1.TWetBul"}, range={0.0, 1.0, 260.0, 310.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s", displayUnits={"K"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos new file mode 100644 index 0000000000..1469097f65 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths", startTime=172800, tolerance=1e-6, stopTime=345600, method="Cvode", resultFile="CalendarTimeMonths1"); +createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.weekDay"}, range={170000.0, 350000.0, 0.0, 10.0}, grid=true, subPlot=4, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.hour"}, range={170000.0, 350000.0, -10.0, 30.0}, grid=true, subPlot=5, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.minute"}, range={170000.0, 350000.0, -50.0, 100.0}, grid=true, subPlot=6, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos new file mode 100644 index 0000000000..99ef8f6efd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsMinus", startTime=172799, tolerance=1e-6, stopTime=345599, method="Cvode", resultFile="CalendarTimeMonthsMinus1"); +createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.weekDay"}, range={170000.0, 350000.0, 0.0, 10.0}, grid=true, subPlot=4, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.hour"}, range={170000.0, 350000.0, -10.0, 30.0}, grid=true, subPlot=5, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.minute"}, range={170000.0, 350000.0, -50.0, 100.0}, grid=true, subPlot=6, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos new file mode 100644 index 0000000000..c08fcea2c0 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonthsPlus", startTime=172801, tolerance=1e-6, stopTime=345601, method="Cvode", resultFile="CalendarTimeMonthsPlus1"); +createPlot(id=1, position={35, 30, 1021, 971}, y={"calTim.year"}, range={170000.0, 350000.0, 1800.0, 2400.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.month"}, range={170000.0, 350000.0, 0.8, 1.2}, grid=true, subPlot=2, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.day"}, range={170000.0, 350000.0, 2.0, 6.0}, grid=true, subPlot=3, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.weekDay"}, range={170000.0, 350000.0, 0.0, 10.0}, grid=true, subPlot=4, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 159}, y={"calTim.hour"}, range={170000.0, 350000.0, -10.0, 30.0}, grid=true, subPlot=5, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 1021, 158}, y={"calTim.minute"}, range={170000.0, 350000.0, -50.0, 100.0}, grid=true, subPlot=6, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mos new file mode 100644 index 0000000000..e72d69b9bc --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CivilTime", startTime=-1, tolerance=1e-6, stopTime=1, method="Cvode", resultFile="StandardTime1"); +createPlot(id=1, position={15, 10, 482, 336}, y={"civTim.y"}, range={-1.0, 1.0, -1.5, 1.5}, grid=true, leftTitleType=1, bottomTitleType=1, colors={{0,0,255}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos new file mode 100644 index 0000000000..f45a7589ad --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.Constant", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Constant1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"con.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos new file mode 100644 index 0000000000..f7eb901068 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.Pulse", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Pulse1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"pulse.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos new file mode 100644 index 0000000000..5b168a75ab --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.Ramp", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="Ramp1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"ram.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos new file mode 100644 index 0000000000..eb71b31e1b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.Sin", stopTime=130.0, method="Cvode", tolerance=1e-06, resultFile="Sin"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sin.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos new file mode 100644 index 0000000000..b3df73b658 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable", startTime=0, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="TimeTable1"); +createPlot(id=1, position={15, 10, 1936, 1264}, y={"timTabLin.y[1]", "timTabLinCon.y[1]", "timTabCon.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}, {238,46,47}}, patterns={LinePattern.Solid, LinePattern.DashDot, LinePattern.Solid}, timeUnit="d"); +createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinHol.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{0,0,255}}, timeUnit="d"); +createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinDer.y[1]"}, range={-1.6, 2.0, -4.0, 2.0}, grid=true, subPlot=3, colors={{0,0,255}}, timeUnit="d"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos new file mode 100644 index 0000000000..f6d1f899a3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.TimeTableNegativeStartTime", startTime=-129600, tolerance=1e-6, stopTime=172800, method="Cvode", resultFile="NegativeStartTime1"); +createPlot(id=1, position={15, 10, 1936, 1264}, y={"timTabLin.y[1]", "timTabLinCon.y[1]", "timTabCon.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, colors={{0,0,255}, {0,140,72}, {238,46,47}}, patterns={LinePattern.Solid, LinePattern.DashDot, LinePattern.Solid}, timeUnit="d"); +createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinHol.y[1]"}, range={-1.6, 2.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{0,0,255}}, timeUnit="d"); +createPlot(id=1, position={15, 10, 1936, 418}, y={"timTabLinDer.y[1]"}, range={-1.6, 2.0, -4.0, 2.0}, grid=true, subPlot=3, colors={{0,0,255}}, timeUnit="d"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos new file mode 100644 index 0000000000..e3cd73b97f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Abs", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Abs1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"abs1.u", "abs1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{28,108,200}, {238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos new file mode 100644 index 0000000000..d0360ff6e8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Acos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Acos"); +createPlot(id=1, position={15, 10, 590, 420}, y={"arcCos.u", "arcCos.y"}, range={0.0, 1.0, -2, 2}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos new file mode 100644 index 0000000000..ada97a4b64 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Add", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Add1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"add1.u1", "add1.u2", "add1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos new file mode 100644 index 0000000000..648a147861 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.AddParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="AddParameter2"); +createPlot(id=1, position={15, 10, 590, 420}, y={"addPar.u", "addPar.y"}, range={0.0, 1.0, -4, 5}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos new file mode 100644 index 0000000000..d5ed4627b7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Asin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Asin"); +createPlot(id=1, position={15, 10, 590, 420}, y={"arcSin.u", "arcSin.y"}, range={0.0, 1.0, -2, 2}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos new file mode 100644 index 0000000000..82cb3e86cb --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Atan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"atan1.u", "atan1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos new file mode 100644 index 0000000000..ecef677da8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Atan2", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Atan2_1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"atan2_1.u1", "atan2_1.u2", "atan2_1.y"}, range={0.0, 1.0, -2.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos new file mode 100644 index 0000000000..a3003efa7f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Average", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Average1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"avg1.u1", "avg1.u2", "avg1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos new file mode 100644 index 0000000000..98d92807e3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Cos", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Cos1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"cos1.u", "cos1.y"}, range={0.0, 1.0, -1.2, 1.4}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos new file mode 100644 index 0000000000..7a13e21734 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Derivative", stopTime=10, method="Cvode", tolerance=1e-07, resultFile="Derivative"); +createPlot(id=1, position={15, 15, 761, 628}, y={"der1.y", "intWitRes.u", "der2.y"}, range={0.0, 20.0, -3.0, 3.0}, grid=true, subPlot=102, colors={{238,46,47}, {28,108,200}, {0,140,72}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 761, 628}, y={"der1.T"}, range={0.0, 20.0, 0.0, 0.12}, grid=true, subPlot=101, colors={{28,108,200}}, timeUnit="s"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos new file mode 100644 index 0000000000..14d8b733d4 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Divide", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Divide1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"div1.u1", "div1.u2", "div1.y"}, range={0.0, 1.0, -2.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos new file mode 100644 index 0000000000..f795e6d050 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Exp", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Exp1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"Exp1.u", "Exp1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos new file mode 100644 index 0000000000..9b8e2fda53 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Greater", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Greater1"); +createPlot(id=1, position={15, 15, 742, 472}, y={"gre.u1", "gre.u2"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 742, 472}, y={"gre.y", "greHys.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos new file mode 100644 index 0000000000..52d1e9de5b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.GreaterThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="GreaterThreshold1"); +createPlot(id=1, position={15, 15, 742, 472}, y={"gre.u", "gre.t"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 742, 472}, y={"gre.y", "greHys.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos new file mode 100644 index 0000000000..ffdd083d12 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Hysteresis", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="Hysteresis1"); +createPlot(id=1, position={15, 10, 900, 420}, subPlot=1, y={"hysteresis.u", "hysteresis.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); +createPlot(id=1, position={15, 10, 900, 420}, subPlot=2, y={"hysteresis1.u", "hysteresis1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); +createPlot(id=1, position={15, 10, 900, 420}, subPlot=3, y={"hysteresis2.u", "hysteresis2.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos new file mode 100644 index 0000000000..af4c7bc128 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.IntegratorWithReset", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegratorWithReset1"); +createPlot(id=1, position={35, 30, 586, 850}, y={"cons.y"}, range={0.0, 1.0, 8.8, 11.2}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={35, 30, 586, 850}, y={"booleanPulse.y"}, range={0.0, 1.0, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}); +createPlot(id=2, position={645, 30, 725, 850}, y={"intDef.y_start", "intDef.y", "intDef.y_reset_in"}, range={0.0, 1.0, -5.0, 15.0}, grid=true, colors={{28,108,200}, {0,140,72},{238,46,47}}); +createPlot(id=2, position={645, 30, 725, 850}, y={"intWitRes1.y_start", "intWitRes1.y", "intWitRes1.y_reset_in"}, range={0.0, 1.0, 1.0, 6.0}, grid=true, subPlot=2, colors={{28,108,200}, {0,140,72}, {238,46,47}}); +createPlot(id=2, position={645, 30, 725, 850}, y={"intWitRes2.y_start", "intWitRes2.y", "intWitRes2.y_reset_in"}, range={0.0, 1.0, -6.0, -1.0}, grid=true, subPlot=3, colors={{28,108,200}, {0,140,72}, {238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos new file mode 100644 index 0000000000..94e8832bb3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Less", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="Less1"); +createPlot(id=1, position={15, 15, 742, 472}, y={"les.u1", "les.u2"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 742, 472}, y={"les.y", "lesHys.y"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos new file mode 100644 index 0000000000..b8063d99bc --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.LessThreshold", stopTime=10.0, method="Cvode", tolerance=1e-06, resultFile="LessThreshold1"); +createPlot(id=1, position={15, 15, 742, 472}, y={"les.u", "les.t"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 742, 472}, y={"les.y", "lesHys.y"}, range={0.0, 5.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos new file mode 100644 index 0000000000..892c3c9410 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.LimitSlewRate", method="Cvode", stopTime=480, tolerance=1e-06, resultFile="LimitSlewRate"); +createPlot(id=1, position={15, 10, 730, 420}, y={"sleRatLim.u", "sleRatLim.y"}, range={0.0, 5.0, -2.0, 2.0}, grid=true, colors={{238,46,47},{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos new file mode 100644 index 0000000000..571fa90d72 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Limiter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Limiter1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"limiter1.u", "limiter1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos new file mode 100644 index 0000000000..649395e910 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Line", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Line1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"line1.u", "line1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); +createPlot(id=1, position={15, 10, 590, 420}, y={"line1.u", "line1.y", "line2.y", "line3.y"}, range={0.0, 1.0, -1.0, 4.0}, grid=true, colors={{238,46,47}, {28,108,200}, {0,140,72}, {217,67,180}}); + + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos new file mode 100644 index 0000000000..ba9a0d72a0 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Log", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"log1.u", "log1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos new file mode 100644 index 0000000000..4995515cf9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Log10", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Log10_1"); + +createPlot(id=1, position={15, 10, 590, 420}, y={"log10_1.u", "log10_1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos new file mode 100644 index 0000000000..25ee2b5ec3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos @@ -0,0 +1,7 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MatrixGain", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixGain"); + +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matGai.y[1]", "matGai.y[2]", "matGai.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matGai.u[1]", "matGai.u[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{0,140,72}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=3, y={"matGai1.y[1]", "matGai1.y[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=4, y={"matGai1.u[1]", "matGai1.u[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{0,140,72}}); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos new file mode 100644 index 0000000000..a7a53a10dc --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MatrixMax", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMax"); + +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matMax.y[1]", "matMax.y[2]", "matMax.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matMax1.y[1]", "matMax1.y[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=3, y={"matMax2.y[1]", "matMax2.y[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos new file mode 100644 index 0000000000..4cb7287592 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MatrixMin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MatrixMin"); + +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=1, y={"matMin.y[1]", "matMin.y[2]", "matMin.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=2, y={"matMin1.y[1]", "matMin1.y[2]", "matMin1.y[3]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}, {0,0,127}}); +createPlot(id=1, position={10, 15, 1000, 750}, subPlot=3, y={"matMin2.y[1]", "matMin2.y[2]"}, range={0.0, 0.05, -0.2, 0.6}, grid=true, colors={{28,108,200},{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos new file mode 100644 index 0000000000..9ec941c843 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Max", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Max1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"max1.u1", "max1.u2", "max1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos new file mode 100644 index 0000000000..c4ac352c17 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Min", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Min1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"min1.u1", "min1.u2", "min1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos new file mode 100644 index 0000000000..168e60dcb2 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Modulo", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Modulo1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"mod1.u1", "mod1.u2", "mod1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos new file mode 100644 index 0000000000..f9024191fa --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MovingAverage", stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage1"); +createPlot(id=1, position={15, 10, 1300, 400}, subPlot=1, y={"sinInpNoDel.y","movAve1.y","movAve2.y","movAve3.y","movAve4.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); +createPlot(id=2, position={15, 430, 600, 400}, subPlot=1, y={"sinInp50sDel.y","movAve6.y","movAve7.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); +createPlot(id=3, position={640, 430, 600, 400}, subPlot=1, y={"sinInp100sDel.y","movAve8.y","movAve9.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos new file mode 100644 index 0000000000..b3682de0fb --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart", startTime=100.0, stopTime=900.0, method="Cvode", tolerance=1e-06, resultFile="MovingAverage_nonZeroStart1"); +createPlot(id=1, position={15, 10, 1300, 400}, subPlot=1, y={"sinInpNoDel.y","movAve1.y","movAve2.y","movAve3.y","movAve4.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); +createPlot(id=2, position={15, 430, 600, 400}, subPlot=1, y={"sinInp50sDel.y","movAve6.y","movAve7.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); +createPlot(id=3, position={640, 430, 600, 400}, subPlot=1, y={"sinInp100sDel.y","movAve8.y","movAve9.y"}, range={0.0, 5.0, 0, 1}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos new file mode 100644 index 0000000000..61a44a012b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MultiMax", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMax1"); +createPlot(id=1, position={15, 10, 600, 420}, y={"con[1].y","con[2].y","con[3].y","con[4].y","con[5].y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); +createPlot(id=2, position={630, 10, 600, 420}, y={"maxVal.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos new file mode 100644 index 0000000000..d4ea7aa7a7 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MultiMin", stopTime=1.0, method="Cvode", tolerance=1e-06, resultFile="MultiMin1"); +createPlot(id=1, position={15, 10, 600, 420}, y={"con[1].y","con[2].y","con[3].y","con[4].y","con[5].y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200},{0,140,72},{28,108,200}}); +createPlot(id=2, position={630, 10, 600, 420}, y={"minVal.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos new file mode 100644 index 0000000000..eb7d759435 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MultiSum", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="MultiSum_1"); +createPlot(id=1, position={15, 10, 600, 350}, y={"mulSum_1.u[1]", "mulSum_1.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {28,108,200}}); +createPlot(id=2, position={15, 400, 600, 350}, y={"mulSum_2.u[1]","mulSum_2.u[2]", "mulSum_2.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72},{238,46,47},{28,108,200}}); +createPlot(id=3, position={630, 10, 600, 750}, y={"mulSum_5.u[1]", "mulSum_5.u[2]", "mulSum_5.u[3]", "mulSum_5.u[4]", "mulSum_5.u[5]","mulSum_5.y"}, range={0.0, 1.0, -5, 6}, grid=true, colors={{0,140,72}, {238,46,47}, {217,67,180}, {238,46,47}, {217,67,180},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos new file mode 100644 index 0000000000..d6cb278be8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Multiply", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Multiply1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"product1.u1", "product1.u2", "product1.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos new file mode 100644 index 0000000000..a1dad689da --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.MultiplyByParameter", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Gain1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"gain1.u", "gain1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos new file mode 100644 index 0000000000..ed8dfef357 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PID", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="PID1"); +createPlot(id=1, position={15, 10, 900, 700}, y={"limPID.u_s", "limPID.u_m"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=1, position={15, 10, 900, 700}, y={"limPID.u_s", "limPID.y", "noLimPID.y"}, range={0.0, 1.0, -20.0, 10.0}, grid=true, subPlot=102, colors={{238,46,47}, {0,140,72}, {217,67,180}}); +createPlot(id=1, position={15, 10, 900, 700}, y={"limP.y", "limPI.y", "limPD.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=103, colors={{238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos new file mode 100644 index 0000000000..3bb35f8a0c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PIDInitialDerivativeOutput", tolerance=1e-06, stopTime=0.2, resultFile="PIDInitialDerivativeOutput"); +createPlot(id=1, position={31, 124, 592, 372}, y={"limPID.y", "limPD.y", "limPID.D.y", "limPD.D.y"}, range={0.0, 1.0, -0.2, 0.6}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {0,0,0}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos new file mode 100644 index 0000000000..81d0c5059b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PIDInitialState", tolerance=1e-06, resultFile="PIDInitialState"); +createPlot(id=1, position={35, 35, 926, 623}, y={"limPID.I.y", "limPID.D.y", "limPI.I.y", "limPID.D.u"}, range={0.0, 1.0, -0.6, 0.5}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos new file mode 100644 index 0000000000..90094594bf --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PIDScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDScale"); +createPlot(id=2, position={577, 61, 1112, 827}, y={"pidSca.y", "pidNoSca.y"}, range={0.0, 100.0, -1.5, 1.5}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={577, 61, 1112, 827}, y={"pla1.y", "pla2.y", "pidSca.u_s"}, range={0.0, 100.0, -500.0, 1500.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos new file mode 100644 index 0000000000..dfed06121a --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PIDWithReset", stopTime=10, method="Cvode", tolerance=1e-06, resultFile="CDL_PIDWithReset"); +createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIDPar.u_s", "limPIDPar.u_m", "limPIDPar.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIDInp.u_s", "limPIDInp.u_m", "limPIDInp.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIPar.u_s", "limPIPar.u_m", "limPIPar.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=1, position={35, 35, 800, 1027}, y={"limPIInp.u_s", "limPIInp.u_m", "limPIInp.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=4, colors={{28,108,200}, {238,46,47}, {0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos new file mode 100644 index 0000000000..2da903f1f5 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.PIDWithResetScale", method="CVode", stopTime=100, tolerance=1e-06, resultFile="PIDWithResetScale"); +createPlot(id=2, position={577, 61, 1454, 979}, y={"pidSca.y", "pidNoSca.y"}, range={0.0, 100.0, -2.0, 2.0}, grid=true, colors={{28,108,200}, {238,46,47}}); +createPlot(id=2, position={577, 61, 1454, 979}, y={"pla1.y", "pla2.y", "pidSca.u_s"}, range={0.0, 100.0, -500.0, 1500.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}}); +createPlot(id=2, position={577, 61, 1454, 979}, y={"pidSca.trigger"}, range={0.0, 100.0, -0.5, 1.5}, grid=true, subPlot=103, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos new file mode 100644 index 0000000000..60c8c6da60 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos @@ -0,0 +1,8 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Ramp", method="Cvode", tolerance=1e-06, stopTime=10.0, resultFile="rampUpDown"); +createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUp.u", "ramUp.y", "ramUp1.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s", displayUnits={"1", "1", "1"}); +createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUp.active"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUpDow.u", "ramUpDow.y"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=1, position={15, 15, 1034, 1198}, y={"ramUpDow.active"}, range={0.0, 10.0, -0.5, 1.5}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1059, 15, 1002, 1200}, y={"ramUpDow1.u", "ramUpDow1.y"}, range={0.0, 10.0, -0.1, 1.1}, grid=true, subPlot=1, colors={{28,108,200}, {238,46,47}}, timeUnit="s", displayUnits={"1", "1"}); +createPlot(id=2, position={1059, 15, 1002, 1200}, y={"ramUpDow1.active"}, range={0.0, 10.0, -0.1, 1.1}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos new file mode 100644 index 0000000000..5376e81072 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Round", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Round1"); +createPlot(id=1, position={15, 10, 1475, 1167}, y={"round1.u", "round1.y"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, colors={{238,46,47}, {28,108,200}}); +createPlot(id=1, position={15, 10, 1475, 385}, y={"round2.u", "round2.y"}, range={0.0, 1.0, -0.5, 0.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 10, 1475, 385}, y={"round3.u", "round3.y"}, range={0.0, 1.0, -50.0, 50.0}, grid=true, subPlot=3, colors={{28,108,200}, {238,46,47}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos new file mode 100644 index 0000000000..fe76afad53 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Sin", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sin1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sin1.u", "sin1.y"}, range={0.0, 1.0, -2, 7.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos new file mode 100644 index 0000000000..42334ec0d9 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos @@ -0,0 +1,8 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Sort", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sort1"); +createPlot(id=1, position={24, 14, 959, 865}, y={"sorAsc.u[1]", "sorAsc.u[2]", "sorAsc.u[3]", "sorAsc.u[4]", "sorAsc.u[5]"}, range={0.0, 1.0, -4.0, 6.0}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="s"); +createPlot(id=1, position={24, 14, 959, 865}, y={"sorAsc.y[1]", "sorAsc.y[2]", "sorAsc.y[3]", "sorAsc.y[4]", "sorAsc.y[5]"}, range={0.0, 1.0, -4.0, 6.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="s"); +createPlot(id=1, position={24, 14, 959, 865}, y={"sorDes.y[1]", "sorDes.y[2]", "sorDes.y[3]", "sorDes.y[4]", "sorDes.y[5]"}, range={0.0, 1.0, -6.0, 6.0}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="s"); +createPlot(id=2, position={1001, 330, 1147, 549}, y={"sorAsc.yIdx[1]", "sorAsc.yIdx[2]", "sorAsc.yIdx[3]", "sorAsc.yIdx[4]", "sorAsc.yIdx[5]"}, range={0.0, 1.0, 0.0, 6.0}, grid=true, subPlot=101, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={1001, 330, 1147, 549}, y={"sorDes.yIdx[1]", "sorDes.yIdx[2]", "sorDes.yIdx[3]", "sorDes.yIdx[4]", "sorDes.yIdx[5]"}, range={0.0, 1.0, 0.0, 6.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); + + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos new file mode 100644 index 0000000000..21d064bb5d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Sqrt", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Sqrt1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sqrt1.u", "sqrt1.y"}, range={0.0, 1.0, -1.0, 8.0}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos new file mode 100644 index 0000000000..1327da28af --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Subtract", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="sub1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"sub.u1", "sub.u2", "sub.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos new file mode 100644 index 0000000000..138dbf3c80 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Switch", stopTime=5.0, method="Cvode", tolerance=1e-06, resultFile="ConSwitch"); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=1, y={"switch1.u1","switch1.u2","switch1.u3"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); +createPlot(id=1, position={15, 10, 1000, 600}, subPlot=2, y={"switch1.y"}, range={0.0, 5.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos new file mode 100644 index 0000000000..d3ddb4e1cb --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Reals.Validation.Tan", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Tan1"); +createPlot(id=1, position={15, 10, 590, 420}, y={"tan1.u", "tan1.y"}, range={0.0, 1.0, -15, 15}, grid=true, colors={{238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mos new file mode 100644 index 0000000000..1b486e16f8 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.BooleanExtractSignal", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="BooleanExtractSignal"); +createPlot(id=1, position={15, 15, 704, 972}, y={"extBooSig.u[1]", "extBooSig.u[2]", "extBooSig.u[3]", "extBooSig.u[4]"}, range={0.0, 1.0, -0.1, 1.1}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=2, position={729, 17, 658, 980}, y={"extBooSig.y[1]", "extBooSig.y[2]", "extBooSig.y[3]"}, range={0.0, 1.0, -0.1, 1.1}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1407, 17, 744, 982}, y={"extBooSig1.y[1]", "extBooSig1.y[2]", "extBooSig1.y[3]", "extBooSig1.y[4]", "extBooSig1.y[5]"}, range={0.0, 1.0, -0.1, 1.1}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mos new file mode 100644 index 0000000000..ad9839d4e3 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mos @@ -0,0 +1,17 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.BooleanExtractor", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="BooleanExtractor"); + +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndBoo.u[1]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndBoo.u[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndBoo.u[3]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndBoo.u[4]"}, range={0.0, 1.0, 3.0, 5.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndBoo.index"}, range={0.0, 1.0, 1.5, 2.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndBoo.y"}, range={0.0, 1.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndBoo1.index"}, range={0.0, 1.0, 5.0, 7.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndBoo1.y"}, range={0.0, 1.0, 3.5, 4.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndBoo2.index"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndBoo2.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndBoo3.index"}, range={0.0, 1.0, -2.0, 3.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndBoo3.y"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndBoo4.index"}, range={0.0, 1.0, -1.0, 4.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndBoo4.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mos new file mode 100644 index 0000000000..98082d08dd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.BooleanScalarReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="BooleanScalarReplicator"); +createPlot(id=1, position={15, 10, 500, 420}, y={"booRep.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"booRep.y[1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"booRep.y[2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"booRep.y[3]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mos new file mode 100644 index 0000000000..acc52ac599 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.BooleanVectorFilter", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="BooleanVectorFilter"); +createPlot(id=1, position={533, 39, 592, 372}, y={"booFil.u[1]", "booFil.u[2]", "booFil.u[3]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={533, 39, 592, 372}, y={"booFil.y[1]", "booFil.y[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mos new file mode 100644 index 0000000000..fe3e803d24 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.BooleanVectorReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="BooleanVectorReplicator"); +createPlot(id=1, position={15, 10, 500, 420}, y={"booRep.u[1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"booRep.y[1, 1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"booRep.y[2, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"booRep.y[3, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mos new file mode 100644 index 0000000000..2ec496a269 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mos @@ -0,0 +1,14 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.IntegerExtractSignal", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegerExtractSignal"); +createPlot(id=1, position={15, 15, 802, 1132}, y={"extIntSig.u[1]"}, range={0.0, 1.0, 0.8, 1.2}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 802, 1132}, y={"extIntSig.u[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 802, 1132}, y={"extIntSig.u[3]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 802, 1132}, y={"extIntSig.u[4]"}, range={0.0, 1.0, 3.5, 4.5}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={827, 17, 744, 1134}, y={"extIntSig.y[1]"}, range={0.0, 1.0, -1.5, 1.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={827, 17, 744, 1134}, y={"extIntSig.y[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={827, 17, 744, 1134}, y={"extIntSig.y[3]"}, range={0.0, 1.0, 3.4, 4.6}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1583, 17, 710, 1132}, y={"extIntSig1.y[1]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1583, 17, 710, 1132}, y={"extIntSig1.y[2]"}, range={0.0, 1.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1583, 17, 710, 1132}, y={"extIntSig1.y[3]"}, range={0.0, 1.0, 3.5, 4.5}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1583, 17, 710, 1132}, y={"extIntSig1.y[4]"}, range={0.0, 1.0, -1.0, 2.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1583, 17, 710, 1132}, y={"extIntSig1.y[5]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=5, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mos new file mode 100644 index 0000000000..1dc36c3099 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mos @@ -0,0 +1,16 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.IntegerExtractor", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegerExtractor"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndInt.u[1]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndInt.u[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndInt.u[3]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndInt.u[4]"}, range={0.0, 1.0, 3.0, 5.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndInt.index"}, range={0.0, 1.0, 1.5, 2.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndInt.y"}, range={0.0, 1.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndInt1.index"}, range={0.0, 1.0, 5.0, 7.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndInt1.y"}, range={0.0, 1.0, 3.5, 4.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndInt2.index"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndInt2.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndInt3.index"}, range={0.0, 1.0, -2.0, 3.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndInt3.y"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndInt4.index"}, range={0.0, 1.0, -1.0, 4.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndInt4.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mos new file mode 100644 index 0000000000..9de9fefbad --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.IntegerScalarReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegerScalarReplicator"); +createPlot(id=1, position={15, 10, 500, 750}, subPlot=1, y={"ram.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={15, 10, 500, 750}, subPlot=2, y={"reaToInt.y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"intRep.y[1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"intRep.y[2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"intRep.y[3]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mos new file mode 100644 index 0000000000..9070f44105 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.IntegerVectorFilter", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegerVectorFilter"); +createPlot(id=1, position={144, 30, 592, 372}, y={"intFil.u[1]", "intFil.u[2]", "intFil.u[3]"}, range={0.0, 1.0, 0.0, 4.0}, grid=true, colors={{28,108,200}, {28,108,200}, {28,108,200}}, timeUnit="s"); +createPlot(id=1, position={144, 30, 592, 372}, y={"intFil.y[1]", "intFil.y[2]"}, range={0.0, 1.0, 0.0, 4.0}, grid=true, subPlot=102, colors={{28,108,200}, {28,108,200}}, timeUnit="s"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mos new file mode 100644 index 0000000000..ce3d08d903 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.IntegerVectorReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="IntegerVectorReplicator"); +createPlot(id=1, position={15, 10, 500, 750}, subPlot=1, y={"ram[1].y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={15, 10, 500, 750}, subPlot=2, y={"reaToInt[1].y"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"intRep.y[1, 1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"intRep.y[2, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"intRep.y[3, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mos new file mode 100644 index 0000000000..f5c9022353 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mos @@ -0,0 +1,16 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.RealExtractSignal", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="ExtractSignal1"); +createPlot(id=1, position={15, 10, 592, 1106}, y={"extSig.u[1]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 10, 592, 1106}, y={"extSig.u[2]"}, range={0.0, 1.0, -1.0, 1.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 10, 592, 1106}, y={"extSig.u[3]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 10, 592, 1106}, y={"extSig.u[4]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 10, 592, 1106}, y={"extSig.u[5]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=5, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={622, 12, 574, 1106}, y={"extSig.y[1]"}, range={0.0, 1.0, -4.0, 4.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={622, 12, 574, 1106}, y={"extSig.y[2]"}, range={0.0, 1.0, -0.2, 0.6}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={622, 12, 574, 1106}, y={"extSig.y[3]"}, range={0.0, 1.0, -3.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[1]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[2]"}, range={0.0, 1.0, -0.5, 1.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[3]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[4]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[5]"}, range={0.0, 1.0, -5.0, 5.0}, grid=true, subPlot=5, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={1207, 13, 660, 1104}, y={"extSig1.y[6]"}, range={0.0, 1.0, -1.0, 1.0}, grid=true, subPlot=6, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractor.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractor.mos new file mode 100644 index 0000000000..a76f4cbe0c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractor.mos @@ -0,0 +1,16 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.RealExtractor", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="ExtractIndSignal"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndSig.u[1]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndSig.u[2]"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndSig.u[3]"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=1, position={15, 15, 730, 1276}, y={"extIndSig.u[4]"}, range={0.0, 1.0, 3.0, 5.0}, grid=true, subPlot=4, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndSig.index"}, range={0.0, 1.0, 1.5, 2.5}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=2, position={757, 15, 678, 400}, y={"extIndSig.y"}, range={0.0, 1.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndSig1.index"}, range={0.0, 1.0, 5.0, 7.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=3, position={757, 449, 686, 406}, y={"extIndSig1.y"}, range={0.0, 1.0, 3.5, 4.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndSig2.index"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=4, position={755, 897, 694, 394}, y={"extIndSig2.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndSig3.index"}, range={0.0, 1.0, -2.0, 3.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=5, position={1455, 19, 832, 660}, y={"extIndSig3.y"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndSig4.index"}, range={0.0, 1.0, -1.0, 4.0}, grid=true, subPlot=1, colors={{28,108,200}}, timeUnit="s"); +createPlot(id=6, position={1459, 709, 830, 578}, y={"extIndSig4.y"}, range={0.0, 1.0, -2.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="s"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mos new file mode 100644 index 0000000000..3f4f56eb09 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.RealScalarReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="RealScalarReplicator"); +createPlot(id=1, position={15, 10, 500, 420}, y={"reaRep.u"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"reaRep.y[1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"reaRep.y[2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"reaRep.y[3]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mos new file mode 100644 index 0000000000..cc4c72e85e --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.RealVectorFilter", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="RealVectorFilter"); +createPlot(id=1, position={35, 35, 592, 372}, y={"reaFil.u[1]", "reaFil.u[2]", "reaFil.u[3]"}, range={0.0, 1.0, 0.0, 4.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}}, timeUnit="s"); +createPlot(id=1, position={35, 35, 592, 372}, y={"reaFil.y[1]", "reaFil.y[2]"}, range={0.0, 1.0, 0.0, 4.0}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}, timeUnit="s"); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mos new file mode 100644 index 0000000000..83416d24b1 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Routing.Validation.RealVectorReplicator", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="RealVectorReplicator"); +createPlot(id=1, position={15, 10, 500, 420}, y={"reaRep.u[1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=1, y={"reaRep.y[1, 1]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=2, y={"reaRep.y[2, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={530, 10, 500, 750}, subPlot=3, y={"reaRep.y[3, 2]"}, range={0.0, 1.0, -3.5, 3.5}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/Assert.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/Assert.mos new file mode 100644 index 0000000000..3b1bbdd00c --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/Assert.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Utilities.Validation.Assert", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="Assert"); +createPlot(id=1, position={15, 10, 590, 420}, y={"assert.u"}, range={0.0, 1.0, -2.5, 3.5}, grid=true, colors={{0,140,72}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mos new file mode 100644 index 0000000000..73ddb8e31b --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mos @@ -0,0 +1,14 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Utilities.Validation.SunRiseSet", + method="CVode", tolerance=1e-06, stopTime=3.1536e+007, numberOfIntervals=5000, resultFile="SunRiseSet"); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=1, y={"sunRiseSetArctic.nextSunRise", "sunRiseSetArctic.nextSunSet","sunRiseSetArctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=2, y={"sunRiseSetSf.nextSunRise", "sunRiseSetSf.nextSunSet","sunRiseSetSf.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=3, y={"sunRiseSetAntarctic.nextSunRise", "sunRiseSetAntarctic.nextSunSet","sunRiseSetAntarctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=4, y={"sunRiseSetSyd.nextSunRise", "sunRiseSetSyd.nextSunSet","sunRiseSetSyd.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mos new file mode 100644 index 0000000000..353ad15e11 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mos @@ -0,0 +1,14 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Utilities.Validation.SunRiseSetNegativeStartTime", + method="dassl", tolerance=1e-06, startTime = -43200, stopTime=259200, numberOfIntervals=500, resultFile="SunRiseSetNegativeStartTime"); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=1, y={"sunRiseSetArctic.nextSunRise", "sunRiseSetArctic.nextSunSet","sunRiseSetArctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=2, y={"sunRiseSetSf.nextSunRise", "sunRiseSetSf.nextSunSet","sunRiseSetSf.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=3, y={"sunRiseSetAntarctic.nextSunRise", "sunRiseSetAntarctic.nextSunSet","sunRiseSetAntarctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=4, y={"sunRiseSetSyd.nextSunRise", "sunRiseSetSyd.nextSunSet","sunRiseSetSyd.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mos new file mode 100644 index 0000000000..673ead9163 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mos @@ -0,0 +1,14 @@ +simulateModel("IBPSA.Controls.OBC.CDL.Utilities.Validation.SunRiseSetPositiveStartTime", + method="dassl", tolerance=1e-06, startTime = 43200, stopTime=345600, numberOfIntervals=500, resultFile="SunRiseSetPositiveStartTime"); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=1, y={"sunRiseSetArctic.nextSunRise", "sunRiseSetArctic.nextSunSet","sunRiseSetArctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=2, y={"sunRiseSetSf.nextSunRise", "sunRiseSetSf.nextSunSet","sunRiseSetSf.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=3, y={"sunRiseSetAntarctic.nextSunRise", "sunRiseSetAntarctic.nextSunSet","sunRiseSetAntarctic.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); +createPlot(id=1, + position={15, 10, 590, 600}, subPlot=4, y={"sunRiseSetSyd.nextSunRise", "sunRiseSetSyd.nextSunSet","sunRiseSetSyd.sunUp"}, + range={0.0, 370, -2, 24}, grid=true, colors={{0,140,72}, {238,46,47}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mos new file mode 100644 index 0000000000..85f9b01aac --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.SetPoints.Validation.SupplyReturnTemperatureReset", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="SupplyReturnTemperatureReset1"); +createPlot(id = 1, position = {35, 20, 789, 637}, x = "heaCur.TOut", y = {"heaCur.TSup", "heaCur.TRet", "heaCur.TOut"}, range = {262.0, 304.0, 70.0, (-20.0)}, autoscale = true, autoerase = true, autoreplot = true, grid = true, color = true, leftTitleType = 1, bottomTitleType = 1); +createPlot(id = 1, position = {35, 20, 789, 316}, x = "heaCur.TOut", y = {"heaCur1.TSetZon", "heaCur1.TSup", "heaCur1.TRet"}, range = {262.0, 304.0, 70.0, 10.0}, autoscale = true, autoerase = true, autoreplot = true, grid = true, color = true, subPlot = 2, leftTitleType = 1, bottomTitleType = 1); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mos new file mode 100644 index 0000000000..33af396a5d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.SetPoints.Validation.SupplyReturnTemperatureResetExponent", method="Cvode", tolerance=1e-6, stopTime=1.0, resultFile="SupplyReturnTemperatureResetExponent"); +createPlot(id=1, position={119, 70, 789, 637}, x="heaCur.TOut", y={"heaCur.TSup", "heaCur.TRet", "heaCurM.TSup", "heaCurM.TRet"}, range={-10.0, 20.0, 18.0, 42.0}, grid=true, colors={{28,108,200}, {238,46,47}, {217,67,180}, {0,0,0}}, timeUnit="degC", displayUnits={"degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mos new file mode 100644 index 0000000000..32183621bc --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.OptimalStartCoolingNegativeStartTime", method="Cvode", startTime=-660000,stopTime=0, tolerance=1e-07, resultFile="OptimalStartCoolingNegativeStartTime"); +createPlot(id=1, position={10, 9, 1161, 1054}, subPlot=1, y={"optStaCoo.tOpt"}, range={-691200.0, 0.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=2, y={"TSetCoo.y", "optStaCoo.TZon"}, range={-691200.0, 0.0, 16, 24}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=3, y={"optStaCoo.optOn"}, range={-691200.0, 0.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mos new file mode 100644 index 0000000000..793946087e --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.OptimalStartCoolingPositiveStartTime", method="Cvode", startTime=34000,stopTime=864000, tolerance=1e-07, resultFile="OptimalStartCoolingPositiveStartTime"); +createPlot(id=1, position={10, 9, 1161, 1054}, subPlot=1, y={"optStaCoo.tOpt"}, range={34000.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=2, y={"TSetCoo.y", "optStaCoo.TZon"}, range={34000.0, 604800.0, 16, 24}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=3, y={"optStaCoo.optOn"}, range={34000.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeating.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeating.mos new file mode 100644 index 0000000000..6438409465 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeating.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.OptimalStartHeating", method="Cvode", startTime=-172800, stopTime=604800, tolerance=1e-07, resultFile="OptimalStartHeating"); +createPlot(id=1, position={10, 9, 1161, 1054}, subPlot=1, y={"optStaHea.tOpt"}, range={-172800.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=2, y={"TSetHea.y", "optStaHea.TZon"}, range={-172800.0, 604800.0, 16, 24}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=1, position={10, 9, 1161, 346}, subPlot=3, y={"optStaHea.optOn"}, range={-172800.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mos new file mode 100644 index 0000000000..b724c606bd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.OptimalStartHeatingCooling", method="Cvode", stopTime=2419200, tolerance=1e-06, resultFile="OptimalStartHeatingCooling"); +createPlot(id=1, position={2, 1, 859, 713}, subPlot=1, y={"optSta.tOpt"}, range={0.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={2, 1, 859, 352}, subPlot=2, y={"optSta.optCoo.tOpt","optSta.optHea.tOpt"}, range={0.0, 604800.0, 16, 24}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=2, position={876, 5, 857, 710}, subPlot=1, y={"optSta.optOn"}, range={0.0, 604800.0, 0, 20000.0}, grid=true, colors={{28,108,200}}); +createPlot(id=2, position={876, 5, 857, 351}, subPlot=2, y={"optSta.optCoo.optOn","optSta.optHea.optOn"}, range={0.0, 604800.0, 0, 20000.0}, grid=true, colors={{238,46,47}, {0,140,72}}); +createPlot(id=3, position={1748, 7, 959, 708}, subPlot=1, y={"TSetHea.y","TSetCoo.y","optSta.TZon"}, range={0.0, 604800.0, 16, 24}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mos new file mode 100644 index 0000000000..3538b2ba9f --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.OptimalStartNoHeatingNoCooling", stopTime=2419200, method="Cvode", tolerance=1e-06, resultFile="OptimalStartNoHeatingNoCooling"); +createPlot(id=1, position={10, 9, 1161, 1054},subPlot=1, y={"optSta.tOpt"}, range={0.0, 28.0, -1.5, 1.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 9, 1161, 346},subPlot=2, y={"optSta.optOn"}, range={0.0, 2500000.0, -1.5, 1.5}, grid=true, colors={{28,108,200}}); +createPlot(id=1, position={10, 9, 1161, 346},subPlot=3, y={"TSetHea.y","TSetCoo.y","optSta.TZon"}, range={0.0, 2500000.0, 10.0, 35.0}, grid=true, colors={{238,46,47},{0,140,72},{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/PIDWithInputGains.mos b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/PIDWithInputGains.mos new file mode 100644 index 0000000000..301891fb65 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/PIDWithInputGains.mos @@ -0,0 +1,6 @@ +simulateModel("IBPSA.Controls.OBC.Utilities.Validation.PIDWithInputGains", method="Cvode", tolerance=1e-06, stopTime=1.0, resultFile="PIDWithInputGains"); +createPlot(id=1, position={15, 15, 800, 600}, y={"PID.k", "PIDWitInpGai.k"}, range={0.0, 1.0, 0.9, 1.3}, grid=true, subPlot=101, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 800, 600}, y={"PID.Ti", "PIDWitInpGai.Ti"}, range={0.0, 1.0, 0.4, 0.8}, grid=true, subPlot=102, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 800, 600}, y={"PID.Td", "PIDWitInpGai.Td"}, range={0.0, 1.0, 0.05, 0.25}, grid=true, subPlot=103, colors={{28,108,200}, {238,46,47}}); +createPlot(id=1, position={15, 15, 800, 600}, y={"PID.y", "PIDWitInpGai.y"}, range={0.0, 1.0, -0.5, 1.5}, grid=true, subPlot=104, colors={{28,108,200}, {238,46,47}}); + From f8c58323f61893381d4aa2d08404bac80c2abec5 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 23:12:37 +0000 Subject: [PATCH 04/21] Added OBC package --- IBPSA/Controls/OBC/CDL/Constants.mo | 68 ++ .../OBC/CDL/Conversions/BooleanToInteger.mo | 101 +++ .../OBC/CDL/Conversions/BooleanToReal.mo | 101 +++ .../OBC/CDL/Conversions/IntegerToReal.mo | 66 ++ .../OBC/CDL/Conversions/RealToInteger.mo | 73 +++ .../Validation/BooleanToInteger.mo | 50 ++ .../Conversions/Validation/BooleanToReal.mo | 50 ++ .../Conversions/Validation/IntegerToReal.mo | 63 ++ .../Conversions/Validation/RealToInteger.mo | 52 ++ .../OBC/CDL/Conversions/Validation/package.mo | 37 ++ .../CDL/Conversions/Validation/package.order | 4 + IBPSA/Controls/OBC/CDL/Conversions/package.mo | 30 + .../OBC/CDL/Conversions/package.order | 5 + .../OBC/CDL/Discrete/FirstOrderHold.mo | 137 ++++ IBPSA/Controls/OBC/CDL/Discrete/Sampler.mo | 137 ++++ .../Controls/OBC/CDL/Discrete/TriggeredMax.mo | 110 ++++ .../OBC/CDL/Discrete/TriggeredMovingMean.mo | 200 ++++++ .../OBC/CDL/Discrete/TriggeredSampler.mo | 101 +++ IBPSA/Controls/OBC/CDL/Discrete/UnitDelay.mo | 135 ++++ .../CDL/Discrete/Validation/FirstOrderHold.mo | 62 ++ .../OBC/CDL/Discrete/Validation/Sampler.mo | 58 ++ .../CDL/Discrete/Validation/TriggeredMax.mo | 64 ++ .../Validation/TriggeredMovingMean.mo | 83 +++ .../Discrete/Validation/TriggeredSampler.mo | 72 ++ .../OBC/CDL/Discrete/Validation/UnitDelay.mo | 58 ++ .../CDL/Discrete/Validation/ZeroOrderHold.mo | 62 ++ .../OBC/CDL/Discrete/Validation/package.mo | 41 ++ .../OBC/CDL/Discrete/Validation/package.order | 7 + .../OBC/CDL/Discrete/ZeroOrderHold.mo | 123 ++++ IBPSA/Controls/OBC/CDL/Discrete/package.mo | 61 ++ IBPSA/Controls/OBC/CDL/Discrete/package.order | 8 + IBPSA/Controls/OBC/CDL/Integers/Abs.mo | 109 ++++ IBPSA/Controls/OBC/CDL/Integers/Add.mo | 70 ++ .../Controls/OBC/CDL/Integers/AddParameter.mo | 67 ++ IBPSA/Controls/OBC/CDL/Integers/Change.mo | 93 +++ IBPSA/Controls/OBC/CDL/Integers/Equal.mo | 74 +++ IBPSA/Controls/OBC/CDL/Integers/Greater.mo | 74 +++ .../Controls/OBC/CDL/Integers/GreaterEqual.mo | 78 +++ .../OBC/CDL/Integers/GreaterEqualThreshold.mo | 80 +++ .../OBC/CDL/Integers/GreaterThreshold.mo | 76 +++ IBPSA/Controls/OBC/CDL/Integers/Less.mo | 74 +++ IBPSA/Controls/OBC/CDL/Integers/LessEqual.mo | 78 +++ .../OBC/CDL/Integers/LessEqualThreshold.mo | 80 +++ .../OBC/CDL/Integers/LessThreshold.mo | 71 ++ IBPSA/Controls/OBC/CDL/Integers/Max.mo | 58 ++ IBPSA/Controls/OBC/CDL/Integers/Min.mo | 58 ++ IBPSA/Controls/OBC/CDL/Integers/MultiSum.mo | 84 +++ IBPSA/Controls/OBC/CDL/Integers/Multiply.mo | 71 ++ IBPSA/Controls/OBC/CDL/Integers/OnCounter.mo | 79 +++ .../OBC/CDL/Integers/Sources/Constant.mo | 62 ++ .../OBC/CDL/Integers/Sources/Pulse.mo | 162 +++++ .../OBC/CDL/Integers/Sources/TimeTable.mo | 221 +++++++ .../Integers/Sources/Validation/Constant.mo | 44 ++ .../CDL/Integers/Sources/Validation/Pulse.mo | 67 ++ .../Integers/Sources/Validation/TimeTable.mo | 68 ++ .../Validation/TimeTableNegativeStartTime.mo | 72 ++ .../Integers/Sources/Validation/package.mo | 37 ++ .../Integers/Sources/Validation/package.order | 4 + .../OBC/CDL/Integers/Sources/package.mo | 33 + .../OBC/CDL/Integers/Sources/package.order | 4 + IBPSA/Controls/OBC/CDL/Integers/Stage.mo | 143 ++++ IBPSA/Controls/OBC/CDL/Integers/Subtract.mo | 68 ++ IBPSA/Controls/OBC/CDL/Integers/Switch.mo | 118 ++++ .../OBC/CDL/Integers/Validation/Abs.mo | 63 ++ .../OBC/CDL/Integers/Validation/Add.mo | 82 +++ .../CDL/Integers/Validation/AddParameter.mo | 63 ++ .../OBC/CDL/Integers/Validation/Change.mo | 93 +++ .../OBC/CDL/Integers/Validation/Equal.mo | 84 +++ .../OBC/CDL/Integers/Validation/Greater.mo | 82 +++ .../CDL/Integers/Validation/GreaterEqual.mo | 84 +++ .../Validation/GreaterEqualThreshold.mo | 64 ++ .../Integers/Validation/GreaterThreshold.mo | 64 ++ .../OBC/CDL/Integers/Validation/Less.mo | 84 +++ .../OBC/CDL/Integers/Validation/LessEqual.mo | 82 +++ .../Integers/Validation/LessEqualThreshold.mo | 64 ++ .../CDL/Integers/Validation/LessThreshold.mo | 64 ++ .../OBC/CDL/Integers/Validation/Max.mo | 82 +++ .../OBC/CDL/Integers/Validation/Min.mo | 82 +++ .../OBC/CDL/Integers/Validation/MultiSum.mo | 102 +++ .../OBC/CDL/Integers/Validation/Multiply.mo | 88 +++ .../OBC/CDL/Integers/Validation/OnCounter.mo | 58 ++ .../OBC/CDL/Integers/Validation/Stage.mo | 85 +++ .../OBC/CDL/Integers/Validation/Subtract.mo | 81 +++ .../OBC/CDL/Integers/Validation/Switch.mo | 102 +++ .../OBC/CDL/Integers/Validation/package.mo | 37 ++ .../OBC/CDL/Integers/Validation/package.order | 21 + IBPSA/Controls/OBC/CDL/Integers/package.mo | 37 ++ IBPSA/Controls/OBC/CDL/Integers/package.order | 23 + .../OBC/CDL/Interfaces/BooleanInput.mo | 39 ++ .../OBC/CDL/Interfaces/BooleanOutput.mo | 46 ++ .../OBC/CDL/Interfaces/IntegerInput.mo | 40 ++ .../OBC/CDL/Interfaces/IntegerOutput.mo | 46 ++ .../Controls/OBC/CDL/Interfaces/RealInput.mo | 40 ++ .../Controls/OBC/CDL/Interfaces/RealOutput.mo | 46 ++ IBPSA/Controls/OBC/CDL/Interfaces/package.mo | 41 ++ .../Controls/OBC/CDL/Interfaces/package.order | 6 + IBPSA/Controls/OBC/CDL/Logical/And.mo | 92 +++ IBPSA/Controls/OBC/CDL/Logical/Change.mo | 71 ++ IBPSA/Controls/OBC/CDL/Logical/Edge.mo | 73 +++ IBPSA/Controls/OBC/CDL/Logical/FallingEdge.mo | 74 +++ IBPSA/Controls/OBC/CDL/Logical/Latch.mo | 151 +++++ IBPSA/Controls/OBC/CDL/Logical/MultiAnd.mo | 92 +++ IBPSA/Controls/OBC/CDL/Logical/MultiOr.mo | 91 +++ IBPSA/Controls/OBC/CDL/Logical/Nand.mo | 93 +++ IBPSA/Controls/OBC/CDL/Logical/Nor.mo | 92 +++ IBPSA/Controls/OBC/CDL/Logical/Not.mo | 63 ++ IBPSA/Controls/OBC/CDL/Logical/Or.mo | 93 +++ IBPSA/Controls/OBC/CDL/Logical/Pre.mo | 88 +++ IBPSA/Controls/OBC/CDL/Logical/Proof.mo | 520 +++++++++++++++ .../OBC/CDL/Logical/Sources/Constant.mo | 76 +++ .../Controls/OBC/CDL/Logical/Sources/Pulse.mo | 210 ++++++ .../OBC/CDL/Logical/Sources/SampleTrigger.mo | 131 ++++ .../OBC/CDL/Logical/Sources/TimeTable.mo | 143 ++++ .../Logical/Sources/Validation/Constant.mo | 44 ++ .../CDL/Logical/Sources/Validation/Pulse.mo | 146 +++++ .../Validation/PulseNegativeStartTime.mo | 136 ++++ .../Validation/PulsePositiveStartTime.mo | 136 ++++ .../Sources/Validation/SampleTrigger.mo | 77 +++ .../SampleTriggerNegativeStartTime.mo | 74 +++ .../SampleTriggerPositiveStartTime.mo | 75 +++ .../Logical/Sources/Validation/TimeTable.mo | 64 ++ .../Validation/TimeTableNegativeStartTime.mo | 68 ++ .../CDL/Logical/Sources/Validation/package.mo | 37 ++ .../Logical/Sources/Validation/package.order | 9 + .../OBC/CDL/Logical/Sources/package.mo | 33 + .../OBC/CDL/Logical/Sources/package.order | 5 + IBPSA/Controls/OBC/CDL/Logical/Switch.mo | 158 +++++ IBPSA/Controls/OBC/CDL/Logical/Timer.mo | 190 ++++++ .../OBC/CDL/Logical/TimerAccumulating.mo | 212 ++++++ IBPSA/Controls/OBC/CDL/Logical/Toggle.mo | 178 +++++ IBPSA/Controls/OBC/CDL/Logical/TrueDelay.mo | 140 ++++ .../Controls/OBC/CDL/Logical/TrueFalseHold.mo | 187 ++++++ .../OBC/CDL/Logical/Validation/And.mo | 58 ++ .../OBC/CDL/Logical/Validation/Change.mo | 64 ++ .../OBC/CDL/Logical/Validation/Edge.mo | 64 ++ .../OBC/CDL/Logical/Validation/FallingEdge.mo | 64 ++ .../OBC/CDL/Logical/Validation/Latch.mo | 221 +++++++ .../OBC/CDL/Logical/Validation/MultiAnd.mo | 112 ++++ .../OBC/CDL/Logical/Validation/MultiOr.mo | 112 ++++ .../OBC/CDL/Logical/Validation/Nand.mo | 58 ++ .../OBC/CDL/Logical/Validation/Nor.mo | 58 ++ .../OBC/CDL/Logical/Validation/Not.mo | 51 ++ .../Controls/OBC/CDL/Logical/Validation/Or.mo | 58 ++ .../OBC/CDL/Logical/Validation/Proof.mo | 156 +++++ .../OBC/CDL/Logical/Validation/Switch.mo | 70 ++ .../OBC/CDL/Logical/Validation/Timer.mo | 77 +++ .../Logical/Validation/TimerAccumulating.mo | 93 +++ .../TimerAccumulatingNegativeStartTime.mo | 96 +++ .../Validation/TimerNegativeStartTime.mo | 67 ++ .../OBC/CDL/Logical/Validation/Toggle.mo | 221 +++++++ .../OBC/CDL/Logical/Validation/TrueDelay.mo | 174 +++++ .../CDL/Logical/Validation/TrueFalseHold.mo | 179 +++++ .../CDL/Logical/Validation/VariablePulse.mo | 156 +++++ .../Validation/VariablePulseMinHold.mo | 60 ++ .../OBC/CDL/Logical/Validation/Xor.mo | 58 ++ .../OBC/CDL/Logical/Validation/package.mo | 37 ++ .../OBC/CDL/Logical/Validation/package.order | 23 + .../Controls/OBC/CDL/Logical/VariablePulse.mo | 314 +++++++++ IBPSA/Controls/OBC/CDL/Logical/Xor.mo | 92 +++ IBPSA/Controls/OBC/CDL/Logical/package.mo | 34 + IBPSA/Controls/OBC/CDL/Logical/package.order | 23 + .../CDL/Psychrometrics/DewPoint_TDryBulPhi.mo | 155 +++++ .../SpecificEnthalpy_TDryBulPhi.mo | 139 ++++ .../Validation/DewPoint_TDryBulPhi.mo | 87 +++ .../Validation/SpecificEnthalpy_TDryBulPhi.mo | 63 ++ .../Validation/WetBulb_TDryBulPhi.mo | 99 +++ .../CDL/Psychrometrics/Validation/package.mo | 37 ++ .../Psychrometrics/Validation/package.order | 3 + .../CDL/Psychrometrics/WetBulb_TDryBulPhi.mo | 194 ++++++ .../OBC/CDL/Psychrometrics/package.mo | 60 ++ .../OBC/CDL/Psychrometrics/package.order | 4 + IBPSA/Controls/OBC/CDL/Reals/Abs.mo | 78 +++ IBPSA/Controls/OBC/CDL/Reals/Acos.mo | 81 +++ IBPSA/Controls/OBC/CDL/Reals/Add.mo | 83 +++ IBPSA/Controls/OBC/CDL/Reals/AddParameter.mo | 79 +++ IBPSA/Controls/OBC/CDL/Reals/Asin.mo | 81 +++ IBPSA/Controls/OBC/CDL/Reals/Atan.mo | 93 +++ IBPSA/Controls/OBC/CDL/Reals/Atan2.mo | 117 ++++ IBPSA/Controls/OBC/CDL/Reals/Average.mo | 69 ++ IBPSA/Controls/OBC/CDL/Reals/Cos.mo | 97 +++ IBPSA/Controls/OBC/CDL/Reals/Derivative.mo | 121 ++++ IBPSA/Controls/OBC/CDL/Reals/Divide.mo | 91 +++ IBPSA/Controls/OBC/CDL/Reals/Exp.mo | 74 +++ IBPSA/Controls/OBC/CDL/Reals/Greater.mo | 261 ++++++++ .../OBC/CDL/Reals/GreaterThreshold.mo | 242 +++++++ IBPSA/Controls/OBC/CDL/Reals/Hysteresis.mo | 146 +++++ .../OBC/CDL/Reals/IntegratorWithReset.mo | 136 ++++ IBPSA/Controls/OBC/CDL/Reals/Less.mo | 258 ++++++++ IBPSA/Controls/OBC/CDL/Reals/LessThreshold.mo | 234 +++++++ IBPSA/Controls/OBC/CDL/Reals/LimitSlewRate.mo | 152 +++++ IBPSA/Controls/OBC/CDL/Reals/Limiter.mo | 117 ++++ IBPSA/Controls/OBC/CDL/Reals/Line.mo | 234 +++++++ IBPSA/Controls/OBC/CDL/Reals/Log.mo | 85 +++ IBPSA/Controls/OBC/CDL/Reals/Log10.mo | 85 +++ IBPSA/Controls/OBC/CDL/Reals/MatrixGain.mo | 97 +++ IBPSA/Controls/OBC/CDL/Reals/MatrixMax.mo | 64 ++ IBPSA/Controls/OBC/CDL/Reals/MatrixMin.mo | 64 ++ IBPSA/Controls/OBC/CDL/Reals/Max.mo | 63 ++ IBPSA/Controls/OBC/CDL/Reals/Min.mo | 63 ++ IBPSA/Controls/OBC/CDL/Reals/Modulo.mo | 92 +++ IBPSA/Controls/OBC/CDL/Reals/MovingAverage.mo | 185 ++++++ IBPSA/Controls/OBC/CDL/Reals/MultiMax.mo | 61 ++ IBPSA/Controls/OBC/CDL/Reals/MultiMin.mo | 61 ++ IBPSA/Controls/OBC/CDL/Reals/MultiSum.mo | 94 +++ IBPSA/Controls/OBC/CDL/Reals/Multiply.mo | 83 +++ .../OBC/CDL/Reals/MultiplyByParameter.mo | 68 ++ IBPSA/Controls/OBC/CDL/Reals/PID.mo | 604 +++++++++++++++++ IBPSA/Controls/OBC/CDL/Reals/PIDWithReset.mo | 616 ++++++++++++++++++ IBPSA/Controls/OBC/CDL/Reals/Ramp.mo | 144 ++++ IBPSA/Controls/OBC/CDL/Reals/Round.mo | 92 +++ IBPSA/Controls/OBC/CDL/Reals/Sin.mo | 97 +++ IBPSA/Controls/OBC/CDL/Reals/Sort.mo | 102 +++ .../OBC/CDL/Reals/Sources/CalendarTime.mo | 183 ++++++ .../OBC/CDL/Reals/Sources/CivilTime.mo | 137 ++++ .../OBC/CDL/Reals/Sources/Constant.mo | 80 +++ IBPSA/Controls/OBC/CDL/Reals/Sources/Pulse.mo | 164 +++++ IBPSA/Controls/OBC/CDL/Reals/Sources/Ramp.mo | 106 +++ IBPSA/Controls/OBC/CDL/Reals/Sources/Sin.mo | 120 ++++ .../OBC/CDL/Reals/Sources/TimeTable.mo | 328 ++++++++++ .../Sources/Validation/CalendarTimeMonths.mo | 48 ++ .../Validation/CalendarTimeMonthsMinus.mo | 32 + .../Validation/CalendarTimeMonthsPlus.mo | 32 + .../CDL/Reals/Sources/Validation/CivilTime.mo | 41 ++ .../CDL/Reals/Sources/Validation/Constant.mo | 44 ++ .../OBC/CDL/Reals/Sources/Validation/Pulse.mo | 47 ++ .../OBC/CDL/Reals/Sources/Validation/Ramp.mo | 46 ++ .../OBC/CDL/Reals/Sources/Validation/Sin.mo | 47 ++ .../CDL/Reals/Sources/Validation/TimeTable.mo | 123 ++++ .../Validation/TimeTableNegativeStartTime.mo | 91 +++ .../CDL/Reals/Sources/Validation/package.mo | 37 ++ .../Reals/Sources/Validation/package.order | 10 + .../Controls/OBC/CDL/Reals/Sources/package.mo | 33 + .../OBC/CDL/Reals/Sources/package.order | 8 + IBPSA/Controls/OBC/CDL/Reals/Sqrt.mo | 83 +++ IBPSA/Controls/OBC/CDL/Reals/Subtract.mo | 73 +++ IBPSA/Controls/OBC/CDL/Reals/Switch.mo | 124 ++++ IBPSA/Controls/OBC/CDL/Reals/Tan.mo | 97 +++ .../Controls/OBC/CDL/Reals/Validation/Abs.mo | 60 ++ .../Controls/OBC/CDL/Reals/Validation/Acos.mo | 52 ++ .../Controls/OBC/CDL/Reals/Validation/Add.mo | 63 ++ .../OBC/CDL/Reals/Validation/AddParameter.mo | 56 ++ .../Controls/OBC/CDL/Reals/Validation/Asin.mo | 52 ++ .../Controls/OBC/CDL/Reals/Validation/Atan.mo | 55 ++ .../OBC/CDL/Reals/Validation/Atan2.mo | 64 ++ .../OBC/CDL/Reals/Validation/Average.mo | 63 ++ .../Controls/OBC/CDL/Reals/Validation/Cos.mo | 55 ++ .../OBC/CDL/Reals/Validation/Derivative.mo | 130 ++++ .../OBC/CDL/Reals/Validation/Divide.mo | 67 ++ .../Controls/OBC/CDL/Reals/Validation/Exp.mo | 55 ++ .../OBC/CDL/Reals/Validation/Greater.mo | 79 +++ .../CDL/Reals/Validation/GreaterThreshold.mo | 70 ++ .../OBC/CDL/Reals/Validation/Hysteresis.mo | 99 +++ .../Reals/Validation/IntegratorWithReset.mo | 101 +++ .../Controls/OBC/CDL/Reals/Validation/Less.mo | 81 +++ .../OBC/CDL/Reals/Validation/LessThreshold.mo | 70 ++ .../OBC/CDL/Reals/Validation/LimitSlewRate.mo | 166 +++++ .../OBC/CDL/Reals/Validation/Limiter.mo | 57 ++ .../Controls/OBC/CDL/Reals/Validation/Line.mo | 128 ++++ .../Controls/OBC/CDL/Reals/Validation/Log.mo | 55 ++ .../OBC/CDL/Reals/Validation/Log10.mo | 55 ++ .../OBC/CDL/Reals/Validation/MatrixGain.mo | 84 +++ .../OBC/CDL/Reals/Validation/MatrixMax.mo | 75 +++ .../OBC/CDL/Reals/Validation/MatrixMin.mo | 77 +++ .../Controls/OBC/CDL/Reals/Validation/Max.mo | 63 ++ .../Controls/OBC/CDL/Reals/Validation/Min.mo | 63 ++ .../OBC/CDL/Reals/Validation/Modulo.mo | 63 ++ .../OBC/CDL/Reals/Validation/MovingAverage.mo | 113 ++++ .../Validation/MovingAverage_nonZeroStart.mo | 106 +++ .../OBC/CDL/Reals/Validation/MultiMax.mo | 56 ++ .../OBC/CDL/Reals/Validation/MultiMin.mo | 58 ++ .../OBC/CDL/Reals/Validation/MultiSum.mo | 137 ++++ .../OBC/CDL/Reals/Validation/Multiply.mo | 67 ++ .../Reals/Validation/MultiplyByParameter.mo | 59 ++ .../Controls/OBC/CDL/Reals/Validation/PID.mo | 122 ++++ .../Validation/PIDInitialDerivativeOutput.mo | 81 +++ .../CDL/Reals/Validation/PIDInitialState.mo | 88 +++ .../OBC/CDL/Reals/Validation/PIDScale.mo | 120 ++++ .../OBC/CDL/Reals/Validation/PIDWithReset.mo | 167 +++++ .../CDL/Reals/Validation/PIDWithResetScale.mo | 130 ++++ .../Controls/OBC/CDL/Reals/Validation/Ramp.mo | 127 ++++ .../OBC/CDL/Reals/Validation/Round.mo | 76 +++ .../Controls/OBC/CDL/Reals/Validation/Sin.mo | 55 ++ .../Controls/OBC/CDL/Reals/Validation/Sort.mo | 109 ++++ .../Controls/OBC/CDL/Reals/Validation/Sqrt.mo | 55 ++ .../OBC/CDL/Reals/Validation/Subtract.mo | 62 ++ .../OBC/CDL/Reals/Validation/Switch.mo | 66 ++ .../Controls/OBC/CDL/Reals/Validation/Tan.mo | 55 ++ .../OBC/CDL/Reals/Validation/package.mo | 37 ++ .../OBC/CDL/Reals/Validation/package.order | 50 ++ IBPSA/Controls/OBC/CDL/Reals/package.mo | 37 ++ IBPSA/Controls/OBC/CDL/Reals/package.order | 47 ++ .../OBC/CDL/Routing/BooleanExtractSignal.mo | 178 +++++ .../OBC/CDL/Routing/BooleanExtractor.mo | 148 +++++ .../CDL/Routing/BooleanScalarReplicator.mo | 64 ++ .../OBC/CDL/Routing/BooleanVectorFilter.mo | 69 ++ .../CDL/Routing/BooleanVectorReplicator.mo | 67 ++ .../OBC/CDL/Routing/IntegerExtractSignal.mo | 178 +++++ .../OBC/CDL/Routing/IntegerExtractor.mo | 148 +++++ .../CDL/Routing/IntegerScalarReplicator.mo | 64 ++ .../OBC/CDL/Routing/IntegerVectorFilter.mo | 69 ++ .../CDL/Routing/IntegerVectorReplicator.mo | 64 ++ .../OBC/CDL/Routing/RealExtractSignal.mo | 187 ++++++ .../Controls/OBC/CDL/Routing/RealExtractor.mo | 159 +++++ .../OBC/CDL/Routing/RealScalarReplicator.mo | 65 ++ .../OBC/CDL/Routing/RealVectorFilter.mo | 70 ++ .../OBC/CDL/Routing/RealVectorReplicator.mo | 63 ++ .../Validation/BooleanExtractSignal.mo | 94 +++ .../Routing/Validation/BooleanExtractor.mo | 177 +++++ .../Validation/BooleanScalarReplicator.mo | 55 ++ .../Routing/Validation/BooleanVectorFilter.mo | 49 ++ .../Validation/BooleanVectorReplicator.mo | 49 ++ .../Validation/IntegerExtractSignal.mo | 99 +++ .../Routing/Validation/IntegerExtractor.mo | 177 +++++ .../Validation/IntegerScalarReplicator.mo | 62 ++ .../Routing/Validation/IntegerVectorFilter.mo | 49 ++ .../Validation/IntegerVectorReplicator.mo | 57 ++ .../Routing/Validation/RealExtractSignal.mo | 120 ++++ .../CDL/Routing/Validation/RealExtractor.mo | 206 ++++++ .../Validation/RealScalarReplicator.mo | 57 ++ .../Routing/Validation/RealVectorFilter.mo | 49 ++ .../Validation/RealVectorReplicator.mo | 52 ++ .../OBC/CDL/Routing/Validation/package.mo | 37 ++ .../OBC/CDL/Routing/Validation/package.order | 15 + IBPSA/Controls/OBC/CDL/Routing/package.mo | 34 + IBPSA/Controls/OBC/CDL/Routing/package.order | 16 + IBPSA/Controls/OBC/CDL/Types/Extrapolation.mo | 33 + .../OBC/CDL/Types/SimpleController.mo | 41 ++ IBPSA/Controls/OBC/CDL/Types/Smoothness.mo | 25 + IBPSA/Controls/OBC/CDL/Types/ZeroTime.mo | 86 +++ IBPSA/Controls/OBC/CDL/Types/package.mo | 37 ++ IBPSA/Controls/OBC/CDL/Types/package.order | 4 + IBPSA/Controls/OBC/CDL/Utilities/Assert.mo | 68 ++ .../Controls/OBC/CDL/Utilities/SunRiseSet.mo | 391 +++++++++++ .../OBC/CDL/Utilities/Validation/Assert.mo | 51 ++ .../CDL/Utilities/Validation/SunRiseSet.mo | 77 +++ .../Validation/SunRiseSetNegativeStartTime.mo | 68 ++ .../Validation/SunRiseSetPositiveStartTime.mo | 68 ++ .../OBC/CDL/Utilities/Validation/package.mo | 37 ++ .../CDL/Utilities/Validation/package.order | 4 + IBPSA/Controls/OBC/CDL/Utilities/package.mo | 39 ++ .../Controls/OBC/CDL/Utilities/package.order | 3 + IBPSA/Controls/OBC/CDL/package.mo | 64 ++ IBPSA/Controls/OBC/CDL/package.order | 11 + .../BaseClasses/OptimalStartCalculation.mo | 316 +++++++++ .../OBC/Utilities/BaseClasses/package.mo | 29 + .../OBC/Utilities/BaseClasses/package.order | 1 + IBPSA/Controls/OBC/Utilities/OptimalStart.mo | 383 +++++++++++ .../OBC/Utilities/PIDWithInputGains.mo | 565 ++++++++++++++++ .../SetPoints/SupplyReturnTemperatureReset.mo | 486 ++++++++++++++ .../SupplyReturnTemperatureReset.mo | 103 +++ .../SupplyReturnTemperatureResetExponent.mo | 75 +++ .../Utilities/SetPoints/Validation/package.mo | 37 ++ .../SetPoints/Validation/package.order | 2 + .../OBC/Utilities/SetPoints/package.mo | 46 ++ .../OBC/Utilities/SetPoints/package.order | 2 + .../OptimalStartCoolingNegativeStartTime.mo | 153 +++++ .../OptimalStartCoolingPositiveStartTime.mo | 152 +++++ .../Validation/OptimalStartHeating.mo | 150 +++++ .../Validation/OptimalStartHeatingCooling.mo | 211 ++++++ .../OptimalStartNoHeatingNoCooling.mo | 196 ++++++ .../Utilities/Validation/PIDWithInputGains.mo | 158 +++++ .../OBC/Utilities/Validation/package.mo | 31 + .../OBC/Utilities/Validation/package.order | 6 + IBPSA/Controls/OBC/Utilities/package.mo | 37 ++ IBPSA/Controls/OBC/Utilities/package.order | 5 + IBPSA/Controls/OBC/package.mo | 30 + IBPSA/Controls/OBC/package.order | 8 + 367 files changed, 33956 insertions(+) create mode 100644 IBPSA/Controls/OBC/CDL/Constants.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/BooleanToInteger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/BooleanToReal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/IntegerToReal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/RealToInteger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Conversions/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/FirstOrderHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Sampler.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/TriggeredMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/TriggeredMovingMean.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/TriggeredSampler.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/UnitDelay.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/Sampler.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/ZeroOrderHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Discrete/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Abs.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Add.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/AddParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Change.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Equal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Greater.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/GreaterEqual.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/GreaterEqualThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/GreaterThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Less.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/LessEqual.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/LessEqualThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/LessThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Max.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Min.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/MultiSum.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Multiply.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/OnCounter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Sources/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Stage.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Subtract.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Abs.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Add.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/AddParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Change.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Equal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Greater.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Less.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqual.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Max.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Min.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/MultiSum.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Multiply.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/OnCounter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Stage.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Subtract.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Integers/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Integers/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/BooleanInput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/BooleanOutput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/IntegerInput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/IntegerOutput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/RealInput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/RealOutput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Interfaces/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Logical/And.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Change.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Edge.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/FallingEdge.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Latch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/MultiAnd.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/MultiOr.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Nand.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Nor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Not.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Or.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Pre.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Proof.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/SampleTrigger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Sources/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Timer.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/TimerAccumulating.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Toggle.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/TrueDelay.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/TrueFalseHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/And.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Change.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Edge.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Latch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/MultiAnd.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/MultiOr.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Nand.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Nor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Not.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Or.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Proof.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Timer.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Toggle.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/TrueDelay.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/Xor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Logical/VariablePulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/Xor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Logical/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/DewPoint_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/SpecificEnthalpy_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/WetBulb_TDryBulPhi.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Psychrometrics/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Abs.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Acos.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Add.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/AddParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Asin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Atan.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Atan2.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Average.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Cos.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Derivative.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Divide.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Exp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Greater.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/GreaterThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Hysteresis.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/IntegratorWithReset.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Less.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/LessThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/LimitSlewRate.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Limiter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Line.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Log.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Log10.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MatrixGain.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MatrixMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MatrixMin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Max.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Min.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Modulo.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MovingAverage.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MultiMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MultiMin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MultiSum.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Multiply.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/MultiplyByParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/PID.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/PIDWithReset.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Ramp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Round.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sort.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/CivilTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Ramp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Sin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sources/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Sqrt.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Subtract.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Tan.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Abs.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Acos.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Add.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/AddParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Asin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Atan.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Atan2.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Average.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Cos.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Derivative.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Divide.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Exp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Greater.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Less.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Limiter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Line.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Log.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Log10.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Max.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Min.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Modulo.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMax.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MultiSum.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Multiply.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PID.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PIDScale.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Ramp.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Round.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Sin.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Sort.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Sqrt.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Subtract.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Switch.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/Tan.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Reals/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Reals/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Routing/BooleanExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/BooleanExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/BooleanScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/BooleanVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/BooleanVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/IntegerExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/IntegerExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/IntegerScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/IntegerVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/IntegerVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/RealExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/RealExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/RealScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/RealVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/RealVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Routing/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Routing/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Types/Extrapolation.mo create mode 100644 IBPSA/Controls/OBC/CDL/Types/SimpleController.mo create mode 100644 IBPSA/Controls/OBC/CDL/Types/Smoothness.mo create mode 100644 IBPSA/Controls/OBC/CDL/Types/ZeroTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Types/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Types/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Assert.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/SunRiseSet.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/Assert.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/Validation/package.order create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/Utilities/package.order create mode 100644 IBPSA/Controls/OBC/CDL/package.mo create mode 100644 IBPSA/Controls/OBC/CDL/package.order create mode 100644 IBPSA/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo create mode 100644 IBPSA/Controls/OBC/Utilities/BaseClasses/package.mo create mode 100644 IBPSA/Controls/OBC/Utilities/BaseClasses/package.order create mode 100644 IBPSA/Controls/OBC/Utilities/OptimalStart.mo create mode 100644 IBPSA/Controls/OBC/Utilities/PIDWithInputGains.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.order create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/package.mo create mode 100644 IBPSA/Controls/OBC/Utilities/SetPoints/package.order create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/package.mo create mode 100644 IBPSA/Controls/OBC/Utilities/Validation/package.order create mode 100644 IBPSA/Controls/OBC/Utilities/package.mo create mode 100644 IBPSA/Controls/OBC/Utilities/package.order create mode 100644 IBPSA/Controls/OBC/package.mo create mode 100644 IBPSA/Controls/OBC/package.order diff --git a/IBPSA/Controls/OBC/CDL/Constants.mo b/IBPSA/Controls/OBC/CDL/Constants.mo new file mode 100644 index 0000000000..b964aecc93 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Constants.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL; +package Constants + "Package with constants" + // Machine dependent constants + final constant Real eps=1E-15 + "Biggest number such that 1.0 + eps = 1.0"; + final constant Real small=1E-37 + "Smallest number such that small and -small are representable on the machine"; + final constant Real pi=2*Modelica.Math.asin(1.0) + "Constant number pi, 3.14159265358979"; + annotation ( + Documentation( + info=" +

+This package provides often needed constants. +

+", + revisions=" + +"), + Icon( + coordinateSystem( + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={-9.2597,25.6673}, + fillColor={102,102,102}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{48.017,11.336},{48.017,11.336},{10.766,11.336},{-25.684,10.95},{-34.944,-15.111},{-34.944,-15.111},{-32.298,-15.244},{-32.298,-15.244},{-22.112,0.168},{11.292,0.234},{48.267,-0.097},{48.267,-0.097}}, + smooth=Smooth.Bezier), + Polygon( + origin={-19.9923,-8.3993}, + fillColor={102,102,102}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{3.239,37.343},{3.305,37.343},{-0.399,2.683},{-16.936,-20.071},{-7.808,-28.604},{6.811,-22.519},{9.986,37.145},{9.986,37.145}}, + smooth=Smooth.Bezier), + Polygon( + origin={23.753,-11.5422}, + fillColor={102,102,102}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-10.873,41.478},{-10.873,41.478},{-14.048,-4.162},{-9.352,-24.8},{7.912,-24.469},{16.247,0.27},{16.247,0.27},{13.336,0.071},{13.336,0.071},{7.515,-9.983},{-3.134,-7.271},{-2.671,41.214},{-2.671,41.214}}, + smooth=Smooth.Bezier), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Constants; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/BooleanToInteger.mo b/IBPSA/Controls/OBC/CDL/Conversions/BooleanToInteger.mo new file mode 100644 index 0000000000..bfa2cac483 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/BooleanToInteger.mo @@ -0,0 +1,101 @@ +within IBPSA.Controls.OBC.CDL.Conversions; +block BooleanToInteger + "Convert Boolean to Integer signal" + parameter Integer integerTrue=1 + "Output signal for true Boolean input"; + parameter Integer integerFalse=0 + "Output signal for false Boolean input"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Boolean signal to be converted to an Integer signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Converted input signal as an Integer" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if u then + integerTrue + else + integerFalse; + annotation ( + defaultComponentName="booToInt", + Documentation( + info=" +

+Block that outputs the Integer +equivalent of the Boolean input. +

+
+  y = if u then integerTrue else integerFalse;
+
+

+where u is of Boolean and y +of Integer type, +and integerTrue and integerFalse are parameters. +

+", + revisions=" +
    +
  • +May 17, 2022, by Hongxiang Fu:
    +Corrected documentation texts where the variables were described with wrong types.
    +This is for +Buildings, issue 3016. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-86,78},{-34,26}}, + textColor={255,0,255}, + textString="B"), + Polygon( + points={{28,48},{8,68},{8,58},{-24,58},{-24,38},{8,38},{8,28},{28,48}}, + lineColor={255,170,85}, + fillColor={255,170,85}, + fillPattern=FillPattern.Solid), + Text( + extent={{34,82},{86,24}}, + textColor={255,170,85}, + textString="I"), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-74,-28},{64,20}}, + textColor={0,0,0}, + textString="%integerTrue"), + Text( + extent={{-74,-90},{64,-42}}, + textColor={0,0,0}, + textString="%integerFalse")})); +end BooleanToInteger; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/BooleanToReal.mo b/IBPSA/Controls/OBC/CDL/Conversions/BooleanToReal.mo new file mode 100644 index 0000000000..175b93d1e5 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/BooleanToReal.mo @@ -0,0 +1,101 @@ +within IBPSA.Controls.OBC.CDL.Conversions; +block BooleanToReal + "Convert Boolean to Real signal" + parameter Real realTrue=1.0 + "Output signal for true Boolean input"; + parameter Real realFalse=0.0 + "Output signal for false Boolean input"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Boolean signal to be converted to a Real signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Converted input signal as a Real" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if u then + realTrue + else + realFalse; + annotation ( + defaultComponentName="booToRea", + Documentation( + info=" +

+Block that outputs the Real +equivalent of the Boolean input. +

+
+  y = if u then realTrue else realFalse;
+
+

+where u is of Boolean and y +of Real type, +and realTrue and realFalse are parameters. +

+", + revisions=" +
    +
  • +May 17, 2022, by Hongxiang Fu:
    +Corrected documentation texts where the variables were described with wrong types.
    +This is for +Buildings, issue 3016. +
  • +
  • +April 10, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-68,-86},{70,-38}}, + textColor={0,0,0}, + textString="%realFalse"), + Text( + extent={{-68,-26},{70,22}}, + textColor={0,0,0}, + textString="%realTrue"), + Text( + extent={{-86,78},{-34,26}}, + textColor={255,0,255}, + textString="B"), + Polygon( + points={{26,48},{6,68},{6,58},{-26,58},{-26,38},{6,38},{6,28},{26,48}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Text( + extent={{34,82},{86,24}}, + textColor={0,0,127}, + textString="R")})); +end BooleanToReal; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/IntegerToReal.mo b/IBPSA/Controls/OBC/CDL/Conversions/IntegerToReal.mo new file mode 100644 index 0000000000..23a9bfb7ba --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/IntegerToReal.mo @@ -0,0 +1,66 @@ +within IBPSA.Controls.OBC.CDL.Conversions; +block IntegerToReal + "Convert Integer to Real signals" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Integer signal to be converted to a Real signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Converted input signal as a Real" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u; + annotation ( + defaultComponentName="intToRea", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={255,127,0}, + extent={{-120.0,-40.0},{-20.0,40.0}}, + textString="I"), + Text( + textColor={0,0,127}, + fillPattern=FillPattern.Solid, + extent={{0.0,-40.0},{100.0,40.0}}, + textString="R"), + Polygon( + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + points={{10.0,0.0},{-10.0,20.0},{-10.0,10.0},{-40.0,10.0},{-40.0,-10.0},{-10.0,-10.0},{-10.0,-20.0},{10.0,0.0}})}), + Documentation( + info=" +

+Block that outputs the Real +equivalent of the Integer input. +

+
+  y = u;
+
+

+where u is of Integer and +y of Real type. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end IntegerToReal; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/RealToInteger.mo b/IBPSA/Controls/OBC/CDL/Conversions/RealToInteger.mo new file mode 100644 index 0000000000..a3ee5c3f94 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/RealToInteger.mo @@ -0,0 +1,73 @@ +within IBPSA.Controls.OBC.CDL.Conversions; +block RealToInteger + "Convert Real to Integer signal" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Real signal to be converted to an Integer signal" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Converted input signal as an Integer" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if + (u > 0) then + integer( + floor( + u+0.5)) + else + integer( + ceil( + u-0.5)); + annotation ( + defaultComponentName="reaToInt", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,127}, + extent={{-100.0,-40.0},{0.0,40.0}}, + textString="R"), + Text( + textColor={255,127,0}, + extent={{20.0,-40.0},{120.0,40.0}}, + textString="I"), + Polygon( + lineColor={255,127,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + points={{50.0,0.0},{30.0,20.0},{30.0,10.0},{0.0,10.0},{0.0,-10.0},{30.0,-10.0},{30.0,-20.0},{50.0,0.0}}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs y +as the nearest integer value of the input u. +

+

+The block outputs +

+
+    y = integer( floor( u + 0.5 ) )  if u > 0,
+    y = integer( ceil ( u - 0.5 ) )  otherwise.
+
+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end RealToInteger; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mo b/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mo new file mode 100644 index 0000000000..9af28be520 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mo @@ -0,0 +1,50 @@ +within IBPSA.Controls.OBC.CDL.Conversions.Validation; +model BooleanToInteger + "Validation model for the BooleanToInteger block" + IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt + "Block that converts Boolean to Integer signal" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + period=1) + "Generate cyclic on-and-off output" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + +equation + connect(booPul.y,booToInt.u) + annotation (Line(points={{2,0},{28,0},{28,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=4.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToInteger.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger. +

+", + revisions=" +
    +
  • +March 31, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanToInteger; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mo b/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mo new file mode 100644 index 0000000000..fda9178d76 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mo @@ -0,0 +1,50 @@ +within IBPSA.Controls.OBC.CDL.Conversions.Validation; +model BooleanToReal + "Validation model for the BooleanToReal block" + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea + "Block that converts Boolean to Real signal" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + period=1) + "Generate cyclic on-and-off output" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + +equation + connect(booPul.y,booToRea.u) + annotation (Line(points={{2,0},{28,0},{28,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=4.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/BooleanToReal.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal. +

+", + revisions=" +
    +
  • +April 10, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanToReal; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo b/IBPSA/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo new file mode 100644 index 0000000000..42ab49f046 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Conversions.Validation; +model IntegerToReal + "Validation model for the IntegerToReal block" + IBPSA.Controls.OBC.CDL.Conversions.IntegerToReal intToRea + "Block that converts Integer to Real signal" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round2.u) + annotation (Line(points={{-58,0},{-42,0}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-18,0},{-2,0}},color={0,0,127})); + connect(reaToInt1.y,intToRea.u) + annotation (Line(points={{22,0},{28,0},{28,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/IntegerToReal.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Conversions.IntegerToReal. +

+", + revisions=" +
    +
  • +March 31, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegerToReal; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo b/IBPSA/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo new file mode 100644 index 0000000000..6af50942b9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mo @@ -0,0 +1,52 @@ +within IBPSA.Controls.OBC.CDL.Conversions.Validation; +model RealToInteger + "Validation model for the RealToInteger block" + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Block that converts Real to Integer signal" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,reaToInt.u) + annotation (Line(points={{-39,0},{28,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Conversions/Validation/RealToInteger.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Conversions.RealToInteger. +

+", + revisions=" +
    +
  • +March 31, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end RealToInteger; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.mo new file mode 100644 index 0000000000..26ec4de8c5 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Conversions; +package Validation "Collection of models that validate the conversion blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Conversions. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.order b/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.order new file mode 100644 index 0000000000..50d7ddd0d7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/Validation/package.order @@ -0,0 +1,4 @@ +BooleanToInteger +BooleanToReal +IntegerToReal +RealToInteger diff --git a/IBPSA/Controls/OBC/CDL/Conversions/package.mo b/IBPSA/Controls/OBC/CDL/Conversions/package.mo new file mode 100644 index 0000000000..52d55e5d3a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/package.mo @@ -0,0 +1,30 @@ +within IBPSA.Controls.OBC.CDL; +package Conversions "Package with blocks for type conversion" + annotation ( + Documentation( + info=" +

+Package with blocks for type conversions. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Conversions; diff --git a/IBPSA/Controls/OBC/CDL/Conversions/package.order b/IBPSA/Controls/OBC/CDL/Conversions/package.order new file mode 100644 index 0000000000..92db79bf1c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Conversions/package.order @@ -0,0 +1,5 @@ +BooleanToInteger +BooleanToReal +IntegerToReal +RealToInteger +Validation diff --git a/IBPSA/Controls/OBC/CDL/Discrete/FirstOrderHold.mo b/IBPSA/Controls/OBC/CDL/Discrete/FirstOrderHold.mo new file mode 100644 index 0000000000..0a3a4ee7ba --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/FirstOrderHold.mo @@ -0,0 +1,137 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block FirstOrderHold + "First order hold of a sampled-data system" + parameter Real samplePeriod( + final quantity="Time", + final unit="s", + min=1E-3) + "Sample period of component"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "First order hold of input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + output Boolean sampleTrigger + "True, if sample time instant"; + output Boolean firstTrigger( + start=false, + fixed=true) + "Rising edge signals first sample instant"; + Real tSample( + final quantity="Time", + final unit="s") + "Time of sample"; + Real uSample + "Value of sample"; + Real pre_uSample + "Value of previous sample"; + Real c + "Slope"; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer(time/samplePeriod)*samplePeriod, + n=6); + pre(tSample)=t0; + pre(uSample)=u; + pre(pre_uSample)=u; + pre(c)=0.0; + +equation + // Declarations that are used for all discrete blocks + sampleTrigger=sample( + t0, + samplePeriod); + when sampleTrigger then + firstTrigger=time <= t0+samplePeriod/2; + tSample=time; + uSample=u; + pre_uSample=pre(uSample); + c=if firstTrigger then + 0 + else + (uSample-pre_uSample)/samplePeriod; + end when; + /* Use pre_uSample and pre(c) to break potential algebraic loops by an + infinitesimal delay if both the continuous and the discrete part + have direct feedthrough. + */ + y=pre_uSample+pre(c)*(time-tSample); + annotation ( + defaultComponentName="firOrdHol", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-79.0,-41.0},{-59.0,-33.0},{-40.0,1.0},{-20.0,9.0},{0.0,63.0},{21.0,20.0},{41.0,10.0},{60.0,20.0}}, + color={0,0,127}), + Line( + points={{60.0,20.0},{81.0,10.0}}, + color={0,0,127}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the extrapolation through the +values of the last two sampled input signals. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Michael Wetter:
    +Removed parameter startTime to allow model to work +also for negative start time without having to change the value of this +parameters.
    +This is for Buildings, issue 938. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end FirstOrderHold; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Sampler.mo b/IBPSA/Controls/OBC/CDL/Discrete/Sampler.mo new file mode 100644 index 0000000000..5188669c63 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Sampler.mo @@ -0,0 +1,137 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block Sampler + "Ideal sampler of a continuous signal" + parameter Real samplePeriod( + final quantity="Time", + final unit="s", + min=1E-3) + "Sample period of component"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sampled input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + output Boolean sampleTrigger + "True, if sample time instant"; + output Boolean firstTrigger( + start=false, + fixed=true) + "Rising edge signals first sample instant"; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer(time/samplePeriod)*samplePeriod, + n=6); + +equation + // Declarations that are used for all discrete blocks + sampleTrigger=sample( + t0, + samplePeriod); + when sampleTrigger then + firstTrigger=time <= t0+samplePeriod/2; + end when; + // Declarations specific to this type of discrete block + when {sampleTrigger,initial()} then + y=u; + end when; + annotation ( + defaultComponentName="sam", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{25.0,-10.0},{45.0,10.0}}), + Line( + points={{-100.0,0.0},{-45.0,0.0}}, + color={0,0,127}), + Line( + points={{45.0,0.0},{100.0,0.0}}, + color={0,0,127}), + Line( + points={{-35.0,0.0},{30.0,35.0}}, + color={0,0,127}), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-45.0,-10.0},{-25.0,10.0}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the input signal, sampled at a sampling rate defined +via parameter samplePeriod. +

+", + revisions=" +
    +
  • +March 30, 2022, by Michael Wetter:
    +Removed graphic from diagram view. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Michael Wetter:
    +Removed parameter startTime to allow model to work +also for negative start time without having to change the value of this +parameters.
    +This is for Buildings, issue 938. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Sampler; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMax.mo b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMax.mo new file mode 100644 index 0000000000..94da32d7a0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMax.mo @@ -0,0 +1,110 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block TriggeredMax + "Output the maximum, absolute value of a continuous signal at trigger instants" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Input for trigger that causes u to be sampled" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Maximum of input signal over all trigger instants" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + y=u; + +equation + when trigger then + y=max( + pre(y), + abs(u)); + end when; + annotation ( + defaultComponentName="triMax", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{25.0,-10.0},{45.0,10.0}}), + Line( + points={{-100.0,0.0},{-45.0,0.0}}, + color={0,0,127}), + Line( + points={{45.0,0.0},{100.0,0.0}}, + color={0,0,127}), + Line( + points={{0.0,-100.0},{0.0,-26.0}}, + color={255,0,255}), + Line( + points={{-35.0,0.0},{28.0,-48.0}}, + color={0,0,127}), + Text( + extent={{-86.0,24.0},{82.0,82.0}}, + textString="max"), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-45.0,-10.0},{-25.0,10.0}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the input signal whenever the trigger input +signal is rising (i.e., trigger changes to +true). The maximum, absolute value of the input signal +at the sampling point is provided as the output signal. +

+", + revisions=" +
    +
  • +March 30, 2022, by Michael Wetter:
    +Removed graphic from diagram view. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Michael Wetter:
    +Removed parameter startTime and sampleTime +as these are not needed for this block, and introduced parameter +y_start=0.
    +This is for Buildings, issue 938. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end TriggeredMax; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMovingMean.mo b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMovingMean.mo new file mode 100644 index 0000000000..a9ad80c179 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredMovingMean.mo @@ -0,0 +1,200 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block TriggeredMovingMean + "Triggered discrete moving mean of an input signal" + parameter Integer n( + min=1) + "Number of samples over which the input is averaged"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Input for trigger that causes u to be sampled" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Moving mean of input signal over all trigger instants" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Integer iSample( + start=0, + fixed=true) + "Sample numbering in the calculation"; + Integer counter( + start=0, + fixed=true) + "Number of samples used for averaging calculation"; + Integer index( + start=0, + fixed=true) + "Index of the vector ySample"; + discrete Real ySample[n]( + start=zeros(n), + each fixed=true) + "Vector of samples to be averaged"; + +equation + when {initial(),trigger} then + index=mod( + pre(iSample), + n)+1; + ySample={ + if + (i == index) then + u + else + pre(ySample[i]) for i in 1:n}; + counter= + if pre(counter) == n then + n + else + pre(counter)+1; + y=sum(ySample)/counter; + iSample=pre(iSample)+1; + end when; + annotation ( + defaultComponentName="triMovMea", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-88,0},{70,0}}, + color={192,192,192}), + Polygon( + points={{92,0},{70,8},{70,-8},{92,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,0},{-52,0}}, + color={217,67,180}), + Line( + points={{-80,0},{-68.7,34.2},{-61.5,53.1},{-55.1,66.4},{-49.4,74.6},{-43.8,79.1},{-38.2,79.8},{-32.6,76.6},{-26.9,69.7},{-21.3,59.4},{-14.9,44.1},{-6.83,21.2},{10.1,-30.8},{17.3,-50.2},{23.7,-64.2},{29.3,-73.1},{35,-78.4},{40.6,-80},{46.2,-77.6},{51.9,-71.5},{57.5,-61.9},{63.9,-47.2},{72,-24.8},{80,0}}, + smooth=Smooth.Bezier, + color={28,108,200}), + Line( + points={{-52,36},{-24,36}}, + color={217,67,180}), + Line( + points={{-52,0},{-52,36}}, + color={217,67,180}, + smooth=Smooth.Bezier), + Line( + points={{-24,36},{-24,46}}, + color={217,67,180}, + smooth=Smooth.Bezier), + Line( + points={{-24,46},{4,46}}, + color={217,67,180}), + Line( + points={{4,4},{32,4}}, + color={217,67,180}), + Line( + points={{4,46},{4,4}}, + color={217,67,180}, + smooth=Smooth.Bezier), + Line( + points={{32,-32},{60,-32}}, + color={217,67,180}), + Line( + points={{32,4},{32,-32}}, + color={217,67,180}, + smooth=Smooth.Bezier), + Line( + points={{60,-58},{82,-58}}, + color={217,67,180}), + Line( + points={{60,-32},{60,-58}}, + color={217,67,180}, + smooth=Smooth.Bezier), + Ellipse( + extent={{-25,-10},{-45,10}}, + lineColor={176,181,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{45,-10},{25,10}}, + lineColor={176,181,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-45,0}}, + color={176,181,255}), + Line( + points={{45,0},{100,0}}, + color={176,181,255}), + Line( + points={{-35,0},{28,-48}}, + color={176,181,255}), + Line( + points={{0,-100},{0,-26}}, + color={255,0,255}), + Text( + extent={{56,92},{92,60}}, + textColor={28,108,200}, + textString="%n"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the triggered moving mean value of an input signal. +

+

+At the start of the simulation, and whenever the trigger signal is rising +(i.e., the trigger changes to true), the block samples +the input, computes the moving mean value over the past n samples, +and produces this value at its output y. +

+", + revisions=" +
    +
  • +March 30, 2022, by Michael Wetter:
    +Added discrete keyword to sampled variable.
    +This is for +Buildings, issue 2942. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Removed non-needed protected parameter t0. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +November 7, 2019, by Michael Wetter:
    +Reformulated model to use an equation rather than an algorithm section. +
  • +
  • +October 16, 2019, by Kun Zhang:
    +First implementation. This is for Buildings, issue 1588. +
  • +
+")); +end TriggeredMovingMean; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/TriggeredSampler.mo b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredSampler.mo new file mode 100644 index 0000000000..a21ae28181 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/TriggeredSampler.mo @@ -0,0 +1,101 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block TriggeredSampler + "Triggered sampling of continuous signals" + parameter Real y_start=0 + "Initial value of output signal"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Input for trigger that causes u to be sampled" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Input signal at the last trigger instant" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + y=y_start; + +equation + when trigger then + y=u; + end when; + annotation ( + defaultComponentName="triSam", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{25.0,-10.0},{45.0,10.0}}), + Line( + points={{-100.0,0.0},{-45.0,0.0}}, + color={0,0,127}), + Line( + points={{45.0,0.0},{100.0,0.0}}, + color={0,0,127}), + Line( + points={{0.0,-100.0},{0.0,-26.0}}, + color={255,0,255}), + Line( + points={{-35.0,0.0},{28.0,-48.0}}, + color={0,0,127}), + Ellipse( + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-45.0,-10.0},{-25.0,10.0}}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Samples the continuous input signal whenever the trigger input +signal is rising (i.e., trigger changes from false to +true) and provides the sampled input signal as output. +Before the first sampling, the output signal is equal to +the initial value defined via parameter y_start. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +May 18, 2017, by Michael Wetter:
    +Corrected documentation. +
  • +
  • +May 17, 2017, by Milica Grahovac:
    +First revision, based on the implementation of the +Modelica Standard Library. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end TriggeredSampler; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/UnitDelay.mo b/IBPSA/Controls/OBC/CDL/Discrete/UnitDelay.mo new file mode 100644 index 0000000000..1430a216ac --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/UnitDelay.mo @@ -0,0 +1,135 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block UnitDelay + "Output the input signal with a unit delay" + parameter Real samplePeriod( + final quantity="Time", + final unit="s", + min=1E-3) + "Sample period of component"; + parameter Real y_start=0 + "Initial value of output signal"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Input signal at the previous sample instant" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + output Boolean sampleTrigger + "True, if sample time instant"; + discrete Real u_internal + "Input value at each sampling moment"; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer(time/samplePeriod)*samplePeriod, + n=6); + y=y_start; + u_internal=y_start; + +equation + // Declarations that are used for all discrete blocks + sampleTrigger=sample( + t0, + samplePeriod); + when sampleTrigger then + u_internal=u; + y=pre(u_internal); + end when; + annotation ( + defaultComponentName="uniDel", + Documentation( + info=" +

+Block that outputs the input signal with a unit delay: +

+
+          1
+     y = --- * u
+          z
+
+

+that is, the output signal y is the +input signal u of the +previous sample instant. Before the second sample instant, +the output y is identical to parameter y_start. +

+", + revisions=" +
    +
  • +August 8, 2024, by Jianjun Hu:
    +Delayed the input.
    +This is for +Buildings, issue 3953. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Michael Wetter:
    +Removed parameter startTime to allow model to work +also for negative start time without having to change the value of this +parameters.
    +This is for Buildings, issue 938. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-30.0,0.0},{30.0,0.0}}, + color={0,0,127}), + Text( + textColor={0,0,127}, + extent={{-90.0,10.0},{90.0,90.0}}, + textString="1"), + Text( + textColor={0,0,127}, + extent={{-90.0,-90.0},{90.0,-10.0}}, + textString="z"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end UnitDelay; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo new file mode 100644 index 0000000000..19bf4a00ba --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mo @@ -0,0 +1,62 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model FirstOrderHold + "Example model for the FirstOrderHold block" + IBPSA.Controls.OBC.CDL.Discrete.FirstOrderHold firOrdHol( + samplePeriod=0.2) + "Block that first order hold of a sampled-data system" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Cos cos1 + "Block that outputs the cosine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ramp1.y,cos1.u) + annotation (Line(points={{-38,0},{-12,0},{-12,0}},color={0,0,127})); + connect(cos1.y,firOrdHol.u) + annotation (Line(points={{12,0},{12,0},{28,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/FirstOrderHold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.FirstOrderHold. +

+", + revisions=" +
    +
  • +September 14, 2017, by Michael Wetter:
    +Changed example to have non-zero initial conditions. +
  • +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end FirstOrderHold; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/Sampler.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/Sampler.mo new file mode 100644 index 0000000000..e39791f57f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/Sampler.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model Sampler + "Example model for the Sampler block" + IBPSA.Controls.OBC.CDL.Discrete.Sampler sampler1( + samplePeriod=0.2) + "Ideal sampler of a continuous signal" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-39,0},{-12,0},{-12,0}},color={0,0,127})); + connect(sin1.y,sampler1.u) + annotation (Line(points={{11,0},{20,0},{28,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/Sampler.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.Sampler. +

+", + revisions=" +
    +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Sampler; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo new file mode 100644 index 0000000000..a0a0c374ea --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model TriggeredMax + "Example model for the TriggeredMax block" + IBPSA.Controls.OBC.CDL.Discrete.TriggeredMax triggeredMax + "Output the maximum, absolute value of a continuous signal at trigger instants" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=0.2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-39,0},{-12,0},{-12,0}},color={0,0,127})); + connect(sin1.y,triggeredMax.u) + annotation (Line(points={{11,0},{19.5,0},{28,0}},color={0,0,127})); + connect(booPul.y,triggeredMax.trigger) + annotation (Line(points={{11,-40},{26,-40},{40,-40},{40,-11.8}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMax.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.TriggeredMax. +

+", + revisions=" +
    +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TriggeredMax; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo new file mode 100644 index 0000000000..a7d30aca3d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mo @@ -0,0 +1,83 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model TriggeredMovingMean + "Validation model for the TriggeredMovingMean block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + freqHz=1/8, + phase=0.5235987755983, + startTime=-0.5) + "Example input signal" + annotation (Placement(transformation(extent={{-60,40},{-40,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=1, + shift=-0.5) + "Block that outputs trigger signals" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean triMovMea( + n=3) + "Triggered moving mean with 3 samples to average" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean triMovMea1( + n=1) + "Triggered moving mean with 1 sample to average" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean triMovMea2( + n=3) + "Triggered moving mean with 3 samples to average with a different trigger period" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1) + "Block that outputs trigger signals" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + +equation + connect(sin.y,triMovMea.u) + annotation (Line(points={{-38,50},{-20,50},{-20,10},{-2,10}},color={0,0,127})); + connect(booPul.y,triMovMea.trigger) + annotation (Line(points={{-38,-10},{10,-10},{10,-2}},color={255,0,255})); + connect(booPul.y,triMovMea1.trigger) + annotation (Line(points={{-38,-10},{-10,-10},{-10,30},{10,30},{10,58}},color={255,0,255})); + connect(sin.y,triMovMea1.u) + annotation (Line(points={{-38,50},{-20,50},{-20,70},{-2,70}},color={0,0,127})); + connect(booPul1.y,triMovMea2.trigger) + annotation (Line(points={{-38,-70},{10,-70},{10,-62}},color={255,0,255})); + connect(sin.y,triMovMea2.u) + annotation (Line(points={{-38,50},{-20,50},{-20,-50},{-2,-50}},color={0,0,127})); + annotation ( + experiment( + StartTime=-0.5, + StopTime=15.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredMovingMean.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean. +

+", + revisions=" +
    +
  • +October 16, 2019 by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TriggeredMovingMean; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo new file mode 100644 index 0000000000..17798c10d4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mo @@ -0,0 +1,72 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model TriggeredSampler + "Example model for the TriggeredSampler block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=0.2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-10,-50},{10,-30}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Triggered sampler wity y_start = 0" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1( + y_start=1) + "Triggered sampler with y_start = 1" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-39,0},{-22,0}},color={0,0,127})); + connect(sin1.y,triSam.u) + annotation (Line(points={{1,0},{38,0}},color={0,0,127})); + connect(booPul.y,triSam.trigger) + annotation (Line(points={{11,-40},{50,-40},{50,-12},{50,-11.8}},color={255,0,255})); + connect(sin1.y,triSam1.u) + annotation (Line(points={{1,0},{30,0},{30,50},{58,50}},color={0,0,127})); + connect(booPul.y,triSam1.trigger) + annotation (Line(points={{11,-40},{70,-40},{70,38.2}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/TriggeredSampler.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler. +

+", + revisions=" +
    +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TriggeredSampler; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo new file mode 100644 index 0000000000..cbed5b698c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model UnitDelay + "Example model for the UnitDelay block" + IBPSA.Controls.OBC.CDL.Discrete.UnitDelay unitDelay1( + samplePeriod=0.2) + "Sample period of component" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-39,0},{-12,0},{-12,0}},color={0,0,127})); + connect(sin1.y,unitDelay1.u) + annotation (Line(points={{11,0},{20,0},{28,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/UnitDelay.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.UnitDelay. +

+", + revisions=" +
    +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end UnitDelay; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo new file mode 100644 index 0000000000..dac2bb8dd9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mo @@ -0,0 +1,62 @@ +within IBPSA.Controls.OBC.CDL.Discrete.Validation; +model ZeroOrderHold + "Example model for the ZeroOrderHold block" + IBPSA.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol( + samplePeriod=0.2) + "Output the input signal with a zero order hold" + annotation (Placement(transformation(extent={{30,-10},{50,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Cos cos1 + "Block that outputs the cosine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ramp1.y,cos1.u) + annotation (Line(points={{-39,0},{-12,0},{-12,0}},color={0,0,127})); + connect(cos1.y,zerOrdHol.u) + annotation (Line(points={{11,0},{20,0},{28,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Discrete/Validation/ZeroOrderHold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Discrete.ZeroOrderHold. +

+", + revisions=" +
    +
  • +September 14, 2017, by Michael Wetter:
    +Changed example to have non-zero initial conditions. +
  • +
  • +March 31, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end ZeroOrderHold; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.mo new file mode 100644 index 0000000000..2729317450 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.mo @@ -0,0 +1,41 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +package Validation "Collection of models that validate the discrete blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Discrete. +

+", +revisions=" +
    +
  • +September 13, 2023, by Jianjun Hu:
    +Changed the package name from Examples to Validation. +This is for Buildings, issue 3517. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.order b/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.order new file mode 100644 index 0000000000..202f8ba5ec --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/Validation/package.order @@ -0,0 +1,7 @@ +FirstOrderHold +Sampler +TriggeredMax +TriggeredMovingMean +TriggeredSampler +UnitDelay +ZeroOrderHold diff --git a/IBPSA/Controls/OBC/CDL/Discrete/ZeroOrderHold.mo b/IBPSA/Controls/OBC/CDL/Discrete/ZeroOrderHold.mo new file mode 100644 index 0000000000..a4192aaa3c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/ZeroOrderHold.mo @@ -0,0 +1,123 @@ +within IBPSA.Controls.OBC.CDL.Discrete; +block ZeroOrderHold + "Output the input signal with a zero order hold" + parameter Real samplePeriod( + final quantity="Time", + final unit="s", + min=1E-3) + "Sample period of component"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be sampled" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Zero order hold of the input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + output Real ySample( + fixed=true, + start=0) + "Sampled value of input"; + output Boolean sampleTrigger + "True, if sample time instant"; + output Boolean firstTrigger( + start=false, + fixed=true) + "Rising edge signals first sample instant"; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer(time/samplePeriod)*samplePeriod, + n=6); + +equation + // Declarations that are used for all discrete blocks + sampleTrigger=sample( + t0, + samplePeriod); + when sampleTrigger then + firstTrigger=time <= t0+samplePeriod/2; + end when; + // Declarations specific to this type of discrete block + when {sampleTrigger,initial()} then + ySample=u; + end when; + /* Define y=ySample with an infinitesimal delay to break potential + algebraic loops if both the continuous and the discrete part have + direct feedthrough + */ + y=pre(ySample); + annotation ( + defaultComponentName="zerOrdHol", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-78.0,-42.0},{-52.0,-42.0},{-52.0,0.0},{-26.0,0.0},{-26.0,24.0},{-6.0,24.0},{-6.0,64.0},{18.0,64.0},{18.0,20.0},{38.0,20.0},{38.0,0.0},{44.0,0.0},{44.0,0.0},{62.0,0.0}}, + color={0,0,127}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the sampled input signal at sample +time instants. The output signal is held at the value of the last +sample instant during the sample points. +At initial time, the block feeds the input directly to the output. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Michael Wetter:
    +Removed parameter startTime to allow model to work +also for negative start time without having to change the value of this +parameters.
    +This is for Buildings, issue 938. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end ZeroOrderHold; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/package.mo b/IBPSA/Controls/OBC/CDL/Discrete/package.mo new file mode 100644 index 0000000000..a35342737c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/package.mo @@ -0,0 +1,61 @@ +within IBPSA.Controls.OBC.CDL; +package Discrete "Package with discrete blocks" + annotation ( + Documentation( + info=" +

+This package contains discrete control blocks +with fixed sample period. +Every component of this package is structured in the following way: +

+
    +
  1. A component has continuous Real input and output signals.
  2. +
  3. The input signals are sampled by the given sample period + defined via parameter samplePeriod. + The first sample instant is defined by the parameter startTime. +
  4. +
  5. The output signals are computed from the sampled input signals. +
  6. +
+ +", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Line( + points={{-88,0},{-45,0}}, + color={95,95,95}), + Ellipse( + lineColor={95,95,95}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-45,-10},{-25,10}}), + Line( + points={{-35,0},{24,52}}, + color={95,95,95}), + Ellipse( + lineColor={95,95,95}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{25,-10},{45,10}}), + Line( + points={{45,0},{82,0}}, + color={95,95,95})})); +end Discrete; diff --git a/IBPSA/Controls/OBC/CDL/Discrete/package.order b/IBPSA/Controls/OBC/CDL/Discrete/package.order new file mode 100644 index 0000000000..9303418f38 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Discrete/package.order @@ -0,0 +1,8 @@ +FirstOrderHold +Sampler +TriggeredMax +TriggeredMovingMean +TriggeredSampler +UnitDelay +ZeroOrderHold +Validation diff --git a/IBPSA/Controls/OBC/CDL/Integers/Abs.mo b/IBPSA/Controls/OBC/CDL/Integers/Abs.mo new file mode 100644 index 0000000000..11be997b63 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Abs.mo @@ -0,0 +1,109 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Abs + "Output the absolute value of the input" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input for absolute function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Absolute value of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if u >= 0 then u else -u; + annotation ( + defaultComponentName="absInt", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + points={{92,0},{70,8},{70,-8},{92,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{0,-14},{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), + Text( + extent={{-34,-28},{38,-76}}, + textColor={192,192,192}, + textString="abs"), + Line( + points={{-88,0},{76,0}}, + color={192,192,192}), + Ellipse( + extent={{-68,68},{-60,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-38,38},{-30,30}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-4,4},{4,-4}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{28,38},{36,30}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{58,68},{66,60}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-64,-6},{-64,6}}, + color={192,192,192}), + Line( + points={{-34,-6},{-34,6}}, + color={192,192,192}), + Line( + points={{32,-6},{32,6}}, + color={192,192,192}), + Line( + points={{62,-6},{62,6}}, + color={192,192,192}), + Line( + points={{-8,64},{8,64}}, + color={192,192,192}), + Line( + points={{-8,34},{8,34}}, + color={192,192,192})}), + Documentation( + info=" +

+Block that outputs y = abs(u), +where +u is an Integer input. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Abs; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Add.mo b/IBPSA/Controls/OBC/CDL/Integers/Add.mo new file mode 100644 index 0000000000..9b610b866a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Add.mo @@ -0,0 +1,70 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Add + "Output the sum of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input to be added" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input to be added" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Sum of the two inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1+u2; + +annotation (defaultComponentName="addInt", + Documentation(info=" +

+Block that outputs y as the sum of the +two Integer input signals u1 and u2, +

+
+    y = u1 + u2.
+
+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Removed gain factors.
    +This is for Buildings, issue 2865. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,60},{-74,24},{-44,24}}, + color={255,127,0}), + Line( + points={{-100,-60},{-74,-28},{-42,-28}}, + color={255,127,0}), + Ellipse( + lineColor={255,127,0}, + extent={{-50,-50},{50,50}}), + Line( + points={{50,0},{100,0}}, + color={255,127,0}), + Text( + extent={{-36,-24},{40,44}}, + textString="+")})); +end Add; diff --git a/IBPSA/Controls/OBC/CDL/Integers/AddParameter.mo b/IBPSA/Controls/OBC/CDL/Integers/AddParameter.mo new file mode 100644 index 0000000000..64d2973341 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/AddParameter.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block AddParameter "Output the sum of an input plus a parameter" + parameter Integer p + "Parameter to be added to the input"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input to be added to the parameter" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Sum of the parameter and the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u+p; + annotation ( + defaultComponentName="addPar", + Documentation( + info=" +

+Block that outputs y = u + p, +where p is parameter and u is an input. +

+", +revisions=" + +"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line(points={{-54,66},{-28,30},{2,30}}, color={255,127,0}), + Line(points={{-100,0},{100,0}}, color={255,127,0}), + Text( + extent={{-122,58},{-17,98}}, + textColor={255,127,0}, + textString="%p"), + Ellipse( + lineColor={255,127,0}, + extent={{-12,-52},{88,48}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{0,-26},{76,42}}, + textString="+", + textColor={255,127,0}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end AddParameter; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Change.mo b/IBPSA/Controls/OBC/CDL/Integers/Change.mo new file mode 100644 index 0000000000..5b6fbb429a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Change.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Change + "Output whether the Integer input changes values, increases or decreases" + parameter Integer pre_u_start=0 + "Start value of pre(u) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Integer to be monitored for a change in value" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output that is true when the input changes its value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput up + "Output that is true when the input increased its value" + annotation (Placement(transformation(extent={{100,40},{140,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput down + "Output that is true when the input decreased its value" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); + +initial equation + pre(u)=pre_u_start; + +equation + y=change(u); + up=u > pre(u); + down=u < pre(u); + annotation ( + defaultComponentName="cha", + Icon( + coordinateSystem( + preserveAspectRatio=true), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-50,62},{50,-56}}, + textColor={255,127,0}, + textString="change"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that evaluates the integer input u to check if its value +changes. +

+
    +
  • +When the input u changes, the output y will be +true, otherwise it will be false. +
  • +
  • +When the input u increases, the output up will be +true, otherwise it will be false. +
  • +
  • +When the input u decreases, the output down will be +true, otherwise it will be false. +
  • +
+", + revisions=" +
    +
  • +May 3, 2022, by Michael Wetter:
    +Renamed parameter y_start to pre_u_start.
    +This is for +Buildings, issue 2990. +
  • +
  • +January 26, 2021, by Michael Wetter:
    +Changed initialization of pre(u) to use the initial value of the input rather than 0.
    +This is for +Buildings, issue 2294. +
  • +
  • +July 18, 2018, by Michael Wetter:
    +Revised model and icon. +
  • +
  • +July 13, 2018, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Change; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Equal.mo b/IBPSA/Controls/OBC/CDL/Integers/Equal.mo new file mode 100644 index 0000000000..6ff03796b1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Equal.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Equal + "Output y is true, if input u1 is equal to input u2" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input to be checked for equality with other input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input to be checked for equality with other input" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs that is true if the two inputs are equal, and false otherwise" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 == u2; + annotation ( + defaultComponentName="intEqu", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,10},{52,-10}}, + lineColor={255,127,0}), + Line( + points={{-100,-80},{42,-80},{42,0}}, + color={255,127,0}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-76,-36},{20,54}}, + textColor={255,127,0}, + textString="=")}), + Documentation( + info=" +

+Block that outputs true if the Integer input u1 +is equal to the Integer input u2. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Equal; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Greater.mo b/IBPSA/Controls/OBC/CDL/Integers/Greater.mo new file mode 100644 index 0000000000..fe81658840 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Greater.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Greater + "Output y is true, if input u1 is greater than input u2" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "First input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Second input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 is greater than u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 > u2; + annotation ( + defaultComponentName="intGre", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,10},{52,-10}}, + lineColor={255,127,0}), + Line( + points={{-100,-80},{42,-80},{42,0}}, + color={255,127,0}), + Line( + points={{-54,22},{-8,2},{-54,-18}}, + thickness=0.5, + color={255,127,0}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if the Integer input u1 +is greater than the Integer input u2. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Greater; diff --git a/IBPSA/Controls/OBC/CDL/Integers/GreaterEqual.mo b/IBPSA/Controls/OBC/CDL/Integers/GreaterEqual.mo new file mode 100644 index 0000000000..62d7966e87 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/GreaterEqual.mo @@ -0,0 +1,78 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block GreaterEqual + "Output y is true, if input u1 is greater or equal than input u2" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "First input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Second input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 is greater or equal than u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 >= u2; + annotation ( + defaultComponentName="intGreEqu", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,10},{52,-10}}, + lineColor={255,127,0}), + Line( + points={{-100,-80},{42,-80},{42,0}}, + color={255,127,0}), + Line( + points={{-54,22},{-8,2},{-54,-18}}, + thickness=0.5, + color={255,127,0}), + Line( + points={{-52,-36},{-6,-14}}, + thickness=0.5, + color={255,127,0}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if Integer the input u1 +is greater than or equal to the Integer input u2. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end GreaterEqual; diff --git a/IBPSA/Controls/OBC/CDL/Integers/GreaterEqualThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/GreaterEqualThreshold.mo new file mode 100644 index 0000000000..62b344c199 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/GreaterEqualThreshold.mo @@ -0,0 +1,80 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block GreaterEqualThreshold + "Output y is true, if input u is greater or equal than a threshold" + parameter Integer t=0 + "Threshold against which the input is compared to"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input to be compared against the threshold" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is greater or equal than the threshold" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u >= t; + annotation ( + defaultComponentName="intGreEquThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%t"), + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-54,22},{-8,2},{-54,-18}}, + thickness=0.5, + color={255,127,0}), + Line( + points={{-52,-36},{-6,-14}}, + thickness=0.5, + color={255,127,0})}), + Documentation( + info=" +

+Block that outputs true if the Integer input is greater than or equal to +the parameter t. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 6, 2020, by Michael Wetter:
    +Renamed threshold to t.
    +This is for Buildings, issue 2076. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end GreaterEqualThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/GreaterThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/GreaterThreshold.mo new file mode 100644 index 0000000000..7f20cf1d8b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/GreaterThreshold.mo @@ -0,0 +1,76 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block GreaterThreshold + "Output y is true, if input u is greater than a threshold" + parameter Integer t=0 + "Threshold against which the input is compared to"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input to be compared against the threshold" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is greater than the threshold" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u > t; + annotation ( + defaultComponentName="intGreThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%t"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-54,22},{-8,2},{-54,-18}}, + thickness=0.5, + color={255,127,0})}), + Documentation( + info=" +

+Block that outputs true if the Integer input is greater than +the parameter t. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 6, 2020, by Michael Wetter:
    +Renamed threshold to t.
    +This is for Buildings, issue 2076. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end GreaterThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Less.mo b/IBPSA/Controls/OBC/CDL/Integers/Less.mo new file mode 100644 index 0000000000..2c793fd9e4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Less.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Less + "Output y is true, if input u1 is less than input u2" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "First input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Second input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 is less than u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 < u2; + annotation ( + defaultComponentName="intLes", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,10},{52,-10}}, + lineColor={255,127,0}), + Line( + points={{-100,-80},{42,-80},{42,0}}, + color={255,127,0}), + Line( + points={{-6,18},{-50,-2},{-6,-20}}, + thickness=0.5, + color={255,127,0}), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if the Integer input u1 +is less than the Integer input u2. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Less; diff --git a/IBPSA/Controls/OBC/CDL/Integers/LessEqual.mo b/IBPSA/Controls/OBC/CDL/Integers/LessEqual.mo new file mode 100644 index 0000000000..56f1e14e97 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/LessEqual.mo @@ -0,0 +1,78 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block LessEqual + "Output y is true, if input u1 is less or equal than input u2" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "First input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Second input" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 is less or equal than u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 <= u2; + annotation ( + defaultComponentName="intLesEqu", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{32,10},{52,-10}}, + lineColor={255,127,0}), + Line( + points={{-100,-80},{42,-80},{42,0}}, + color={255,127,0}), + Line( + points={{-10,20},{-54,0},{-10,-18}}, + thickness=0.5, + color={255,127,0}), + Line( + points={{-54,-18},{-14,-34}}, + thickness=0.5, + color={255,127,0}), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if the Integer input u1 +is less than or equal to the Integer input u2. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end LessEqual; diff --git a/IBPSA/Controls/OBC/CDL/Integers/LessEqualThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/LessEqualThreshold.mo new file mode 100644 index 0000000000..e7684209e6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/LessEqualThreshold.mo @@ -0,0 +1,80 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block LessEqualThreshold + "Output y is true, if input u is less or equal than a threshold" + parameter Integer t=0 + "Threshold for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input to be compared" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is less or equal than the threshold" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u <= t; + annotation ( + defaultComponentName="intLesEquThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%t"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-54,-18},{-14,-34}}, + thickness=0.5, + color={255,127,0}), + Line( + points={{-10,20},{-54,0},{-10,-18}}, + thickness=0.5, + color={255,127,0})}), + Documentation( + info=" +

+Block that outputs true if the Integer input is less than or equal to +the parameter t. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 6, 2020, by Michael Wetter:
    +Renamed threshold to t.
    +This is for Buildings, issue 2076. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end LessEqualThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/LessThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/LessThreshold.mo new file mode 100644 index 0000000000..c7eb2a775b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/LessThreshold.mo @@ -0,0 +1,71 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block LessThreshold + "Output y is true, if input u is less than a threshold" + parameter Integer t=0 + "Threshold for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input to be compared against the threshold" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is less than the threshold" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u < t; + annotation ( + defaultComponentName="intLesThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%t"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-10,20},{-54,0},{-10,-18}}, + thickness=0.5, + color={255,127,0})}), + Documentation( + info=" +

+Block that outputs true if the Integer input is less than +the parameter t. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end LessThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Max.mo b/IBPSA/Controls/OBC/CDL/Integers/Max.mo new file mode 100644 index 0000000000..1f1bc80502 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Max.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Max + "Pass through the largest signal" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input to the max function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input to the max function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Maximum of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=max(u1, u2); + annotation ( + defaultComponentName="maxInt", + Documentation( + info=" +

+Block that outputs y = max(u1, u2), +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +January 9, 2017, by Milica Grahovac:
    +First integer implementation, based on the implementation of the +Modelica Standard Library. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="max()")})); +end Max; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Min.mo b/IBPSA/Controls/OBC/CDL/Integers/Min.mo new file mode 100644 index 0000000000..16873247e2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Min.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Min + "Pass through the smallest signal" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input to the min function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input to the max function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Minimum of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=min(u1, u2); + annotation ( + defaultComponentName="minInt", + Documentation( + info=" +

+Block that outputs y = min(u1, u2), +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +January 9, 2017, by Milica Grahovac:
    +First integer implementation, based on the implementation of the +Modelica Standard Library. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="min()")})); +end Min; diff --git a/IBPSA/Controls/OBC/CDL/Integers/MultiSum.mo b/IBPSA/Controls/OBC/CDL/Integers/MultiSum.mo new file mode 100644 index 0000000000..05d90b9356 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/MultiSum.mo @@ -0,0 +1,84 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block MultiSum + "Sum of Integers, y = k[1]*u[1] + k[2]*u[2] + ... + k[n]*u[n]" + parameter Integer nin(min=0)=0 + "Number of input connections" + annotation (Dialog(connectorSizing=true),HideResult=true); + parameter Integer k[nin]=fill(1, nin) + "Input gains"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Inputs to be multipled with gain and added" + annotation (Placement(transformation(extent={{-140,70},{-100,-70}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Sum of inputs multiplied by the gain" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + if size(u, 1) > 0 then + y=k*u; + else + y=0; + end if; + annotation ( + defaultComponentName="mulSumInt", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-200,-110},{200,-140}}, + textColor={0,0,0}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="%k"), + Text( + extent={{-82,84},{82,-52}}, + textColor={255,127,0}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="+"), + Text( + extent={{-144,150},{156,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs +

+

+y = ∑i=1n ki   ui, +

+

+where k is a parameter with n elements and u is +an input of the same length. +The dimension of u can be enlarged by +drawing an additional connection line. The connection is automatically connected +to this new free index. +

+ +

+If no connection to the input connector u is present, +the output is y=0. +

+

+See + +IBPSA.Controls.OBC.CDL.Integers.Validation.MultiSum +for an example. +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the Modelica Standard +Library. This is for +Buildings, issue 933. +
  • +
+")); +end MultiSum; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Multiply.mo b/IBPSA/Controls/OBC/CDL/Integers/Multiply.mo new file mode 100644 index 0000000000..fe78df1088 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Multiply.mo @@ -0,0 +1,71 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Multiply "Output product of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input for multiplication" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input for multiplication" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Product of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1*u2; + annotation ( + defaultComponentName="mulInt", + Documentation( + info=" +

+Block that outputs y = u1 * u2, +where +u1 and u2 are Integer inputs. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Product to Multiply.
    +This is for Buildings, issue 2865. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,60},{-40,60},{-30,40}}, + color={255,127,0}), + Line( + points={{-100,-60},{-40,-60},{-30,-40}}, + color={255,127,0}), + Line( + points={{50,0},{100,0}}, + color={255,127,0}), + Line( + points={{-30,0},{30,0}}), + Line( + points={{-15,25.99},{15,-25.99}}), + Line( + points={{-15,-25.99},{15,25.99}}), + Ellipse( + lineColor={255,127,0}, + extent={{-50,-50},{50,50}}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})})); +end Multiply; diff --git a/IBPSA/Controls/OBC/CDL/Integers/OnCounter.mo b/IBPSA/Controls/OBC/CDL/Integers/OnCounter.mo new file mode 100644 index 0000000000..f163c92e22 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/OnCounter.mo @@ -0,0 +1,79 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block OnCounter + "Increment the output if the input switches to true" + parameter Integer y_start=0 + "Initial and reset value of y if input reset switches to true"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Trigger, when set to true, the counter increases" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput reset + "Reset, when true, the counter is set to y_start" + annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Counter value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + pre(y)=y_start; + +equation + when {trigger,reset} then + y=if reset then + y_start + else + pre(y)+1; + end when; + annotation ( + defaultComponentName="onCouInt", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}, + initialScale=0.06), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-64,-62},{58,-86}}, + textColor={0,0,0}, + textString="reset"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs how often the trigger input changed to true +since the last invocation of reset. +

+

+This block may be used as a counter. Its output y starts +at the parameter value y_start. +Whenever the input signal trigger changes to true, +the output is incremented by 1. +When the input reset changes to true, +then the output is reset to y = y_start. +If both inputs trigger and reset change +simultaneously, then the ouput is y = y_start. +

+", + revisions=" +
    +
  • +October 21, 2021, by Michael Wetter:
    +Removed errorneous visible attribute in icon. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end OnCounter; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Constant.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Constant.mo new file mode 100644 index 0000000000..3d1bece672 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Constant.mo @@ -0,0 +1,62 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources; +block Constant + "Output constant signal of type Integer" + parameter Integer k + "Constant output value"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Output with constant value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=k; + annotation ( + defaultComponentName="conInt", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{82,-70}}, + color={192,192,192}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,0},{80,0}}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="k=%k")}), + Documentation( + info=" +

+Block that outputs a constant signal y = k, +where k is an Integer-valued parameter. +

+ +

+\"IntegerConstant.png\" +

+")); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Pulse.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Pulse.mo new file mode 100644 index 0000000000..5131cecfa5 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Pulse.mo @@ -0,0 +1,162 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources; +block Pulse + "Generate pulse signal of type Integer" + parameter Integer amplitude=1 + "Amplitude of pulse"; + parameter Real width( + final min=Constants.small, + final max=1, + final unit="1")=0.5 + "Width of pulse in fraction of period"; + parameter Real period( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Time for one period"; + parameter Real shift( + final quantity="Time", + final unit="s")=0 + "Shift time for output"; + parameter Integer offset=0 + "Offset of output signals"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Output connector with pulse value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Logical.Sources.Pulse booPul( + final width=width, + final period=period, + final shift=shift) + "Boolean pulse" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Conversions.BooleanToInteger booToInt( + final integerTrue=offset+amplitude, + final integerFalse=offset) + "Boolean to integer conversion" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +equation + connect(booPul.y,booToInt.u) + annotation (Line(points={{-18,0},{18,0}},color={255,0,255})); + connect(booToInt.y,y) + annotation (Line(points={{42,0},{100,0}},color={255,127,0})); + annotation ( + defaultComponentName="intPul", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={244,125,35}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={244,125,35}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{82,-70}}, + color={255,170,85}), + Text( + extent={{-147,-152},{153,-112}}, + textColor={0,0,0}, + textString="period=%period"), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3))), + Line( + points={{-132,-18}}, + color={28,108,200}), + Polygon( + points={{-80,52},{-68,56},{-68,48},{-80,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{-80,52},{-4,52}}, + color={135,135,135}), + Text( + extent={{-66,80},{-8,56}}, + textColor={135,135,135}, + textString="%period"), + Polygon( + points={{-2,52},{-14,56},{-14,48},{-2,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{40,34},{72,34}}, + color={135,135,135}), + Polygon( + points={{74,34},{62,38},{62,30},{74,34}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Text( + extent={{38,64},{96,40}}, + textColor={135,135,135}, + textString="%shift"), + Line( + points={{79,-70},{40,-70},{40,44},{-1,44},{-1,-70},{-41,-70},{-41,44},{-80,44}}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={244,125,35}, + fillColor={244,125,35}, + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+Block that outputs a pulse signal as shown below. +

+

+\"Pulse.png\" +

+

+The pulse signal is generated an infinite number of times, and aligned with time=shift. +

+", + revisions=" +
    +
  • +December 03, 2020, by Milica Grahovac:
    +Renamed delay parameter to shift.
    +This is for +Buildings, issue 2282. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation, avoided state events.
    +This is for +Buildings, issue 2170. +
  • +
  • +September 8, 2020, by Milica Grahovac:
    +First implementation, based on the implementation of Real pulse. +
  • +
+")); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/TimeTable.mo new file mode 100644 index 0000000000..d59e32ec7f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/TimeTable.mo @@ -0,0 +1,221 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources; +block TimeTable + "Table look-up with respect to time with constant segments" + parameter Real table[:,:] + "Table matrix with time as a first table column (in seconds, unless timeScale is not 1) and Integers in all other columns"; + parameter Real timeScale( + final unit="1")=1 + "Time scale of first table column. Set to 3600 if time in table is in hours"; + parameter Real period( + final quantity="Time", + final unit="s", + min=1E-6) + "Periodicity of table"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout] + "Output with tabulated values" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer nout=size( + table, + 2)-1 + "Dimension of output vector"; + final parameter Integer nT=size( + table, + 1) + "Number of time stamps"; + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + final parameter Real timeStamps[:]( + each final quantity="Time", + each final unit="s")=timeScale*table[1:end,1] + "Time stamps"; + final parameter Integer val[:,:]=integer( + table[1:end,2:end]+ones( + nT, + nout)*Constants.small) + "Table values as Integer"; + Integer idx( + fixed=false) + "Index for table lookup"; + function getIndex + "Function to get the index for the table look-up" + input Real t( + final quantity="Time", + final unit="s") + "Current time"; + input Real period( + final quantity="Time", + final unit="s") + "Time period"; + input Real x[:]( + each final quantity="Time", + each final unit="s") + "Time stamps"; + output Integer k + "Index in table"; + + protected + Real tS( + final quantity="Time", + final unit="s") + "Time shifted so it is within the period"; + + algorithm + tS := mod( + t, + period); + k :=-1; + for i in size( + x, + 1):-1:1 loop + if tS >= x[i]-1E-6 then + k := i; + break; + end if; + end for; + end getIndex; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer(time/period)*period, + n=6); + assert( + nT > 0, + "No table values defined."); + // Check that all values in the second column are Integer values + for i in 1:nT loop + for j in 2:size( + table, + 2) loop + assert( + abs( + table[i,j]-integer( + table[i,j])) < Constants.small, + "In "+getInstanceName()+": Table value table["+String(i)+", "+String(j)+"] = "+String( + table[i,j])+" is not an Integer."); + end for; + end for; + assert( + abs( + table[1,1]) < Constants.small, + "In "+getInstanceName()+": First time stamp must be zero as otherwise no data is defined for the start of the table."); + assert( + period-table[1,end] > Constants.small, + "In "+getInstanceName()+": Last time stamp in table must be smaller than period."); + idx=getIndex( + time, + period, + timeStamps); + y[:]=val[idx,:]; + +equation + when {sample(t0+timeStamps[i],period) for i in 1:nT} then + idx=getIndex( + time, + period, + timeStamps); + y[:]=val[idx,:]; + end when; + annotation ( + defaultComponentName="intTimTab", + Documentation( + info=" +

+Block that outputs Integer time table values. +

+

+The block takes as a parameter a time table of a format: +

+
+table = [ 0*3600, 2;
+          6*3600, 1;
+         18*3600, 8];
+period = 24*3600;
+
+

+where the first column of table is time and the remaining column(s) are the table values. +The time column contains Real values that are in units of seconds if timeScale = 1. +The parameter timeScale can be used to scale the time values, for example, use +timeScale = 3600 if the values in the first column are interpreted as hours. +

+

+The values in column two and higher must be of type Integer, otherwise the model stops with an error. +

+

+Until a new tabulated value is set, the previous tabulated value is returned. +

+

+The table scope is repeated periodically with periodicity period. +

+", + revisions=" +
    +
  • +October 21, 2021, by Michael Wetter:
    +Removed writing output value in icon (as it is an array of values). +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Revised to call round() as a function.
    +For Buildings, issue 2170. +
  • +
  • +October 7, 2020, by Michael Wetter:
    +Revised implementation to add timeSpan and to guard against rounding errors. +Refactored to avoid non-needed event-triggering functions. +Removed parameter offset as I don't see a use case that justifies this complexity. +
  • +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation based on continuous time table implementation in CDL. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={244,125,35}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-80.0,90.0},{-88.0,68.0},{-72.0,68.0},{-80.0,90.0}}), + Line( + points={{-80.0,68.0},{-80.0,-80.0}}, + color={192,192,192}), + Line( + points={{-90.0,-70.0},{82.0,-70.0}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90.0,-70.0},{68.0,-62.0},{68.0,-78.0},{90.0,-70.0}}), + Rectangle( + lineColor={255,255,255}, + fillColor={255,215,136}, + fillPattern=FillPattern.Solid, + extent={{-48.0,-50.0},{2.0,70.0}}), + Line( + points={{-48.0,-50.0},{-48.0,70.0},{52.0,70.0},{52.0,-50.0},{-48.0,-50.0},{-48.0,-20.0},{52.0,-20.0},{52.0,10.0},{-48.0,10.0},{-48.0,40.0},{52.0,40.0},{52.0,70.0},{2.0,70.0},{2.0,-51.0}})})); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mo new file mode 100644 index 0000000000..83b1efc9dd --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mo @@ -0,0 +1,44 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources.Validation; +model Constant + "Validate the Constant block" + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant con( + k=5) + "Block output integer constant value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Constant.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Sources.Constant. +

+ +", + revisions=" +
    +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mo new file mode 100644 index 0000000000..d444a49170 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources.Validation; +model Pulse + "Validation model for the Integer Pulse block" + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse pul3( + amplitude=1, + width=0.5, + period=1, + offset=3) + "Block that generates pulse signal of type Integer at simulation start time" + annotation (Placement(transformation(extent={{-10,-80},{10,-60}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse pul1( + amplitude=2, + width=0.5, + period=1, + offset=1, + shift=1.75) + "Block that generates pulse signal of type Integer starting from after the simulation start time" + annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse pul2( + amplitude=3, + width=0.5, + period=1, + offset=-2, + shift=-1.25) + "Block that generates pulse signal of type Integer starting from before the simulation start time" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse pul( + width=0.5, + period=1) + "Block that generates pulse signal of type Integer at simulation start time and has infinite number of periods" + annotation (Placement(transformation(extent={{-10,40},{10,60}}))); + annotation ( + experiment( + StopTime=5, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/Pulse.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse. +

+", + revisions=" +
    +
  • +September 8, 2020, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mo new file mode 100644 index 0000000000..59164ca38d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources.Validation; +model TimeTable + "Validation model for TimeTable block" + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab( + table=[ + 0,1,4; + 1.3,2,2; + 2.9,0,-1; + 4,3,7], + period=5) + "Integer time table" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab1( + table=[ + 0,-1,-2; + 6,1,4; + 7.3,2,2; + 8.9,0,-1; + 10,3,7], + period=11) + "Integer time table" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable tabOneRow( + table=[ + 0,-1], + period=2) + "Time table with only one row of data" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + annotation ( + experiment( + Tolerance=1e-6, + StopTime=15.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTable.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable. +

+", + revisions=" +
    +
  • +October 8, 2020, by Michael Wetter:
    +Added test for time table with only one row. +
  • +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mo new file mode 100644 index 0000000000..022bb3e046 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mo @@ -0,0 +1,72 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources.Validation; +model TimeTableNegativeStartTime + "Validation model for TimeTable block with negative start time" + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab( + table=[ + 0,1,4; + 1.3,2,2; + 2.9,0,-1; + 4,3,7], + period=5) + "Integer time table" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab1( + table=[ + 0,-1,-2; + 6,1,4; + 7.3,2,2; + 8.9,0,-1; + 10,3,7], + period=11) + "Integer time table" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable tabOneRow( + table=[ + 0,-1], + period=2) + "Time table with only one row of data" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + annotation ( + experiment( + Tolerance=1e-6, + StartTime=-5.0, + StopTime=10.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Sources/Validation/TimeTableNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the block + +IBPSA.Controls.OBC.CDL.Integers.Sources.TimeTable. +The model is identical to + +IBPSA.Controls.OBC.CDL.Integers.Sources.Validation.TimeTable +except that the start time is negative. +", + revisions=" +

    +
  • +October 8, 2020, by Michael Wetter:
    +Added test for time table with only one row. +
  • +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTableNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.mo new file mode 100644 index 0000000000..ef71fd3acb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Integers.Sources; +package Validation "Collection of models that validate the logical sources blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Integers.Sources. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.order b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.order new file mode 100644 index 0000000000..dd6122382b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/Validation/package.order @@ -0,0 +1,4 @@ +Constant +Pulse +TimeTable +TimeTableNegativeStartTime diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/package.mo b/IBPSA/Controls/OBC/CDL/Integers/Sources/package.mo new file mode 100644 index 0000000000..b6e3294db1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/package.mo @@ -0,0 +1,33 @@ +within IBPSA.Controls.OBC.CDL.Integers; +package Sources "Package with blocks that generate source signals" + annotation ( + Documentation( + info=" +

+Package with blocks that generate signals. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={23.3333,0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-23.333,30.0},{46.667,0.0},{-23.333,-30.0}}), + Rectangle( + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-70,-4.5},{0,4.5}})})); +end Sources; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Sources/package.order b/IBPSA/Controls/OBC/CDL/Integers/Sources/package.order new file mode 100644 index 0000000000..04261d0db1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Sources/package.order @@ -0,0 +1,4 @@ +Constant +Pulse +TimeTable +Validation diff --git a/IBPSA/Controls/OBC/CDL/Integers/Stage.mo b/IBPSA/Controls/OBC/CDL/Integers/Stage.mo new file mode 100644 index 0000000000..61a90bda16 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Stage.mo @@ -0,0 +1,143 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Stage "Output total stages that should be enabled" + + parameter Integer n(final min=1) + "Number of stages that could be enabled"; + + parameter Real holdDuration( + final quantity="Time", + final unit="s", + min=0) + "Minimum time that the output needs to be held constant. Set to 0 to disable hold time"; + + parameter Real h( + min=0.001/n, + max=0.5/n) = 0.02/n "Hysteresis for comparing input with threshold"; + + parameter Integer pre_y_start = 0 + "Value of pre(y) at initial time"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u( + final min=0, + final max=1) + "Input between 0 and 1 for specifying stages" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y( + final min=1, + final max=n) + "Total number of stages that should be enabled" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Real staThr[n]={(i - 1)/n for i in 1:n} + "Stage thresholds"; + discrete Real tNext( + final unit="s") + "Next instant at which the block checks if it has passed the minimum hold time"; + discrete Real upperThreshold + "Current upper bound of the stage range which the input is in"; + discrete Real lowerThreshold + "Current lower bound of the stage range which the input is in"; + Boolean checkUpper + "Check if the input value is greater than the upper bound"; + Boolean checkLower + "Check if the input value is greater than the lower bound"; + +initial equation + upperThreshold = 0; + lowerThreshold = 0; + pre(checkUpper) = false; + pre(checkLower) = true; + tNext =time + holdDuration; + pre(y)=pre_y_start; + +equation + checkUpper = not pre(checkUpper) and (u > (pre(upperThreshold) + h)) or pre(checkUpper) and (u >= (pre(upperThreshold) - h)); + checkLower = not pre(checkLower) and (u > (pre(lowerThreshold) + h)) or pre(checkLower) and (u >= (pre(lowerThreshold) - h)); + + when (time >= pre(tNext) and (checkUpper or not checkLower)) then + tNext =time + holdDuration; + y =if (u >= staThr[n]) + then + n + else + sum({(if ((u < staThr[i]) and (u >= staThr[i - 1])) then i - 1 else 0) for i in 2:n}); + upperThreshold = if (y == n) then staThr[n] else staThr[y + 1]; + lowerThreshold = if (y == 0) then pre(lowerThreshold) else staThr[y]; + end when; + +annotation (defaultComponentName="sta", + Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-100,140},{100,100}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-98,14},{-54,-12}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u, + leftJustified=false, + significantDigits=3))), + Text( + extent={{56,16},{100,-10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3))), + Text( + extent={{-62,70},{64,100}}, + textColor={0,0,0}, + textString="h=%h"), + Line( + points={{-60,-60},{-40,-60},{-40,-20},{0,-20},{0,20},{40,20},{40,60},{ + 60,60}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-80,-60},{40,60}}, + color={0,0,0}, + thickness=0.5, + pattern=LinePattern.Dash)}), + Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100,-100},{100,100}})), + Documentation(info=" +

+Block that outputs the total number of stages to be enabled. +

+

+The block compares the input u with the threshold of each stage. If the input is greater +than a stage threshold, the output is set to that stage. +The block outputs the total number of stages to be enabled. +

+

+The parameter n specifies the maximum number of stages. +The stage thresholds are evenly distributed, i.e. the thresholds +for stages [1, 2, 3, ... , n] are +[0, 1/n, 2/n, ... , (n-1)/n], plus a hysteresis which is by default +h=0.02/n. +Once the output changes, it cannot change for at least holdDuration seconds. +

+", +revisions=" +
    +
  • +March 3, 2023, by Michael Wetter:
    +Revised implementation. +
  • +
  • +September 8, 2022, by Jianjun Hu:
    +First implementation.
    +This is for Buildings, issue 3103. +
  • +
+")); +end Stage; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Subtract.mo b/IBPSA/Controls/OBC/CDL/Integers/Subtract.mo new file mode 100644 index 0000000000..2cbe7f3eb8 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Subtract.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Subtract "Output the difference of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input u1 for the minuend" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u2 + "Input u2 for the subtrahend" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Output with the difference u1-u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +equation + y=u1-u2; + annotation ( + defaultComponentName="intSub", + Documentation( + info=" +

+Block that outputs y as the difference of the +two input signals u1 and u2, +

+
+    y = u1 - u2
+
+", +revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={255,127,0}, + extent={{-50,-50},{50,50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line(points={{-100,60},{-74,24},{-44,24}}, color={255,127,0}), + Line(points={{-100,-60},{-74,-28},{-42,-28}}, color={255,127,0}), + Line(points={{50,0},{100,0}}, color={255,127,0}), + Text( + extent={{-38,-28},{38,40}}, + textColor={255,127,0}, + textString="-"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Subtract; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Switch.mo b/IBPSA/Controls/OBC/CDL/Integers/Switch.mo new file mode 100644 index 0000000000..fa6cddcaaa --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Switch.mo @@ -0,0 +1,118 @@ +within IBPSA.Controls.OBC.CDL.Integers; +block Switch + "Switch between two integer signals" + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Boolean switch input signal, if true, y=u1, else y=u3" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u3 + "Input u3" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Output with u1 if u2 is true, else u3" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if u2 then u1 else u3; + annotation ( + defaultComponentName="intSwi", + Documentation( + info=" +

+Block that outputs one of two integer input signals based on a boolean input signal. +

+

+If the input signal u2 is true, +the block outputs y = u1. +Otherwise, it outputs y = u3. +

+", + revisions=" +
    +
  • +July 17, 2020, by Jianjun Hu:
    +Changed icon to display dynamically which input signal is being outputted.
    +This is for +Buildings, issue 2033. +
  • +
  • +July 10, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{12,0},{100,0}}, + color={244,125,35}), + Line( + points={{-100,0},{-40,0}}, + color={255,0,255}), + Line( + points={{-100,-80},{-40,-80},{-40,-80}}, + color={244,125,35}), + Line( + points={{-40,12},{-40,-10}}, + color={255,0,255}), + Line( + points={{-100,80},{-40,80}}, + color={244,125,35}), + Line( + points=DynamicSelect({{8,2},{-40,80}},{{8,2}, + if u2 then + {-40,80} + else + {-40,-80}}), + color={244,125,35}, + thickness=1), + Ellipse( + lineColor={0,0,127}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{2.0,-6.0},{18.0,8.0}}), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-90,80},{-46,54}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {0,0,0} + else + {235,235,235}), + textString="true"), + Text( + extent={{-90,-46},{-38,-76}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {235,235,235} + else + {0,0,0}), + textString="false"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Abs.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Abs.mo new file mode 100644 index 0000000000..3d3d3759ab --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Abs.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Abs + "Validation model for the absolute block" + IBPSA.Controls.OBC.CDL.Integers.Abs abs1 + "Block that outputs the absolute value of the input" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,0},{-42,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(reaToInt.y,abs1.u) + annotation (Line(points={{21,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Abs.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Abs. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Abs; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Add.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Add.mo new file mode 100644 index 0000000000..2d8bb02fab --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Add.mo @@ -0,0 +1,82 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Add + "Validation model for the Add block" + IBPSA.Controls.OBC.CDL.Integers.Add add1 + "Block that outputs the sum of the two inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-0.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-58,20},{-42,20}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-58,-20},{-42,-20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-18,-20},{-2,-20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-18,20},{-2,20}},color={0,0,127})); + connect(reaToInt.y,add1.u1) + annotation (Line(points={{22,20},{40,20},{40,6},{58,6}},color={255,127,0})); + connect(reaToInt1.y,add1.u2) + annotation (Line(points={{22,-20},{40,-20},{40,-6},{58,-6}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Add.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Add. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Add; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/AddParameter.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/AddParameter.mo new file mode 100644 index 0000000000..19cc9ab1fe --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/AddParameter.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model AddParameter "Validation model for the AddParameter block" + IBPSA.Controls.OBC.CDL.Integers.AddParameter addPar(p=5) + "Block that outputs the sum of an input plus a parameter" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1(n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-58,0},{-42,0}}, color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-18,0},{-2,0}}, color={0,0,127})); + connect(reaToInt.y, addPar.u) + annotation (Line(points={{22,0},{38,0}}, color={255,127,0})); + +annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/AddParameter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.AddParameter. +

+", +revisions=" +
    +
  • +February 3, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end AddParameter; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Change.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Change.mo new file mode 100644 index 0000000000..0ee795c834 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Change.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Change + "Validation model for the Change block" + IBPSA.Controls.OBC.CDL.Integers.Change cha + "Check if the integer input changes value" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + offset=0, + height=20, + duration=1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler changeSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,-1; + 0.3,0.5; + 0.5,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler increaseSampler + "Increase sampler" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler decreaseSampler + "Decrease sampler" + annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + +equation + connect(ramp2.y,changeSampler.u) + annotation (Line(points={{-18,30},{58,30}},color={0,0,127})); + connect(timTabLin.y[1],reaToInt.u) + annotation (Line(points={{-58,-40},{-42,-40}},color={0,0,127})); + connect(reaToInt.y,cha.u) + annotation (Line(points={{-18,-40},{-2,-40}},color={255,127,0})); + connect(ramp2.y,increaseSampler.u) + annotation (Line(points={{-18,30},{40,30},{40,70},{58,70}},color={0,0,127})); + connect(ramp2.y,decreaseSampler.u) + annotation (Line(points={{-18,30},{40,30},{40,-10},{58,-10}},color={0,0,127})); + connect(cha.up,increaseSampler.trigger) + annotation (Line(points={{22,-34},{30,-34},{30,52},{70,52},{70,58.2}},color={255,0,255})); + connect(cha.y,changeSampler.trigger) + annotation (Line(points={{22,-40},{46,-40},{46,12},{70,12},{70,18.2}},color={255,0,255})); + connect(cha.down,decreaseSampler.trigger) + annotation (Line(points={{22,-46},{70,-46},{70,-21.8}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Change.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Change. +

+", + revisions=" +
    +
  • +July 13, 2018, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false))); +end Change; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Equal.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Equal.mo new file mode 100644 index 0000000000..c12bfc65d2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Equal.mo @@ -0,0 +1,84 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Equal + "Validation model for the Equal block" + IBPSA.Controls.OBC.CDL.Integers.Equal intEqu + "Block output true if input 1 is equal to input 2" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 0.3,1; + 0.5,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 0.35,1; + 0.55,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + +equation + connect(reaToInt.y,intEqu.u1) + annotation (Line(points={{1,20},{40,20},{40,0},{58,0}},color={255,127,0})); + connect(reaToInt1.y,intEqu.u2) + annotation (Line(points={{1,-20},{40,-20},{40,-8},{58,-8}},color={255,127,0})); + connect(timTabLin.y[1],reaToInt.u) + annotation (Line(points={{-59,20},{-22,20}},color={0,0,127})); + connect(timTabLin1.y[1],reaToInt1.u) + annotation (Line(points={{-59,-20},{-22,-20}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Equal.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Equal. +

+", + revisions=" +
    +
  • +September 26, 2017, by Thierry S. Nouidui:
    +Revised implementation for JModelica verification. +This is for +Buildings, issue 939. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Equal; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Greater.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Greater.mo new file mode 100644 index 0000000000..fc163aa4d0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Greater.mo @@ -0,0 +1,82 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Greater + "Validation model for the Greater block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1.5, + height=5.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Integers.Greater intGre + "Block output true if input 1 is greater than input 2" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,20},{-42,20}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-59,-20},{-42,-20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,20},{-2,20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-19,-20},{-2,-20}},color={0,0,127})); + connect(reaToInt.y,intGre.u1) + annotation (Line(points={{21,20},{40,20},{40,0},{58,0}},color={255,127,0})); + connect(reaToInt1.y,intGre.u2) + annotation (Line(points={{21,-20},{40,-20},{40,-8},{58,-8}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Greater.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Greater. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Greater; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo new file mode 100644 index 0000000000..458d123262 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mo @@ -0,0 +1,84 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model GreaterEqual + "Validation model for the GreaterEqual block" + IBPSA.Controls.OBC.CDL.Integers.GreaterEqual intGreEqu + "Block output true if input 1 is greater or equal to input 2" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,-1; + 0.3,0.5; + 0.5,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 0.35,1; + 0.55,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + +equation + connect(reaToInt.y,intGreEqu.u1) + annotation (Line(points={{1,20},{40,20},{40,0},{58,0}},color={255,127,0})); + connect(reaToInt1.y,intGreEqu.u2) + annotation (Line(points={{1,-20},{40,-20},{40,-8},{58,-8}},color={255,127,0})); + connect(timTabLin.y[1],reaToInt.u) + annotation (Line(points={{-59,20},{-22,20}},color={0,0,127})); + connect(timTabLin1.y[1],reaToInt1.u) + annotation (Line(points={{-59,-20},{-22,-20}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqual.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.GreaterEqual. +

+", + revisions=" +
    +
  • +September 26, 2017, by Thierry S. Nouidui:
    +Revised implementation for JModelica verification. +This is for +Buildings, issue 939. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end GreaterEqual; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo new file mode 100644 index 0000000000..1489d62f43 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model GreaterEqualThreshold + "Validation model for the GreaterEqualThreshold block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Integers.GreaterEqualThreshold intGreEquThr( + t=2) + "Block output true if input is greater or equal to threshold value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,0},{-42,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(reaToInt.y,intGreEquThr.u) + annotation (Line(points={{21,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterEqualThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.GreaterEqualThreshold. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end GreaterEqualThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo new file mode 100644 index 0000000000..774f26cefb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model GreaterThreshold + "Validation model for the GreaterThreshold block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( + t=2) + "Block output true if input is greater than threshold value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,0},{-50,0},{-50,0},{-42,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,0},{-12,0},{-12,0},{-2,0}},color={0,0,127})); + connect(reaToInt.y,intGreThr.u) + annotation (Line(points={{21,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/GreaterThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.GreaterThreshold. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end GreaterThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Less.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Less.mo new file mode 100644 index 0000000000..0ee0bedf50 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Less.mo @@ -0,0 +1,84 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Less + "Validation model for the Less block" + IBPSA.Controls.OBC.CDL.Integers.Less intLes + "Block output true if input 1 is less than input 2" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,-1; + 0.3,0.5; + 0.5,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 0.35,1; + 0.55,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + +equation + connect(reaToInt1.y,intLes.u2) + annotation (Line(points={{1,-20},{40,-20},{40,-8},{58,-8}},color={255,127,0})); + connect(reaToInt.y,intLes.u1) + annotation (Line(points={{1,20},{40,20},{40,0},{58,0}},color={255,127,0})); + connect(timTabLin.y[1],reaToInt.u) + annotation (Line(points={{-59,20},{-22,20}},color={0,0,127})); + connect(timTabLin1.y[1],reaToInt1.u) + annotation (Line(points={{-59,-20},{-22,-20}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Less.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Less. +

+", + revisions=" +
    +
  • +September 26, 2017, by Thierry S. Nouidui:
    +Revised implementation for JModelica verification. +This is for +Buildings, issue 939. +
  • +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Less; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqual.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqual.mo new file mode 100644 index 0000000000..ffb57e5e46 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqual.mo @@ -0,0 +1,82 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model LessEqual + "Validation model for the LessEqual block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1.5, + height=5.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Integers.LessEqual intLesEqu + "Block output true if input 1 is less or equal to input 2" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,20},{-42,20}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-59,-20},{-42,-20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,20},{-2,20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-19,-20},{-2,-20}},color={0,0,127})); + connect(reaToInt1.y,intLesEqu.u2) + annotation (Line(points={{21,-20},{40,-20},{40,-8},{58,-8}},color={255,127,0})); + connect(reaToInt.y,intLesEqu.u1) + annotation (Line(points={{21,20},{40,20},{40,0},{58,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqual.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.LessEqual. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end LessEqual; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo new file mode 100644 index 0000000000..df07a3997c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model LessEqualThreshold + "Validation model for the LessEqualThreshold block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr( + t=2) + "Block output true if input is less or equal to threshold value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,0},{-42,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(reaToInt.y,intLesEquThr.u) + annotation (Line(points={{21,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessEqualThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.LessEqualThreshold. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end LessEqualThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo new file mode 100644 index 0000000000..91ec41c363 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/LessThreshold.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model LessThreshold + "Validation model for the LessThreshold block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Integers.LessThreshold intLesThr( + t=2) + "Block output true if input is less than threshold value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,0},{-42,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(reaToInt.y,intLesThr.u) + annotation (Line(points={{21,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/LessThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.LessThreshold. +

+", + revisions=" +
    +
  • +August 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end LessThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Max.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Max.mo new file mode 100644 index 0000000000..15c3fec996 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Max.mo @@ -0,0 +1,82 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Max + "Validation model for the Max block" + IBPSA.Controls.OBC.CDL.Integers.Max max1 + "Block that outputs the largest inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1.5, + height=5.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,20},{-42,20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,20},{-2,20}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-59,-20},{-42,-20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-19,-20},{-2,-20}},color={0,0,127})); + connect(reaToInt1.y,max1.u2) + annotation (Line(points={{21,-20},{40,-20},{40,-6},{58,-6}},color={255,127,0})); + connect(reaToInt.y,max1.u1) + annotation (Line(points={{21,20},{40,20},{40,6},{58,6}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Max.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Max. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Max; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Min.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Min.mo new file mode 100644 index 0000000000..7389df1e7b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Min.mo @@ -0,0 +1,82 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Min + "Validation model for the Min block" + IBPSA.Controls.OBC.CDL.Integers.Min min1 + "Block that outputs the smallest inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=10.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1.5, + height=5.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,20},{-42,20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,20},{-2,20}},color={0,0,127})); + connect(reaToInt.y,min1.u1) + annotation (Line(points={{21,20},{40,20},{40,6},{58,6}},color={255,127,0})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-59,-20},{-42,-20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-19,-20},{-2,-20}},color={0,0,127})); + connect(reaToInt1.y,min1.u2) + annotation (Line(points={{21,-20},{40,-20},{40,-6},{58,-6}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Min.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Min. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Min; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/MultiSum.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/MultiSum.mo new file mode 100644 index 0000000000..92b8440e4d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/MultiSum.mo @@ -0,0 +1,102 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model MultiSum + "Validation model for the block to find sum of multiple inputs" + IBPSA.Controls.OBC.CDL.Integers.MultiSum add1( + nin=3) + "Block that outputs the sum of the inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-0.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( + duration=1, + height=7.0, + offset=-1.5) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round3( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-59,40},{-42,40}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-59,0},{-42,0}},color={0,0,127})); + connect(ramp3.y,round3.u) + annotation (Line(points={{-59,-40},{-42,-40}},color={0,0,127})); + connect(round3.y,reaToInt2.u) + annotation (Line(points={{-19,-40},{-2,-40}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-19,40},{-2,40}},color={0,0,127})); + connect(reaToInt.y,add1.u[1]) + annotation (Line(points={{21,40},{40,40},{40,4.66667},{58,4.66667}},color={255,127,0})); + connect(reaToInt1.y,add1.u[2]) + annotation (Line(points={{21,0},{38,0},{38,0},{58,0}},color={255,127,0})); + connect(reaToInt2.y,add1.u[3]) + annotation (Line(points={{21,-40},{40,-40},{40,-4.66667},{58,-4.66667}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/MultiSum.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.MultiSum. +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiSum; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Multiply.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Multiply.mo new file mode 100644 index 0000000000..874f1302d4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Multiply.mo @@ -0,0 +1,88 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Multiply "Validation model for the Multiply block" + IBPSA.Controls.OBC.CDL.Integers.Multiply product + "Block that outputs the product of the two inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2 + "Convert real to integer" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,-1; + 0.3,0.5; + 0.5,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin1( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 0.35,1; + 0.55,0; + 0.7,1; + 1,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + +equation + connect(reaToInt1.y,product.u1) + annotation (Line(points={{2,20},{40,20},{40,6},{58,6}},color={255,127,0})); + connect(reaToInt2.y,product.u2) + annotation (Line(points={{2,-20},{40,-20},{40,-6},{58,-6}},color={255,127,0})); + connect(timTabLin.y[1],reaToInt1.u) + annotation (Line(points={{-58,20},{-22,20}},color={0,0,127})); + connect(timTabLin1.y[1],reaToInt2.u) + annotation (Line(points={{-58,-20},{-22,-20}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Multiply.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Multiply. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Product to Multiply.
    +This is for Buildings, issue 2865. +
  • +
  • +September 26, 2017, by Thierry S. Nouidui:
    +Revised implementation for JModelica verification. +This is for +Buildings, issue 939. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Multiply; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/OnCounter.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/OnCounter.mo new file mode 100644 index 0000000000..ed33ed1f0b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/OnCounter.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model OnCounter + "Validation model for the OnCounter block" + IBPSA.Controls.OBC.CDL.Integers.OnCounter onCounter + "Block that outputs increment if the input switches to true" + annotation (Placement(transformation(extent={{16,-10},{36,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=0.1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse reset( + width=0.5, + period=1.0) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-50},{-6,-30}}))); + +equation + connect(reset.y,onCounter.reset) + annotation (Line(points={{-5,-40},{26,-40},{26,-14},{26,-14},{26,-12},{26,-12}},color={255,0,255})); + connect(booPul.y,onCounter.trigger) + annotation (Line(points={{-5,0},{12,0},{12,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=2.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/OnCounter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.OnCounter. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end OnCounter; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Stage.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Stage.mo new file mode 100644 index 0000000000..45988e13b0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Stage.mo @@ -0,0 +1,85 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Stage + "Validation model for the block to find the total number of enabled stages" + + IBPSA.Controls.OBC.CDL.Integers.Stage sta( + final n=4, + final holdDuration=5) + "Total number of enabled stages, with a hold duration of 5 seconds" + annotation (Placement(transformation(extent={{20,50},{40,70}}))); + IBPSA.Controls.OBC.CDL.Integers.Stage zerHolTim( + final n=4, + final holdDuration=0) + "Total number of enabled stages, without any hold duration" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + IBPSA.Controls.OBC.CDL.Integers.Stage sta1( + final n=4, + final holdDuration=2) + "Total number of enabled stages, with a hold duration of 2 seconds" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Integers.Stage lesHolTim( + final n=4, + final holdDuration=1) + "Total number of enabled stages, with a hold duration of 1 second" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + final duration=10, + final height=1, + final startTime=1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=0.5, + final freqHz=1/5, + final offset=0.5) + "Block that generates sine signal" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + +equation + connect(ramp1.y, sta.u) + annotation (Line(points={{-18,60},{18,60}}, color={0,0,127})); + connect(ramp1.y,zerHolTim. u) annotation (Line(points={{-18,60},{0,60},{0,20}, + {18,20}}, color={0,0,127})); + connect(sin.y, sta1.u) + annotation (Line(points={{-18,-20},{18,-20}}, color={0,0,127})); + connect(sin.y, lesHolTim.u) annotation (Line(points={{-18,-20},{0,-20},{0,-60}, + {18,-60}}, color={0,0,127})); + annotation ( + experiment(StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Stage.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Stage. +

+

+The instances use different values for the duration time during which the output is held constant. +

+", +revisions=" +
    +
  • +September 12, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Stage; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Subtract.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Subtract.mo new file mode 100644 index 0000000000..97ad81008c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Subtract.mo @@ -0,0 +1,81 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Subtract "Validation model for the Subtract block" + IBPSA.Controls.OBC.CDL.Integers.Subtract sub + "Block that outputs the difference of the two inputs" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-0.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round1(n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert real to integer" + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2(n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1 + "Convert real to integer" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-58,20},{-42,20}},color={0,0,127})); + connect(ramp2.y,round2.u) + annotation (Line(points={{-58,-20},{-42,-20}},color={0,0,127})); + connect(round2.y,reaToInt1.u) + annotation (Line(points={{-18,-20},{-2,-20}},color={0,0,127})); + connect(round1.y,reaToInt.u) + annotation (Line(points={{-18,20},{-2,20}},color={0,0,127})); + connect(reaToInt.y, sub.u1) + annotation (Line(points={{22,20},{40,20},{40,6},{58,6}}, color={255,127,0})); + connect(reaToInt1.y, sub.u2) + annotation (Line(points={{22,-20},{40,-20},{40,-6},{58,-6}}, color={255,127,0})); + +annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Subtract.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Subtract. +

+", +revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Subtract; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/Switch.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/Switch.mo new file mode 100644 index 0000000000..efcd93acb7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/Switch.mo @@ -0,0 +1,102 @@ +within IBPSA.Controls.OBC.CDL.Integers.Validation; +model Switch "Validation model for the Switch block" + IBPSA.Controls.OBC.CDL.Integers.Switch integerSwitch + "Integer switch" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.7, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=3) + "Block that outputs cyclic on and off: switch between u1 and u3" + annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt( + k=5) + "Integer constant" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + k=2) + "Integer constant" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + +protected + IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt + "Type converter" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Integers.Multiply proInt "Product" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 + "Type converter" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + IBPSA.Controls.OBC.CDL.Integers.Multiply proInt1 "Product" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + +equation + connect(booPul2.y,integerSwitch.u2) + annotation (Line(points={{-4,0},{58,0}},color={255,0,255})); + connect(booPul1.y,booToInt.u) + annotation (Line(points={{-58,30},{-42,30}},color={255,0,255})); + connect(booPul3.y,booToInt1.u) + annotation (Line(points={{-58,-70},{-42,-70}},color={255,0,255})); + connect(conInt.y,proInt.u1) + annotation (Line(points={{-58,70},{-20,70},{-20,56},{-2,56}},color={255,127,0})); + connect(booToInt.y,proInt.u2) + annotation (Line(points={{-18,30},{-10,30},{-10,44},{-2,44}},color={255,127,0})); + connect(conInt1.y,proInt1.u1) + annotation (Line(points={{-58,-30},{-10,-30},{-10,-44},{-2,-44}},color={255,127,0})); + connect(booToInt1.y,proInt1.u2) + annotation (Line(points={{-18,-70},{-10,-70},{-10,-56},{-2,-56}},color={255,127,0})); + connect(proInt.y,integerSwitch.u1) + annotation (Line(points={{22,50},{40,50},{40,8},{58,8}},color={255,127,0})); + connect(proInt1.y,integerSwitch.u3) + annotation (Line(points={{22,-50},{40,-50},{40,-8},{58,-8}},color={255,127,0})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Integers/Validation/Switch.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Integers.Switch. +

+

+The input u2 is the switch input: If u2 = true, +then output y = u1; +else output y = u3. +

+ +", + revisions=" +
    +
  • +July 10, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Integers/Validation/package.mo new file mode 100644 index 0000000000..e1c71c475f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Integers; +package Validation "Collection of models that validate the integer blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Integers. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Integers/Validation/package.order b/IBPSA/Controls/OBC/CDL/Integers/Validation/package.order new file mode 100644 index 0000000000..027e6b7b2a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/Validation/package.order @@ -0,0 +1,21 @@ +Abs +Add +AddParameter +Change +Equal +Greater +GreaterEqual +GreaterEqualThreshold +GreaterThreshold +Less +LessEqual +LessEqualThreshold +LessThreshold +Max +Min +MultiSum +Multiply +OnCounter +Stage +Subtract +Switch diff --git a/IBPSA/Controls/OBC/CDL/Integers/package.mo b/IBPSA/Controls/OBC/CDL/Integers/package.mo new file mode 100644 index 0000000000..e101829651 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL; +package Integers "Package with blocks for integer variables" + annotation ( + Documentation( + info=" +

+Package with blocks for elementary mathematical functions +for integer variables. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Text( + extent={{-56,90},{48,-88}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="Z")})); +end Integers; diff --git a/IBPSA/Controls/OBC/CDL/Integers/package.order b/IBPSA/Controls/OBC/CDL/Integers/package.order new file mode 100644 index 0000000000..f8b45b509a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Integers/package.order @@ -0,0 +1,23 @@ +Abs +Add +AddParameter +Change +Equal +Greater +GreaterEqual +GreaterEqualThreshold +GreaterThreshold +Less +LessEqual +LessEqualThreshold +LessThreshold +Max +Min +MultiSum +Multiply +OnCounter +Stage +Subtract +Switch +Sources +Validation diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/BooleanInput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/BooleanInput.mo new file mode 100644 index 0000000000..28046082a4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/BooleanInput.mo @@ -0,0 +1,39 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector BooleanInput=input Boolean + "Boolean input connector" +annotation (defaultComponentName="u", + Icon(graphics={Polygon(lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern = FillPattern.Solid, + points={{0,50},{100,0},{0,-50}})}, + coordinateSystem(extent={{-100,-100},{100,100}}, + preserveAspectRatio=true, + initialScale=0.2)), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(points={{0,50},{100,0},{0,-50},{0,50}}, + lineColor={255,0,255}, + fillColor={255,0,255},fillPattern = FillPattern.Solid), + Text(extent={{-10,85},{-10,60}}, + textColor={255,0,255}, + textString="%name")}), +Documentation(info=" +

+Connector with one input signal of type Boolean. +

+",revisions=" +
    +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/BooleanOutput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/BooleanOutput.mo new file mode 100644 index 0000000000..c3c9129d6c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/BooleanOutput.mo @@ -0,0 +1,46 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector BooleanOutput=output Boolean + "Boolean output connector" +annotation (defaultComponentName="y", + Icon(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern= FillPattern.Solid, + points={{-100,50},{0,0},{-100,-50}})}), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(points={{-100,50},{0,0},{-100,-50},{-100,50}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern= FillPattern.Solid), + Text(extent={{30,110},{30,60}}, + textColor={255,0,255}, + textString="%name")}), +Documentation(info=" +

+Connector with one output signal of type Boolean. +

+",revisions=" +
    +
  • +July 19, 2019, by Jianjun Hu:
    +On both icon and diagram layer, added the initialScale.
    +This is for +Buildings, issue 1375. +
  • +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/IntegerInput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/IntegerInput.mo new file mode 100644 index 0000000000..e0d54bcd8d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/IntegerInput.mo @@ -0,0 +1,40 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector IntegerInput=input Integer + "Integer input connector" +annotation (defaultComponentName="u", + Icon(graphics={Polygon(lineColor={255,127,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + points={{0,50},{100,0},{0,-50}})}, + coordinateSystem(extent={{-100,-100},{100,100}}, + preserveAspectRatio=true, + initialScale=0.2)), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(points={{0,50},{100,0},{0,-50},{0,50}}, + lineColor={255,127,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid), + Text(extent={{-10,85},{-10,60}}, + textColor={255,127,0}, + textString="%name")}), +Documentation(info=" +

+Connector with one input signal of type Integer. +

+",revisions=" +
    +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/IntegerOutput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/IntegerOutput.mo new file mode 100644 index 0000000000..03d184a9f7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/IntegerOutput.mo @@ -0,0 +1,46 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector IntegerOutput=output Integer + "Integer output connector" +annotation (defaultComponentName="y", + Icon(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-100,50},{0,0},{-100,-50}})}), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100,-100},{100,100}}), + graphics={Polygon(points={{-100,50},{0,0},{-100,-50},{-100,50}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text(extent={{30,110},{30,60}}, + textColor={255,127,0}, + textString="%name")}), +Documentation(info=" +

+Connector with one output signal of type Integer. +

+",revisions=" +
    +
  • +July 19, 2019, by Jianjun Hu:
    +On both icon and diagram layer, added the initialScale.
    +This is for +Buildings, issue 1375. +
  • +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/RealInput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/RealInput.mo new file mode 100644 index 0000000000..6769da7271 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/RealInput.mo @@ -0,0 +1,40 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector RealInput=input Real + "Real input connector" +annotation (defaultComponentName="u", + Icon(graphics={Polygon(lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + points={{0,50},{100,0},{0,-50}})}, + coordinateSystem(extent={{-100.0,-100.0},{100.0,100.0}}, + preserveAspectRatio=true, + initialScale=0.2)), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={Polygon(lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + points={{0.0,50.0},{100.0,0.0},{0.0,-50.0},{0.0,50.0}}), + Text(textColor={0,0,127}, + extent={{-10.0,60.0},{-10.0,85.0}}, + textString="%name")}), +Documentation(info=" +

+Connector with one input signal of type Real. +

+",revisions=" +
    +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/RealOutput.mo b/IBPSA/Controls/OBC/CDL/Interfaces/RealOutput.mo new file mode 100644 index 0000000000..63d45cbaf6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/RealOutput.mo @@ -0,0 +1,46 @@ +within IBPSA.Controls.OBC.CDL.Interfaces; +connector RealOutput=output Real + "Real output connector" +annotation (defaultComponentName="y", + Icon(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={Polygon(lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-100,50},{0,0},{-100,-50}})}), + Diagram(coordinateSystem(preserveAspectRatio=true, + initialScale=0.2, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={Polygon(lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-100.0,50.0},{0.0,0.0},{-100.0,-50.0}}), + Text(textColor={0,0,127}, + extent={{30.0,60.0},{30.0,110.0}}, + textString="%name")}), +Documentation(info=" +

+Connector with one output signal of type Real. +

+",revisions=" +
    +
  • +July 19, 2019, by Jianjun Hu:
    +On both icon and diagram layer, added the initialScale.
    +This is for +Buildings, issue 1375. +
  • +
  • +March 1, 2019, by Michael Wetter:
    +On the icon layer, changed connector size and added the connector name.
    +This is for +Buildings, issue 1375. +
  • +
  • +January 6, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/package.mo b/IBPSA/Controls/OBC/CDL/Interfaces/package.mo new file mode 100644 index 0000000000..00ac15ad2f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/package.mo @@ -0,0 +1,41 @@ +within IBPSA.Controls.OBC.CDL; +package Interfaces "Package with connectors for input and output signals" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains implementations of connectors for input +and output signals of blocks. +

+

+The connectors are compatible with, and equivalent to, +the connectors from the Modelica Standard Library. +They are here implemented to make the CDL +package a self-contained package. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={20.0,0.0}, + lineColor={64,64,64}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-10.0,70.0},{10.0,70.0},{40.0,20.0},{80.0,20.0},{80.0,-20.0},{40.0,-20.0},{10.0,-70.0},{-10.0,-70.0}}), + Polygon( + fillColor={102,102,102}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-100.0,20.0},{-60.0,20.0},{-30.0,70.0},{-10.0,70.0},{-10.0,-70.0},{-30.0,-70.0},{-60.0,-20.0},{-100.0,-20.0}})})); +end Interfaces; diff --git a/IBPSA/Controls/OBC/CDL/Interfaces/package.order b/IBPSA/Controls/OBC/CDL/Interfaces/package.order new file mode 100644 index 0000000000..25397a7f23 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Interfaces/package.order @@ -0,0 +1,6 @@ +BooleanInput +BooleanOutput +IntegerInput +IntegerOutput +RealInput +RealOutput diff --git a/IBPSA/Controls/OBC/CDL/Logical/And.mo b/IBPSA/Controls/OBC/CDL/Logical/And.mo new file mode 100644 index 0000000000..fdb56a7531 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/And.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block And + "Logical 'and': y = u1 and u2" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input signal for logical 'and'" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Input signal for logical 'and'" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 and u2 are both true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 and u2; + annotation ( + defaultComponentName="and2", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-90,40},{90,-40}}, + textColor={0,0,0}, + textString="and"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-73},{-89,-87}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if all inputs are true. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end And; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Change.mo b/IBPSA/Controls/OBC/CDL/Logical/Change.mo new file mode 100644 index 0000000000..257ca1fba2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Change.mo @@ -0,0 +1,71 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Change + "Output y is true, if the input u has a rising or falling edge (y = change(u))" + parameter Boolean pre_u_start=false + "Start value of pre(u) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input to be monitored for a change" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with true when the input changes" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + pre(u)=pre_u_start; + +equation + y=change(u); + annotation ( + defaultComponentName="cha", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-50,62},{50,-56}}, + textColor={0,0,0}, + textString="change"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if the Boolean input has either a rising edge +from false to true or a falling edge from +true to false. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Change; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Edge.mo b/IBPSA/Controls/OBC/CDL/Logical/Edge.mo new file mode 100644 index 0000000000..e472037418 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Edge.mo @@ -0,0 +1,73 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Edge + "Output y is true, if the input u has a rising edge (y = edge(u))" + parameter Boolean pre_u_start=false + "Start value of pre(u) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input to be monitored" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true when the input switches to true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + pre(u)=pre_u_start; + +equation + y=edge(u); + annotation ( + defaultComponentName="edg", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-50,52},{50,-46}}, + textColor={0,0,0}, + textString="edge"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Polygon( + points={{-120,140},{-120,140}}, + lineColor={28,108,200}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if the Boolean input has a rising edge +from false to true. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Edge; diff --git a/IBPSA/Controls/OBC/CDL/Logical/FallingEdge.mo b/IBPSA/Controls/OBC/CDL/Logical/FallingEdge.mo new file mode 100644 index 0000000000..fd69807c62 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/FallingEdge.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block FallingEdge + "Output y is true, if the input u has a falling edge (y = edge(not u))" + parameter Boolean pre_u_start=false + "Start value of pre(u) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input to be monitored" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true when the input switches to false" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Boolean not_u=not u + "Boolean not of the input"; + +initial equation + pre(not_u)=not pre_u_start; + +equation + y=edge(not_u); + annotation ( + defaultComponentName="falEdg", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-62,64},{56,-54}}, + textColor={0,0,0}, + textString="falling"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Documentation( + info=" +

+Block that outputs true if the Boolean input has a falling edge +from true to false. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end FallingEdge; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Latch.mo b/IBPSA/Controls/OBC/CDL/Logical/Latch.mo new file mode 100644 index 0000000000..fc97b6a022 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Latch.mo @@ -0,0 +1,151 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Latch + "Maintains a true signal until cleared" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Latch input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput clr + "Clear input" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with latched signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); +equation + when initial() then + y=not clr and u; + elsewhen {clr, u} then + y=not clr and u; + end when; + annotation ( + defaultComponentName="lat", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{-73,9},{-87,-5}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{81,7},{95,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-73,-53},{-87,-67}}, + lineColor=DynamicSelect({235,235,235}, + if clr then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if clr then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-68,-62},{4,-62},{4,-22},{74,-22}}, + color={255,0,255}), + Line( + points={{-68,24},{-48,24},{-48,56},{-16,56},{-16,24},{24,24},{24,56},{54,56},{54,24},{74,24}}, + color={255,0,255}), + Text( + extent={{-14,-8},{14,-18}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="Clear"), + Text( + extent={{-16,72},{24,58}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="Latch input"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that generates a true output when the latch input u +rises from false to true, provided that the clear input +clr is false or also became at the same time false. +The output remains true until the clear input clr rises +from false to true. +

+

+If the clear input clr is true, the output y +switches to false (if it was true) and it remains false, +regardless of the value of the latch input u. +

+

+At initial time, if clr = false, then the output will be +y = u. Otherwise it will be y=false +(because the clear input clr is true). +

+ +

+\"Latch.png\" +

+ +", + revisions=" +
    +
  • +April 15, 2024, by Antoine Gautier:
    +Simplified the implementation.
    +This is for Buildings, issue 3796. +
  • +
  • +October 13, 2020, by Jianjun Hu:
    +Removed the parameter pre_y_start, and made the initial output to be +equal to latch input when the clear input is false.
    +This is for Buildings, issue 2177. +
  • +
  • +March 9, 2020, by Michael Wetter:
    +Simplified implementation, and made model work with OpenModelica. +
  • +
  • +April 4, 2019, by Jianjun Hu:
    +Corrected implementation that causes wrong output at initial stage. +This is for Buildings, issue 1402. +
  • +
  • +December 1, 2017, by Michael Wetter:
    +Revised documentation. +
  • +
  • +March 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end Latch; diff --git a/IBPSA/Controls/OBC/CDL/Logical/MultiAnd.mo b/IBPSA/Controls/OBC/CDL/Logical/MultiAnd.mo new file mode 100644 index 0000000000..a1ab070a48 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/MultiAnd.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block MultiAnd + "Logical MultiAnd, y = u[1] and u[2] and u[3] and ..." + parameter Integer nin(min=0)=0 + "Number of input connections" + annotation (Dialog(connectorSizing=true),HideResult=true); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Input signals" + annotation (Placement(transformation(extent={{-140,70},{-100,-70}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with true if all input signals are true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Boolean uTemp[nin] + "Temporary variable"; + +equation + if size(u, 1) > 1 then + uTemp[1]=u[1]; + for i in 2:size(u, 1) loop + uTemp[i]=u[i] and uTemp[i-1]; + end for; + y=uTemp[nin]; + elseif (size(u, 1) == 1) then + uTemp[1]=u[1]; + y=uTemp[1]; + else + y=false; + end if; + annotation ( + defaultComponentName="mulAnd", + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-144,150},{156,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-80,52},{56,-52}}, + textColor={0,0,0}, + textString="AND"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+Block that outputs y = true if and only if +all elements of the input vector u are true. +If no connection to the input connector u is present, +the output is y=false. +

+

+See + +IBPSA.Controls.OBC.CDL.Logical.Validation.MultiAnd +for an example. +

+", +revisions=" + +")); +end MultiAnd; diff --git a/IBPSA/Controls/OBC/CDL/Logical/MultiOr.mo b/IBPSA/Controls/OBC/CDL/Logical/MultiOr.mo new file mode 100644 index 0000000000..71e9376f5c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/MultiOr.mo @@ -0,0 +1,91 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block MultiOr + "Logical MultiOr, y = u[1] or u[2] or u[3] or ..." + parameter Integer nin(min=0)=0 + "Number of input connections" + annotation (Dialog(connectorSizing=true),HideResult=true); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Input signals" + annotation (Placement(transformation(extent={{-140,70},{-100,-70}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with true if at least one input is true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Boolean uTemp[nin] + "Temporary variable"; + +equation + if size(u, 1) > 1 then + uTemp[1]=u[1]; + for i in 2:size(u, 1) loop + uTemp[i]=u[i] or uTemp[i-1]; + end for; + y=uTemp[nin]; + elseif (size(u, 1) == 1) then + uTemp[1]=u[1]; + y=uTemp[1]; + else + y=false; + end if; + annotation ( + defaultComponentName="mulOr", + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-144,150},{156,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-80,52},{56,-52}}, + textColor={0,0,0}, + textString="OR"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+Block that outputs y = true if any element in the input +vector u is true. +If no connection to the input connector u is present, +the output is y=false. +

+

+See + +IBPSA.Controls.OBC.CDL.Logical.Validation.MultiOr +for an example. +

+", +revisions=" +
    +
  • +July 26, 2021, by Jianjun Hu:
    +Renamed parameter nu to nin. This is for +Buildings, issue 2580. +
  • +
  • +June 6, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+")); +end MultiOr; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Nand.mo b/IBPSA/Controls/OBC/CDL/Logical/Nand.mo new file mode 100644 index 0000000000..f7fd08c4fe --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Nand.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Nand + "Logical 'nand': y = not (u1 and u2)" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input signal for 'nand'" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Input signal for 'nand'" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with false if both inputs are true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=not (u1 and u2); + annotation ( + defaultComponentName="nand", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-50,52},{50,-48}}, + textColor={0,0,0}, + textString="nand"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-73},{-89,-87}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if at least +one input is false. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Nand; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Nor.mo b/IBPSA/Controls/OBC/CDL/Logical/Nor.mo new file mode 100644 index 0000000000..19dc9c648b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Nor.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Nor + "Logical 'nor': y = not (u1 or u2)" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input signal for 'nor'" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Input signal for 'nor'" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with false if at least one of the inputs is true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=not (u1 or u2); + annotation ( + defaultComponentName="nor", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-90,40},{90,-40}}, + textColor={0,0,0}, + textString="nor"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-73},{-89,-87}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if none of the inputs is true. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Nor; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Not.mo b/IBPSA/Controls/OBC/CDL/Logical/Not.mo new file mode 100644 index 0000000000..6da92b289a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Not.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Not "Logical not" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input to be negated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with negated input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=not u; + annotation ( + defaultComponentName="not1", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-56,28},{72,-24}}, + textColor={0,0,0}, + textString="not"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if the input is false, +and false if the input is true. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Not; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Or.mo b/IBPSA/Controls/OBC/CDL/Logical/Or.mo new file mode 100644 index 0000000000..73d83ec44a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Or.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Or + "Logical 'or': y = u1 or u2" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input for logical 'or'" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Input for logical 'or'" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with true if at least one of the inputs is true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1 or u2; + annotation ( + defaultComponentName="or2", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-90,40},{90,-40}}, + textColor={0,0,0}, + textString="or"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-73},{-89,-87}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if at least one input +is true. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Or; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Pre.mo b/IBPSA/Controls/OBC/CDL/Logical/Pre.mo new file mode 100644 index 0000000000..c6dc1a3a0d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Pre.mo @@ -0,0 +1,88 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Pre + "Breaks algebraic loops by adding a delay of the output without advancing time (y = pre(u): event iteration continues until u = pre(u))" + parameter Boolean pre_u_start=false + "Start value of pre(u) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input to be delayed by one event iteration" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Input delayed by one event iteration" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + pre(u)=pre_u_start; + +equation + y=pre(u); + annotation ( + defaultComponentName="pre", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-90,40},{90,-40}}, + textColor={0,0,0}, + textString="pre"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+This block delays the Boolean input by an infinitesimal small time delay and +therefore breaks algebraic loops. In a network of logical blocks, in every +closed connection loop, at least one logical block must have a delay, +since algebraic systems of Boolean equations are not solvable. +

+ +

+This block returns the value of the input signal u from the +last event iteration. The event iteration stops once both +values are identical, i.e., if u = pre(u). +

+", + revisions=" +
    +
  • +May 24, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
+")); +end Pre; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Proof.mo b/IBPSA/Controls/OBC/CDL/Logical/Proof.mo new file mode 100644 index 0000000000..7115e02412 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Proof.mo @@ -0,0 +1,520 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Proof "Verify two boolean inputs" + parameter Real debounce( + final quantity="Time", + final unit="s") + "Time during which input must remain unchanged for signal to considered valid and used in checks"; + parameter Real feedbackDelay( + final quantity="Time", + final unit="s") + "Delay after which the two inputs are checked for equality once they become valid"; + + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u_s + "Commanded status setpoint" + annotation (Placement(transformation(extent={{-300,-20},{-260,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u_m + "Measured status" + annotation (Placement(transformation(extent={{-20,-20},{20,20}}, rotation=90, origin={0,-260}), + iconTransformation(extent={{-20,-20},{20,20}}, rotation=90, origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput yLocFal + "Output with true if the measured input is locked to false even after the setpoint has changed to true" + annotation (Placement(transformation(extent={{240,100},{280,140}}), + iconTransformation(extent={{100,30},{140,70}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput yLocTru + "Output with true if the measured input is locked to true even after the setpoint has changed to false" + annotation (Placement(transformation(extent={{240,-140},{280,-100}}), + iconTransformation(extent={{100,-70},{140,-30}}))); + +protected + IBPSA.Controls.OBC.CDL.Logical.Or valInp + "Output true if the input becomes stable after the delay time" + annotation (Placement(transformation(extent={{-140,170},{-120,190}}))); + IBPSA.Controls.OBC.CDL.Logical.And invInp + "Output true if debounce time has passed and there is still no stable input" + annotation (Placement(transformation(extent={{0,170},{20,190}}))); + IBPSA.Controls.OBC.CDL.Logical.Or pasDel + "Output true if the feedback checking time has passed" + annotation (Placement(transformation(extent={{-142,-10},{-122,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Or cheDif + "Output true if the measured input is stable, or the feedback checking time has passed" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.And botTru + "Output true if both valid measured input and the setpoint input are true" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.And truFal + "Output true if the setpoint input is true but the valid measured input is false" + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay valTru( + final delayTime=debounce) "Valid measured input change from false to true" + annotation (Placement(transformation(extent={{-240,170},{-220,190}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch valFal + "Output false if measured input is stable and changed from true to false" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch cheDif1 + "Output the difference check result if the difference check condition is satisfied" + annotation (Placement(transformation(extent={{120,140},{140,160}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay truDel1( + final delayTime=debounce) + "Delay a rising edge, to check if the false input is valid" + annotation (Placement(transformation(extent={{-200,130},{-180,150}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{-240,130},{-220,150}}))); + IBPSA.Controls.OBC.CDL.Logical.Not notBotFal "Not both false inputs" + annotation (Placement(transformation(extent={{40,-160},{60,-140}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not2 "Logical not" + annotation (Placement(transformation(extent={{-220,-50},{-200,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.And falTru + "Output true if the setpoint input is false but the valid measured input is true" + annotation (Placement(transformation(extent={{80,-200},{100,-180}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay delChe1( + final delayTime=feedbackDelay + debounce) + "Delay the difference check" + annotation (Placement(transformation(extent={{-180,-50},{-160,-30}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt + "Convert boolean input to integer output" + annotation (Placement(transformation(extent={{-100,-140},{-80,-120}}))); + IBPSA.Controls.OBC.CDL.Integers.Equal equSta + "Output true if both inputs are same" + annotation (Placement(transformation(extent={{-60,-140},{-40,-120}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 + "Convert boolean input to integer output" + annotation (Placement(transformation(extent={{-100,-180},{-80,-160}}))); + IBPSA.Controls.OBC.CDL.Logical.And botFal + "Output true if both valid measured input and the setpoint input are false" + annotation (Placement(transformation(extent={{0,-160},{20,-140}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant conTru( + final k=true) + "True constant" + annotation (Placement(transformation(extent={{-200,200},{-180,220}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not3 + "Input is invalid" + annotation (Placement(transformation(extent={{-80,170},{-60,190}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch cheStaMea + "Output true if there is no stable measured input" + annotation (Placement(transformation(extent={{160,110},{180,130}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay delChe2( + final delayTime=feedbackDelay + debounce) + "Delay the difference check" + annotation (Placement(transformation(extent={{-220,-10},{-200,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant conFal( + final k=false) + "False constant" + annotation (Placement(transformation(extent={{40,132},{60,152}}))); + IBPSA.Controls.OBC.CDL.Logical.Not notBotTru + "Not both true inputs" + annotation (Placement(transformation(extent={{-60,-90},{-40,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch cheDif2 + "Output the difference check result if the difference check condition is satisfied" + annotation (Placement(transformation(extent={{120,-90},{140,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch cheStaMea1 + "Output true if there is no stable measured input" + annotation (Placement(transformation(extent={{160,-130},{180,-110}}))); + IBPSA.Controls.OBC.CDL.Logical.Timer pasDeb( + final t=feedbackDelay + debounce) + "Check if the debounce time has passed" + annotation (Placement(transformation(extent={{-40,140},{-20,160}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch holTru + "Hold the true output when the input changes to true" + annotation (Placement(transformation(extent={{200,110},{220,130}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch holTru1 + "Hold the true output when the input changes to true" + annotation (Placement(transformation(extent={{200,-130},{220,-110}}))); + IBPSA.Controls.OBC.CDL.Logical.Or equInp + "Output true if the measured input equal to the set point" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Edge samInpEdg + "Output a rising edge when both inputs are same" + annotation (Placement(transformation(extent={{160,-30},{180,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.And valEqu + "Output true if the measured input is valid and equal to the set point" + annotation (Placement(transformation(extent={{120,-30},{140,-10}}))); + +initial equation + assert( + feedbackDelay >= debounce, + "In " + getInstanceName() + ": Require feedbackDelay >= debounce, setting feedbackDelay = debounce.", + level=AssertionLevel.warning); + +equation + connect(u_m, valTru.u) annotation (Line(points={{0,-260},{0,-220},{-250,-220}, + {-250,180},{-242,180}}, color={255,0,255})); + connect(u_m, not1.u) annotation (Line(points={{0,-260},{0,-220},{-250,-220},{-250, + 140},{-242,140}}, color={255,0,255})); + connect(not1.y, truDel1.u) + annotation (Line(points={{-218,140},{-202,140}}, color={255,0,255})); + connect(valTru.y, valInp.u1) + annotation (Line(points={{-218,180},{-142,180}},color={255,0,255})); + connect(truDel1.y, valInp.u2) annotation (Line(points={{-178,140},{-160,140},{ + -160,172},{-142,172}},color={255,0,255})); + connect(truDel1.y, valFal.u2) annotation (Line(points={{-178,140},{-160,140},{ + -160,110},{-142,110}}, color={255,0,255})); + connect(u_m, valFal.u1) annotation (Line(points={{0,-260},{0,-220},{-250,-220}, + {-250,118},{-142,118}}, color={255,0,255})); + connect(conTru.y, valFal.u3) annotation (Line(points={{-178,210},{-170,210},{-170, + 102},{-142,102}}, color={255,0,255})); + connect(valInp.y, not3.u) + annotation (Line(points={{-118,180},{-82,180}}, color={255,0,255})); + connect(not3.y, invInp.u1) + annotation (Line(points={{-58,180},{-2,180}},color={255,0,255})); + connect(conTru.y, cheStaMea.u1) annotation (Line(points={{-178,210},{110,210}, + {110,128},{158,128}}, color={255,0,255})); + connect(u_s, not2.u) annotation (Line(points={{-280,0},{-240,0},{-240,-40},{ + -222,-40}}, color={255,0,255})); + connect(not2.y, delChe1.u) + annotation (Line(points={{-198,-40},{-182,-40}}, color={255,0,255})); + connect(u_s, delChe2.u) + annotation (Line(points={{-280,0},{-222,0}}, color={255,0,255})); + connect(delChe2.y, pasDel.u1) + annotation (Line(points={{-198,0},{-144,0}},color={255,0,255})); + connect(delChe1.y, pasDel.u2) annotation (Line(points={{-158,-40},{-154,-40}, + {-154,-8},{-144,-8}}, color={255,0,255})); + connect(valInp.y, cheDif.u2) annotation (Line(points={{-118,180},{-100,180},{-100, + -8},{-62,-8}}, color={255,0,255})); + connect(pasDel.y, cheDif.u1) + annotation (Line(points={{-120,0},{-62,0}}, color={255,0,255})); + connect(cheDif.y, cheDif1.u2) annotation (Line(points={{-38,0},{90,0},{90,150}, + {118,150}}, color={255,0,255})); + connect(botTru.y, notBotTru.u) + annotation (Line(points={{-78,-80},{-62,-80}}, color={255,0,255})); + connect(notBotTru.y, truFal.u1) annotation (Line(points={{-38,-80},{-20,-80},{ + -20,-100},{-2,-100}}, color={255,0,255})); + connect(valTru.y, botTru.u1) annotation (Line(points={{-218,180},{-150,180},{-150, + -80},{-102,-80}},color={255,0,255})); + connect(u_s, truFal.u2) annotation (Line(points={{-280,0},{-240,0},{-240,-108}, + {-2,-108}}, color={255,0,255})); + connect(u_s, booToInt1.u) annotation (Line(points={{-280,0},{-240,0},{-240,-170}, + {-102,-170}},color={255,0,255})); + connect(valFal.y, booToInt.u) annotation (Line(points={{-118,110},{-110,110},{ + -110,-130},{-102,-130}}, color={255,0,255})); + connect(booToInt.y, equSta.u1) + annotation (Line(points={{-78,-130},{-62,-130}}, color={255,127,0})); + connect(booToInt1.y, equSta.u2) annotation (Line(points={{-78,-170},{-70,-170}, + {-70,-138},{-62,-138}}, color={255,127,0})); + connect(not2.y, botFal.u1) annotation (Line(points={{-198,-40},{-190,-40},{ + -190,-150},{-2,-150}}, color={255,0,255})); + connect(equSta.y, botFal.u2) annotation (Line(points={{-38,-130},{-10,-130},{-10, + -158},{-2,-158}}, color={255,0,255})); + connect(botFal.y, notBotFal.u) + annotation (Line(points={{22,-150},{38,-150}}, color={255,0,255})); + connect(notBotFal.y, falTru.u1) annotation (Line(points={{62,-150},{70,-150},{ + 70,-190},{78,-190}}, color={255,0,255})); + connect(not2.y, falTru.u2) annotation (Line(points={{-198,-40},{-190,-40},{ + -190,-198},{78,-198}}, color={255,0,255})); + connect(cheDif1.y, cheStaMea.u3) annotation (Line(points={{142,150},{150,150}, + {150,112},{158,112}}, color={255,0,255})); + connect(cheDif.y, cheDif2.u2) annotation (Line(points={{-38,0},{90,0},{90,-80}, + {118,-80}}, color={255,0,255})); + connect(cheDif2.y, cheStaMea1.u3) annotation (Line(points={{142,-80},{150,-80}, + {150,-128},{158,-128}}, color={255,0,255})); + connect(conTru.y, cheStaMea1.u1) annotation (Line(points={{-178,210},{110,210}, + {110,-112},{158,-112}}, color={255,0,255})); + connect(conFal.y, cheDif1.u3) annotation (Line(points={{62,142},{118,142}}, + color={255,0,255})); + connect(conFal.y, cheDif2.u3) annotation (Line(points={{62,142},{100,142},{ + 100,-88},{118,-88}}, color={255,0,255})); + connect(falTru.y, cheDif2.u1) annotation (Line(points={{102,-190},{114,-190}, + {114,-72},{118,-72}}, color={255,0,255})); + connect(truFal.y, cheDif1.u1) annotation (Line(points={{22,-100},{70,-100},{ + 70,158},{118,158}}, color={255,0,255})); + connect(u_s, botTru.u2) annotation (Line(points={{-280,0},{-240,0},{-240,-88}, + {-102,-88}}, color={255,0,255})); + connect(cheStaMea.y, holTru.u) + annotation (Line(points={{182,120},{198,120}}, color={255,0,255})); + connect(cheStaMea1.y, holTru1.u) + annotation (Line(points={{182,-120},{198,-120}}, color={255,0,255})); + connect(holTru.y, yLocFal) + annotation (Line(points={{222,120},{260,120}}, color={255,0,255})); + connect(holTru1.y, yLocTru) + annotation (Line(points={{222,-120},{260,-120}}, color={255,0,255})); + connect(botTru.y, equInp.u1) annotation (Line(points={{-78,-80},{-70,-80},{-70, + 20},{18,20}}, color={255,0,255})); + connect(equSta.y, equInp.u2) annotation (Line(points={{-38,-130},{-10,-130},{-10, + 12},{18,12}}, color={255,0,255})); + connect(samInpEdg.y, holTru.clr) annotation (Line(points={{182,-20},{190,-20}, + {190,114},{198,114}}, color={255,0,255})); + connect(samInpEdg.y, holTru1.clr) annotation (Line(points={{182,-20},{190,-20}, + {190,-126},{198,-126}}, color={255,0,255})); + connect(invInp.y, cheStaMea.u2) + annotation (Line(points={{22,180},{80,180},{80,120},{158,120}}, color={255,0,255})); + connect(invInp.y, cheStaMea1.u2) annotation (Line(points={{22,180},{80,180},{ + 80,-120},{158,-120}}, color={255,0,255})); + connect(not3.y, pasDeb.u) annotation (Line(points={{-58,180},{-50,180},{-50, + 150},{-42,150}}, color={255,0,255})); + connect(pasDeb.passed, invInp.u2) annotation (Line(points={{-18,142},{-10,142}, + {-10,172},{-2,172}}, color={255,0,255})); + connect(equInp.y, valEqu.u1) annotation (Line(points={{42,20},{60,20},{60,-20}, + {118,-20}}, color={255,0,255})); + connect(valEqu.y, samInpEdg.u) + annotation (Line(points={{142,-20},{158,-20}}, color={255,0,255})); + connect(valInp.y, valEqu.u2) annotation (Line(points={{-118,180},{-100,180},{-100, + -28},{118,-28}}, color={255,0,255})); +annotation ( + defaultComponentName="pro", + Diagram( + coordinateSystem(extent={{-260,-240},{240,240}}), graphics={ + Rectangle( + extent={{-258,236},{28,42}}, + lineColor={215,215,215}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-258,38},{-114,-58}}, + lineColor={215,215,215}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-116,-62},{66,-198}}, + lineColor={215,215,215}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-248,38},{-174,20}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Output true if u_s has passed +the feedback delay"), + Text( + extent={{-90,-182},{-4,-196}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Check if the inputs are different"), + Text( + extent={{-252,236},{-130,224}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Check if there is a stable measured input u_m")}), + Icon( + coordinateSystem(extent={{-100,-100},{100,100}}), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{7,-73},{-7,-87}}, + lineColor=DynamicSelect({235,235,235}, if u_m then {0,255,0} else {235, + 235,235}), + fillColor=DynamicSelect({235,235,235}, if u_m then {0,255,0} else {235, + 235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-73,7},{-87,-7}}, + lineColor=DynamicSelect({235,235,235}, if u_s then {0,255,0} else {235, + 235,235}), + fillColor=DynamicSelect({235,235,235}, if u_s then {0,255,0} else {235, + 235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{73,57},{87,43}}, + lineColor=DynamicSelect({235,235,235}, if yLocFal then {0,255,0} else {235, + 235,235}), + fillColor=DynamicSelect({235,235,235}, if yLocFal then {0,255,0} else {235, + 235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{75,-43},{89,-57}}, + lineColor=DynamicSelect({235,235,235}, if yLocTru then {0,255,0} else {235, + 235,235}), + fillColor=DynamicSelect({235,235,235}, if yLocTru then {0,255,0} else {235, + 235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Line( + points={{-60,60},{-60,-88}}, + color={192,192,192}), + Polygon( + points={{-60,82},{-68,60},{-52,60},{-60,82}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-70,-68},{80,-68}}, + color={192,192,192}), + Polygon( + points={{90,-68},{68,-60},{68,-76},{90,-68}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-40,44}}, color={28,108,200}), + Line(points={{-60,-36},{-40,-36},{-40,-16},{20,-16},{20,-36},{60,-36}}, + color={0,0,0}), + Line(points={{-60,-68},{-14,-68},{-14,-48},{40,-48},{40,-68},{60,-68}}, + color={0,0,0}), + Line(points={{-60,44},{-40,44},{-40,64},{-14,64},{-14,44},{60,44}}, + color={28,108,200}), + Line(points={{-60,12},{20,12},{20,32},{40,32},{40,12},{60,12}}, color={28, + 108,200}), + Line( + points={{-40,40},{-40,-12}}, + color={28,108,200}, + pattern=LinePattern.Dash), + Line( + points={{-14,40},{-14,-44}}, + color={28,108,200}, + pattern=LinePattern.Dash), + Line( + points={{20,8},{20,-12}}, + color={28,108,200}, + pattern=LinePattern.Dash), + Line( + points={{40,8},{40,-44}}, + color={28,108,200}, + pattern=LinePattern.Dash), + Text( + extent={{-6,-4},{6,-14}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="u_s"), + Text( + extent={{-10,-36},{6,-46}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="u_m"), + Text( + extent={{22,44},{44,32}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="yLocTru"), + Text( + extent={{-40,76},{-18,64}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="yLocFal")}), +Documentation(info=" +

+Block that compares a boolean set point u_s with +a measured signal u_m and produces two outputs +that may be used to raise alarms about malfunctioning equipment. +

+

+The block sets the output yLocFal = true if +the set point is u_s = true but the measured signal is locked +at false, i.e., u_m = false. +Similarly, the block sets the output yLocTru = true +if the set point is u_s = false but the measured signal is locked +at true, i.e., u_m = true. +Hence, any output being true indicates an operational +problem. +

+

+To use this block, proceed as follows: +Set the parameter feedbackDelay ≥ 0 to specify how long the +feedback of the controlled device is allowed to take to report +its measured operational signal u_s +after a set point change u_m. +Set the parameter debounce ≥ 0 +to specify how long the measured +signal u_m need to remain constant for it to be considered +stable. +Connect the inputs for the set point u_s and +the measured signal u_m to the output signals that need to be checked. +If either output is true, raise an alarm, such as by +connecting instances of + +IBPSA.Controls.OBC.CDL.Utilities.Assert +to the outputs of this block. +

+

+Any output being true indicates a problem. +

+

+The block has two timers that each start whenever the corresponding input changes. +One timer, called feedbackDelay+debounce timer, starts +whenever the set point u_s change, and it runs for a time equal to +feedbackDelay+debounce. +The other timer, called debounce timer, starts whenever +the measured signal u_m changes, and it runs for a time equal to +debounce. +The block starts verifying the inputs whenever the feedbackDelay+debounce timer +lapsed, or the debounce timer lapsed, +(and hence the measurement is stable,) whichever is first. +

+

+Both outputs being true indicates that the measured signal u_m +is not stable within feedbackDelay+debounce time. +Exactly one output being true indicates +that the measured signal u_m is stable, but +u_s ≠ u_m. In this case, +the block sets yLocFal = true if u_s = true +(the measured signal is locked at false), +or it sets yLocTru = true if u_s = false +(the measured signal is locked at true). +

+

+Therefore, exactly one output being true can be interpreted as follows: +Suppose true means on and false means off.
+Then, yLocTru = true indicates that an equipment is locked +in operation mode but is commanded off; and similarly, +yLocFal = true indicates that it is locked in off mode +when it is commanded on. +

+

Detailed description

+

+The block works as follows. +Any change in set point u_s starts the feedbackDelay+debounce timer, and +any change in measured signal u_m starts the debounce timer. +

+

+As soon as the feedbackDelay+debounce timer +or the debounce timer lapsed, +whichever happens first, +the controller continuously performs these checks: +

+
    +
  1. +Check for stable measured signal.
    +If u_m is stable, then
    +    goto step 2.
    +Else:
    +    Set yLocFal = yLocTru = true.
    +    (Equipment is commanded on but we cannot conclude it is running;
    +    set both true to flag an unstable measurement signal.)
    +
  2. +
  3. +Check for commanded and measured input to be equal.
    +If u_s ≠ u_m, then
    +    goto step 3.
    +Else,
    +    set yLocFal = false and yLocTru = false.
    +    (Equipment is operating as commanded, verified using stable input.) +
  4. +
  5. +Inputs differ.
    +If u_s = true , then
    +    set yLocFal = true and yLocTru = false.
    +    (The equipment is commanded on, but it is off.)
    +Else,
    +    set yLocFal = false and yLocTru = true.
    +    (The equipment is commanded off, but it is on.)
    +
  6. +
+", +revisions=" +
    +
  • +March 28, 2023, by Michael Wetter:
    +Revised documentation. +
  • +
  • +March 27, 2023, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end Proof; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Constant.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Constant.mo new file mode 100644 index 0000000000..2295f61fe1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Constant.mo @@ -0,0 +1,76 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources; +block Constant + "Output constant signal of type Boolean" + parameter Boolean k + "Constant output value"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with constant value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=k; + annotation ( + defaultComponentName="con", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{72,-70}}, + color={255,0,255}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-80,88},{-88,66},{-72,66},{-80,88}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,66},{-80,-82}}, + color={255,0,255}), + Line( + points={{-80,0},{64,0}}), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%k")}), + Documentation( + info=" +

+Block that outputs a constant signal y = k, +where k is a Boolean-valued parameter. +

+ +

+\"Constant.png\" +

+")); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Pulse.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Pulse.mo new file mode 100644 index 0000000000..27d18a6c61 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Pulse.mo @@ -0,0 +1,210 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources; +block Pulse + "Generate pulse signal of type Boolean" + parameter Real width( + final min=Constants.small, + final max=1, + final unit="1")=0.5 + "Width of pulse in fraction of period"; + parameter Real period( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Time for one period"; + parameter Real shift( + final quantity="Time", + final unit="s")=0 + "Shift time for output"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with pulse value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + parameter Real t1( + final quantity="Time", + final unit="s", + fixed=false) + "First end of amplitude"; + +initial algorithm + t0 := IBPSA.Utilities.Math.Functions.round( + x=integer((time)/period)*period+mod(shift,period), + n=6); + t1 := t0+width*period; + // Make sure t0 and t1 are within time + period. + if time+period < t1 then + t0 := t0-period; + t1 := t1-period; + end if; + // Make sure time is between t0 and t1, or t1 and t0 + // Now, t0 < t1 + if time >= t1 then + t0 := t0+period; + elseif time < t0 then + t1 := t1-period; + end if; + // Assert that t0 <= t < t1 or t1 <= t < t0 + if + (t0 < t1) then + assert( + t0 <= time and time < t1, + getInstanceName()+": Implementation error in initial time calculation: t0 = "+String(t0)+", t1 = "+String(t1)+", period = "+String(period)+", time = "+String(time)); + y := time >= t0 and time < t1; + else + assert( + t1 <= time and time < t0, + getInstanceName()+": Implementation error in initial time calculation: t0 = "+String(t0)+", t1 = "+String(t1)+", period = "+String(period)+", time = "+String(time)); + y := not + (time >= t1 and time < t0); + end if; + +equation + when sample( + t0, + period) then + y=true; + elsewhen sample( + t1, + period) then + y=false; + end when; + annotation ( + defaultComponentName="booPul", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%period"), + Line( + points={{79,-70},{40,-70},{40,44},{-1,44},{-1,-70},{-41,-70},{-41,44},{-80,44}}), + Polygon( + points={{-80,88},{-88,66},{-72,66},{-80,88}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,66},{-80,-82}}, + color={255,0,255}), + Line( + points={{-90,-70},{72,-70}}, + color={255,0,255}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{-66,80},{-8,56}}, + textColor={135,135,135}, + textString="%period"), + Polygon( + points={{-2,52},{-14,56},{-14,48},{-2,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{-80,52},{-4,52}}, + color={135,135,135}), + Polygon( + points={{-80,52},{-68,56},{-68,48},{-80,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{40,34},{72,34}}, + color={135,135,135}), + Polygon( + points={{74,34},{62,38},{62,30},{74,34}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Text( + extent={{38,64},{96,40}}, + textColor={135,135,135}, + textString="%shift")}), + Documentation( + info=" +

+Block that outputs a pulse signal as shown below. +

+

+\"BooleanPulse.png\" +

+

+The pulse signal is generated an infinite number of times, and aligned with time=shift. +

+", + revisions=" +
    +
  • +December 03, 2020, by Milica Grahovac:
    +Renamed delay parameter to shift.
    +This is for +Buildings, issue 2282. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation, avoided state events.
    +This is for +Buildings, issue 2170. +
  • +
  • +September 8, 2020, by Milica Grahovac:
    +Enabled specification of number of periods as a parameter. +
  • +
  • +September 1, 2020, by Milica Grahovac:
    +Revised initial equation section to ensure expected simulation results when startTime is before simulation start time. +This is for +Buildings, issue 2110. +
  • +
  • +March 23, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/SampleTrigger.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/SampleTrigger.mo new file mode 100644 index 0000000000..1f1a7ee477 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/SampleTrigger.mo @@ -0,0 +1,131 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources; +block SampleTrigger + "Generate sample trigger signal" + parameter Real period( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Sample period"; + parameter Real shift( + final quantity="Time", + final unit="s")=0 + "Shift time for output"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with trigger value" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + +initial equation + t0=IBPSA.Utilities.Math.Functions.round( + x=integer((time)/period)*period+mod(shift,period), + n=6); + +equation + y=sample(t0, period); + annotation ( + defaultComponentName="samTri", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{-60,-70},{-60,70}}), + Line( + points={{-20,-70},{-20,70}}), + Line( + points={{20,-70},{20,70}}), + Line( + points={{60,-70},{60,70}}), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%period"), + Polygon( + points={{-80,88},{-88,66},{-72,66},{-80,88}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,66},{-80,-82}}, + color={255,0,255}), + Line( + points={{-90,-70},{72,-70}}, + color={255,0,255}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), + Documentation( + info=" +

+The Boolean output y is a trigger signal that is only true +at sample times (defined by parameter period) and is otherwise +false. +

+

+\"SampleTrigger.png\" +

+

+The trigger signal is generated an infinite number of times, and aligned with time=delay. +

+", + revisions=" +
    +
  • +December 03, 2020, by Milica Grahovac:
    +Renamed delay parameter to shift.
    +This is for +Buildings, issue 2282. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 23, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end SampleTrigger; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/TimeTable.mo new file mode 100644 index 0000000000..fa7bd4fa64 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/TimeTable.mo @@ -0,0 +1,143 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources; +block TimeTable + "Table look-up with respect to time with constant segments" + parameter Real table[:,:] + "Table matrix with time as a first column (in seconds, unless timeScale is not 1) and 0 for False or 1 for True in all other columns"; + parameter Real timeScale( + final unit="1")=1 + "Time scale of first table column. Set to 3600 if time in table is in hours"; + parameter Real period( + final quantity="Time", + final unit="s") + "Periodicity of table"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y[nout] + "Output with tabulated values" + annotation (Placement(transformation(extent={{120,-20},{160,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer nout=size(table, 2)-1 + "Dimension of output vector"; + final parameter Integer nT=size(table, 1) + "Number of table points"; + Integers.Sources.TimeTable intTimTab( + final table=table, + final timeScale=timeScale, + final period=period) + "Time table" + annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); + Integers.GreaterThreshold intGreThr[nout](each t=0) + "Converts to boolean" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + +initial equation + // Check that all values in the second column are Integer values + for i in 1:nT loop + for j in 2:size(table, 2) loop + assert((abs(table[i,j]) < Constants.small) or + (abs(table[i,j]-1.0) < Constants.small), + "Table value table[" + String(i) + ", " + String(j) + "] = " + + String(table[i,j]) + " does not equal either 0 or 1."); + end for; + end for; + +equation + connect(intTimTab.y,intGreThr.u) + annotation (Line(points={{10,0},{38,0}},color={255,127,0})); + connect(intGreThr.y,y) + annotation (Line(points={{62,0},{96,0},{96,0},{140,0}},color={255,0,255})); + annotation ( + defaultComponentName="booTimTab", + Documentation( + info=" +

+Block that outputs true/false time table values. +

+

+The block takes as a parameter a time table of a format: +

+
+table = [ 0*3600, 0;
+          6*3600, 1;
+          6*3600, 0;
+         18*3600, 1;
+         18*3600, 1];
+period = 24*3600;
+
+

+where the first column of table is time and the remaining column(s) are the table values. +The time column contains Real values that are in units of seconds if timeScale = 1. +The parameter timeScale can be used to scale the time values, for example, use +timeScale = 3600 if the values in the first column are interpreted as hours. +

+

+The values in column two and higher must be 0 or 1, otherwise the model stops with an error. +

+

+Until a new tabulated value is set, the previous tabulated value is returned. +

+

+The table scope is repeated periodically with periodicity period. +

+", + revisions=" +
    +
  • +October 21, 2021, by Michael Wetter:
    +Removed writing output value in icon (as it is an array of values). +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 8, 2020, by Michael Wetter:
    +Revised implementation to use integer time table for its implementation. +
  • +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation based on continuous time table implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised, + lineColor={0,0,0}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + lineColor={217,67,180}, + fillColor={217,67,180}, + fillPattern=FillPattern.Solid, + points={{-80.0,90.0},{-88.0,68.0},{-72.0,68.0},{-80.0,90.0}}), + Line( + points={{-80.0,68.0},{-80.0,-80.0}}, + color={255,0,255}), + Line( + points={{-90.0,-70.0},{82.0,-70.0}}, + color={255,0,255}), + Polygon( + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + points={{90.0,-70.0},{68.0,-62.0},{68.0,-78.0},{90.0,-70.0}}), + Rectangle( + lineColor={255,255,255}, + fillColor={255,215,136}, + fillPattern=FillPattern.Solid, + extent={{-48.0,-50.0},{2.0,70.0}}), + Line( + points={{-48.0,-50.0},{-48.0,70.0},{52.0,70.0},{52.0,-50.0},{-48.0,-50.0},{-48.0,-20.0},{52.0,-20.0},{52.0,10.0},{-48.0,10.0},{-48.0,40.0},{52.0,40.0},{52.0,70.0},{2.0,70.0},{2.0,-51.0}})}), + Diagram( + coordinateSystem( + extent={{-100,-100},{100,100}}))); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mo new file mode 100644 index 0000000000..7de10168b3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mo @@ -0,0 +1,44 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model Constant + "Validate the Constant block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + k=true) + "Block output boolean constant value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Constant.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.Constant. +

+ +", + revisions=" +
    +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mo new file mode 100644 index 0000000000..4904c9f652 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mo @@ -0,0 +1,146 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model Pulse + "Validation model for the Boolean Pulse block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a1( + width=0.2, + period=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b1( + width=0.2, + period=2, + shift=0.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,0},{-70,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c1( + width=0.2, + period=2, + shift=0.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,-40},{-70,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a2( + width=0.2, + period=2, + shift=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,40},{-30,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b2( + width=0.2, + period=2, + shift=2.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,0},{-30,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c2( + width=0.2, + period=2, + shift=2.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,-40},{-30,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a3( + width=0.2, + period=2, + shift=4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,40},{10,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b3( + width=0.2, + period=2, + shift=4.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c3( + width=0.2, + period=2, + shift=4.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a4( + width=0.2, + period=2, + shift=-2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,40},{50,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b4( + width=0.2, + period=2, + shift=-1.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,0},{50,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c4( + width=0.2, + period=2, + shift=-1.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,-40},{50,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a5( + width=0.2, + period=2, + shift=-4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,40},{90,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b5( + width=0.2, + period=2, + shift=-3.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c5( + width=0.2, + period=2, + shift=-3.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,-40},{90,-20}}))); + annotation ( + experiment( + StartTime=0, + StopTime=10, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/Pulse.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse. +

+

+This validates the blocks with a start time of 0. +All blocks with the same letter after the underscore are configured to produce +the same output. +

+", + revisions=" +
    +
  • +October 19, 2020, by Michael Wetter:
    +Refactored test for systematic testing.
    +This is for +Buildings, issue 2170. +
  • +
  • +September 1, 2020, by Milica Grahovac:
    +Added test cases for simulation time starting before and after the pulse startTime. +This is for +Buildings, issue 2110. +
  • +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mo new file mode 100644 index 0000000000..7dd7468014 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mo @@ -0,0 +1,136 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model PulseNegativeStartTime + "Validation model for the Boolean Pulse block with negative start time" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a1( + width=0.2, + period=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b1( + width=0.2, + period=2, + shift=0.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,0},{-70,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c1( + width=0.2, + period=2, + shift=0.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,-40},{-70,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a2( + width=0.2, + period=2, + shift=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,40},{-30,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b2( + width=0.2, + period=2, + shift=2.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,0},{-30,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c2( + width=0.2, + period=2, + shift=2.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,-40},{-30,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a3( + width=0.2, + period=2, + shift=4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,40},{10,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b3( + width=0.2, + period=2, + shift=4.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c3( + width=0.2, + period=2, + shift=4.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a4( + width=0.2, + period=2, + shift=-2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,40},{50,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b4( + width=0.2, + period=2, + shift=-1.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,0},{50,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c4( + width=0.2, + period=2, + shift=-1.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,-40},{50,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a5( + width=0.2, + period=2, + shift=-4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,40},{90,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b5( + width=0.2, + period=2, + shift=-3.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c5( + width=0.2, + period=2, + shift=-3.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,-40},{90,-20}}))); + annotation ( + experiment( + StartTime=-10, + StopTime=1, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulseNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse. +

+

+This validates the blocks with a start time of -10 seconds. +All blocks with the same letter after the underscore are configured to produce +the same output. +

+", + revisions=" + +"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end PulseNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mo new file mode 100644 index 0000000000..0834536813 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mo @@ -0,0 +1,136 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model PulsePositiveStartTime + "Validation model for the Boolean Pulse block with positive, non-zero start time" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a1( + width=0.2, + period=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,40},{-70,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b1( + width=0.2, + period=2, + shift=0.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,0},{-70,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c1( + width=0.2, + period=2, + shift=0.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-90,-40},{-70,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a2( + width=0.2, + period=2, + shift=2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,40},{-30,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b2( + width=0.2, + period=2, + shift=2.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,0},{-30,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c2( + width=0.2, + period=2, + shift=2.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-50,-40},{-30,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a3( + width=0.2, + period=2, + shift=4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,40},{10,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b3( + width=0.2, + period=2, + shift=4.1) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c3( + width=0.2, + period=2, + shift=4.6) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a4( + width=0.2, + period=2, + shift=-2) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,40},{50,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b4( + width=0.2, + period=2, + shift=-1.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,0},{50,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c4( + width=0.2, + period=2, + shift=-1.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{30,-40},{50,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_a5( + width=0.2, + period=2, + shift=-4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,40},{90,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_b5( + width=0.2, + period=2, + shift=-3.9) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul_c5( + width=0.2, + period=2, + shift=-3.4) + "Boolean pulse signal" + annotation (Placement(transformation(extent={{70,-40},{90,-20}}))); + annotation ( + experiment( + StartTime=9, + StopTime=20, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/PulsePositiveStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse. +

+

+This validates the blocks with a start time of 9 seconds. +All blocks with the same letter after the underscore are configured to produce +the same output. +

+", + revisions=" + +"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end PulsePositiveStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo new file mode 100644 index 0000000000..c8b1805a70 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mo @@ -0,0 +1,77 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model SampleTrigger + "Validation model for the SampleTrigger block" + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri( + period=0.5) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + duration=5, + offset=0, + height=20) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri1( + period=0.5, + shift=1.3) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,-80},{-10,-60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler1 + "Triggered sampler" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +equation + connect(ramp.y,triggeredSampler.u) + annotation (Line(points={{-58,70},{18,70}},color={0,0,127})); + connect(samTri.y,triggeredSampler.trigger) + annotation (Line(points={{-8,30},{30,30},{30,58.2}},color={255,0,255})); + connect(samTri1.y,triggeredSampler1.trigger) + annotation (Line(points={{-8,-70},{30,-70},{30,-41.8}},color={255,0,255})); + connect(triggeredSampler1.u,ramp.y) + annotation (Line(points={{18,-30},{-40,-30},{-40,70},{-58,70}},color={0,0,127})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTrigger.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger. +The instances samTri and samTri1 use a different value for the parameter shift. +

+", + revisions=" +
    +
  • +December 03, 2020, by Milica Grahovac:
    +Added a test case with a shift parameter set to a value larger than zero. +This is for +Buildings, issue 2282. +
  • +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SampleTrigger; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo new file mode 100644 index 0000000000..ab98d3143a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model SampleTriggerNegativeStartTime + "Validation model for the SampleTrigger block with a negative start time" + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri( + period=0.5) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + duration=5, + offset=0, + height=20, + startTime=-2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri1( + period=0.5, + shift=3.2) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,-80},{-10,-60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler1 + "Triggered sampler" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +equation + connect(ramp.y,triggeredSampler.u) + annotation (Line(points={{-58,70},{18,70}},color={0,0,127})); + connect(samTri.y,triggeredSampler.trigger) + annotation (Line(points={{-8,30},{30,30},{30,58.2}},color={255,0,255})); + connect(samTri1.y,triggeredSampler1.trigger) + annotation (Line(points={{-8,-70},{30,-70},{30,-41.8}},color={255,0,255})); + connect(triggeredSampler1.u,ramp.y) + annotation (Line(points={{18,-30},{-50,-30},{-50,70},{-58,70}},color={0,0,127})); + annotation ( + experiment( + StartTime=-2.0, + StopTime=3.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger +with negative start time. +The instances samTri and samTri1 use a different value for the parameter shift. +

+", + revisions=" +
    +
  • +December 02, 2020, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SampleTriggerNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo new file mode 100644 index 0000000000..eced5d8241 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mo @@ -0,0 +1,75 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model SampleTriggerPositiveStartTime + "Validation model for the SampleTrigger block with a positive start time" + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri( + period=0.5) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,20},{-10,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + duration=5, + offset=0, + height=20, + startTime=1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri1( + period=0.5, + shift=0.3) + "Block that generates sample trigger signal" + annotation (Placement(transformation(extent={{-30,-80},{-10,-60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler1( + y_start=-2) + "Triggered sampler" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +equation + connect(ramp.y,triggeredSampler.u) + annotation (Line(points={{-58,70},{18,70}},color={0,0,127})); + connect(samTri.y,triggeredSampler.trigger) + annotation (Line(points={{-8,30},{30,30},{30,58}}, color={255,0,255})); + connect(samTri1.y,triggeredSampler1.trigger) + annotation (Line(points={{-8,-70},{30,-70},{30,-42}}, color={255,0,255})); + connect(triggeredSampler1.u,ramp.y) + annotation (Line(points={{18,-30},{-50,-30},{-50,70},{-58,70}},color={0,0,127})); + annotation ( + experiment( + StartTime=1.0, + StopTime=6.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/SampleTriggerPositiveStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger +with positive start time. +The instances samTri and samTri1 use a different value for the parameter shift. +

+", + revisions=" +
    +
  • +December 02, 2020, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SampleTriggerPositiveStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mo new file mode 100644 index 0000000000..44ef8a0acb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model TimeTable + "Validation model for TimeTable block" + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTab( + table=[ + 0,1,0; + 1.3,1,1; + 2.9,0,0; + 4,1,0], + period=5) + "Time table with boolean output" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTabOneRow( + table=[ + 0,1,0], + period=1) + "Time table with boolean output for a single table row" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTabTwi( + table=[ + 0,1,0; + 1.3,1,1; + 2.9,0,0; + 4,1,0], + period=10, + timeScale=2) + "Time table with boolean output, periodic repetition, and doubled time" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + annotation ( + experiment( + Tolerance=1e-6, + StopTime=15.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTable.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable. +

+", + revisions=" +
    +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mo new file mode 100644 index 0000000000..5e362e6db1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources.Validation; +model TimeTableNegativeStartTime + "Validation model for TimeTable block with negative start time" + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTab( + table=[ + 0,1,0; + 1.3,1,1; + 2.9,0,0; + 4,1,0], + period=5) + "Time table with boolean output" + annotation (Placement(transformation(extent={{-40,40},{-20,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTabOneRow( + table=[ + 0,1,0], + period=1) + "Time table with boolean output for a single table row" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable booTimTabTwi( + table=[ + 0,1,0; + 1.3,1,1; + 2.9,0,0; + 4,1,0], + period=10, + timeScale=2) + "Time table with boolean output, periodic repetition, and doubled time" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + annotation ( + experiment( + Tolerance=1e-6, + StartTime=-5.0, + StopTime=10.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Sources/Validation/TimeTableNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the block + +IBPSA.Controls.OBC.CDL.Logical.Sources.TimeTable. +The model is identical to + +IBPSA.Controls.OBC.CDL.Logical.Sources.Validation.TimeTable +except that the start time is negative. +", + revisions=" +

    +
  • +September 14, 2020, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTableNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.mo new file mode 100644 index 0000000000..721ab696af --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Logical.Sources; +package Validation "Collection of models that validate the logical sources blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Logical.Sources. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.order b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.order new file mode 100644 index 0000000000..4b0b7724d3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/Validation/package.order @@ -0,0 +1,9 @@ +Constant +Pulse +PulseNegativeStartTime +PulsePositiveStartTime +SampleTrigger +SampleTriggerNegativeStartTime +SampleTriggerPositiveStartTime +TimeTable +TimeTableNegativeStartTime diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/package.mo b/IBPSA/Controls/OBC/CDL/Logical/Sources/package.mo new file mode 100644 index 0000000000..d70bb57c3b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/package.mo @@ -0,0 +1,33 @@ +within IBPSA.Controls.OBC.CDL.Logical; +package Sources "Package with blocks that generate source signals" + annotation ( + Documentation( + info=" +

+Package with blocks that generate signals. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={23.3333,0.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-23.333,30.0},{46.667,0.0},{-23.333,-30.0}}), + Rectangle( + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-70,-4.5},{0,4.5}})})); +end Sources; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Sources/package.order b/IBPSA/Controls/OBC/CDL/Logical/Sources/package.order new file mode 100644 index 0000000000..67d8b8c91e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Sources/package.order @@ -0,0 +1,5 @@ +Constant +Pulse +SampleTrigger +TimeTable +Validation diff --git a/IBPSA/Controls/OBC/CDL/Logical/Switch.mo b/IBPSA/Controls/OBC/CDL/Logical/Switch.mo new file mode 100644 index 0000000000..8da32a67eb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Switch.mo @@ -0,0 +1,158 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Switch + "Switch between two boolean signals" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Boolean switch input signal, if true, y=u1, else y=u3" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u3 + "Input u3" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with u1 if u2 is true, else u3" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=if u2 then u1 else u3; + annotation ( + defaultComponentName="logSwi", + Documentation( + info=" +

+Block that outputs one of two boolean input signals based on a boolean input signal. +

+

+If the input signal u2 is true, +the block outputs y = u1. +Otherwise, it outputs y = u3. +

+", + revisions=" +
    +
  • +July 17, 2020, by Jianjun Hu:
    +Changed icon to display dynamically which input signal is being outputted.
    +This is for +Buildings, issue 2033. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{12,0},{100,0}}, + color={255,0,255}), + Line( + points={{-100,0},{-40,0}}, + color={255,0,255}), + Line( + points={{-100,-80},{-40,-80},{-40,-80}}, + color={255,0,255}), + Line( + points={{-40,12},{-40,-10}}, + color={255,0,255}), + Line( + points={{-100,80},{-40,80}}, + color={255,0,255}), + Line( + points=DynamicSelect({{8,2},{-40,80}},{{8,2}, + if u2 then + {-40,80} + else + {-40,-80}}), + color={255,0,255}, + thickness=1), + Ellipse( + lineColor={0,0,127}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{2.0,-6.0},{18.0,8.0}}), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-71,74},{-85,88}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-71,-74},{-85,-88}}, + lineColor=DynamicSelect({235,235,235}, + if u3 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u3 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-90,76},{-46,50}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {0,0,0} + else + {235,235,235}), + textString="true"), + Text( + extent={{-90,-42},{-38,-72}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {235,235,235} + else + {0,0,0}), + textString="false"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Timer.mo b/IBPSA/Controls/OBC/CDL/Logical/Timer.mo new file mode 100644 index 0000000000..a0b2f23226 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Timer.mo @@ -0,0 +1,190 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Timer + "Timer measuring the time from the time instant where the Boolean input became true" + parameter Real t( + final quantity="Time", + final unit="s")=0 + "Threshold time for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input that switches timer on if true, and off if false" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final quantity="Time", + final unit="s") + "Elapsed time" + annotation (Placement(transformation(extent={{100,-20},{140,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput passed + "Output with true if the elapsed time is greater than threshold" + annotation (Placement(transformation(extent={{100,-100},{140,-60}}),iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + discrete Real entryTime( + final quantity="Time", + final unit="s") + "Time instant when u became true"; + +initial equation + pre(entryTime)=time; + pre(passed)=t <= 0; + +equation + when u then + entryTime=time; + // When u becomes true, and t=0, we want passed to be true + // at the first step (in superdense time). + passed=t <= 0; + elsewhen + (u and time >= t+pre(entryTime)) then + passed=true; + entryTime=pre(entryTime); + elsewhen not u then + // Set passed to false. + // This is the behavior a timer would have if the threshold test is done with a greater block connected to the output of the timer + passed=false; + entryTime=pre(entryTime); + end when; + y=if u then + time-entryTime + else + 0.0; + annotation ( + defaultComponentName="tim", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{-66,-60},{82,-60}}, + color={192,192,192}), + Line( + points={{-58,68},{-58,-80}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90,-60},{68,-52},{68,-68},{90,-60}}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-58,90},{-66,68},{-50,68},{-58,90}}), + Line( + points={{-56,-60},{-38,-60},{-38,-16},{40,-16},{40,-60},{68,-60}}, + color={255,0,255}), + Line( + points={{-58,0},{-40,0},{40,58},{40,0},{68,0}}, + color={0,0,127}), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="t=%t"), + Ellipse( + extent={{-83,7},{-69,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,-73},{85,-87}}, + lineColor=DynamicSelect({235,235,235}, + if passed then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if passed then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+If the Boolean input u is true, +the output y is the time that has elapsed since u became true. +Otherwise, y is 0. +If the output y becomes greater than the threshold time t, +the output passed is true. +Otherwise it is false. +

+

+In the limiting case where the timer value reaches the threshold t +and the input u becomes false simultaneously, +the output passed remains false. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +August 28, 2020, by Michael Wetter:
    +Revised implementation to correctly deal with non-zero simulation start time, +and to avoid state events.
    +This is for +Buildings, issue 2101. +
  • +
  • +August 26, 2020, by Jianjun Hu:
    +Removed reset boolean input and added output passed +to show if the time becomes greater than threshold time.
    +This is for +Buildings, issue 2101. +
  • +
  • +July 31, 2020, by Jianjun Hu:
    +Fixed the reset input. This is for +Buildings, issue 2056. +
  • +
  • +November 8, 2019, by Michael Wetter:
    +Revised implementation. This is for +Buildings, issue 1221. +
  • +
  • +July 23, 2018, by Jianjun Hu:
    +Added conditional boolean input for cumulative time measuring. This is for +Buildings, issue 1221. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to output accumulated true input time. This is for +Buildings, issue 1212. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Timer; diff --git a/IBPSA/Controls/OBC/CDL/Logical/TimerAccumulating.mo b/IBPSA/Controls/OBC/CDL/Logical/TimerAccumulating.mo new file mode 100644 index 0000000000..426e6d9227 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/TimerAccumulating.mo @@ -0,0 +1,212 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block TimerAccumulating + "Accumulating timer that can be reset" + parameter Real t( + final quantity="Time", + final unit="s")=0 + "Threshold time for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input that switches timer on if true, and off if false" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput reset + "Connector for signal that sets timer to zero if it switches to true" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}),iconTransformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final quantity="Time", + final unit="s") + "Elapsed time" + annotation (Placement(transformation(extent={{100,-20},{140,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput passed + "Output with true if the elapsed time is greater than threshold" + annotation (Placement(transformation(extent={{100,-100},{140,-60}}),iconTransformation(extent={{100,-100},{140,-60}}))); + +protected + discrete Real entryTime( + final quantity="Time", + final unit="s") + "Time instant when u became true"; + discrete Real yAcc( + final quantity="Time", + final unit="s") + "Accumulated time up to last change to true"; + +initial equation + pre(u)=false; + pre(reset)=false; + pre(entryTime)=time; + pre(passed)=t <= 0; + yAcc=0; + +equation + // The when constructs below are identical to the ones in IBPSA.Controls.OBC.CDL.Logical.Timer + when reset then + entryTime=time; + passed=t <= 0; + yAcc=0; + elsewhen u then + entryTime=time; + // When u becomes true, and t=0, we want passed to be true + // at the first step (in superdense time). + passed=t <= yAcc; + yAcc=pre(yAcc); + elsewhen u and time >= t+pre(entryTime)-pre(yAcc) then + passed=true; + entryTime=pre(entryTime); + yAcc=pre(yAcc); + elsewhen not u then + passed=pre(passed); + //time >= t_internal + pre(entryTime); + entryTime=pre(entryTime); + yAcc=pre(y); + end when; + y=if u then + yAcc+time-entryTime + else + yAcc; + annotation ( + defaultComponentName="accTim", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{-66,-60},{82,-60}}, + color={192,192,192}), + Line( + points={{-58,68},{-58,-80}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90,-60},{68,-52},{68,-68},{90,-60}}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-58,90},{-66,68},{-50,68},{-58,90}}), + Line( + points={{-56,-60},{-38,-60},{-38,-16},{-4,-16},{-4,-60},{26,-60},{26,-16},{64,-16}}, + color={255,0,255}), + Line( + points={{-58,0},{-40,0},{-6,28},{24,28},{60,58}}, + color={0,0,127}), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="t=%t"), + Ellipse( + extent={{-83,7},{-69,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,-73},{85,-87}}, + lineColor=DynamicSelect({235,235,235}, + if passed then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if passed then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Timer that accumulates time until it is reset by an input signal. +

+

+If the Boolean input u is true, +the output y is the time that has elapsed while u has been true +since the last time reset became true. +If u is false, the output y holds its value. +If the output y becomes greater than the threshold time t, +the output passed is true. +Otherwise it is false. +

+

+When reset becomes true, the timer is reset to 0. +

+

+In the limiting case where the timer value reaches the threshold t +and the input u becomes false simultaneously, +the output passed remains false. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +August 28, 2020, by Michael Wetter:
    +Revised implementation to correctly deal with non-zero simulation start time, +and to avoid state events.
    +This is for +Buildings, issue 2101. +
  • +
  • +August 26, 2020, by Jianjun Hu:
    +Removed parameter accumulate and added output passed.
    +This is for +Buildings, issue 2101. +
  • +
  • +July 31, 2020, by Jianjun Hu:
    +Fixed the reset input. This is for +Buildings, issue 2056. +
  • +
  • +November 8, 2019, by Michael Wetter:
    +Revised implementation. This is for +Buildings, issue 1221. +
  • +
  • +July 23, 2018, by Jianjun Hu:
    +Added conditional boolean input for cumulative time measuring. This is for +Buildings, issue 1221. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to output accumulated true input time. This is for +Buildings, issue 1212. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end TimerAccumulating; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Toggle.mo b/IBPSA/Controls/OBC/CDL/Logical/Toggle.mo new file mode 100644 index 0000000000..a9e196c8f1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Toggle.mo @@ -0,0 +1,178 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Toggle + "Toggles output value whenever its input turns true" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Toggle input" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput clr + "Clear input" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with toggled signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + pre(y)=false; + pre(u)=false; + pre(clr)=false; + +equation + when initial() then + //scenario = 1 + y=if clr then false else u; + elsewhen + (not clr) and change(u) and + (pre(u) == false) and + (pre(y) == false) + then + //scenario = 2 + y=true; + elsewhen + (not clr) and change(u) and + (pre(u) == false) and + (pre(y) == true) + then + //scenario = 3 + y=false; + elsewhen + (not clr) and change(u) and + (pre(u) == true) + then + //scenario = 4 + y=pre(y); + elsewhen clr then + //scenario = 5 + y=false; + end when; + annotation ( + defaultComponentName="tog", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{-73,9},{-87,-5}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-73,-53},{-87,-67}}, + lineColor=DynamicSelect({235,235,235}, + if clr then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if clr then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-68,-62},{4,-62},{4,-22},{74,-22}}, + color={255,0,255}), + Line( + points={{-68,24},{-48,24},{-48,56},{-16,56},{-16,24},{24,24},{24,56},{54,56},{54,24},{74,24}}, + color={255,0,255}), + Text( + extent={{-22,72},{28,58}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="Toggle input"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-14,-10},{14,-20}}, + textColor={0,0,0}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + textString="Clear")}), + Documentation( + info=" +

+Block that generates a true output when toggle input u +rises from false to true, provided that the clear input +clr is false or also became at the same time +false. The output remains true until +

+
    +
  • +the toggle input u rises from false to true again, or +
  • +
  • +the clear input clr rises from false to true. +
  • +
+

+If the clear input clr is true, the output y +switches to false (if it was true) and it remains false, +regardless of the value of the toggle input u. +

+ +

+At initial time, if clr = false, then the output will be +y = u. Otherwise it will be y=false +(because the clear input clr is true). +

+ +

+\"Toggle.png\" +

+ +", + revisions=" +
    +
  • +October 13, 2020, by Jianjun Hu:
    +Removed the parameter pre_y_start, and made the initial output to be +equal to toggle input when the clear input is false.
    +This is for Buildings, issue 2177. +
  • +
  • +March 9, 2020, by Michael Wetter:
    +Simplified implementation, and made model work with OpenModelica. +
  • +
  • +April 4, 2019, by Jianjun Hu:
    +Corrected implementation that causes wrong output at initial stage. +This is for Buildings, issue 1402. +
  • +
  • +March 31, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end Toggle; diff --git a/IBPSA/Controls/OBC/CDL/Logical/TrueDelay.mo b/IBPSA/Controls/OBC/CDL/Logical/TrueDelay.mo new file mode 100644 index 0000000000..4352ef86dd --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/TrueDelay.mo @@ -0,0 +1,140 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block TrueDelay + "Delay a rising edge of the input, but do not delay a falling edge" + parameter Real delayTime( + final quantity="Time", + final unit="s") + "Delay time"; + parameter Boolean delayOnInit=false + "Set to true to delay initial true input"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input signal to be delayed when it switches to true" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with delayed input signal after it switched to true" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real t_past( + final quantity="Time", + final unit="s", + fixed=false) + "Time before simulation started"; + Real t_next( + final quantity="Time", + final unit="s") + "Next event time"; + +initial equation + t_past=time-1000; + pre(u)=false; + pre(t_next)=time-1000; + +equation + when initial() then + t_next=if not delayOnInit then t_past else time+delayTime; + y=if not (delayOnInit and delayTime > 0) then u else false; + elsewhen u then + t_next=time+delayTime; + y=if delayTime > 0 then false else true; + elsewhen not u then + t_next=t_past; + y=false; + elsewhen time >= pre(t_next) then + t_next=t_past; + y=u; + end when; + annotation ( + defaultComponentName="truDel", + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-250,-120},{250,-150}}, + textColor={0,0,0}, + textString="%delayTime"), + Line( + points={{-80,-66},{-60,-66},{-60,-22},{38,-22},{38,-66},{66,-66}}), + Line( + points={{-80,32},{-4,32},{-4,76},{38,76},{38,32},{66,32}}, + color={255,0,255}), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that delays a signal when it becomes true. +

+

+A rising edge of the Boolean input u gives a delayed output. +A falling edge of the input is immediately given to the output. If +delayOnInit = true, then a true input signal +at the start time is also delayed, otherwise the input signal is +produced immediately at the output. +

+

+Simulation results of a typical example with a delay time of 0.1 second +is shown below. +

+

+\"OnDelay1.png\" +
+\"OnDelay2.png\" +

+ +", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +February 11, 2019, by Milica Grahovac:
    +Added boolean input to enable delay of an initial true input. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end TrueDelay; diff --git a/IBPSA/Controls/OBC/CDL/Logical/TrueFalseHold.mo b/IBPSA/Controls/OBC/CDL/Logical/TrueFalseHold.mo new file mode 100644 index 0000000000..5365adb62d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/TrueFalseHold.mo @@ -0,0 +1,187 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block TrueFalseHold + "Block that holds an output signal for at least a specified duration" + parameter Real trueHoldDuration( + final quantity="Time", + final unit="s") + "Duration of true hold" + annotation (Evaluate=true); + parameter Real falseHoldDuration( + final quantity="Time", + final unit="s")=trueHoldDuration + "Duration of false hold" + annotation (Evaluate=true); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input signal that is to be delayed" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with delayed input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); +protected + /* The following parameter is required solely as a warkaround for a bug in OCT [Modelon - 1263]. + Both Dymola and OMC can handle the initial equation pre(u)=u, which complies with MLS. */ + parameter Boolean pre_u_start=false + "Value of pre(u) at initial time" + annotation (Evaluate=true); + Boolean not_u = not u + "Opposite of u"; + Boolean not_y = not y + "Opposite of y"; + discrete Real entryTimeTrue( + final quantity="Time", + final unit="s") + "Time instant when true hold started"; + discrete Real entryTimeFalse( + final quantity="Time", + final unit="s") + "Time instant when false hold started"; +initial equation + pre(entryTimeTrue) = -Modelica.Constants.inf; + pre(entryTimeFalse) = -Modelica.Constants.inf; + pre(u) = pre_u_start; + pre(not_u) = not pre_u_start; + pre(y) = u; + pre(not_y) = not u; +equation + when initial() then + y = u; + entryTimeTrue = if y then time else pre(entryTimeTrue); + entryTimeFalse = if not y then time else pre(entryTimeFalse); + /* + The two elsewhen clauses below are kept separate to address an issue + with event handling in the CVODE solver. + */ + elsewhen {edge(u), edge(not_u)} then + y = if time >= pre(entryTimeFalse) + falseHoldDuration and + time >= pre(entryTimeTrue) + trueHoldDuration then u + else pre(y); + entryTimeTrue = if edge(y) then time else pre(entryTimeTrue); + entryTimeFalse = if edge(not_y) then time else pre(entryTimeFalse); + elsewhen time >= pre(entryTimeFalse) + falseHoldDuration and + time >= pre(entryTimeTrue) + trueHoldDuration then + y = u; + entryTimeTrue = if edge(y) then time else pre(entryTimeTrue); + entryTimeFalse = if edge(not_y) then time else pre(entryTimeFalse); + end when; + annotation ( + defaultComponentName="truFalHol", + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised, + lineColor={0,0,0}), + Line( + points={{-84,10},{-50,10},{-50,54},{-18,54},{-18,10},{-18,10}}, + color={255,0,255}), + Line( + points={{-78,-46},{-48,-46},{-48,-2},{-24,-2},{-24,-46},{-24,-46}}), + Line( + points={{-24,-46},{6,-46},{6,-2},{44,-2},{44,-46},{74,-46}}), + Line( + points={{-18,10},{14,10},{14,54},{46,54},{46,10},{66,10}}, + color={255,0,255}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-88,-62},{92,-90}}, + textColor={0,0,255}, + textString="%falseHoldDuration"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235},if y then + {0,255,0} else + {235,235,235}), + fillColor=DynamicSelect({235,235,235},if y then + {0,255,0} else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-83,7},{-69,-7}}, + lineColor=DynamicSelect({235,235,235},if u then + {0,255,0} else + {235,235,235}), + fillColor=DynamicSelect({235,235,235},if u then + {0,255,0} else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-90,96},{96,68}}, + textColor={0,0,255}, + textString="%trueHoldDuration")}), + Diagram( + coordinateSystem( + preserveAspectRatio=false)), + Documentation( + info=" +

+Block that holds a true or false signal for at least a defined time period. +

+

+Whenever the input u switches to true (resp. false), +the output y switches and remains true for at least +the duration specified by the parameter trueHoldDuration +(resp. falseHoldDuration). +After this duration has elapsed, the output will be y = u. +

+

+This block could for example be used to disable an economizer, +and not re-enable it for 10 min, and vice versa. +

+

+Simulation results of a typical example with trueHoldDuration = falseHoldDuration = 1000 s. +

+

+ +

+", + revisions=" +
    +
  • +August 26, 2024, by Antoine Gautier:
    +Resolved an issue with unit impulse signals.
    +This is for +Buildings, issue 3966. +
  • +
  • +June 13, 2024, by Antoine Gautier:
    +Refactored with synchronous language elements.
    +This is for +Buildings, issue 3787. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +September 18, 2017, by Michael Wetter:
    +Improved event handling. +
  • +
  • +July 14, 2017, by Michael Wetter:
    +Corrected model to set output equal to input during initialization. +
  • +
  • +June 13, 2017, by Michael Wetter:
    +Reimplemented model using a state graph to avoid having to test for equality within tolerance, +and to correct a bug. +This implementation is also easier to understand.
    +This is for +Buildings, issue 789. +
  • +
  • +May 24, 2017, by Milica Grahovac:
    +First implementation. +
  • +
+")); +end TrueFalseHold; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/And.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/And.mo new file mode 100644 index 0000000000..9372ecd075 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/And.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model And + "Validation model for the And block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,8},{-6,28}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-26},{-6,-6}}))); + IBPSA.Controls.OBC.CDL.Logical.And and1 + "Logical and" + annotation (Placement(transformation(extent={{26,-8},{46,12}}))); + +equation + connect(booPul2.y,and1.u2) + annotation (Line(points={{-4,-16},{8,-16},{8,-6},{24,-6}},color={255,0,255})); + connect(booPul1.y,and1.u1) + annotation (Line(points={{-4,18},{10,18},{10,2},{24,2}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/And.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.And. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end And; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Change.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Change.mo new file mode 100644 index 0000000000..20b2857cd0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Change.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Change + "Validation model for the Change block." + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=1.0) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Change change + "Outputs true if the input changes" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=5, + offset=0, + height=20) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + +equation + connect(booPul.y,change.u) + annotation (Line(points={{-19,0},{-6,0},{-2,0}},color={255,0,255})); + connect(ramp2.y,triggeredSampler.u) + annotation (Line(points={{21,50},{29.5,50},{38,50}},color={0,0,127})); + connect(change.y,triggeredSampler.trigger) + annotation (Line(points={{21,0},{50,0},{50,38.2}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Change.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Change. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Change; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Edge.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Edge.mo new file mode 100644 index 0000000000..e4e044987b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Edge.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Edge + "Validation model for the Edge block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=1.0) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Edge edge1 + "Outputs true if the input has a rising edge" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=5, + offset=0, + height=20) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Triggered sampler" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + +equation + connect(booPul.y,edge1.u) + annotation (Line(points={{-19,0},{-8,0},{-2,0}},color={255,0,255})); + connect(edge1.y,triggeredSampler.trigger) + annotation (Line(points={{21,0},{50,0},{50,38},{50,38.2}},color={255,0,255})); + connect(ramp2.y,triggeredSampler.u) + annotation (Line(points={{21,50},{29.5,50},{38,50}},color={0,0,127})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Edge.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Edge. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Edge; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo new file mode 100644 index 0000000000..6bcb9179e8 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/FallingEdge.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model FallingEdge + "Validation model for the falling edge block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=1.0) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Output true when input changes from true to false" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=5, + offset=0, + height=20) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triggeredSampler + "Trigger sampling of continuous signal" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + +equation + connect(booPul.y,falEdg.u) + annotation (Line(points={{-18,0},{-18,0},{-2,0}},color={255,0,255})); + connect(ramp2.y,triggeredSampler.u) + annotation (Line(points={{22,50},{22,50},{38,50}},color={0,0,127})); + connect(falEdg.y,triggeredSampler.trigger) + annotation (Line(points={{22,0},{22,0},{50,0},{50,38.2}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/FallingEdge.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.FallingEdge. +

+", + revisions=" +
    +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end FallingEdge; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Latch.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Latch.mo new file mode 100644 index 0000000000..ee64512332 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Latch.mo @@ -0,0 +1,221 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Latch + "Validation model for the Latch block" + IBPSA.Controls.OBC.CDL.Logical.Latch falCleTruIni + "Latch block with clear input being contantly false and true initial latch input" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch truCleTruIni + "Latch block with clear input being contantly true and true initial latch input" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch falCleFalIni + "Latch block with clear input being contantly false and false initial latch input" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch truCleFalIni + "Latch block with clear input being contantly true and false initial latch input" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch swiCleInp + "Initial false output, with clear input switch between false and true" + annotation (Placement(transformation(extent={{100,90},{120,110}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch swiCleInp1 + "Initial false output, with clear input switch between false and true" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse cleInp( + final width=0.5, + final period=6) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Logcal not" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) + "False clear input" + annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp( + final width=0.5, + final period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant tru( + final k=true) + "True clear input" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not2 + "Logical not" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + +equation + connect(cleInp.y,swiCleInp.clr) + annotation (Line(points={{22,40},{70,40},{70,94},{98,94}},color={255,0,255})); + connect(not1.u,cleInp.y) + annotation (Line(points={{38,-60},{30,-60},{30,40},{22,40}},color={255,0,255})); + connect(not1.y,swiCleInp1.clr) + annotation (Line(points={{62,-60},{72,-60},{72,-66},{98,-66}},color={255,0,255})); + connect(fal.y,falCleTruIni.clr) + annotation (Line(points={{-98,80},{-70,80},{-70,94},{-62,94}},color={255,0,255})); + connect(latInp.y,falCleTruIni.u) + annotation (Line(points={{-138,160},{-80,160},{-80,100},{-62,100}},color={255,0,255})); + connect(tru.y,truCleTruIni.clr) + annotation (Line(points={{-98,-60},{-70,-60},{-70,-46},{-62,-46}},color={255,0,255})); + connect(latInp.y,truCleTruIni.u) + annotation (Line(points={{-138,160},{-80,160},{-80,-40},{-62,-40}},color={255,0,255})); + connect(latInp.y,swiCleInp.u) + annotation (Line(points={{-138,160},{80,160},{80,100},{98,100}},color={255,0,255})); + connect(latInp.y,swiCleInp1.u) + annotation (Line(points={{-138,160},{80,160},{80,-60},{98,-60}},color={255,0,255})); + connect(latInp.y,not2.u) + annotation (Line(points={{-138,160},{-130,160},{-130,0},{-122,0}},color={255,0,255})); + connect(not2.y,falCleFalIni.u) + annotation (Line(points={{-98,0},{-90,0},{-90,40},{-62,40}},color={255,0,255})); + connect(fal.y,falCleFalIni.clr) + annotation (Line(points={{-98,80},{-70,80},{-70,34},{-62,34}},color={255,0,255})); + connect(tru.y,truCleFalIni.clr) + annotation (Line(points={{-98,-60},{-70,-60},{-70,-106},{-62,-106}},color={255,0,255})); + connect(not2.y,truCleFalIni.u) + annotation (Line(points={{-98,0},{-90,0},{-90,-100},{-62,-100}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Latch.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Latch. Following tests are implemented: +

+
    +
  • +When the clear input is false, the initial output should equal to the initial latch input. +
  • +
  • +When the clear input is true, the initial output should be false, +regardless of the value of the latch input. +
  • +
  • +At the same moment, when both the clear input and the latch input rise from false +to true, the output should become false if it was true, +or remain false if it was false. +
  • +
  • +At the same moment, when the clear input falls from true to false +and the latch input rises from false to true, the output +should rise from false to true. +
  • +
+", + revisions=" +
    +
  • +April 4, 2019, by Jianjun Hu:
    +Added test to validate initial output. +This is for Buildings, issue 1402. +
  • +
  • +March 30, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-180,-180},{180,180}}), + graphics={ + Text( + extent={{-68,140},{-2,130}}, + textColor={28,108,200}, + textString="Clear input keeps false"), + Text( + extent={{76,148},{136,140}}, + textColor={28,108,200}, + textString="At 3rd second:"), + Text( + extent={{92,128},{172,118}}, + textColor={28,108,200}, + textString="Clear input falls: true to false"), + Text( + extent={{92,138},{170,128}}, + textColor={28,108,200}, + textString="Latch input falls: true to false"), + Text( + extent={{92,64},{170,56}}, + textColor={28,108,200}, + textString="Clear input rises: false to true"), + Text( + extent={{92,76},{172,66}}, + textColor={28,108,200}, + textString="Latch input rise: false to true"), + Text( + extent={{76,86},{136,78}}, + textColor={28,108,200}, + textString="At 6th second:"), + Text( + extent={{92,-96},{172,-104}}, + textColor={28,108,200}, + textString="Clear input falls: true to false"), + Text( + extent={{92,-84},{172,-94}}, + textColor={28,108,200}, + textString="Latch input rise: false to true"), + Text( + extent={{76,-74},{136,-82}}, + textColor={28,108,200}, + textString="At 6th second:"), + Text( + extent={{76,-12},{136,-20}}, + textColor={28,108,200}, + textString="At 3rd second:"), + Text( + extent={{92,-32},{172,-42}}, + textColor={28,108,200}, + textString="Clear input rises: false to true"), + Text( + extent={{92,-22},{170,-32}}, + textColor={28,108,200}, + textString="Latch input falls: true to false"), + Text( + extent={{-68,130},{-24,122}}, + textColor={28,108,200}, + textString="True initial input"), + Text( + extent={{-68,66},{-24,58}}, + textColor={28,108,200}, + textString="False initial input"), + Text( + extent={{-68,76},{-2,66}}, + textColor={28,108,200}, + textString="Clear input keeps false"), + Text( + extent={{-68,-14},{-24,-22}}, + textColor={28,108,200}, + textString="True initial input"), + Text( + extent={{-68,-4},{-2,-14}}, + textColor={28,108,200}, + textString="Clear input keeps true"), + Text( + extent={{-66,-74},{-22,-82}}, + textColor={28,108,200}, + textString="False initial input"), + Text( + extent={{-66,-64},{0,-74}}, + textColor={28,108,200}, + textString="Clear input keeps false")})); +end Latch; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiAnd.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiAnd.mo new file mode 100644 index 0000000000..ba07bcbf9b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiAnd.mo @@ -0,0 +1,112 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model MultiAnd + "Model to validate the application of MultiAnd block" + IBPSA.Controls.OBC.CDL.Logical.MultiAnd mulAnd0 + "Logical and with multiple inputs: 0 input" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiAnd mulAnd1( + nin=1) + "Logical 'MultiAnd': 1 input connection y=u" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiAnd mulAnd2( + nin=2) + "Logical 'MultiAnd': 2 input connections y=and(u1, u2)" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiAnd mulAnd5( + nin=5) + "Logical 'MultiAnd': 5 input connections y=and(u1, u2, ..., u5)" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + width=0.5, + period=3) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + width=0.5, + period=4) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + +equation + connect(booPul1.y,mulAnd5.u[1]) + annotation (Line(points={{-38,60},{-38,60},{20,60},{20,-24.4},{38,-24.4}},color={255,0,255})); + connect(booPul2.y,mulAnd5.u[2]) + annotation (Line(points={{-38,30},{14,30},{14,-27.2},{38,-27.2}},color={255,0,255})); + connect(booPul3.y,mulAnd5.u[3]) + annotation (Line(points={{-38,0},{0,0},{0,-30},{38,-30}},color={255,0,255})); + connect(booPul4.y,mulAnd5.u[4]) + annotation (Line(points={{-38,-30},{-38,-30},{-4,-30},{-4,-32},{-4,-32},{-4, + -32.8},{38,-32.8}}, color={255,0,255})); + connect(booPul5.y,mulAnd5.u[5]) + annotation (Line(points={{-38,-60},{-38,-60},{20,-60},{20,-35.6},{38,-35.6}},color={255,0,255})); + connect(booPul1.y,mulAnd2.u[1]) + annotation (Line(points={{-38,60},{-38,60},{20,60},{20,3.5},{38,3.5}},color={255,0,255})); + connect(booPul2.y,mulAnd2.u[2]) + annotation (Line(points={{-38,30},{-38,30},{14,30},{14,-3.5},{38,-3.5}},color={255,0,255})); + connect(booPul1.y,mulAnd1.u[1]) + annotation (Line(points={{-38,60},{20,60},{20,30},{38,30}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiAnd.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.MultiAnd. +

+

+The input signals are configured as follows:

+
    +
  • input u1 has a period of 1 s and a width of +0.5 s.
  • +
  • input u2 has a period of 2 s and a width of +0.5 s.
  • +
  • input u3 has a period of 3 s and a width of +0.5 s.
  • +
  • input u4 has a period of 4 s and a width of +0.5 s.
  • +
  • input u5 has a period of 5 s and a width of +0.5 s.
  • +
+", + revisions=" +
    +
  • +June 28, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiAnd; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiOr.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiOr.mo new file mode 100644 index 0000000000..ff93ab70e3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/MultiOr.mo @@ -0,0 +1,112 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model MultiOr + "Model to validate the application of MultiOr block" + IBPSA.Controls.OBC.CDL.Logical.MultiOr mulOr0 + "Logical 'MultiOr': 1 input connection y=u" + annotation (Placement(transformation(extent={{40,60},{60,80}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiOr mulOr1( + nin=1) + "Logical 'MultiOr': 1 input connection y=u" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiOr mulOr2( + nin=2) + "Logical 'MultiOr': 2 input connections y=and(u1, u2)" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Logical.MultiOr mulOr5( + nin=5) + "Logical 'MultiOr': 5 input connections y=and(u1, u2, ..., u5)" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + width=0.5, + period=3) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + width=0.5, + period=4) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + +equation + connect(booPul1.y,mulOr5.u[1]) + annotation (Line(points={{-38,60},{-38,60},{20,60},{20,-24.4},{38,-24.4}},color={255,0,255})); + connect(booPul2.y,mulOr5.u[2]) + annotation (Line(points={{-38,30},{14,30},{14,-27.2},{38,-27.2}},color={255,0,255})); + connect(booPul3.y,mulOr5.u[3]) + annotation (Line(points={{-38,0},{0,0},{0,-30},{38,-30}},color={255,0,255})); + connect(booPul4.y,mulOr5.u[4]) + annotation (Line(points={{-38,-30},{-38,-30},{-4,-30},{-4,-32},{-4,-32},{-4, + -32.8},{38,-32.8}}, color={255,0,255})); + connect(booPul5.y,mulOr5.u[5]) + annotation (Line(points={{-38,-60},{-38,-60},{20,-60},{20,-35.6},{38,-35.6}},color={255,0,255})); + connect(booPul1.y,mulOr2.u[1]) + annotation (Line(points={{-38,60},{-38,60},{20,60},{20,3.5},{38,3.5}},color={255,0,255})); + connect(booPul2.y,mulOr2.u[2]) + annotation (Line(points={{-38,30},{-38,30},{14,30},{14,-3.5},{38,-3.5}},color={255,0,255})); + connect(booPul1.y,mulOr1.u[1]) + annotation (Line(points={{-38,60},{20,60},{20,30},{38,30}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/MultiOr.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.MultiOr. +

+

+The input signals are configured as follows:

+
    +
  • input u1 has a period of 1 s and a width of +0.5 s.
  • +
  • input u2 has a period of 2 s and a width of +0.5 s.
  • +
  • input u3 has a period of 3 s and a width of +0.5 s.
  • +
  • input u4 has a period of 4 s and a width of +0.5 s.
  • +
  • input u5 has a period of 5 s and a width of +0.5 s.
  • +
+", + revisions=" +
    +
  • +June 6, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiOr; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Nand.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Nand.mo new file mode 100644 index 0000000000..b6207791e1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Nand.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Nand + "Validation model for the Nand block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,8},{-6,28}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-26},{-6,-6}}))); + IBPSA.Controls.OBC.CDL.Logical.Nand nand1 + "Outputs true if at least one input is false" + annotation (Placement(transformation(extent={{26,-8},{46,12}}))); + +equation + connect(booPul2.y,nand1.u2) + annotation (Line(points={{-4,-16},{8,-16},{8,-6},{24,-6}},color={255,0,255})); + connect(booPul1.y,nand1.u1) + annotation (Line(points={{-4,18},{10,18},{10,2},{24,2}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nand.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Nand. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Nand; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Nor.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Nor.mo new file mode 100644 index 0000000000..da611d25ca --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Nor.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Nor + "Validation model for the Nor block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,8},{-6,28}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-26},{-6,-6}}))); + IBPSA.Controls.OBC.CDL.Logical.Nor nor1 + "Outputs true if none of the inputs is true, otherwise outputs false" + annotation (Placement(transformation(extent={{26,-8},{46,12}}))); + +equation + connect(booPul2.y,nor1.u2) + annotation (Line(points={{-4,-16},{8,-16},{8,-6},{24,-6}},color={255,0,255})); + connect(booPul1.y,nor1.u1) + annotation (Line(points={{-4,18},{10,18},{10,2},{24,2}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Nor.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Nor. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Nor; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Not.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Not.mo new file mode 100644 index 0000000000..15fa4ed695 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Not.mo @@ -0,0 +1,51 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Not + "Validation model for the Not block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Output true when input is false and output false when input is true" + annotation (Placement(transformation(extent={{26,-10},{46,10}}))); + +equation + connect(booPul.y,not1.u) + annotation (Line(points={{-4,0},{-4,0},{24,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Not.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Not. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Not; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Or.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Or.mo new file mode 100644 index 0000000000..44899c9dad --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Or.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Or + "Validation model for the Or block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,8},{-6,28}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=3) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-26},{-6,-6}}))); + IBPSA.Controls.OBC.CDL.Logical.Or or1 + "Output true if at least one input is true" + annotation (Placement(transformation(extent={{26,-8},{46,12}}))); + +equation + connect(booPul2.y,or1.u2) + annotation (Line(points={{-4,-16},{8,-16},{8,-6},{24,-6}},color={255,0,255})); + connect(booPul1.y,or1.u1) + annotation (Line(points={{-4,18},{10,18},{10,2},{24,2}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Or.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Or. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Or; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Proof.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Proof.mo new file mode 100644 index 0000000000..b253d84408 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Proof.mo @@ -0,0 +1,156 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Proof "Validation model for the Proof block" + IBPSA.Controls.OBC.CDL.Logical.Proof pro( + debounce=0.5, + feedbackDelay=0.75) "Both inputs change at the same time" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Proof pro1( + debounce=0.5, + feedbackDelay=0.75) + "Commanded input changes from true to false earlier than measured input" + annotation (Placement(transformation(extent={{-20,30},{0,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Proof pro2( + debounce=0.5, + feedbackDelay=0.75) + "Measured input changes from true to false earlier than commanded input" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Proof pro3( + debounce=0.5, + feedbackDelay=0.5) + "Shorter delay to valid input" + annotation (Placement(transformation(extent={{-20,-50},{0,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.Proof pro4( + debounce=0.5, + feedbackDelay=0.5) + "Shorter delay to valid input" + annotation (Placement(transformation(extent={{-20,-90},{0,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Proof pro5( + debounce=2, + feedbackDelay=2) + "Both inputs change at the same time" + annotation (Placement(transformation(extent={{60,70},{80,90}}))); + + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp( + width=0.2, + period=10, + shift=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,54},{-60,74}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp1( + width=0.2, + period=10, + shift=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp2( + width=0.1, + period=10, + shift=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp3( + width=0.5, + period=2, + shift=1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{40,30},{60,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse latInp4( + width=0.9, + period=12, + shift=0.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); +equation + connect(latInp1.y, pro.u_s) annotation (Line(points={{-58,20},{-30,20},{-30,80}, + {-22,80}},color={255,0,255})); + connect(latInp2.y, pro1.u_s) annotation (Line(points={{-58,-50},{-40,-50},{-40, + 40},{-22,40}}, color={255,0,255})); + connect(latInp1.y, pro2.u_s) annotation (Line(points={{-58,20},{-30,20},{-30,0}, + {-22,0}}, color={255,0,255})); + connect(latInp2.y, pro4.u_s) annotation (Line(points={{-58,-50},{-40,-50},{-40, + -80},{-22,-80}}, color={255,0,255})); + connect(latInp1.y, pro3.u_s) annotation (Line(points={{-58,20},{-30,20},{-30,-40}, + {-22,-40}},color={255,0,255})); + connect(latInp.y, pro.u_m) annotation (Line(points={{-58,64},{-10,64},{-10,68}}, + color={255,0,255})); + connect(latInp1.y, pro4.u_m) annotation (Line(points={{-58,20},{-30,20},{-30,-96}, + {-10,-96},{-10,-92}}, color={255,0,255})); + connect(latInp2.y, pro3.u_m) annotation (Line(points={{-58,-50},{-40,-50},{-40, + -56},{-10,-56},{-10,-52}}, color={255,0,255})); + connect(latInp2.y, pro2.u_m) annotation (Line(points={{-58,-50},{-40,-50},{-40, + -16},{-10,-16},{-10,-12}}, color={255,0,255})); + connect(latInp1.y, pro1.u_m) annotation (Line(points={{-58,20},{-30,20},{-30,24}, + {-10,24},{-10,28}}, color={255,0,255})); + connect(latInp3.y, pro5.u_m) + annotation (Line(points={{62,40},{70,40},{70,68}}, color={255,0,255})); + connect(latInp4.y, pro5.u_s) + annotation (Line(points={{42,80},{58,80}}, color={255,0,255})); +annotation ( + experiment( + StopTime=10, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Proof.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Proof. The following tests are implemented: +

+
    +
  • +The instance pro tests the case in which +both boolean inputs change simultaneously, and hence both outputs will be +false. +
  • +
  • +The instances pro2 and pro3 use a different value +for feedbackDelay. They test the case in which +both the inputs change from true to false. However, +after the input u_m changes, the input u_s remains +true for a time that is longer than +feedbackDelay. The output yLocFal will be true. +
  • +
  • +The instances pro1 and pro4 use a different value +for feedbackDelay. They test the case in which +both the inputs change from true to false. However, +after the input u_s changes, the input u_m remains +true for a time that is longer than +feedbackDelay. The output yLocTru will be true. +
  • +
  • +The instance pro5 tests the case in which +the measured input u_m does not stabilize during the debounce time, +and hence both outputs will be true. +
  • +
+", +revisions=" +
    +
  • +March 27, 2023, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-100,-100},{100,100}}))); +end Proof; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Switch.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Switch.mo new file mode 100644 index 0000000000..2672ed2802 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Switch.mo @@ -0,0 +1,70 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Switch "Validation model for the Switch block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.7, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,24},{-6,44}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=3) + "Block that outputs cyclic on and off: switch between u1 and u3" + annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-46},{-6,-26}}))); + IBPSA.Controls.OBC.CDL.Logical.Switch logicalSwitch + "Switch between two boolean inputs" + annotation (Placement(transformation(extent={{26,-10},{46,10}}))); + +equation + connect(booPul2.y,logicalSwitch.u2) + annotation (Line(points={{-4,0},{-4,0},{24,0}},color={255,0,255})); + connect(booPul1.y,logicalSwitch.u1) + annotation (Line(points={{-4,34},{10,34},{10,8},{24,8}},color={255,0,255})); + connect(booPul3.y,logicalSwitch.u3) + annotation (Line(points={{-4,-36},{10,-36},{10,-8},{24,-8}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Switch.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Switch. +

+

+The input u2 is the switch input: If u2 = true, +then output y = u1; +else output y = u3. +

+ +", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Timer.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Timer.mo new file mode 100644 index 0000000000..abffac14f9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Timer.mo @@ -0,0 +1,77 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Timer + "Validation model for the Timer block" + IBPSA.Controls.OBC.CDL.Logical.Timer noThr + "Timer that do not compare threshold" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Timer thrTim( + final t=0.3) + "Timer that compares threshold" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Timer thrTim1( + final t=0.3) + "Timer that compares threshold" + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.7, + final period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.7, + final period=2, + final shift=-1) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + +equation + connect(booPul.y,noThr.u) + annotation (Line(points={{-18,20},{18,20}},color={255,0,255})); + connect(booPul.y,thrTim.u) + annotation (Line(points={{-18,20},{0,20},{0,-20},{18,-20}},color={255,0,255})); + connect(booPul1.y,thrTim1.u) + annotation (Line(points={{-18,-60},{18,-60}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Timer.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Timer. +

+", + revisions=" +
    +
  • +July 23, 2018, by Jianjun Hu:
    +Updated implementation to reset accumulate timer with boolean input. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to include accumulate timer. +
  • +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Timer; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mo new file mode 100644 index 0000000000..c9c049ecad --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model TimerAccumulating + "Validation model for the timer that accumulates the time" + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating noThr + "Accumulating timer that do not compare threshold" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating thrTim( + final t=1) + "Accumulating timer that compares threshold" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating noThrWitRes + "Accumulating timer that could reset the output" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating thrTimWitRes( + final t=1) + "Accumulating timer that could reset the output and the output compares with threshold" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.5, + final period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse resTim( + final width=0.5, + final period=3.5) + "Block that outputs cyclic on and off, for resetting timer" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + +equation + connect(booPul.y,noThr.u) + annotation (Line(points={{-58,40},{-40,40},{-40,20},{-22,20}},color={255,0,255})); + connect(booPul.y,thrTim.u) + annotation (Line(points={{-58,40},{-40,40},{-40,-20},{-22,-20}},color={255,0,255})); + connect(con.y,noThr.reset) + annotation (Line(points={{-58,-60},{-48,-60},{-48,12},{-22,12}},color={255,0,255})); + connect(con.y,thrTim.reset) + annotation (Line(points={{-58,-60},{-48,-60},{-48,-28},{-22,-28}},color={255,0,255})); + connect(booPul.y,noThrWitRes.u) + annotation (Line(points={{-58,40},{20,40},{20,20},{38,20}},color={255,0,255})); + connect(booPul.y,thrTimWitRes.u) + annotation (Line(points={{-58,40},{20,40},{20,-20},{38,-20}},color={255,0,255})); + connect(resTim.y,noThrWitRes.reset) + annotation (Line(points={{2,-60},{12,-60},{12,12},{38,12}},color={255,0,255})); + connect(resTim.y,thrTimWitRes.reset) + annotation (Line(points={{2,-60},{12,-60},{12,-28},{38,-28}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulating.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating. +

+", + revisions=" +
    +
  • +July 23, 2018, by Jianjun Hu:
    +Updated implementation to reset accumulate timer with boolean input. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to include accumulate timer. +
  • +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimerAccumulating; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mo new file mode 100644 index 0000000000..96c3757ea3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mo @@ -0,0 +1,96 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model TimerAccumulatingNegativeStartTime + "Validation model for the timer that accumulates the time, with a negative start time" + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating noThr + "Accumulating timer that do not compare threshold" + annotation (Placement(transformation(extent={{-20,10},{0,30}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating thrTim( + final t=1) + "Accumulating timer that compares threshold" + annotation (Placement(transformation(extent={{-20,-30},{0,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating noThrWitRes + "Accumulating timer that could reset the output" + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating thrTimWitRes( + final t=1) + "Accumulating timer that could reset the output and the output compares with threshold" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.5, + final period=4, + shift=-11) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse resTim( + final width=0.5, + final period=3.5, + shift=-5) + "Block that outputs cyclic on and off, for resetting timer" + annotation (Placement(transformation(extent={{-20,-70},{0,-50}}))); + +equation + connect(booPul.y,noThr.u) + annotation (Line(points={{-58,40},{-40,40},{-40,20},{-22,20}},color={255,0,255})); + connect(booPul.y,thrTim.u) + annotation (Line(points={{-58,40},{-40,40},{-40,-20},{-22,-20}},color={255,0,255})); + connect(con.y,noThr.reset) + annotation (Line(points={{-58,-60},{-48,-60},{-48,12},{-22,12}},color={255,0,255})); + connect(con.y,thrTim.reset) + annotation (Line(points={{-58,-60},{-48,-60},{-48,-28},{-22,-28}},color={255,0,255})); + connect(booPul.y,noThrWitRes.u) + annotation (Line(points={{-58,40},{20,40},{20,20},{38,20}},color={255,0,255})); + connect(booPul.y,thrTimWitRes.u) + annotation (Line(points={{-58,40},{20,40},{20,-20},{38,-20}},color={255,0,255})); + connect(resTim.y,noThrWitRes.reset) + annotation (Line(points={{2,-60},{12,-60},{12,12},{38,12}},color={255,0,255})); + connect(resTim.y,thrTimWitRes.reset) + annotation (Line(points={{2,-60},{12,-60},{12,-28},{38,-28}},color={255,0,255})); + annotation ( + experiment( + StartTime=-10, + StopTime=5, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerAccumulatingNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.TimerAccumulating. +

+", + revisions=" +
    +
  • +July 23, 2018, by Jianjun Hu:
    +Updated implementation to reset accumulate timer with boolean input. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to include accumulate timer. +
  • +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimerAccumulatingNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mo new file mode 100644 index 0000000000..eb79c153d3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model TimerNegativeStartTime + "Validation model for the Timer block with a negative start time" + IBPSA.Controls.OBC.CDL.Logical.Timer noThr + "Timer that do not compare threshold" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Timer thrTim( + final t=0.3) + "Timer that compares threshold" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.7, + final period=2, + shift=-5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + +equation + connect(booPul.y,noThr.u) + annotation (Line(points={{-18,20},{18,20}},color={255,0,255})); + connect(booPul.y,thrTim.u) + annotation (Line(points={{-18,20},{0,20},{0,-20},{18,-20}},color={255,0,255})); + annotation ( + experiment( + StartTime=-10, + StopTime=5, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TimerNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Timer. +

+", + revisions=" +
    +
  • +July 23, 2018, by Jianjun Hu:
    +Updated implementation to reset accumulate timer with boolean input. +
  • +
  • +July 18, 2018, by Jianjun Hu:
    +Updated implementation to include accumulate timer. +
  • +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimerNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Toggle.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Toggle.mo new file mode 100644 index 0000000000..dad6475af6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Toggle.mo @@ -0,0 +1,221 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Toggle + "Validation model for the Toggle block" + IBPSA.Controls.OBC.CDL.Logical.Toggle falCleTruIni + "Toggle block with clear input being contantly false and true initial toggle input" + annotation (Placement(transformation(extent={{-60,90},{-40,110}}))); + IBPSA.Controls.OBC.CDL.Logical.Toggle falCleFalIni + "Toggle block with clear input being contantly false and false initial toggle input" + annotation (Placement(transformation(extent={{-60,30},{-40,50}}))); + IBPSA.Controls.OBC.CDL.Logical.Toggle truCleTruIni + "Toggle block with clear input being contantly true and true initial toggle input" + annotation (Placement(transformation(extent={{-60,-50},{-40,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.Toggle truCleFalIni + "Toggle block with clear input being contantly true and false initial toggle input" + annotation (Placement(transformation(extent={{-60,-110},{-40,-90}}))); + IBPSA.Controls.OBC.CDL.Logical.Toggle swiCleInp + "Initial false output, with clear input switch between false and true" + annotation (Placement(transformation(extent={{100,90},{120,110}}))); + IBPSA.Controls.OBC.CDL.Logical.Toggle swiCleInp1 + "Initial false output, with clear input switch between false and true" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse cleInp( + final width=0.5, + final period=6) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{0,70},{20,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Logical not" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse togInp( + final width=0.5, + final period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-160,150},{-140,170}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant tru( + final k=true) + "True clear input" + annotation (Placement(transformation(extent={{-120,-70},{-100,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not2 + "Logical not" + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant fal( + final k=false) + "False clear input" + annotation (Placement(transformation(extent={{-120,70},{-100,90}}))); + +equation + connect(cleInp.y,swiCleInp.clr) + annotation (Line(points={{22,80},{70,80},{70,94},{98,94}},color={255,0,255})); + connect(not1.u,cleInp.y) + annotation (Line(points={{38,-60},{30,-60},{30,80},{22,80}},color={255,0,255})); + connect(not1.y,swiCleInp1.clr) + annotation (Line(points={{62,-60},{72,-60},{72,-66},{98,-66}},color={255,0,255})); + connect(togInp.y,swiCleInp.u) + annotation (Line(points={{-138,160},{80,160},{80,100},{98,100}},color={255,0,255})); + connect(togInp.y,swiCleInp1.u) + annotation (Line(points={{-138,160},{80,160},{80,-60},{98,-60}},color={255,0,255})); + connect(togInp.y,falCleTruIni.u) + annotation (Line(points={{-138,160},{-80,160},{-80,100},{-62,100}},color={255,0,255})); + connect(fal.y,falCleTruIni.clr) + annotation (Line(points={{-98,80},{-70,80},{-70,94},{-62,94}},color={255,0,255})); + connect(togInp.y,truCleTruIni.u) + annotation (Line(points={{-138,160},{-80,160},{-80,-40},{-62,-40}},color={255,0,255})); + connect(fal.y,falCleFalIni.clr) + annotation (Line(points={{-98,80},{-70,80},{-70,34},{-62,34}},color={255,0,255})); + connect(togInp.y,not2.u) + annotation (Line(points={{-138,160},{-130,160},{-130,0},{-122,0}},color={255,0,255})); + connect(not2.y,falCleFalIni.u) + annotation (Line(points={{-98,0},{-90,0},{-90,40},{-62,40}},color={255,0,255})); + connect(tru.y,truCleTruIni.clr) + annotation (Line(points={{-98,-60},{-70,-60},{-70,-46},{-62,-46}},color={255,0,255})); + connect(tru.y,truCleFalIni.clr) + annotation (Line(points={{-98,-60},{-70,-60},{-70,-106},{-62,-106}},color={255,0,255})); + connect(not2.y,truCleFalIni.u) + annotation (Line(points={{-98,0},{-90,0},{-90,-100},{-62,-100}},color={255,0,255})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Toggle.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Toggle. Following tests are implemented: +

+
    +
  • +When the clear input is false, the initial output should equal to the initial toggle input. +
  • +
  • +When the clear input is true, the initial output should be false, +regardless of the value of the toggle input. +
  • +
  • +At the same moment, when both the clear input and the toggle input rise from false +to true, the output should become false if it was true, +or remain false if it was false. +
  • +
  • +At the same moment, when the clear input falls from true to false +and the toggle input rises from false to true, the output +should rise from false to true. +
  • +
+", + revisions=" +
    +
  • +April 4, 2019, by Jianjun Hu:
    +Added test to validate initial output. +This is for Buildings, issue 1402. +
  • +
  • +March 31, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-180,-180},{180,180}}), + graphics={ + Text( + extent={{76,148},{136,140}}, + textColor={28,108,200}, + textString="At 3rd second:"), + Text( + extent={{92,128},{172,118}}, + textColor={28,108,200}, + textString="Clear input falls: true to false"), + Text( + extent={{92,138},{170,128}}, + textColor={28,108,200}, + textString="Toggle input falls: true to false"), + Text( + extent={{92,64},{170,56}}, + textColor={28,108,200}, + textString="Clear input rises: false to true"), + Text( + extent={{92,76},{172,66}}, + textColor={28,108,200}, + textString="Toggle input rise: false to true"), + Text( + extent={{76,86},{136,78}}, + textColor={28,108,200}, + textString="At 6th second:"), + Text( + extent={{92,-96},{172,-104}}, + textColor={28,108,200}, + textString="Clear input falls: true to false"), + Text( + extent={{92,-84},{172,-94}}, + textColor={28,108,200}, + textString="Toggle input rise: false to true"), + Text( + extent={{76,-74},{136,-82}}, + textColor={28,108,200}, + textString="At 6th second:"), + Text( + extent={{76,-12},{136,-20}}, + textColor={28,108,200}, + textString="At 3rd second:"), + Text( + extent={{92,-32},{172,-42}}, + textColor={28,108,200}, + textString="Clear input rises: false to true"), + Text( + extent={{92,-22},{170,-32}}, + textColor={28,108,200}, + textString="Toggle input falls: true to false"), + Text( + extent={{-68,130},{-24,122}}, + textColor={28,108,200}, + textString="True initial input"), + Text( + extent={{-68,140},{-2,130}}, + textColor={28,108,200}, + textString="Clear input keeps false"), + Text( + extent={{-68,76},{-2,66}}, + textColor={28,108,200}, + textString="Clear input keeps false"), + Text( + extent={{-68,66},{-24,58}}, + textColor={28,108,200}, + textString="False initial input"), + Text( + extent={{-68,-4},{-2,-14}}, + textColor={28,108,200}, + textString="Clear input keeps true"), + Text( + extent={{-68,-14},{-24,-22}}, + textColor={28,108,200}, + textString="True initial input"), + Text( + extent={{-66,-64},{0,-74}}, + textColor={28,108,200}, + textString="Clear input keeps false"), + Text( + extent={{-66,-74},{-22,-82}}, + textColor={28,108,200}, + textString="False initial input")})); +end Toggle; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueDelay.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueDelay.mo new file mode 100644 index 0000000000..41bba54e71 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueDelay.mo @@ -0,0 +1,174 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model TrueDelay + "Validation model for the TrueDelay block" + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay0( + final delayTime=0) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,130},{20,150}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay1( + final delayTime=0.5) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,130},{80,150}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay2( + final delayTime=0.8) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,100},{20,120}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay4( + final delayTime=0) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay5( + final delayTime=0.5) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay6( + final delayTime=0.8) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,10},{20,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Negation of input signal" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay3( + final delayTime=1.8) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,100},{80,120}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay7( + final delayTime=1.8) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay00( + final delayTime=0, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay11( + final delayTime=0.5, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,-50},{80,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay22( + final delayTime=0.8, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay44( + final delayTime=0, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,-140},{20,-120}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay55( + final delayTime=0.5, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,-140},{80,-120}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay66( + final delayTime=0.8, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{0,-170},{20,-150}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not2 + "Negation of input signal" + annotation (Placement(transformation(extent={{-60,-120},{-40,-100}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay33( + final delayTime=1.8, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueDelay onDelay77( + final delayTime=1.8, + final delayOnInit=true) + "Delay a rising edge of the input, but do not delay a falling edge." + annotation (Placement(transformation(extent={{60,-170},{80,-150}}))); + +protected + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final width=0.5, + final period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.5, + final period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + +equation + connect(booPul.y,not1.u) + annotation (Line(points={{-79,90},{-70,90},{-70,70},{-62,70}},color={255,0,255})); + connect(booPul.y,onDelay0.u) + annotation (Line(points={{-79,90},{-20,90},{-20,140},{-2,140}},color={255,0,255})); + connect(booPul.y,onDelay2.u) + annotation (Line(points={{-79,90},{-20,90},{-20,110},{-2,110}},color={255,0,255})); + connect(booPul.y,onDelay1.u) + annotation (Line(points={{-79,90},{40,90},{40,140},{58,140}},color={255,0,255})); + connect(booPul.y,onDelay3.u) + annotation (Line(points={{-79,90},{40,90},{40,110},{58,110}},color={255,0,255})); + connect(not1.y,onDelay4.u) + annotation (Line(points={{-39,70},{-20,70},{-20,50},{-2,50}},color={255,0,255})); + connect(not1.y,onDelay6.u) + annotation (Line(points={{-39,70},{-20,70},{-20,20},{-2,20}},color={255,0,255})); + connect(not1.y,onDelay5.u) + annotation (Line(points={{-39,70},{40,70},{40,50},{58,50}},color={255,0,255})); + connect(not1.y,onDelay7.u) + annotation (Line(points={{-39,70},{40,70},{40,20},{58,20}},color={255,0,255})); + connect(booPul1.y,not2.u) + annotation (Line(points={{-79,-90},{-70,-90},{-70,-110},{-62,-110}},color={255,0,255})); + connect(booPul1.y,onDelay00.u) + annotation (Line(points={{-79,-90},{-20,-90},{-20,-40},{-2,-40}},color={255,0,255})); + connect(booPul1.y,onDelay22.u) + annotation (Line(points={{-79,-90},{-20,-90},{-20,-70},{-2,-70}},color={255,0,255})); + connect(booPul1.y,onDelay11.u) + annotation (Line(points={{-79,-90},{40,-90},{40,-40},{58,-40}},color={255,0,255})); + connect(booPul1.y,onDelay33.u) + annotation (Line(points={{-79,-90},{40,-90},{40,-70},{58,-70}},color={255,0,255})); + connect(not2.y,onDelay44.u) + annotation (Line(points={{-39,-110},{-20,-110},{-20,-130},{-2,-130}},color={255,0,255})); + connect(not2.y,onDelay66.u) + annotation (Line(points={{-39,-110},{-20,-110},{-20,-160},{-2,-160}},color={255,0,255})); + connect(not2.y,onDelay55.u) + annotation (Line(points={{-39,-110},{40,-110},{40,-130},{58,-130}},color={255,0,255})); + connect(not2.y,onDelay77.u) + annotation (Line(points={{-39,-110},{40,-110},{40,-160},{58,-160}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueDelay.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.TrueDelay. +

+", + revisions=" +
    +
  • +February 11, 2019, by Milica Grahovac:
    +Added tests for initial true input delay. +
  • +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-100,-180},{100,180}}))); +end TrueDelay; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mo new file mode 100644 index 0000000000..9f58dfd7fb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mo @@ -0,0 +1,179 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model TrueFalseHold + "Validation model for the TrueFalseHold block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + shift=0, + period=1500) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + shift=0, + period=1000, + width=0.25) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{-140,20},{-120,40}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol1( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + shift=0, + period=1500) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{-140,-20},{-120,0}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol2( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{-40,-20},{-20,0}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul3( + shift=0, + period=1000, + width=0.25) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{-140,-60},{-120,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol3( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Negation of input signal" + annotation (Placement(transformation(extent={{-90,-20},{-70,0}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not3 + "Negation of input signal" + annotation (Placement(transformation(extent={{-90,-60},{-70,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul4( + shift=100, + period=1500) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol4( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{120,60},{140,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + shift=100, + period=1000, + width=0.25) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol5( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{120,20},{140,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul6( + shift=100, + period=1500) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol6( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{120,-20},{140,0}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul7( + shift=100, + period=1000, + width=0.25) + "Boolean pulse input signal" + annotation (Placement(transformation(extent={{20,-60},{40,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol7( + trueHoldDuration=1000) + "The block introduces a minimal offset between the input signal rising and falling edge" + annotation (Placement(transformation(extent={{120,-60},{140,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not2 "Negation of input signal" + annotation (Placement(transformation(extent={{70,-20},{90,0}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not4 + "Negation of input signal" + annotation (Placement(transformation(extent={{70,-60},{90,-40}}))); + + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol8(trueHoldDuration= + 0, falseHoldDuration=1000) + "Hold only false value of unit impulse signal" + annotation (Placement(transformation(extent={{120,-90},{140,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Edge edg "Generate unit impulse signal" + annotation (Placement(transformation(extent={{70,-90},{90,-70}}))); +equation + connect(booPul.y,truFalHol.u) + annotation (Line(points={{-118,70},{-118,70},{-42,70}},color={255,0,255})); + connect(booPul1.y,truFalHol1.u) + annotation (Line(points={{-118,30},{-42,30}},color={255,0,255})); + connect(booPul2.y,not1.u) + annotation (Line(points={{-118,-10},{-92,-10}},color={255,0,255})); + connect(not1.y,truFalHol2.u) + annotation (Line(points={{-68,-10},{-42,-10}},color={255,0,255})); + connect(booPul3.y,not3.u) + annotation (Line(points={{-118,-50},{-92,-50}},color={255,0,255})); + connect(not3.y,truFalHol3.u) + annotation (Line(points={{-68,-50},{-42,-50}},color={255,0,255})); + connect(booPul4.y,truFalHol4.u) + annotation (Line(points={{42,70},{118,70}},color={255,0,255})); + connect(booPul5.y,truFalHol5.u) + annotation (Line(points={{42,30},{118,30}},color={255,0,255})); + connect(booPul6.y,not2.u) + annotation (Line(points={{42,-10},{68,-10}},color={255,0,255})); + connect(not2.y,truFalHol6.u) + annotation (Line(points={{92,-10},{118,-10}},color={255,0,255})); + connect(booPul7.y,not4.u) + annotation (Line(points={{42,-50},{68,-50}},color={255,0,255})); + connect(not4.y,truFalHol7.u) + annotation (Line(points={{92,-50},{118,-50}},color={255,0,255})); + connect(edg.y, truFalHol8.u) + annotation (Line(points={{92,-80},{118,-80}}, color={255,0,255})); + connect(booPul6.y, edg.u) annotation (Line(points={{42,-10},{60,-10},{60,-80}, + {68,-80}}, color={255,0,255})); + annotation ( + experiment( + StopTime=7200.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/TrueFalseHold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold. +

+

+The validation uses different instances to validate different hold trueHoldDurations, different lengths +of the input pulse, and different initial values for the input signal. +

+", + revisions=" +
    +
  • +August 26, 2024, by Antoine Gautier:
    +Added a case with a unit impulse signal.
    +This is for +Buildings, issue 3966. +
  • +
  • +June 14, 2017, by Michael Wetter:
    +Added more tests for different initial signals and different hold values. +
  • +
  • +May 24, 2017, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Diagram( + coordinateSystem( + extent={{-160,-100},{160,100}})), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TrueFalseHold; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo new file mode 100644 index 0000000000..2a515a11bb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulse.mo @@ -0,0 +1,156 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model VariablePulse + "Validation model for producing boolean pulse output" + + IBPSA.Controls.OBC.CDL.Logical.VariablePulse conTru( + period=900) "Variable pulse with constant pulse width" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse fal( + period=900) + "Variable pulse with the zero width input" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse truFal( + period=900) + "Variable pulse with width input changing from positive value to zero" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse falTru( + period=900) + "Variable pulse with width input changing from zero to positive value" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse tru( + period=900) + "Variable pulse with the constant width input" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse falTru1( + period=900) + "Variable pulse with width input changing between different positive values" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse conPul( + amplitude=0.65, + width=0.8, + period=4000) + "Continuous pulse signal" + annotation (Placement(transformation(extent={{20,50},{40,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con( + k=0.75) + "Constant" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con1( + k=0) + "Constant value" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse conPul1( + amplitude=0.65, + width=0.85, + period=3600, + shift=360) + "Continuous pulse signal" + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con2( + k=1) + "Constant value" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse conPul2( + amplitude=0.5, + width=0.5, + period=3600, + shift=360, + offset=0.3) + "Continuous pulse signal" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.VariablePulse conChaWid( + period=900) + "Variable pulse with constantly changing pulse width " + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + height=0.8, + duration=900, + startTime=300) + "Ramp input" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); +equation + connect(con.y, conTru.u) + annotation (Line(points={{-58,-20},{-42,-20}}, color={0,0,127})); + connect(con1.y, fal.u) + annotation (Line(points={{-58,60},{-42,60}}, color={0,0,127})); + connect(conPul.y, truFal.u) + annotation (Line(points={{42,60},{58,60}}, color={0,0,127})); + connect(conPul1.y, falTru.u) + annotation (Line(points={{42,20},{58,20}}, color={0,0,127})); + connect(con2.y, tru.u) + annotation (Line(points={{-58,20},{-42,20}}, color={0,0,127})); + connect(conPul2.y, falTru1.u) + annotation (Line(points={{42,-20},{58,-20}}, color={0,0,127})); + connect(ram.y, conChaWid.u) + annotation (Line(points={{-58,-60},{-42,-60}}, color={0,0,127})); +annotation (experiment( + StartTime=0, + StopTime=3600, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulse.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.VariablePulse. +

+
    +
  • +The instance fal has the constant 0 input. It gives +constant false output. +
  • +
  • +The instance tru has the constant 1 input. It gives +constant true output. +
  • +
  • +The instance conTru has the constant 0.75 input. +It gives the pulse output, with the width (75%). +
  • +
  • +The instance truFal has the input changing from 0.65 +to 0. It outputs a pulse (with the width of 65%) and then changes +to constant false. +
  • +
  • +The instance falTru has the input changing from 0 +to 0.65 and then back to 0. It firstly outputs the constant +false, then a pulse (with the width of 65%) and finally back +to false. +
  • +
  • +The instance falTru1 has the input changing from 0.3 +to 0.8 and then back to 0.3. It firstly outputs a +pulse with the width of 30%, then a pulse with the width of 80%, and +finally a pulse with the width of 30% again. When the input changes, it gives +a new pulse immediately. +
  • +
  • +The instance conChaWid has a ramp input. It gives constant +true output when the input is ramping up. +
  • +
+", +revisions=" +
    +
  • +August 11, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end VariablePulse; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo new file mode 100644 index 0000000000..5ff8854109 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mo @@ -0,0 +1,60 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model VariablePulseMinHold + "Validation model for producing boolean pulse output" + + IBPSA.Controls.OBC.CDL.Logical.VariablePulse conChaWid( + period=3, + minTruFalHol=1) + "Variable pulse with constantly changing pulse width " + annotation (Placement(transformation(extent={{10,-10},{30,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse conPul1( + amplitude=0.4, + width=0.4, + period=4, + shift=1.6, + offset=0.5) + "Continuous pulse signal" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); +equation + connect(conPul1.y, conChaWid.u) + annotation (Line(points={{-8,0},{8,0}}, color={0,0,127})); +annotation (experiment( + StopTime=5, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/VariablePulseMinHold.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.VariablePulse. +

+

+It tests the case that the input value changes at the moment when the output +is still in previous status in less than the minimum holding time. +In the case, the output holds the previous status for the minimum holding time +and then change to the new status. +

+", +revisions=" +
    +
  • +August 11, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end VariablePulseMinHold; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/Xor.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/Xor.mo new file mode 100644 index 0000000000..92c712daae --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/Xor.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Logical.Validation; +model Xor + "Validation model for the Xor block" + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + width=0.5, + period=1.5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,8},{-6,28}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + width=0.5, + period=5) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-26},{-6,-6}}))); + IBPSA.Controls.OBC.CDL.Logical.Xor xor1 + "Outputs true if exactly one input is true" + annotation (Placement(transformation(extent={{26,-8},{46,12}}))); + +equation + connect(booPul2.y,xor1.u2) + annotation (Line(points={{-4,-16},{8,-16},{8,-6},{24,-6}},color={255,0,255})); + connect(booPul1.y,xor1.u1) + annotation (Line(points={{-4,18},{10,18},{10,2},{24,2}},color={255,0,255})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Logical/Validation/Xor.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Logical.Xor. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Xor; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Logical/Validation/package.mo new file mode 100644 index 0000000000..b9fbad7243 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Logical; +package Validation "Collection of models that validate the logical blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Logical. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Validation/package.order b/IBPSA/Controls/OBC/CDL/Logical/Validation/package.order new file mode 100644 index 0000000000..5e5493538c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Validation/package.order @@ -0,0 +1,23 @@ +And +Change +Edge +FallingEdge +Latch +MultiAnd +MultiOr +Nand +Nor +Not +Or +Proof +Switch +Timer +TimerAccumulating +TimerAccumulatingNegativeStartTime +TimerNegativeStartTime +Toggle +TrueDelay +TrueFalseHold +VariablePulse +VariablePulseMinHold +Xor diff --git a/IBPSA/Controls/OBC/CDL/Logical/VariablePulse.mo b/IBPSA/Controls/OBC/CDL/Logical/VariablePulse.mo new file mode 100644 index 0000000000..b6e277d6ae --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/VariablePulse.mo @@ -0,0 +1,314 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block VariablePulse "Generate boolean pulse with the width specified by input" + + parameter Real period( + final quantity="Time", + final unit="s") + "Time for one pulse period"; + + parameter Real deltaU( + min = 0.001, + max = 0.5, + final unit="1") = 0.01 "Increment of u that triggers recomputation of output"; + + parameter Real minTruFalHol( + final quantity="Time", + final unit="s", + final min=Constants.small)=0.01*period + "Minimum time to hold true or false"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u( + final min=0, + final max=1, + final unit="1") + "Ratio of the period that the output should be true" + annotation (Placement(transformation(extent={{-160,-20},{-120,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Boolean pulse when the input is greater than zero" + annotation (Placement(transformation(extent={{120,-20},{160,20}}), + iconTransformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real adjustedPeriod( + final quantity="Time", + final unit="s") = max(period, minTruFalHol*2.02) + "Time for one pulse period"; + + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "Sample the input when there is value change" + annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub + "Output the difference before and after sampling" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Abs abs1 + "Output the absolute value change" + annotation (Placement(transformation(extent={{-20,20},{0,40}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=deltaU, + final h=0) + "Check if there is a sufficiently large change in input value" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Edge edg2 + "Rising edge when there is a width change" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Pre preBre + "Break loop" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Cycle cycOut( + final period=adjustedPeriod, + final minTruFalHol=minTruFalHol) + "Produce boolean pulse output" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( + final trueHoldDuration=minTruFalHol, + final falseHoldDuration=minTruFalHol) + "Ensure the minimum holding time" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + + block Cycle + "Generate boolean pulse with the width specified by the input" + parameter Real period( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Time for one pulse period"; + parameter Real minTruFalHol( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Minimum time to hold true or false"; + + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput go + "True: cycle the output" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Ratio of the period that the output should be true" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Cycling boolean output" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + discrete Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "Time instant when output begins cycling"; + Real t_sta( + final quantity="Time", + final unit="s", + fixed=false) + "Begin time instant of one period"; + Real t_end( + final quantity="Time", + final unit="s", + fixed=false) + "End time instant of one period"; + + initial equation + pre(t0)=time; + + equation + when go then + t0 = time; + end when; + + t_sta = t0 + IBPSA.Utilities.Math.Functions.round( + x=integer((time-t0)/period)*period, + n=6); + t_end = t_sta + u*period; + + y = (time>=t_sta) and (time= minTruFalHol*2, + "In " + getInstanceName() + ": The pulse period must be greater than 2 times of the minimum true and false holding time. Increasing period to " + String(adjustedPeriod) + ".", + level = AssertionLevel.warning); + +equation + connect(u, triSam.u) annotation (Line(points={{-140,0},{-110,0},{-110,70},{-102, + 70}}, color={0,0,127})); + connect(triSam.y, sub.u1) annotation (Line(points={{-78,70},{-70,70},{-70,36}, + {-62,36}}, color={0,0,127})); + connect(u, sub.u2) annotation (Line(points={{-140,0},{-110,0},{-110,24},{-62,24}}, + color={0,0,127})); + connect(sub.y, abs1.u) + annotation (Line(points={{-38,30},{-22,30}}, color={0,0,127})); + connect(greThr.y, edg2.u) annotation (Line(points={{42,30},{50,30},{50,0},{58, + 0}}, color={255,0,255})); + connect(greThr.y, preBre.u) + annotation (Line(points={{42,30},{58,30}}, color={255,0,255})); + connect(preBre.y, triSam.trigger) annotation (Line(points={{82,30},{90,30},{90, + 50},{-90,50},{-90,58}}, color={255,0,255})); + connect(u, cycOut.u) annotation (Line(points={{-140,0},{-110,0},{-110,-60},{38, + -60}}, color={0,0,127})); + connect(cycOut.y, truFalHol.u) + annotation (Line(points={{62,-60},{78,-60}}, color={255,0,255})); + connect(truFalHol.y, y) + annotation (Line(points={{102,-60},{110,-60},{110,0},{140,0}}, + color={255,0,255})); + connect(abs1.y, greThr.u) annotation (Line(points={{2,30},{18,30}}, + color={0,0,127})); + connect(edg2.y, cycOut.go) annotation (Line(points={{82,0},{90,0},{90,-20},{30, + -20},{30,-68},{38,-68}}, color={255,0,255})); +annotation ( + defaultComponentName="varPul", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,-140},{150,-110}}, + textColor={0,0,0}, + textString="%period"), + Polygon( + points={{-80,0},{-88,-22},{-72,-22},{-80,0}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-6},{-80,-92}}, + color={255,0,255}), + Line( + points={{-90,-80},{72,-80}}, + color={255,0,255}), + Polygon( + points={{90,-80},{68,-72},{68,-88},{90,-80}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-46,-12},{-14,-30}}, + textColor={135,135,135}, + textString="%period"), + Polygon( + points={{0,-30},{-8,-28},{-8,-32},{0,-30}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{-60,-30},{0,-30}}, + color={135,135,135}), + Polygon( + points={{-60,-30},{-52,-28},{-52,-32},{-60,-30}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line(points={{-80,20},{-60,20},{-60,60},{60,60}}, color={0,0,127}), + Line(points={{-80,-80},{-60,-80}}, color={0,0,0}), + Line(points={{-60,-40},{-30,-40},{-30,-80}}, color={0,0,0}), + Line(points={{0,-40},{30,-40},{30,-80}}, color={0,0,0}), + Line(points={{0,-40},{0,-80}}, color={0,0,0}), + Text( + extent={{-54,76},{-30,62}}, + textColor={135,135,135}, + textString="%width"), + Line( + points={{-90,20},{72,20}}, + color={0,0,127}), + Polygon( + points={{90,20},{68,28},{68,12},{90,20}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,94},{-80,16}}, + color={0,0,127}), + Polygon( + points={{-80,94},{-88,72},{-72,72},{-80,94}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textColor={0,0,255}, + textString="%name"), + Line(points={{-60,-40},{-60,-80}}, color={0,0,0}), + Line(points={{-30,-80},{0,-80}}, color={0,0,0}), + Line(points={{30,-80},{60,-80}}, color={0,0,0})}), + Documentation( + info=" +

+Block that outputs a boolean pulse. +

+

+The output of this block is a pulse with a constant period +and a width as obtained from the input 0 ≤ u ≤ 1, +which is the width relative to the period. +

+

+The block produces the following ouputs: +

+
    +
  • +If u = 0, the output y remains false. +
  • +
  • +If 0 < u < 1, the output y will be +a boolean pulse with the period specified by the parameter period and +the width set to u*period. +
  • +
  • +If u = 1, the output y remains true. +
  • +
+

+When the input u changes by more than deltaU and the output +has been holding constant for more than minimum holding time +minTruFalHol, the output will change to a new pulse with +width equal to u*period. +

+

+\"VariablePulse.png\" +

+", +revisions=" +
    +
  • +August 11, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Diagram(coordinateSystem(extent={{-120,-120},{120,120}}))); +end VariablePulse; diff --git a/IBPSA/Controls/OBC/CDL/Logical/Xor.mo b/IBPSA/Controls/OBC/CDL/Logical/Xor.mo new file mode 100644 index 0000000000..b8e7c2ed73 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/Xor.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Logical; +block Xor + "Logical 'xor': y = u1 xor u2" + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u1 + "Input for logical 'xor'" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Input for logical 'xor'" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output with u1 xor u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=not ((u1 and u2) or (not u1 and not u2)); + annotation ( + defaultComponentName="xor", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-90,40},{90,-40}}, + textColor={0,0,0}, + textString="xor"), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-6},{-89,8}}, + lineColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u1 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-75,-73},{-89,-87}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that outputs true if exactly one input is true. +Otherwise the output is false. +

+", + revisions=" +
    +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Xor; diff --git a/IBPSA/Controls/OBC/CDL/Logical/package.mo b/IBPSA/Controls/OBC/CDL/Logical/package.mo new file mode 100644 index 0000000000..366dfc3c75 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/package.mo @@ -0,0 +1,34 @@ +within IBPSA.Controls.OBC.CDL; +package Logical "Package with logical blocks" + annotation ( + Documentation( + info=" +

+Package with blocks for elementary mathematical functions +for boolean variables. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Line( + points={{-86,-22},{-50,-22},{-50,22},{48,22},{48,-22},{88,-24}}, + color={255,0,255})})); +end Logical; diff --git a/IBPSA/Controls/OBC/CDL/Logical/package.order b/IBPSA/Controls/OBC/CDL/Logical/package.order new file mode 100644 index 0000000000..d41c7de574 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Logical/package.order @@ -0,0 +1,23 @@ +And +Change +Edge +FallingEdge +Latch +MultiAnd +MultiOr +Nand +Nor +Not +Or +Pre +Proof +Switch +Timer +TimerAccumulating +Toggle +TrueDelay +TrueFalseHold +VariablePulse +Xor +Sources +Validation diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/DewPoint_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/DewPoint_TDryBulPhi.mo new file mode 100644 index 0000000000..10d553a6ab --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/DewPoint_TDryBulPhi.mo @@ -0,0 +1,155 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics; +block DewPoint_TDryBulPhi + "Block to compute the dew point temperature based on relative humidity" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TDryBul( + final quantity="ThermodynamicTemperature", + final unit="K", + final min=100) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput phi( + final min=0, + final max=1, + unit="1") + "Relative air humidity" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput TDewPoi( + final quantity="ThermodynamicTemperature", + final unit="K", + final min=100) + "Dew point temperature" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Real p_w( + final quantity="Pressure", + final unit="Pa", + displayUnit="Pa") + "Water vapor pressure"; + constant Real C14=6.54 + "Constant used in the equation"; + constant Real C15=14.526 + "Constant used in the equation"; + constant Real C16=0.7389 + "Constant used in the equation"; + constant Real C17=0.09486 + "Constant used in the equation"; + constant Real C18=0.4569 + "Constant used in the equation"; + Real alpha + "Variable used in the equation"; + +equation + p_w=phi*IBPSA.Utilities.Psychrometrics.Functions.saturationPressure(TDryBul); + alpha=Modelica.Math.log( + p_w/1000.0); + TDewPoi=(C14+C15*alpha+C16*alpha^2+C17*alpha^3+C18*(p_w/1000.0)^0.1984)+273.15; + annotation ( + defaultComponentName="dewPoi", + Documentation( + info=" +

+Dew point temperature calculation for moist air above freezing temperature. +

+

+The correlation used in this model is valid for dew point temperatures between +0°C and 93°C. It is the correlation from 2009 +ASHRAE Handbook Fundamentals, p. 1.9, equation 39. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +September 29, 2020, by Michael Wetter:
    +Removed unused input p and renamed block.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 7, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-44,82},{-22,64}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="X"), + Polygon( + points={{-48,88},{-46,74},{-50,74},{-48,88}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,-46},{-70,-72}}, + textColor={0,0,127}, + textString="phi"), + Text( + extent={{-92,82},{-62,38}}, + textColor={0,0,127}, + textString="TDryBul"), + Polygon( + points={{86,-74},{76,-72},{76,-76},{86,-74}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{76,-78},{86,-94}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="T"), + Line( + points={{-48,84},{-48,-74}}), + Text( + extent={{60,14},{98,-12}}, + textColor={0,0,127}, + textString="TDewPoi"), + Line( + points={{82,-72},{-66,-72}}), + Line( + points={{-48,-40},{-38,-36},{-24,-30},{8,-2},{20,22},{28,54},{32,74}}), + Line( + points={{68,-12},{-2,-12}}, + color={255,0,0}, + thickness=0.5), + Polygon( + points={{-2,-12},{12,-10},{12,-14},{-2,-12}}, + lineColor={255,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{66,-44},{-48,-44}}, + color={175,175,175}), + Line( + points={{68,-18},{-10,-18}}, + color={175,175,175}), + Line( + points={{70,6},{12,6}}, + color={175,175,175}), + Line( + points={{68,32},{22,32}}, + color={175,175,175})})); +end DewPoint_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/SpecificEnthalpy_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/SpecificEnthalpy_TDryBulPhi.mo new file mode 100644 index 0000000000..4f30ad503a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/SpecificEnthalpy_TDryBulPhi.mo @@ -0,0 +1,139 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics; +block SpecificEnthalpy_TDryBulPhi + "Block to compute the specific enthalpy based on relative humidity" + parameter Real pAtm( + final quantity="Pressure", + final unit="Pa")=101325 + "Atmospheric pressure"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TDryBul( + final quantity="ThermodynamicTemperature", + final unit="K", + final min=100) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}),iconTransformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput phi( + final min=0, + final max=1) + "Relative air humidity" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}),iconTransformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput h( + final quantity="SpecificEnergy", + final unit="J/kg") + "Specific enthalpy" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Real TDryBul_degC( + final unit="degC", + displayUnit="degC") + "Dry bulb temperature in degree Celsius"; + Real p_w( + final quantity="Pressure", + final unit="Pa", + displayUnit="Pa") + "Water vapor pressure"; + Real w( + final unit="1", + nominal=0.01) + "Water vapor mass fraction in kg per kg dry air"; + +equation + TDryBul_degC=TDryBul-273.15; + p_w=phi*IBPSA.Utilities.Psychrometrics.Functions.saturationPressure(TDryBul); + w=0.6219647130774989*p_w/(pAtm-p_w); + h=1006*TDryBul_degC+w*(2501014.5+1860*TDryBul_degC); + annotation ( + defaultComponentName="ent", + Documentation( + info=" +

+This block computes the specific enthalpy for a given dry bulb temperature, relative air humidity +and atmospheric pressure. +The specific enthalpy is zero if the temperature is 0°C and if there +is no moisture. +

+

+The correlation used in this model is from the 2009 ASHRAE Handbook Fundamentals, p. 1.9, equation 32. +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +September 29, 2020, by Michael Wetter:
    +Removed input p, used instead a parameter for the atmospheric pressure and renamed block.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 7, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-44,-52},{-30,-48},{0,-36},{32,-8},{44,16},{52,48},{56,68}}, + color={215,215,215}, + smooth=Smooth.Bezier), + Line( + points={{66,-58},{10,-28}}, + color={255,0,0}, + thickness=0.5), + Text( + extent={{-44,82},{-22,64}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="X"), + Polygon( + points={{-48,88},{-46,74},{-50,74},{-48,88}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-88,-44},{-68,-70}}, + textColor={0,0,127}, + textString="phi"), + Text( + extent={{-92,82},{-62,38}}, + textColor={0,0,127}, + textString="TDryBul"), + Line( + points={{78,-74},{-48,-74}}), + Polygon( + points={{86,-74},{76,-72},{76,-76},{86,-74}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{76,-78},{86,-94}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="T"), + Line( + points={{-48,84},{-48,-74}}), + Text( + extent={{74,14},{94,-12}}, + textColor={0,0,127}, + textString="h")})); +end SpecificEnthalpy_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo new file mode 100644 index 0000000000..fc0b79822e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mo @@ -0,0 +1,87 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics.Validation; +model DewPoint_TDryBulPhi + "Model to test the dew point temperature computation" + IBPSA.Controls.OBC.CDL.Psychrometrics.DewPoint_TDryBulPhi dewBulPhi + "Model for dew point temperature" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Psychrometrics.DewPoint_TDryBulPhi dewBulPhi1 + "Model for dew point temperature" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp phi( + duration=1, + height=1, + offset=0.001) + "Relative humidity" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( + k=273.15+29.4) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TDryBul2( + duration=1, + height=35, + offset=273.15+2.0) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant phi2( + k=0.4) + "Relative humidity" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + +equation + connect(TDryBul.y,dewBulPhi.TDryBul) + annotation (Line(points={{-38,70},{0,70},{0,46},{18,46}}, color={0,0,127})); + connect(phi.y,dewBulPhi.phi) + annotation (Line(points={{-38,20},{0,20},{0,34},{18,34}}, color={0,0,127})); + connect(TDryBul2.y,dewBulPhi1.TDryBul) + annotation (Line(points={{-38,-20},{0,-20},{0,-34},{18,-34}}, color={0,0,127})); + connect(phi2.y,dewBulPhi1.phi) + annotation (Line(points={{-38,-70},{0,-70},{0,-46},{18,-46}}, color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/DewPoint_TDryBulPhi.mos" "Simulate and plot"), + Documentation( + info=" +

+This examples is a unit test for the dew point temperature computation +IBPSA.Controls.OBC.CDL.Psychrometrics.DewPoint_TDryBulPhi. +

+", + revisions=" +
    +
  • +March 17, 2023, by Jianjun Hu:
    +Removed instances that use blocks outside of +IBPSA.Controls.OBC.CDL package.
    +This is for +Buildings, issue 3302 +
  • +
  • +September 29, 2020, by Michael Wetter:
    +Renamed model and updated for new input of the psychrometric blocks.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 7, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end DewPoint_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo new file mode 100644 index 0000000000..9d7a580289 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics.Validation; +model SpecificEnthalpy_TDryBulPhi + "Model to test the specific enthalpy computation" + IBPSA.Controls.OBC.CDL.Psychrometrics.SpecificEnthalpy_TDryBulPhi hBulPhi + "Model for specific enthalpy computation" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp phi( + duration=1, + height=1, + offset=0.001) + "Relative humidity" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( + k=273.15+29.4) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-64,24},{-44,44}}))); + +equation + connect(TDryBul.y,hBulPhi.TDryBul) + annotation (Line(points={{-42,34},{-30,34},{-30,6},{-12,6}},color={0,0,127})); + connect(phi.y,hBulPhi.phi) + annotation (Line(points={{-38,-30},{-30,-30},{-30,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/SpecificEnthalpy_TDryBulPhi.mos" "Simulate and plot"), + Documentation( + info=" +

+This examples is a unit test for the specific enthalpy computation +IBPSA.Controls.OBC.CDL.Psychrometrics.SpecificEnthalpy_TDryBulPhi. +

+", + revisions=" +
    +
  • +September 29, 2020, by Michael Wetter:
    +Renamed model and updated for new input of the psychrometric blocks.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 7, 2017 by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SpecificEnthalpy_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo new file mode 100644 index 0000000000..2248183fae --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mo @@ -0,0 +1,99 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics.Validation; +model WetBulb_TDryBulPhi + "Model to test the wet bulb temperature computation" + + IBPSA.Controls.OBC.CDL.Psychrometrics.WetBulb_TDryBulPhi wetBulPhi + "Model for wet bulb temperature" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Psychrometrics.WetBulb_TDryBulPhi wetBulPhi1 + "Model for wet bulb temperature" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp phi( + duration=1, + height=0.95, + offset=0.05) "Relative humidity" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TDryBul( + k=273.15+29.4) "Dry bulb temperature" + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TDryBul1( + duration=1, + height=40, + offset=273.15) "Dry bulb temperature" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant phi2(k=0.6) + "Relative humidity" + annotation (Placement(transformation(extent={{-40,-80},{-20,-60}}))); + +equation + connect(TDryBul.y,wetBulPhi.TDryBul) + annotation (Line(points={{-18,70},{0,70},{0,46},{18,46}}, color={0,0,127})); + connect(phi.y,wetBulPhi.phi) + annotation (Line(points={{-18,20},{0,20},{0,34},{18,34}}, color={0,0,127})); + connect(TDryBul1.y, wetBulPhi1.TDryBul) annotation (Line(points={{-18,-20},{0, + -20},{0,-34},{18,-34}}, color={0,0,127})); + connect(phi2.y, wetBulPhi1.phi) annotation (Line(points={{-18,-70},{0,-70},{0, + -46},{18,-46}}, color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Psychrometrics/Validation/WetBulb_TDryBulPhi.mos" "Simulate and plot"), + Documentation( + info=" +

+This examples is a unit test for the dew point temperature computation + +IBPSA.Controls.OBC.CDL.Psychrometrics.WetBulb_TDryBulPhi. +

+", + revisions=" +
    +
  • +March 17, 2023, by Jianjun Hu:
    +Removed instances that use blocks outside of +IBPSA.Controls.OBC.CDL package.
    +This is for +Buildings, issue 3302 +
  • +
  • +September 29, 2020, by Michael Wetter:
    +Renamed model and updated for new input of the psychrometric blocks.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 7, 2017, by Jianjun Hu:
    +First implementation in CDL package. +
  • +
  • +June 23, 2016, by Michael Wetter:
    +Changed graphical annotation. +
  • +
  • +May 24, 2016, by Filip Jorissen:
    +Updated example with validation data. +See Buildings, issue 474 +for a discussion. +
  • +
  • +October 1, 2012 by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end WetBulb_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.mo new file mode 100644 index 0000000000..555f981b89 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics; +package Validation "Collection of models that validate the psychrometrics blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Psychrometrics. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.order b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.order new file mode 100644 index 0000000000..fc0e58cc8c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/Validation/package.order @@ -0,0 +1,3 @@ +DewPoint_TDryBulPhi +SpecificEnthalpy_TDryBulPhi +WetBulb_TDryBulPhi diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/WetBulb_TDryBulPhi.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/WetBulb_TDryBulPhi.mo new file mode 100644 index 0000000000..46b2abd21d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/WetBulb_TDryBulPhi.mo @@ -0,0 +1,194 @@ +within IBPSA.Controls.OBC.CDL.Psychrometrics; +block WetBulb_TDryBulPhi + "Block to compute the wet bulb temperature based on relative humidity" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TDryBul( + final quantity="ThermodynamicTemperature", + final unit="K", + final min=100) + "Dry bulb temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}),iconTransformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput phi( + final min=0, + final max=1) + "Relative air humidity" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}),iconTransformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput TWetBul( + final quantity="ThermodynamicTemperature", + final unit="K", + final min=100) + "Wet bulb temperature" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + constant Real uniCon(final unit="1/rad") = 1 + "Unit conversion to satisfy unit check"; + Real TDryBul_degC( + final unit="degC", + displayUnit="degC") + "Dry bulb temperature in degree Celsius"; + Real rh_per( + min=0) + "Relative humidity in percentage"; + +equation + TDryBul_degC=TDryBul-273.15; + rh_per=100*phi; + TWetBul=273.15 + + TDryBul_degC * uniCon * Modelica.Math.atan(0.151977*sqrt(rh_per+8.313659)) + + uniCon * ( + Modelica.Math.atan(TDryBul_degC+rh_per) + - Modelica.Math.atan(rh_per-1.676331) + + 0.00391838*rh_per^(1.5)*Modelica.Math.atan(0.023101*rh_per)) + -4.686035; + annotation ( + defaultComponentName="wetBul", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-92,82},{-62,38}}, + textColor={0,0,127}, + textString="TDryBul"), + Text( + extent={{-90,-44},{-70,-70}}, + textColor={0,0,127}, + textString="phi"), + Text( + extent={{62,22},{92,-22}}, + textColor={0,0,127}, + textString="TWetBul"), + Line( + points={{78,-74},{-48,-74}}), + Text( + extent={{76,-78},{86,-94}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="T"), + Line( + points={{76,-46},{26,-4}}, + color={255,0,0}, + thickness=0.5), + Line( + points={{-48,-48},{-2,-30},{28,-4},{48,32},{52,72}}, + color={0,0,0}, + smooth=Smooth.Bezier), + Line( + points={{-48,84},{-48,-74}}), + Text( + extent={{-44,82},{-22,64}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="X"), + Polygon( + points={{86,-74},{76,-72},{76,-76},{86,-74}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-48,88},{-46,74},{-50,74},{-48,88}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Polygon( + points={{26,-4},{36,-10},{34,-12},{26,-4}}, + lineColor={255,0,0}, + fillColor={255,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+This block computes the wet bulb temperature for a given dry bulb temperature, relative air humidity +and atmospheric pressure. +

+

+The block uses the approximation of Stull (2011) to compute +the wet bulb temperature without requiring a nonlinear equation. +The approximation by Stull is valid for a relative humidity of 5% to 99%, +a temperature range from -20°C to 50°C +and standard sea level pressure. +For this range of data, the approximation error is -1 Kelvin to +0.65 Kelvin, +with a mean error of less than 0.3 Kelvin. +

+

+The model is validated in + +IBPSA.Controls.OBC.CDL.Psychrometrics.Validation.WetBulb_TDryBulPhi. +

+

References

+

+Stull, Roland. + +Wet-Bulb Temperature from Relative Humidity and Air Temperature +Roland Stull. +Journal of Applied Meteorology and Climatology. +Volume 50, Issue 11, pp. 2267-2269. November 2011 +DOI: 10.1175/JAMC-D-11-0143.1 +

+", + revisions=" +
    +
  • +March 6, 2023, by Michael Wetter:
    +Added a constant in order for unit check to pass.
    +See Buildings, issue 1711 +for a discussion. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +September 29, 2020, by Michael Wetter:
    +Removed unused input p and renamed block.
    +This is for +Buildings, issue 2139 +
  • +
  • +April 11, 2017, by Jianjun Hu:
    +Changed the model to avoid using nonlinear equation. +
  • +
  • +November 3, 2016, by Michael Wetter:
    +Changed icon. +
  • +
  • +May 24, 2016, by Filip Jorissen:
    +Corrected exact implementation. +See Buildings, issue 474 +for a discussion. +
  • +
  • +October 3, 2014, by Michael Wetter:
    +Changed assignment of nominal value to avoid in OpenModelica the warning +alias set with different nominal values. +
  • +
  • +November 20, 2013 by Michael Wetter:
    +Updated model to use +IBPSA.Utilities.Psychrometrics.Functions.saturationPressure() +and +IBPSA.Utilities.Psychrometrics.Functions.saturationPressureLiquid() +as these functions have been moved from the medium to the psychrometrics package. +
  • +
  • +October 1, 2012 by Michael Wetter:
    +First implementation. +
  • +
+")); +end WetBulb_TDryBulPhi; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/package.mo b/IBPSA/Controls/OBC/CDL/Psychrometrics/package.mo new file mode 100644 index 0000000000..967a8a9e24 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/package.mo @@ -0,0 +1,60 @@ +within IBPSA.Controls.OBC.CDL; +package Psychrometrics "Package with psychrometric blocks" + annotation ( + Documentation( + info=" +

+This package contains blocks for psychrometric calculations. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Line( + points={{-78,86},{-78,-72}}), + Polygon( + points={{-78,88},{-76,74},{-80,74},{-78,88}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-74,84},{-52,66}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="X"), + Line( + points={{-78,-46},{-64,-42},{-40,-32},{-16,-18},{10,6},{30,40},{38,72}}, + color={0,0,0}, + smooth=Smooth.Bezier), + Line( + points={{72,-72},{-76,-72}}), + Polygon( + points={{74,-72},{64,-70},{64,-74},{74,-72}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{72,-80},{82,-96}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="T")})); +end Psychrometrics; diff --git a/IBPSA/Controls/OBC/CDL/Psychrometrics/package.order b/IBPSA/Controls/OBC/CDL/Psychrometrics/package.order new file mode 100644 index 0000000000..b5717e1bfc --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Psychrometrics/package.order @@ -0,0 +1,4 @@ +DewPoint_TDryBulPhi +SpecificEnthalpy_TDryBulPhi +WetBulb_TDryBulPhi +Validation diff --git a/IBPSA/Controls/OBC/CDL/Reals/Abs.mo b/IBPSA/Controls/OBC/CDL/Reals/Abs.mo new file mode 100644 index 0000000000..2df97213e1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Abs.mo @@ -0,0 +1,78 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Abs + "Output the absolute value of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for absolute function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Absolute value of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=abs(u); + annotation ( + defaultComponentName="abs", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{92,0},{70,8},{70,-8},{92,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,80},{0,0},{80,80}}), + Line( + points={{0,-14},{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), + Text( + extent={{-34,-28},{38,-76}}, + textColor={192,192,192}, + textString="abs"), + Line( + points={{-88,0},{76,0}}, + color={192,192,192}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = abs(u), +where +u is an input. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Abs; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Acos.mo b/IBPSA/Controls/OBC/CDL/Reals/Acos.mo new file mode 100644 index 0000000000..1bae7066fa --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Acos.mo @@ -0,0 +1,81 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Acos "Output the arc cosine of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for arc cosine function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final unit="rad", + displayUnit="deg") + "Arc cosine of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); +equation + y = Modelica.Math.acos(u); + +annotation (defaultComponentName="arcCos", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + points={{0,90},{-8,68},{8,68},{0,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,80},{-79.2,72.8},{-77.6,67.5},{-73.6,59.4},{-66.3,49.8},{ + -53.5,37.3},{-30.2,19.7},{37.4,-24.8},{57.5,-40.8},{68.7,-52.7},{75.2, + -62.2},{77.6,-67.5},{80,-80}}, + smooth=Smooth.Bezier), + Line(points={{0,-88},{0,68}}, color={192,192,192}), + Line(points={{-90,-80},{68,-80}}, color={192,192,192}), + Polygon( + points={{90,-80},{68,-72},{68,-88},{90,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-86,-14},{-14,-62}}, + textColor={192,192,192}, + textString="acos"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Diagram(coordinateSystem(preserveAspectRatio=false)), +Documentation(info=" +

+Block that outputs y = acos(u), where u is an input. +

+

+\"acos.png\" +

+", +revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the output.
    +This is for +Buildings, issue 3277. +
  • +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Acos; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Add.mo b/IBPSA/Controls/OBC/CDL/Reals/Add.mo new file mode 100644 index 0000000000..9028f670bc --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Add.mo @@ -0,0 +1,83 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Add + "Output the sum of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input to be added" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input to be added" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sum of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1+u2; + annotation ( + defaultComponentName="add2", + Documentation( + info=" +

+Block that outputs y as the sum of the +two input signals u1 and u2, +

+
+    y = u1 + u2.
+
+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Removed gain factors.
    +This is for Buildings, issue 2865. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + extent={{-50,-50},{50,50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-100,60},{-74,24},{-44,24}}, + color={0,0,127}), + Line( + points={{-100,-60},{-74,-28},{-42,-28}}, + color={0,0,127}), + Line( + points={{50,0},{100,0}}, + color={0,0,127}), + Text( + extent={{-36,-26},{40,42}}, + textString="+"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Add; diff --git a/IBPSA/Controls/OBC/CDL/Reals/AddParameter.mo b/IBPSA/Controls/OBC/CDL/Reals/AddParameter.mo new file mode 100644 index 0000000000..bf9a1a7652 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/AddParameter.mo @@ -0,0 +1,79 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block AddParameter "Output the sum of an input plus a parameter" + parameter Real p + "Parameter to be added to the input"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be added to the parameter" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sum of the parameter and the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u+p; + annotation ( + defaultComponentName="addPar", + Documentation( + info=" +

+Block that outputs y = u + p, +where p is parameter and u is an input. +

+", +revisions=" +
    +
  • +February 3, 2022, by Jianjun Hu:
    +Removed input gain factor.
    +This is for Buildings, issue 2876. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line( + points={{-54,66},{-28,30},{2,30}}, + color={0,0,127}), + Line( + points={{-100,0},{100,0}}, + color={0,0,127}), + Text( + extent={{-122,58},{-17,98}}, + textString="%p", + textColor={0,0,0}), + Ellipse( + lineColor={0,0,127}, + extent={{-12,-52},{88,48}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{0,-26},{76,42}}, + textString="+"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end AddParameter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Asin.mo b/IBPSA/Controls/OBC/CDL/Reals/Asin.mo new file mode 100644 index 0000000000..08d11987ff --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Asin.mo @@ -0,0 +1,81 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Asin "Output the arc sine of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for the arc sine function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final unit="rad", + displayUnit="deg") + "Arc sin of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); +equation + y = Modelica.Math.asin(u); + +annotation (defaultComponentName="arcSin", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,140},{100,100}}, + textString="%name", + textColor={0,0,255}), + Polygon( + points={{0,90},{-8,68},{8,68},{0,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{0,-80},{0,68}}, color={192,192,192}), + Line(points={{-80,-80},{-79.2,-72.8},{-77.6,-67.5},{-73.6,-59.4},{-66.3,-49.8}, + {-53.5,-37.3},{-30.2,-19.7},{37.4,24.8},{57.5,40.8},{68.7,52.7},{75.2, + 62.2},{77.6,67.5},{80,80}}, + smooth=Smooth.Bezier), + 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), + Text( + extent={{-88,78},{-16,30}}, + textColor={192,192,192}, + textString="asin"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Diagram(coordinateSystem(preserveAspectRatio=false)), +Documentation(info=" +

+Block that outputs y = asin(u), where u is an input. +

+

+\"asin.png\" +

+", +revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the output.
    +This is for +Buildings, issue 3277. +
  • +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Asin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Atan.mo b/IBPSA/Controls/OBC/CDL/Reals/Atan.mo new file mode 100644 index 0000000000..c8ba07d986 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Atan.mo @@ -0,0 +1,93 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Atan "Output the arc tangent of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for the arc tangent function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final unit="rad", + displayUnit="deg") + "Arc tangent of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.atan(u); + annotation ( + defaultComponentName="atan", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{-86,68},{-14,20}}, + textColor={192,192,192}, + textString="atan"), + Polygon( + points={{0,90},{-8,68},{8,68},{0,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{0,-80},{0,68}}, + color={192,192,192}), + Line( + points={{-80,-80},{-52.7,-75.2},{-37.4,-69.7},{-26.9,-63},{-19.7,-55.2},{-14.1,-45.8},{-10.1,-36.4},{-6.03,-23.9},{-1.21,-5.06},{5.23,21},{9.25,34.1},{13.3,44.2},{18.1,52.9},{24.5,60.8},{33.4,67.6},{47,73.6},{69.5,78.6},{80,80}}, + smooth=Smooth.Bezier), + 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), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = atan(u), where u is an input. +

+

+\"atan.png\" +

+", +revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the output.
    +This is for +Buildings, issue 3277. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Atan; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Atan2.mo b/IBPSA/Controls/OBC/CDL/Reals/Atan2.mo new file mode 100644 index 0000000000..cc4a4b0244 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Atan2.mo @@ -0,0 +1,117 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Atan2 + "Output atan(u1/u2) of the inputs u1 and u2" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1 for the atan2(u1/u2) function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input u2 for the atan2(u1/u2) function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y( + final unit="rad", + displayUnit="deg") + "Output with atan2(u1/u2)" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.atan2(u1, u2); + annotation ( + defaultComponentName="atan2", + Documentation( + info=" +

+Block that outputs the tangent-inverse y = atan2(u1, u2) +of the input u1 divided by the input u2. +

+

+u1 and u2 shall not be zero at the same time instant. +Atan2 uses the sign of u1 and u2 +in order to construct the solution in the range +-π ≤ y ≤ π, whereas + +IBPSA.Controls.OBC.CDL.Reals.Atan +gives a solution in the range +-π/2 ≤ y ≤ π/2. +

+ +

+\"atan2.png\" +

+ +", + revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the output.
    +This is for +Buildings, issue 3277. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{0,-80},{0,68}}, + color={192,192,192}), + 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,-34.9},{-46.1,-31.4},{-29.4,-27.1},{-18.3,-21.5},{-10.3,-14.5},{-2.03,-3.17},{7.97,11.6},{15.5,19.4},{24.3,25},{39,30},{62.1,33.5},{80,34.9}}, + smooth=Smooth.Bezier), + Line( + points={{-80,45.1},{-45.9,48.7},{-29.1,52.9},{-18.1,58.6},{-10.2,65.8},{-1.82,77.2},{0,80}}, + smooth=Smooth.Bezier), + Line( + points={{0,-80},{8.93,-67.2},{17.1,-59.3},{27.3,-53.6},{42.1,-49.4},{69.9,-45.8},{80,-45.1}}, + smooth=Smooth.Bezier), + Text( + extent={{-90,-46},{-18,-94}}, + textColor={192,192,192}, + textString="atan2"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + points={{0,90},{-8,68},{8,68},{0,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Atan2; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Average.mo b/IBPSA/Controls/OBC/CDL/Reals/Average.mo new file mode 100644 index 0000000000..b698bdf9f8 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Average.mo @@ -0,0 +1,69 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Average "Output the average of its two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input for average function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}),iconTransformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input for average function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}),iconTransformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with the average of the two inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=0.5*(u1+u2); + annotation ( + defaultComponentName="ave", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-50,34},{52,-26}}, + textColor={192,192,192}, + textString="avg()"), + Line( + points={{-8,16}}, + color={0,0,0}), + Line( + points={{-100,60}}, + color={0,0,0}, + thickness=1), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = (u1 + u2) / 2, +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 15, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Average; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Cos.mo b/IBPSA/Controls/OBC/CDL/Reals/Cos.mo new file mode 100644 index 0000000000..81431bc0c7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Cos.mo @@ -0,0 +1,97 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Cos "Output the cosine of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u( + final unit="rad", + displayUnit="deg") + "Input for the cosine function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Cosine of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.cos(u); + annotation ( + defaultComponentName="cos", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,80},{-74.4,78.1},{-68.7,72.3},{-63.1,63},{-56.7,48.7},{-48.6,26.6},{-29.3,-32.5},{-22.1,-51.7},{-15.7,-65.3},{-10.1,-73.8},{-4.42,-78.8},{1.21,-79.9},{6.83,-77.1},{12.5,-70.6},{18.1,-60.6},{24.5,-45.7},{32.6,-23},{50.3,31.3},{57.5,50.7},{63.9,64.6},{69.5,73.4},{75.2,78.6},{80,80}}, + smooth=Smooth.Bezier), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-80,68}}, + color={192,192,192}), + 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), + Text( + extent={{-36,80},{36,32}}, + textColor={192,192,192}, + textString="cos"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = cos(u), +where +u is an input. +

+ +

+\"cos.png\" +

+ +", + revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the input.
    +This is for +Buildings, issue 3277. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Cos; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Derivative.mo b/IBPSA/Controls/OBC/CDL/Reals/Derivative.mo new file mode 100644 index 0000000000..50794e3517 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Derivative.mo @@ -0,0 +1,121 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Derivative + "Block that approximates the derivative of the input" + parameter Real y_start=0 + "Initial value of output (= state)" + annotation (Dialog(group="Initialization")); + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput k + "Input for the gain" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput T( + final quantity="Time", + final unit="s", + min=100*IBPSA.Controls.OBC.CDL.Constants.eps) + "Input for the time constant (T>0 required; T=0 is ideal derivative block)" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be differentiated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Approximation of derivative du/dt" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); +protected + Real T_nonZero(final unit="s") "Non-zero value for T"; + + output Real x + "State of block"; + +initial equation + x= if abs(k) < IBPSA.Controls.OBC.CDL.Constants.eps then u else u - T*y_start/k; + +equation + T_nonZero = max(T, 100*IBPSA.Controls.OBC.CDL.Constants.eps); + der(x) = (u-x)/T_nonZero; + y = (k/T_nonZero)*(u-x); + + annotation ( + defaultComponentName="der", + Documentation( + info=" +

+This blocks defines the transfer function between the +input u and the output y +as approximated derivative: +

+
+                s
+  y = k * ------------ * u
+            T * s + 1
+
+

+If k=0, the block reduces to y=0. +

+", + revisions=" + +"), + Icon( + coordinateSystem( + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-56,78},{-56,-90}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-56,90},{-64,68},{-48,68},{-56,90}}), + Line( + points={{-64,-80},{82,-80}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90.0,-80.0},{68.0,-72.0},{68.0,-88.0},{90.0,-80.0}}), + Line( + origin={-24.667,-27.333}, + points={{-31.333,89.333},{-19.333,-40.667},{86.667,-52.667}}, + color={0,0,127}, + smooth=Smooth.Bezier), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3))), + Text( + extent={{-106,14},{-62,-12}}, + textColor={0,0,0}, + textString="u"), + Text( + extent={{46,14},{90,-12}}, + textColor={0,0,0}, + textString="y=du/dt"), + Text( + extent={{-108,94},{-64,68}}, + textColor={0,0,0}, + textString="k"), + Text( + extent={{-108,54},{-64,28}}, + textColor={0,0,0}, + textString="T")})); +end Derivative; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Divide.mo b/IBPSA/Controls/OBC/CDL/Reals/Divide.mo new file mode 100644 index 0000000000..11ebd63d4e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Divide.mo @@ -0,0 +1,91 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Divide "Output first input divided by second input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input for dividend" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input for divisor" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with the quotient" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1/u2; + annotation ( + defaultComponentName="div", + Documentation( + info=" +

+Block that outputs y = u1 / u2, +where +u1 and u2 are inputs. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Division to Divide.
    +This is for Buildings, issue 2865. +
  • +
  • +March 9, 2020, by Michael Wetter:
    +Reformulated model to avoid stack overflow in OpenModelica.
    +This is for +Buildings, issue 1819. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + extent={{-50,-50},{50,50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{50,0},{100,0}}, + color={0,0,127}), + Line( + points={{-30,0},{30,0}}), + Ellipse( + fillPattern=FillPattern.Solid, + extent={{-5,20},{5,30}}), + Ellipse( + fillPattern=FillPattern.Solid, + extent={{-5,-30},{5,-20}}), + Line( + points={{-100,60},{-66,60},{-40,30}}, + color={0,0,127}), + Line( + points={{-100,-60},{0,-60},{0,-50}}, + color={0,0,127}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Divide; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Exp.mo b/IBPSA/Controls/OBC/CDL/Reals/Exp.mo new file mode 100644 index 0000000000..c2deedac3a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Exp.mo @@ -0,0 +1,74 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Exp "Output the exponential (base e) of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for the base e exponential function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Base e exponential value of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.exp(u); + annotation ( + defaultComponentName="exp", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Line( + points={{-90,-80.3976},{68,-80.3976}}, + color={192,192,192}), + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-31,-77.9},{-6.03,-74},{10.9,-68.4},{23.7,-61},{34.2,-51.6},{43,-40.3},{50.3,-27.8},{56.7,-13.5},{62.3,2.23},{67.1,18.6},{72,38.2},{76,57.6},{80,80}}), + Line( + points={{0,-80},{0,68}}, + color={192,192,192}), + Text( + extent={{-86,50},{-14,2}}, + textColor={192,192,192}, + textString="exp"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = exp(u), +where +u is an input and exp() is the +base-e exponential function. +

+ +

+\"exp.png\" +

+ +", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Exp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Greater.mo b/IBPSA/Controls/OBC/CDL/Reals/Greater.mo new file mode 100644 index 0000000000..9ee1c2eae9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Greater.mo @@ -0,0 +1,261 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Greater + "Output y is true, if input u1 is greater than input u2 with hysteresis" + parameter Real h( + final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "First input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Second input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output true if u1 is greater than u2 with hysteresis" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Boolean have_hysteresis=h >= 1E-10 + "True if the block has no hysteresis" + annotation (Evaluate=true); + GreaterWithHysteresis greHys( + final h=h, + final pre_y_start=pre_y_start) if have_hysteresis + "Block with hysteresis" + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + GreaterNoHysteresis greNoHys if not have_hysteresis + "Block without hysteresis" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + block GreaterNoHysteresis + "Greater block without hysteresis" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + equation + y=u1 > u2; + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})})); + end GreaterNoHysteresis; + + block GreaterWithHysteresis + "Greater block without hysteresis" + parameter Real h( + final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + initial equation + assert( + h >= 0, + "Hysteresis must not be negative"); + pre(y)=pre_y_start; + + equation + y=(not pre(y) and u1 > u2 or pre(y) and u1 > u2-h); + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h")})); + end GreaterWithHysteresis; + +equation + connect(u1,greHys.u1) + annotation (Line(points={{-120,0},{-66,0},{-66,30},{-12,30}},color={0,0,127})); + connect(u2,greHys.u2) + annotation (Line(points={{-120,-80},{-60,-80},{-60,22},{-12,22}},color={0,0,127})); + connect(greHys.y,y) + annotation (Line(points={{12,30},{60,30},{60,0},{120,0}},color={255,0,255})); + connect(u1,greNoHys.u1) + annotation (Line(points={{-120,0},{-66,0},{-66,-30},{-12,-30}},color={0,0,127})); + connect(u2,greNoHys.u2) + annotation (Line(points={{-120,-80},{-60,-80},{-60,-38},{-12,-38}},color={0,0,127})); + connect(greNoHys.y,y) + annotation (Line(points={{12,-30},{60,-30},{60,0},{120,0}},color={255,0,255})); + annotation ( + defaultComponentName="gre", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-100,-80},{42,-80},{42,-62}}, + color={0,0,127}), + Line( + points={{-12,14},{18,2},{-12,-8}}, + thickness=0.5), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h"), + Text( + extent={{-88,-18},{-21,24}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u1, + leftJustified=false, + significantDigits=3))), + Text( + extent={{-86,-76},{-19,-34}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3))), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({235,235,235}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({235,235,235}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{20,-56},{87,-14}}, + textColor=DynamicSelect({235,235,235}, + if not y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2-h, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10)}), + Documentation( + info=" +

+Block that outputs true if the Real input u1 +is greater than the Real input u2, optionally within a hysteresis h. +

+

+The parameter h ≥ 0 is used to specify a hysteresis. +For any h ≥ 0, the output switches to true if u1 > u2, +and it switches to false if u1 ≤ u2 - h. +Note that in the special case of h = 0, this produces the output y=u1 > u2. +

+

+To disable hysteresis, set h=0. +

+

Usage

+

+Enabling hysteresis can avoid frequent switching.
+In simulation, adding hysteresis is recommended to guard against numerical noise. +Otherwise, numerical noise from a nonlinear solver or from an +implicit time integration algorithm may cause the simulation to stall. +Numerical noise can be present if an input depends +on a state variable or a quantity that requires an iterative solution, +such as a temperature or a mass flow rate of an HVAC system.
+In real controllers, adding hysteresis is recommended to guard against measurement noise. +Otherwise, measurement noise may cause the output to change frequently. +

+", +revisions=" +
    +
  • +April 29, 2022, by Jianjun Hu:
    +Corrected the condition of swiching true back to false.
    +This is for Buildings, issue 2981. +
  • +
  • +February 3, 2021, by Antoine Gautier:
    +Corrected documentation.
    +This is for Buildings, issue 2246. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Added hysteresis.
    +This is for Buildings, issue 2076. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Greater; diff --git a/IBPSA/Controls/OBC/CDL/Reals/GreaterThreshold.mo b/IBPSA/Controls/OBC/CDL/Reals/GreaterThreshold.mo new file mode 100644 index 0000000000..a5861c6e55 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/GreaterThreshold.mo @@ -0,0 +1,242 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block GreaterThreshold + "Output y is true, if input u is greater than threshold with hysteresis" + parameter Real t=0 + "Threshold for comparison"; + parameter Real h( + final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be compared against the threshold" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is greater than the threshold with hysteresis" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Boolean have_hysteresis=h >= 1E-10 + "True if the block has no hysteresis" + annotation (Evaluate=true); + GreaterWithHysteresis greHys( + final h=h, + final t=t, + final pre_y_start=pre_y_start) if have_hysteresis + "Block with hysteresis" + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + GreaterNoHysteresis greNoHys( + final t=t) if not have_hysteresis + "Block without hysteresis" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + block GreaterNoHysteresis + "Greater block without hysteresis" + parameter Real t=0 + "Threshold for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input u" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + equation + y=u > t; + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})})); + end GreaterNoHysteresis; + + block GreaterWithHysteresis + "Greater block without hysteresis" + parameter Real t=0 + "Threshold for comparison"; + parameter Real h( + final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input u" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + initial equation + assert( + h >= 0, + "Hysteresis must not be negative"); + pre(y)=pre_y_start; + + equation + y=(not pre(y) and u > t or pre(y) and u > t-h); + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h")})); + end GreaterWithHysteresis; + +equation + connect(u,greHys.u) + annotation (Line(points={{-120,0},{-66,0},{-66,30},{-12,30}},color={0,0,127})); + connect(greHys.y,y) + annotation (Line(points={{12,30},{60,30},{60,0},{120,0}},color={255,0,255})); + connect(u,greNoHys.u) + annotation (Line(points={{-120,0},{-66,0},{-66,-30},{-12,-30}},color={0,0,127})); + connect(greNoHys.y,y) + annotation (Line(points={{12,-30},{60,-30},{60,0},{120,0}},color={255,0,255})); + annotation ( + defaultComponentName="greThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-16,10},{2,2},{-16,-8}}, + thickness=0.5), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h"), + Text( + extent={{-88,-18},{-21,24}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u, + leftJustified=false, + significantDigits=3))), + Text( + extent={{4,-18},{71,24}}, + textColor={0,0,0}, + textString="%t", + visible=h < 1E-10), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({0,0,0}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(t, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{20,-56},{87,-14}}, + textColor=DynamicSelect({0,0,0}, + if not y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(t-h, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10)}), + Documentation( + info=" +

+Block that outputs true if the Real input u +is greater than a threshold t, optionally within a hysteresis h. +

+

+The parameter h ≥ 0 is used to specify a hysteresis. +For any h ≥ 0, the output switches to true if u > t, +where t is the threshold, +and it switches to false if u ≤ t - h. +Note that in the special case of h = 0, this produces the output y=u > t. +

+

+To disable hysteresis, set h=0. +

+

Usage

+

+Enabling hysteresis can avoid frequent switching.
+In simulation, adding hysteresis is recommended to guard against numerical noise. +Otherwise, numerical noise from a nonlinear solver or from an +implicit time integration algorithm may cause the simulation to stall. +Numerical noise can be present if an input depends +on a state variable or a quantity that requires an iterative solution, +such as a temperature or a mass flow rate of an HVAC system.
+In real controllers, adding hysteresis is recommended to guard against measurement noise. +Otherwise, measurement noise may cause the output to change frequently. +

+", +revisions=" +
    +
  • +April 29, 2022, by Jianjun Hu:
    +Corrected the condition of swiching true back to false.
    +This is for Buildings, issue 2981. +
  • +
  • +February 3, 2021, by Antoine Gautier:
    +Corrected documentation.
    +This is for Buildings, issue 2246. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Added hysteresis.
    +This is for Buildings, issue 2076. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end GreaterThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Hysteresis.mo b/IBPSA/Controls/OBC/CDL/Reals/Hysteresis.mo new file mode 100644 index 0000000000..0dc756bb12 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Hysteresis.mo @@ -0,0 +1,146 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Hysteresis + "Transform Real to Boolean signal with Hysteresis" + parameter Real uLow + "if y=true and uuHigh, switch to y=true"; + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be compared against hysteresis values" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output value of comparison" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + assert(uHigh > uLow, + "Hysteresis limits wrong. uHigh must be larger than uLow"); + pre(y)=pre_y_start; + +equation + y=not pre(y) and u > uHigh or pre(y) and u >= uLow; + annotation ( + defaultComponentName="hys", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{71,7},{85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-29}}, + color={192,192,192}), + Polygon( + points={{92,-29},{70,-21},{70,-37},{92,-29}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-79,-29},{84,-29}}, + color={192,192,192}), + Line( + points={{-79,-29},{41,-29}}), + Line( + points={{-15,-21},{1,-29},{-15,-36}}), + Line( + points={{41,51},{41,-29}}), + Line( + points={{33,3},{41,22},{50,3}}), + Line( + points={{-49,51},{81,51}}), + Line( + points={{-4,59},{-19,51},{-4,43}}), + Line( + points={{-59,29},{-49,11},{-39,29}}), + Line( + points={{-49,51},{-49,-29}}), + Text( + extent={{-92,-49},{-9,-92}}, + textColor={192,192,192}, + textString="%uLow"), + Text( + extent={{2,-49},{91,-92}}, + textColor={192,192,192}, + textString="%uHigh"), + Rectangle( + extent={{-91,-49},{-8,-92}}, + lineColor={192,192,192}), + Line( + points={{-49,-29},{-49,-49}}, + color={192,192,192}), + Rectangle( + extent={{2,-49},{91,-92}}, + lineColor={192,192,192}), + Line( + points={{41,-29},{41,-49}}, + color={192,192,192}), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")}), + Documentation( + info=" +

+Block that transforms a Real input signal into a Boolean +output signal: +

+
    +
  • When the output was false and the input becomes + greater than the parameter uHigh, the output + switches to true. +
  • +
  • When the output was true and the input becomes + less than the parameter uLow, the output + switches to false. +
  • +
+

+The start value of the output is defined via parameter +pre_y_start (= value of pre(y) at initial time). +The default value of this parameter is false. +

+

+\"Hysteresis.png\" +

+", + revisions=" +
    +
  • +October 3, 2017, by Michael Wetter:
    +Removed start value for parameters, and moved assertion to initial equation. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Hysteresis; diff --git a/IBPSA/Controls/OBC/CDL/Reals/IntegratorWithReset.mo b/IBPSA/Controls/OBC/CDL/Reals/IntegratorWithReset.mo new file mode 100644 index 0000000000..e2432a1282 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/IntegratorWithReset.mo @@ -0,0 +1,136 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block IntegratorWithReset + "Output the integral of the input signal" + parameter Real k=1 + "Integrator gain"; + parameter Real y_start=0 + "Initial or guess value of output (= state)" + annotation (Dialog(group="Initialization")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be integrated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput y_reset_in + "Input signal for state to which integrator is reset" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Input that resets the integrator output when it becomes true" + annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={0,-120}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Value of the integrator" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + y=y_start; + +equation + der(y)=k*u; + when trigger then + reinit(y, y_reset_in); + end when; + annotation ( + defaultComponentName="intWitRes", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-88,-94},{212,-54}}, + textColor={0,0,0}, + textString="y_reset_in", + horizontalAlignment=TextAlignment.Left), + Bitmap( + extent={{-54,-50},{60,50}}, + fileName="modelica://IBPSA/Resources/Images/Controls/OBC/CDL/Reals/int.png"), + Text( + extent={{-88,56},{206,92}}, + textColor={0,0,0}, + textString="k=%k", + horizontalAlignment=TextAlignment.Left), + Text( + extent={{-92,-12},{208,28}}, + textColor={0,0,0}, + horizontalAlignment=TextAlignment.Left, + textString="u"), + Text( + extent={{70,-14},{370,26}}, + textColor={0,0,0}, + horizontalAlignment=TextAlignment.Left, + textString="y"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs +

+

+y(t) = ystart + ∫t0t u(s) ds. +

+

+Whenever the input signal trigger changes from false +to true, +the integrator is reset by setting ystart +to the value of the input signal y_reset_in. +

+", + revisions=" +
    +
  • +June 8, 2023, by Michael Wetter:
    +Updated documentation. +
  • +
  • +February 2, 2022, by Michael Wetter:
    +Removed unit=\"1\" declaration for gain k. +This is to avoid the warning observed in +Buildings, issue 2872. +
  • +
  • +October 21, 2021, by Michael Wetter:
    +Removed errorneous visible attribute in icon. +
  • +
  • +August 3, 2020, by Jianjun:
    +Fixed the input y_reset_in. +
    +This is for +Buildings, issue 2056. +
  • +
  • +April 21, 2020, by Michael Wetter:
    +Removed parameter initType. +
    +This is for +Buildings, issue 1887. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +November 6, 2017, by Michael Wetter:
    +Explicitly declared types from CDL. +
  • +
  • +March 23, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of + +IBPSA.Utilities.Math.IntegratorWithReset. +
  • +
+")); +end IntegratorWithReset; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Less.mo b/IBPSA/Controls/OBC/CDL/Reals/Less.mo new file mode 100644 index 0000000000..eb1ec495e0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Less.mo @@ -0,0 +1,258 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Less + "Output y is true, if input u1 is less than input u2" + parameter Real h(final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "First input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Second input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u1 is less than u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Boolean have_hysteresis=h >= 1E-10 + "True if the block has no hysteresis" + annotation (Evaluate=true); + LessWithHysteresis lesHys( + final h=h, + final pre_y_start=pre_y_start) if have_hysteresis + "Block with hysteresis" + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + LessNoHysteresis lesNoHys if not have_hysteresis + "Block without hysteresis" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + block LessNoHysteresis + "Less block without hysteresis" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + equation + y=u1 < u2; + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})})); + end LessNoHysteresis; + + block LessWithHysteresis + "Less block without hysteresis" + parameter Real h(final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input u2" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + initial equation + assert(h >= 0, + "Hysteresis must not be negative"); + pre(y)=pre_y_start; + + equation + y=(not pre(y) and u1 < u2 or pre(y) and u1 < u2+h); + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h")})); + end LessWithHysteresis; + +equation + connect(u1,lesHys.u1) + annotation (Line(points={{-120,0},{-66,0},{-66,30},{-12,30}},color={0,0,127})); + connect(u2,lesHys.u2) + annotation (Line(points={{-120,-80},{-60,-80},{-60,22},{-12,22}},color={0,0,127})); + connect(lesHys.y,y) + annotation (Line(points={{12,30},{60,30},{60,0},{120,0}},color={255,0,255})); + connect(u1,lesNoHys.u1) + annotation (Line(points={{-120,0},{-66,0},{-66,-30},{-12,-30}},color={0,0,127})); + connect(u2,lesNoHys.u2) + annotation (Line(points={{-120,-80},{-60,-80},{-60,-38},{-12,-38}},color={0,0,127})); + connect(lesNoHys.y,y) + annotation (Line(points={{12,-30},{60,-30},{60,0},{120,0}},color={255,0,255})); + annotation ( + defaultComponentName="les", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{-100,-80},{42,-80},{42,-62}}, + color={0,0,127}), + Line( + points={{18,14},{-12,2},{18,-8}}, + thickness=0.5), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h"), + Text( + extent={{-88,-18},{-21,24}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u1, + leftJustified=false, + significantDigits=3))), + Text( + extent={{-86,-76},{-19,-34}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3))), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({235,235,235}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({235,235,235}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{20,-56},{87,-14}}, + textColor=DynamicSelect({235,235,235}, + if not y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(u2+h, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10)}), + Documentation( + info=" +

+Block that outputs true if the Real input u1 +is less than the Real input u2, optionally within a hysteresis h. +

+

+The parameter h ≥ 0 is used to specify a hysteresis. +For any h ≥ 0, the output switches to true if u1 < u2, +and it switches to false if u1 ≥ u2 + h. +Note that in the special case of h = 0, this produces the output y=u1 < u2. +

+

+To disable hysteresis, set h=0. +

+

Usage

+

+Enabling hysteresis can avoid frequent switching.
+In simulation, adding hysteresis is recommended to guard against numerical noise. +Otherwise, numerical noise from a nonlinear solver or from an +implicit time integration algorithm may cause the simulation to stall. +Numerical noise can be present if an input depends +on a state variable or a quantity that requires an iterative solution, +such as a temperature or a mass flow rate of an HVAC system.
+In real controllers, adding hysteresis is recommended to guard against measurement noise. +Otherwise, measurement noise may cause the output to change frequently. +

+", +revisions=" +
    +
  • +April 29, 2022, by Jianjun Hu:
    +Corrected the condition of swiching true back to false.
    +This is for Buildings, issue 2981. +
  • +
  • +February 3, 2021, by Antoine Gautier:
    +Corrected documentation.
    +This is for Buildings, issue 2246. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Added hysteresis.
    +This is for Buildings, issue 2076. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Less; diff --git a/IBPSA/Controls/OBC/CDL/Reals/LessThreshold.mo b/IBPSA/Controls/OBC/CDL/Reals/LessThreshold.mo new file mode 100644 index 0000000000..826d2301fd --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/LessThreshold.mo @@ -0,0 +1,234 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block LessThreshold + "Output y is true, if input u is less than threshold with hysteresis" + parameter Real t=0 + "Threshold for comparison"; + parameter Real h(final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be compared against the threshold" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Outputs true if u is less than the threshold with hysteresis" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Boolean have_hysteresis=h >= 1E-10 + "True if the block has no hysteresis" + annotation (Evaluate=true); + LessWithHysteresis lesHys( + final h=h, + final t=t, + final pre_y_start=pre_y_start) if have_hysteresis + "Block with hysteresis" + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + LessNoHysteresis lesNoHys( + final t=t) if not have_hysteresis + "Block without hysteresis" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + block LessNoHysteresis + "Less block without hysteresis" + parameter Real t=0 + "Threshold for comparison"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input u" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + equation + y=u < t; + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})})); + end LessNoHysteresis; + + block LessWithHysteresis + "Less block without hysteresis" + parameter Real t=0 + "Threshold for comparison"; + parameter Real h( + final min=0)=0 + "Hysteresis" + annotation (Evaluate=true); + parameter Boolean pre_y_start=false + "Value of pre(y) at initial time" + annotation (Dialog(tab="Advanced")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input u" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Output y" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + + initial equation + assert(h >= 0, + "Hysteresis must not be negative"); + pre(y)=pre_y_start; + + equation + y=(not pre(y) and u < t or pre(y) and u < t+h); + annotation ( + Icon( + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h")})); + end LessWithHysteresis; + +equation + connect(u,lesHys.u) + annotation (Line(points={{-120,0},{-66,0},{-66,30},{-12,30}},color={0,0,127})); + connect(lesHys.y,y) + annotation (Line(points={{12,30},{60,30},{60,0},{120,0}},color={255,0,255})); + connect(u,lesNoHys.u) + annotation (Line(points={{-120,0},{-66,0},{-66,-30},{-12,-30}},color={0,0,127})); + connect(lesNoHys.y,y) + annotation (Line(points={{12,-30},{60,-30},{60,0},{120,0}},color={255,0,255})); + annotation ( + defaultComponentName="lesThr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + lineThickness=5.0, + fillColor={210,210,210}, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Ellipse( + extent={{73,7},{87,-7}}, + lineColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if y then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Line( + points={{2,10},{-16,2},{2,-8}}, + thickness=0.5), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-64,62},{62,92}}, + textColor={0,0,0}, + textString="h=%h"), + Text( + extent={{-88,-18},{-21,24}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(u, + leftJustified=false, + significantDigits=3))), + Text( + extent={{4,-18},{71,24}}, + textColor={0,0,0}, + textString="%t", + visible=h < 1E-10), + Text( + extent={{22,20},{89,62}}, + textColor=DynamicSelect({0,0,0}, + if y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(t, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10), + Text( + extent={{20,-56},{87,-14}}, + textColor=DynamicSelect({0,0,0}, + if not y then + {135,135,135} + else + {0,0,0}), + textString=DynamicSelect("",String(t+h, + leftJustified=false, + significantDigits=3)), + visible=h >= 1E-10)}), + Documentation( + info=" +

+Block that outputs true if the Real input u +is less than a threshold t, optionally within a hysteresis h. +

+

+The parameter h ≥ 0 is used to specify a hysteresis. +For any h ≥ 0, the output switches to true if u < t, +where t is the threshold, +and it switches to false if u ≥ t + h. +Note that in the special case of h = 0, this produces the output y=u < t. +

+

Usage

+

+Enabling hysteresis can avoid frequent switching. +Adding hysteresis is recommended in real controllers to guard against sensor noise, and +in simulation to guard against numerical noise. Numerical noise can be present if +an input depends on a state variable or a quantity that requires an iterative solution, such as +a temperature or a mass flow rate of an HVAC system. +To disable hysteresis, set h=0. +

+", +revisions=" +
    +
  • +April 29, 2022, by Jianjun Hu:
    +Corrected the condition of swiching true back to false.
    +This is for Buildings, issue 2981. +
  • +
  • +February 3, 2021, by Antoine Gautier:
    +Corrected documentation.
    +This is for Buildings, issue 2246. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Added hysteresis.
    +This is for Buildings, issue 2076. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end LessThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Reals/LimitSlewRate.mo b/IBPSA/Controls/OBC/CDL/Reals/LimitSlewRate.mo new file mode 100644 index 0000000000..1e845bea7e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/LimitSlewRate.mo @@ -0,0 +1,152 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block LimitSlewRate "Limit the increase or decrease rate of input" + parameter Real raisingSlewRate( + min=Constants.small, + unit="1/s") + "Speed with which to increase the output"; + parameter Real fallingSlewRate( + max=-Constants.small, + unit="1/s")=-raisingSlewRate + "Speed with which to decrease the output"; + parameter Real Td( + final quantity="Time", + final unit="s", + min=Constants.eps)=raisingSlewRate*10 + "Derivative time constant"; + parameter Boolean enable=true + "Set to false to disable rate limiter"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be rate of change limited" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Rate of change limited output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Real thr=(u-y)/Td + "Approximation to derivative between input and output"; + +initial equation + assert(raisingSlewRate > 0, + "raisingSlewRate must be larger than zero."); + assert(fallingSlewRate < 0, + "fallingSlewRate must be less than zero."); + + y=u; + +equation + if enable then + der(y)=smooth( + 1, + noEvent( + if thr < fallingSlewRate then + fallingSlewRate + else + if thr > raisingSlewRate then + raisingSlewRate + else + thr)); + else + y=u; + end if; + annotation ( + defaultComponentName="ramLim", + Documentation( + info=" +

+The block limits the rate of change of the input by a ramp. +

+

+This block computes a threshold for the rate of change of the output y as +thr = (u-y)/Td, where Td > 0 is parameter. +The output y is computed as follows: +

    +
  • +If thr < fallingSlewRate, then dy/dt = fallingSlewRate, +
  • +
  • +if thr > raisingSlewRate, then dy/dt = raisingSlewRate, +
  • +
  • +otherwise, dy/dt = thr. +
  • +
+

Implementation

+

+For the block to work with arbitrary inputs and in order to produce a differentiable output, +the input is numerically differentiated with derivative time constant Td. +Smaller time constant Td means nearer ideal derivative. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from SlewRateLimiter to LimitSlewRate.
    +This is for Buildings, issue 2865. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +April 21, 2020, by Michael Wetter:
    +Removed final attribute on unit because if the input quantity is power, +then the rate limit is units of power per units of time. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 29, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + 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), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-50,-70},{50,70}}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end LimitSlewRate; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Limiter.mo b/IBPSA/Controls/OBC/CDL/Reals/Limiter.mo new file mode 100644 index 0000000000..4cd82d1347 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Limiter.mo @@ -0,0 +1,117 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Limiter + "Limit the range of a signal" + parameter Real uMax + "Upper limit of input signal"; + parameter Real uMin + "Lower limit of input signal"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be limited" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Limited value of input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + assert(uMin < uMax, + "uMin must be smaller than uMax. Check parameters."); + +equation + y=homotopy( + actual=smooth(0,noEvent( + if u > uMax then + uMax + else + if u < uMin then + uMin + else + u)), + simplified=u); + annotation ( + defaultComponentName="lim", + Documentation( + info=" +

+Block that outputs y = min(uMax, max(uMin, u)), +where +u is an input +and +uMax and uMin are parameters. +

+

+If uMax < uMin, an error occurs. +

+", + revisions=" +
    +
  • +February 15, 2024, by Michael Wetter:
    +Updated documentation. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +July 17, 2017, by Michael Wetter:
    +Removed cyclical definition. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + 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},{80,70}}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{50,70},{80,70}}), + Line( + points={{-80,-70},{-50,-70}}), + Text( + extent={{12,72},{94,98}}, + textColor={0,0,0}, + textString="%uMax"), + Text( + extent={{-100,-98},{-18,-72}}, + textColor={0,0,0}, + textString="%uMin"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Limiter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Line.mo b/IBPSA/Controls/OBC/CDL/Reals/Line.mo new file mode 100644 index 0000000000..c28c5543a8 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Line.mo @@ -0,0 +1,234 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Line + "Output the value of the input x along a line specified by two points" + parameter Boolean limitBelow=true + "If true, limit input u to be no smaller than x1" + annotation (Evaluate=true); + parameter Boolean limitAbove=true + "If true, limit input u to be no larger than x2" + annotation (Evaluate=true); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput x1 + "Input for support point x1, with x1 < x2" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput f1 + "Input for support point f(x1)" + annotation (Placement(transformation(extent={{-140,20},{-100,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput x2 + "Input for support point x2, with x2 > x1" + annotation (Placement(transformation(extent={{-140,-60},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput f2 + "Input for support point f(x2)" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for independent variable" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with f(x) along the line specified by (x1, f1) and (x2, f2)" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Real a "Intercept"; + Real b "Slope"; + Real xLim "Input value after applying the limits"; + +equation + if limitBelow or limitAbove then + assert(x2 > x1, + "x2 must be bigger than x1 in " + getInstanceName(), + AssertionLevel.warning); + end if; + + b=(f2-f1)/(x2-x1); + a=f2-b*x2; + + if limitBelow and limitAbove then + xLim=min(x2, max(x1, u)); + elseif limitBelow then + xLim=max(x1, u); + elseif limitAbove then + xLim=min(x2, u); + else + xLim=u; + end if; + + y = a + b * xLim; + + annotation ( + defaultComponentName="lin", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Polygon( + points={{92,-78},{70,-70},{70,-86},{92,-78}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-46,40},{50,-44}}, + color={0,0,0}, + thickness=0.5), + Line( + points={{-80,-80},{-80,72}}, + color={192,192,192}), + Polygon( + points={{-80,92},{-88,70},{-72,70},{-80,92}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-88,-78},{76,-78}}, + color={192,192,192}), + Line( + points={{-100,80},{-64,80}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-64,80},{-62,-78}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-100,40},{-88,40}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-88,40},{-48,40}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-100,-40},{48,-36}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{48,-36},{50,-78}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-100,-80},{-38,-56}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-38,-56},{48,-44}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-100,0},{-62,0}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{-62,0},{8,-8}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{10,-8},{52,-8}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Line( + points={{52,-8},{100,0}}, + color={28,108,200}, + smooth=Smooth.Bezier, + pattern=LinePattern.Dot), + Ellipse( + extent={{44,-38},{56,-50}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{2,-2},{14,-14}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Line( + points={{50,-44},{80,-70}}, + color={0,0,0}, + thickness=0.5, + visible=not limitAbove), + Line( + points={{52,-44},{86,-44}}, + color={238,46,47}, + thickness=0.5, + visible=limitAbove), + Line( + points={{-80,68},{-46,40}}, + color={0,0,0}, + thickness=0.5, + visible=not limitBelow), + Line( + points={{-80,40},{-46,40}}, + color={238,46,47}, + thickness=0.5, + visible=limitBelow), + Ellipse( + extent={{-52,46},{-40,34}}, + pattern=LinePattern.None, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = a + b u, +where +u is an input +and the coefficients a and b +are determined so that the line intercepts the two input points +specified by the two points x1 and f1, +and x2 and f2. +

+

+The parameters limitBelow and limitAbove +determine whether x1 and x2 are also used +to limit the input u. +

+

+If the limits are used, then this block requires x1 < x2. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 25, 2018, by Michael Wetter:
    +Improved documentation, icon and added warning if the limits are used and +x1 > x2.
    +This is for Buildings, issue 1155. +
  • +
  • +January 11, 2017, by Michael Wetter:
    +First implementation. +
  • +
+")); +end Line; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Log.mo b/IBPSA/Controls/OBC/CDL/Reals/Log.mo new file mode 100644 index 0000000000..44b5ca479a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Log.mo @@ -0,0 +1,85 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Log + "Output the natural (base e) logarithm of the input (input > 0 required)" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for base e logarithm" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Base e logarithm of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.log(u); + annotation ( + defaultComponentName="log", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-80,68}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-90,0},{68,0}}, + color={192,192,192}), + Line( + points={{-80,-80},{-79.2,-50.6},{-78.4,-37},{-77.6,-28},{-76.8,-21.3},{-75.2,-11.4},{-72.8,-1.31},{-69.5,8.08},{-64.7,17.9},{-57.5,28},{-47,38.1},{-31.8,48.1},{-10.1,58},{22.1,68},{68.7,78.1},{80,80}}), + Text( + extent={{-6,-24},{66,-72}}, + textColor={192,192,192}, + textString="log"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = log(u), +where +u is an input and log() is the +natural logarithm (base-e) function. +

+ +

+An error occurs if the input u is +zero or negative. +

+ +

+\"log.png\" +

+ +", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Log; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Log10.mo b/IBPSA/Controls/OBC/CDL/Reals/Log10.mo new file mode 100644 index 0000000000..021676ee8c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Log10.mo @@ -0,0 +1,85 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Log10 + "Output the base 10 logarithm of the input (input > 0 required)" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input for base 10 logarithm" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Base 10 logarithm of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.log10(u); + annotation ( + defaultComponentName="log10", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-80,68}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-90,0},{68,0}}, + color={192,192,192}), + Line( + points={{-80,-80},{-79.2,-50.6},{-78.4,-37},{-77.6,-28},{-76.8,-21.3},{-75.2,-11.4},{-72.8,-1.31},{-69.5,8.08},{-64.7,17.9},{-57.5,28},{-47,38.1},{-31.8,48.1},{-10.1,58},{22.1,68},{68.7,78.1},{80,80}}), + Text( + extent={{-6,-24},{66,-72}}, + textColor={192,192,192}, + textString="log10"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = log10(u), +where +u is an input and log10() is the +logarithm (base-10) function. +

+ +

+An error occurs if the input u is +zero or negative. +

+ +

+\"log10.png\" +

+ +", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Log10; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MatrixGain.mo b/IBPSA/Controls/OBC/CDL/Reals/MatrixGain.mo new file mode 100644 index 0000000000..c6dee033a3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MatrixGain.mo @@ -0,0 +1,97 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MatrixGain + "Output the product of a gain matrix with the input signal vector" + parameter Real K[:,:]=[1, 0; 0, 1] + "Gain matrix which is multiplied with the input"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input to be multiplied with the gain matrix" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout] + "Product of gain matrix times the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Integer nin=size(K, 2) + "Number of inputs"; + parameter Integer nout=size(K, 1) + "Number of outputs"; + +equation + y=K*u; + annotation ( + defaultComponentName="matGai", + Documentation( + info=" +

+This blocks computes output vector y as the product of the +gain matrix K with the input signal vector u as +y = K u. +For example, +

+
+   parameter Real K[:,:] = [0.12, 2; 3, 1.5];
+
+

+results in +

+
+     | y[1] |     | 0.12,  2.00 |   | u[1] |
+     |      |  =  |            | * |      |
+     | y[2] |     | 3.00,  1.50 |   | u[2] |
+
+ +", + revisions=" +
    +
  • +February 15, 2024, by Michael Wetter:
    +Updated documentation to have valid syntax. +
  • +
  • +February 11, 2019, by Milica Grahovac:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-50,-30},{20,38}}, + textColor={0,0,0}, + textString="[ ]"), + Text( + extent={{8,-30},{80,10}}, + textColor={0,0,0}, + textString="*")}), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-50,-30},{20,38}}, + textColor={0,0,0}, + textString="[ ]"), + Text( + extent={{8,-30},{80,10}}, + textColor={0,0,0}, + textString="*")})); +end MatrixGain; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MatrixMax.mo b/IBPSA/Controls/OBC/CDL/Reals/MatrixMax.mo new file mode 100644 index 0000000000..973470016f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MatrixMax.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MatrixMax + "Output vector of row- or column-wise maximum of the input matrix" + parameter Boolean rowMax=true + "If true, outputs row-wise maximum, otherwise column-wise"; + parameter Integer nRow(final min=1) + "Number of rows in input matrix"; + parameter Integer nCol(final min=1) + "Number of columns in input matrix"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nRow, nCol] + "Input for the matrix max function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[ + if rowMax then size(u, 1) else size(u, 2)] + "Output with vector of row- or colum-wise maximum of the input matrix" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + if rowMax then + y={max(u[i,:]) for i in 1:size(u,1)}; + else + y={max(u[:,i]) for i in 1:size(u,2)}; + end if; + annotation ( + defaultComponentName="matMax", + Documentation( + info=" +

+If rowMax = true, this block outputs the row-wise maximum +of the input matrix u, +otherwise it outputs the column-wise maximum of the input matrix u. +

+", + revisions=" +
    +
  • +May 17, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-78,-62},{86,68}}, + textColor={0,0,0}, + textString="[ ] max()")}), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}))); +end MatrixMax; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MatrixMin.mo b/IBPSA/Controls/OBC/CDL/Reals/MatrixMin.mo new file mode 100644 index 0000000000..d7872ec15e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MatrixMin.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MatrixMin + "Output vector of row- or column-wise minimum values" + parameter Boolean rowMin=true + "If true, outputs row-wise minimum, otherwise column-wise"; + parameter Integer nRow(final min=1) + "Number of rows in input matrix"; + parameter Integer nCol(final min=1) + "Number of columns in input matrix"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nRow, nCol] + "Input for the matrix min function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[ + if rowMin then size(u, 1) else size(u, 2)] + "Output with vector of row- or colum-wise minimum of the input matrix" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + if rowMin then + y={min(u[i,:]) for i in 1:size(u,1)}; + else + y={min(u[:,i]) for i in 1:size(u,2)}; + end if; + annotation ( + defaultComponentName="matMin", + Documentation( + info=" +

+If rowMin = true, this block outputs the row-wise minimum +of the input matrix u, +otherwise it outputs the column-wise minimum of the input matrix u. +

+", + revisions=" +
    +
  • +May 17, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-78,-62},{86,68}}, + textColor={0,0,0}, + textString="[ ] min()")}), + Diagram( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}))); +end MatrixMin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Max.mo b/IBPSA/Controls/OBC/CDL/Reals/Max.mo new file mode 100644 index 0000000000..f44cdb5d2e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Max.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Max + "Pass through the largest signal" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input to the max function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input to the max function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Maximum of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=max(u1, u2); + annotation ( + defaultComponentName="max", + Documentation( + info=" +

+Block that outputs y = max(u1, u2), +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="max()"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Max; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Min.mo b/IBPSA/Controls/OBC/CDL/Reals/Min.mo new file mode 100644 index 0000000000..f31e9164d2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Min.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Min + "Pass through the smallest signal" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input to the min function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input to the min function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Minimum of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=min(u1, u2); + annotation ( + defaultComponentName="min", + Documentation( + info=" +

+Block that outputs y = min(u1, u2), +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="min()"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Min; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Modulo.mo b/IBPSA/Controls/OBC/CDL/Reals/Modulo.mo new file mode 100644 index 0000000000..b2d3e0a139 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Modulo.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Modulo + "Output the remainder of first input divided by second input (~=0)" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Dividend of the modulus function" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Divisor of the modulus function" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Modulus u1 mod u2" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=mod(u1, u2); + annotation ( + defaultComponentName="mod", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + extent={{-50,-48},{50,52}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{-32,-52},{40,-100}}, + textColor={192,192,192}, + textString="mod"), + Line( + points={{-8,16}}, + color={0,0,0}), + Line( + points={{-100,60}}, + color={0,0,0}, + thickness=1), + Line( + points={{-100,60},{-28,60},{-12,50}}, + color={0,0,127}), + Line( + points={{-100,-60},{-26,-60},{-2,-48}}, + color={0,0,127}), + Line( + points={{50,2},{102,2},{100,2}}, + color={0,0,127}), + Ellipse( + fillPattern=FillPattern.Solid, + extent={{11,-18},{21,-8}}), + Line( + points={{-24,-20},{26,24}}), + Ellipse( + fillPattern=FillPattern.Solid, + extent={{-21,12},{-11,22}}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = mod(u1/u2), +where +u1 and u2 are inputs. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 15, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Modulo; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MovingAverage.mo b/IBPSA/Controls/OBC/CDL/Reals/MovingAverage.mo new file mode 100644 index 0000000000..47662dc4e7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MovingAverage.mo @@ -0,0 +1,185 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MovingAverage "Block to output moving average" + parameter Real delta( + final quantity="Time", + final unit="s", + min=1E-5) + "Time horizon over which the input is averaged"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be averaged" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Moving average of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real tStart( + final quantity="Time", + final unit="s", + fixed=false) + "Start time"; + Real mu + "Internal integrator variable"; + Real muDel + "Internal integrator variable with delay"; + Boolean mode( + start=false, + fixed=true) + "Calculation mode"; + +initial equation + tStart=time; + mu=0; + +equation + u=der(mu); + muDel=delay(mu, delta); + // Compute the mode so that Dymola generates + // time and not state events as it would with + // an if-then construct + when time >= tStart+delta then + mode=true; + end when; + if mode then + y=(mu-muDel)/delta; + else + y=(mu-muDel)/(time-tStart+1E-3); + end if; + annotation ( + defaultComponentName="movAve", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-78,90},{-86,68},{-70,68},{-78,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-78,68},{-78,-80}}, + color={192,192,192}), + Line( + points={{-88,0},{70,0}}, + color={192,192,192}), + Polygon( + points={{92,0},{70,8},{70,-8},{92,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-78,-31},{-64,-31},{-64,-15},{-56,-15},{-56,-63},{-48,-63}, + {-48,-41},{-40,-41},{-40,43},{-32,43},{-32,11},{-32,11},{-32,-49}, + {-22,-49},{-22,-31},{-12,-31},{-12,-59},{-2,-59},{-2,23},{4,23}, + {4,37},{10,37},{10,-19},{20,-19},{20,-7},{26,-7},{26,-37}, + {36,-37},{36,35},{46,35},{46,1},{54,1},{54,-65},{64,-65}}, + color={215,215,215}), + Line( + points={{-78,-24},{68,-24}}), + Text( + extent={{-140,152},{160,112}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-42,-63},{41,-106}}, + textColor={192,192,192}, + textString="%delta s"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+This block outputs the mean value of its input signal as +

+
+      1  t
+y =   -  ∫   u(s) ds
+      δ  t-δ
+
+

+where δ is a parameter that determines the time window over +which the input is averaged. +For + t < δ seconds, it outputs +

+
+           1      t
+y =   --------    ∫   u(s) ds
+      t-t0+10-10   t0
+
+

+where t0 is the initial time. +

+

+This block can for example be used to output the moving +average of a noisy measurement signal. +

+

+See + +IBPSA.Controls.OBC.CDL.Reals.Validation.MovingAverage +and + +IBPSA.Controls.OBC.CDL.Reals.Validation.MovingAverage_nonZeroStart +for example. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from MovingMean to MovingAverage.
    +This is for Buildings, issue 2865. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +October 24, 2017, by Michael Wetter:
    +Set initial condition for mu. +
  • +
  • +October 17, 2017, by Michael Wetter:
    +Reformulated implementation to avoid direct feedthrough. +
  • +
  • +October 16, 2017, by Michael Wetter:
    +Reformulated implementation to handle division by zero as the previous +implementation caused division by zero in the VAV reheat model with the Radau solver. +
  • +
  • +September 27, 2017, by Thierry S. Nouidui:
    +Reformulated implementation to handle division by zero. +This is for +Buildings, issue 978. +
  • +
  • +September 15, 2017, by Thierry S. Nouidui:
    +Reformulated implementation to avoid state events. +
  • +
  • +July 5, 2017, by Michael Wetter:
    +Revised implementation to allow non-zero start time. +
  • +
  • +June 29, 2017, by Jianjun Hu:
    +First implementation. This is for +Buildings, issue 825. +
  • +
+")); +end MovingAverage; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MultiMax.mo b/IBPSA/Controls/OBC/CDL/Reals/MultiMax.mo new file mode 100644 index 0000000000..de4556fafe --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MultiMax.mo @@ -0,0 +1,61 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MultiMax + "Output the maximum element of the input vector" + parameter Integer nin(min=0)=0 + "Number of input signals" + annotation (Dialog(connectorSizing=true),HideResult=true); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input to max function" + annotation (Placement(transformation(extent={{-140,20},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Largest element of the input vector" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=max(u); + annotation ( + defaultComponentName="mulMax", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="max()"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Outputs the maximum element of the input vector. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end MultiMax; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MultiMin.mo b/IBPSA/Controls/OBC/CDL/Reals/MultiMin.mo new file mode 100644 index 0000000000..dbbdf5b1d6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MultiMin.mo @@ -0,0 +1,61 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MultiMin + "Output the minimum element of the input vector" + parameter Integer nin(min=0)=0 + "Number of input signals" + annotation (Dialog(connectorSizing=true),HideResult=true); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input to the min function" + annotation (Placement(transformation(extent={{-140,20},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Smallest element of the input vector" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=min(u); + annotation ( + defaultComponentName="mulMin", + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-90,36},{90,-36}}, + textColor={160,160,164}, + textString="min()"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Outputs the minimum element of the input vector. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end MultiMin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MultiSum.mo b/IBPSA/Controls/OBC/CDL/Reals/MultiSum.mo new file mode 100644 index 0000000000..2dc8e08807 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MultiSum.mo @@ -0,0 +1,94 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MultiSum + "Sum of Reals, y = k[1]*u[1] + k[2]*u[2] + ... + k[n]*u[n]" + parameter Integer nin(min=0)=0 + "Number of input signals" + annotation (Dialog(connectorSizing=true),HideResult=true); + parameter Real k[nin]=fill(1, nin) + "Input gains"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input to multiplied by gain and then added" + annotation (Placement(transformation(extent={{-140,20},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sum of inputs times gains" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + if size(u, 1) > 0 then + y=k*u; + else + y=0; + end if; + annotation ( + defaultComponentName="mulSum", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-200,-110},{200,-140}}, + textColor={0,0,0}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="%k"), + Text( + extent={{-82,90},{82,-46}}, + textColor={0,0,0}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="+"), + Text( + extent={{-144,150},{156,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs +

+

+y = ∑i=1n ki   ui, +

+

+where k is a parameter with n elements and u is +an input of the same length. +The dimension of u can be enlarged by +drawing an additional connection line. The connection is automatically connected +to this new free index. +

+ +

+If no connection to the input connector u is present, +the output is y=0. +

+

+See + +IBPSA.Controls.OBC.CDL.Reals.Validation.MultiSum +for an example. +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +June 28, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the Modelica Standard +Library. This is for +Buildings, issue 825. +
  • +
+")); +end MultiSum; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Multiply.mo b/IBPSA/Controls/OBC/CDL/Reals/Multiply.mo new file mode 100644 index 0000000000..b7e5cfd13c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Multiply.mo @@ -0,0 +1,83 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Multiply "Output product of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input to be multiplied" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input to be multiplied" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Product of the inputs" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1*u2; + annotation ( + defaultComponentName="mul", + Documentation( + info=" +

+Block that outputs y = u1 * u2, +where +u1 and u2 are inputs. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Product to Multiply.
    +This is for Buildings, issue 2865. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + extent={{-50,-50},{50,50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,60},{-40,60},{-30,40}}, + color={0,0,127}), + Line( + points={{-100,-60},{-40,-60},{-30,-40}}, + color={0,0,127}), + Line( + points={{50,0},{100,0}}, + color={0,0,127}), + Line( + points={{-30,0},{30,0}}), + Line( + points={{-15,25.99},{15,-25.99}}), + Line( + points={{-15,-25.99},{15,25.99}}), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Multiply; diff --git a/IBPSA/Controls/OBC/CDL/Reals/MultiplyByParameter.mo b/IBPSA/Controls/OBC/CDL/Reals/MultiplyByParameter.mo new file mode 100644 index 0000000000..3fadfa265d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/MultiplyByParameter.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block MultiplyByParameter + "Output the product of a gain value with the input signal" + parameter Real k + "Factor to be multiplied with input signal"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be multiplied with gain" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Product of the parameter times the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=k*u; + annotation ( + defaultComponentName="gai", + Documentation( + info=" +

+Block that outputs y = k * u, +where +k is a parameter and +u is an input. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Gain to MultiplyByParameter.
    +This is for Buildings, issue 2865. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Polygon( + points={{-100,-100},{-100,100},{100,0},{-100,-100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,-140},{150,-100}}, + textColor={0,0,0}, + textString="k=%k"), + Text( + extent={{-150,144},{150,104}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end MultiplyByParameter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/PID.mo b/IBPSA/Controls/OBC/CDL/Reals/PID.mo new file mode 100644 index 0000000000..b223a243f3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/PID.mo @@ -0,0 +1,604 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block PID + "P, PI, PD, and PID controller" + parameter IBPSA.Controls.OBC.CDL.Types.SimpleController controllerType = + IBPSA.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller"; + parameter Real k( + min=100*Constants.eps)=1 + "Gain of controller" + annotation (Dialog(group="Control gains")); + parameter Real Ti( + final quantity="Time", + final unit="s", + min=100*Constants.eps)=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Control gains",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real Td( + final quantity="Time", + final unit="s", + min=100*Constants.eps)=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Control gains",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Real r( + min=100*Constants.eps)=1 + "Typical range of control error, used for scaling the control error"; + parameter Real yMax=1 + "Upper limit of output" + annotation (Dialog(group="Limits")); + parameter Real yMin=0 + "Lower limit of output" + annotation (Dialog(group="Limits")); + parameter Real Ni( + min=100*Constants.eps)=0.9 + "Ni*Ti is time constant of anti-windup compensation" + annotation (Dialog(tab="Advanced",group="Integrator anti-windup",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real Nd( + min=100*Constants.eps)=10 + "The higher Nd, the more ideal the derivative block" + annotation (Dialog(tab="Advanced",group="Derivative block",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Real xi_start=0 + "Initial value of integrator state" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real yd_start=0 + "Initial value of derivative output" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Boolean reverseActing=true + "Set to true for reverse acting, or false for direct acting control action"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_s + "Setpoint input signal" + annotation (Placement(transformation(extent={{-260,-20},{-220,20}}),iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_m + "Measurement input signal" + annotation (Placement(transformation(origin={0,-220},extent={{20,-20},{-20,20}},rotation=270),iconTransformation(extent={{20,-20},{-20,20}},rotation=270,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Actuator output signal" + annotation (Placement(transformation(extent={{220,-20},{260,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract controlError "Control error (set point - measurement)" + annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter P(final k=k) + "Gain for proportional control action" + annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset I( + final k=k/Ti, + final y_start=xi_start) if with_I + "Integral term" + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Derivative D( + final y_start=yd_start) if with_D + "Derivative term" + annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errP + "P error" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errD if with_D + "D error" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI1 if with_I + "I error (before anti-windup compensation)" + annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI2 if with_I + "I error (after anti-windup compensation)" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Limiter lim( + final uMax=yMax, + final uMin=yMin) + "Limiter" + annotation (Placement(transformation(extent={{120,80},{140,100}}))); + +protected + final parameter Real revAct= if reverseActing then 1 else -1 + "Switch for sign for reverse or direct acting controller"; + final parameter Boolean with_I = + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI or + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable integral action" + annotation (Evaluate=true,HideResult=true); + final parameter Boolean with_D = + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD or + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable derivative action" + annotation (Evaluate=true,HideResult=true); + Sources.Constant kDer(k=k*Td) if with_D + "Gain for derivative block" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Sources.Constant TDer(k=Td/Nd) if with_D + "Time constant for approximation in derivative block" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Dzero(final k=0) + if not with_D + "Zero input signal" + annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, + {-30,110}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( + final k=revAct/r) "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( + final k=revAct/r) "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPD + "Outputs P and D gains added" + annotation (Placement(transformation(extent={{20,124},{40,144}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPID + "Outputs P, I and D gains added" + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I + "Error for anti-windup compensation" + annotation (Placement(transformation(extent={{160,50},{180,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai(k=1/(k*Ni)) + if with_I "Gain for anti-windup compensation" + annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( + final k=yMin < yMax) + "Check for values of yMin and yMax" + annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); + IBPSA.Controls.OBC.CDL.Utilities.Assert assMesYMinMax( + message="LimPID: Limits must be yMin < yMax") + "Assertion on yMin and yMax" + annotation (Placement(transformation(extent={{160,-160},{180,-140}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Izero(final k=0) + if not with_I + "Zero input signal" + annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con(final k=0) + if with_I + "Constant zero" + annotation (Placement(transformation(extent={{-100,-50},{-80,-30}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) + if with_I + "Constant false" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + +equation + connect(u_s,uS_revAct.u) + annotation (Line(points={{-240,0},{-210,0},{-210,40},{-202,40}},color={0,0,127})); + connect(u_m,uMea_revAct.u) + annotation (Line(points={{0,-220},{0,-160},{-210,-160},{-210,-40},{-202,-40}},color={0,0,127})); + connect(D.u,errD.y) + annotation (Line(points={{-52,70},{-118,70}}, + color={0,0,127})); + connect(errI1.u1,uS_revAct.y) + annotation (Line(points={{-142,12},{-170,12},{-170,40},{-178,40}}, + color={0,0,127})); + connect(addPID.u1,addPD.y) + annotation (Line(points={{78,96},{50,96},{50,134},{42,134}},color={0,0,127})); + connect(lim.y,y) + annotation (Line(points={{142,90},{200,90},{200,0},{240,0}},color={0,0,127})); + connect(antWinErr.y,antWinGai.u) + annotation (Line(points={{182,60},{190,60},{190,-20},{182,-20}},color={0,0,127})); + connect(addPD.u2,Dzero.y) + annotation (Line(points={{18,128},{-10,128},{-10,100},{-28,100}},color={0,0,127})); + connect(D.y,addPD.u2) + annotation (Line(points={{-28,70},{-10,70},{-10,128},{18,128}},color={0,0,127})); + connect(addPID.u2,I.y) + annotation (Line(points={{78,84},{60,84},{60,0},{-28,0}},color={0,0,127})); + connect(antWinErr.u2,lim.y) + annotation (Line(points={{158,54},{150,54},{150,90},{142,90}}, color={0,0,127})); + connect(I.u,errI2.y) + annotation (Line(points={{-52,0},{-78,0}},color={0,0,127})); + connect(errI1.y,errI2.u1) + annotation (Line(points={{-118,6},{-102,6}}, + color={0,0,127})); + connect(cheYMinMax.y,assMesYMinMax.u) + annotation (Line(points={{142,-150},{158,-150}},color={255,0,255})); + connect(Izero.y,addPID.u2) + annotation (Line(points={{-28,30},{60,30},{60,84},{78,84}}, + color={0,0,127})); + connect(con.y,I.y_reset_in) + annotation (Line(points={{-78,-40},{-60,-40},{-60,-8},{-52,-8}},color={0,0,127})); + connect(con1.y,I.trigger) + annotation (Line(points={{-78,-80},{-40,-80},{-40,-12}},color={255,0,255})); + connect(uS_revAct.y,errP.u1) + annotation (Line(points={{-178,40},{-170,40},{-170,146},{-142,146}},color={0,0,127})); + connect(errD.u1,uS_revAct.y) + annotation (Line(points={{-142,76},{-170,76},{-170,40},{-178,40}},color={0,0,127})); + connect(addPD.u1, P.y) + annotation (Line(points={{18,140},{-28,140}}, color={0,0,127})); + connect(P.u, errP.y) + annotation (Line(points={{-52,140},{-118,140}},color={0,0,127})); + connect(addPID.y, lim.u) + annotation (Line(points={{102,90},{118,90}},color={0,0,127})); + connect(addPID.y, antWinErr.u1) annotation (Line(points={{102,90},{114,90},{ + 114,66},{158,66}}, + color={0,0,127})); + connect(u_s, controlError.u1) annotation (Line(points={{-240,0},{-202,0}}, + color={0,0,127})); + connect(u_m, controlError.u2) annotation (Line(points={{0,-220},{0,-160},{ + -210,-160},{-210,-12},{-202,-12}}, + color={0,0,127})); + connect(uMea_revAct.y, errP.u2) annotation (Line(points={{-178,-40},{-150,-40}, + {-150,134},{-142,134}}, color={0,0,127})); + connect(uMea_revAct.y, errD.u2) annotation (Line(points={{-178,-40},{-150,-40}, + {-150,64},{-142,64}}, color={0,0,127})); + connect(uMea_revAct.y, errI1.u2) annotation (Line(points={{-178,-40},{-150, + -40},{-150,0},{-142,0}}, color={0,0,127})); + connect(antWinGai.y, errI2.u2) annotation (Line(points={{158,-20},{-110,-20}, + {-110,-6},{-102,-6}},color={0,0,127})); + connect(kDer.y, D.k) annotation (Line(points={{-78,120},{-58,120},{-58,78},{ + -52,78}}, color={0,0,127})); + connect(TDer.y, D.T) annotation (Line(points={{-78,90},{-60,90},{-60,74},{-52, + 74}}, color={0,0,127})); + annotation ( + defaultComponentName="conPID", + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-6,-20},{66,-66}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.P), + extent={{-32,-22},{68,-62}}, + textColor={0,0,0}, + textString="P", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI), + extent={{-26,-22},{74,-62}}, + textColor={0,0,0}, + textString="PI", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD), + extent={{-16,-22},{88,-62}}, + textColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={175,175,175}, + textString="P D"), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID), + extent={{-14,-22},{86,-62}}, + textColor={0,0,0}, + textString="PID", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Polygon( + points={{-80,82},{-88,60},{-72,60},{-80,82}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-100}}, + color={192,192,192}), + Line( + points={{-90,-80},{70,-80}}, + color={192,192,192}), + Polygon( + points={{74,-80},{52,-72},{52,-88},{74,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-80,-80},{-80,-22}}, + color={0,0,0}), + Line( + points={{-80,-22},{6,56}}, + color={0,0,0}), + Line( + points={{6,56},{68,56}}, + color={0,0,0}), + Rectangle( + extent=DynamicSelect({{100,-100},{84,-100}},{{100,-100},{84,-100+(y-yMin)/(yMax-yMin)*200}}), + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), + Diagram( + coordinateSystem( + extent={{-220,-200},{220,200}}), graphics={Rectangle( + extent={{-56,180},{-24,-16}}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Text( + extent={{-52,184},{-28,156}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textColor={0,0,0}, + textString="PID")}), + Documentation( + info=" +

+PID controller in the standard form +

+

+yu = k/r   (e(t) + 1 ⁄ Ti   ∫ e(τ) dτ + Td d⁄dt e(t)), +

+

+where +yu is the control signal before output limitation, +e(t) = us(t) - um(t) is the control error, +with us being the set point and um being +the measured quantity, +k is the gain, +Ti is the time constant of the integral term, +Td is the time constant of the derivative term, +and +r is a scaling factor, with default r=1. +The scaling factor should be set to the typical order of magnitude of the range of the error e. +For example, you may set r=100 to r=1000 +if the control input is a pressure of a heating water circulation pump in units of Pascal, or +leave r=1 if the control input is a room temperature. +

+

+Note that the units of k are the inverse of the units of the control error, +while the units of Ti and Td are seconds. +

+

+The actual control output is +

+

+y = min( ymax, max( ymin, y)), +

+

+where ymin and ymax are limits for the control signal. +

+

P, PI, PD, or PID action

+

+Through the parameter controllerType, the controller can be configured +as P, PI, PD or PID controller. The default configuration is PI. +

+

Reverse or direct action

+

+Through the parameter reverseActing, the controller can be configured to +be reverse or direct acting. +The above standard form is reverse acting, which is the default configuration. +For a reverse acting controller, for a constant set point, +an increase in measurement signal u_m decreases the control output signal y +(Montgomery and McDowall, 2008). +Thus, +

+
    +
  • + for a heating coil with a two-way valve, leave reverseActing = true, but +
  • +
  • + for a cooling coil with a two-way valve, set reverseActing = false. +
  • +
+

+If reverseAction=false, then the error e above is multiplied by -1. +

+

Anti-windup compensation

+

+The controller anti-windup compensation is as follows: +Instead of the above basic control law, the implementation is +

+

+yu = k   (e(t) ⁄ r + 1 ⁄ Ti   ∫ (-Δy + e(τ) ⁄ r) dτ + Td ⁄ r d⁄dt e(t)), +

+

+where the anti-windup compensation Δy is +

+

+Δy = (yu - y) ⁄ (k Ni), +

+

+where +Ni > 0 is the time constant for the anti-windup compensation. +To accelerate the anti-windup, decrease Ni. +

+

+Note that the anti-windup term (-Δy + e(τ) ⁄ r) shows that the range of +the typical control error r should be set to a reasonable value so that +

+

+e(τ) ⁄ r = (us(τ) - um(τ)) ⁄ r +

+

+has order of magnitude one, and hence the anti-windup compensation should work well. +

+

Reset of the controller output

+

+Note that this controller implements an integrator anti-windup. Therefore, +for most applications, the controller output does not need to be reset. +However, if the controller is used in conjuction with equipment that is being +switched on, better control performance may be achieved by resetting the controller +output when the equipment is switched on. This is in particular the case in situations +where the equipment control input should continuously increase as the equipment is +switched on, such as a light dimmer that may slowly increase the luminance, or +a variable speed drive of a motor that should continuously increase the speed. In +this case, the controller + +IBPSA.Controls.OBC.CDL.Reals.PIDWithReset +that can reset the output should be used. +

+

Approximation of the derivative term

+

+The derivative of the control error d ⁄ dt e(t) is approximated using +

+

+d⁄dt x(t) = (e(t)-x(t)) Nd ⁄ Td, +

+

+and +

+

+d⁄dt e(t) ≈ Nd (e(t)-x(t)), +

+

+where x(t) is an internal state. +

+

Guidance for tuning the control gains

+

+The parameters of the controller can be manually adjusted by performing +closed loop tests (= controller + plant connected +together) and using the following strategy: +

+
    +
  1. Set very large limits, e.g., set ymax = 1000. +
  2. +
  3. +Select a P-controller and manually enlarge the parameter k +(the total gain of the controller) until the closed-loop response +cannot be improved any more. +
  4. +
  5. +Select a PI-controller and manually adjust the parameters +k and Ti (the time constant of the integrator). +The first value of Ti can be selected such that it is in the +order of the time constant of the oscillations occurring with +the P-controller. If, e.g., oscillations in the order of 100 seconds +occur in the previous step, start with Ti=1/100 seconds. +
  6. +
  7. +If you want to make the reaction of the control loop faster +(but probably less robust against disturbances and measurement noise) +select a PID-controller and manually adjust parameters +k, Ti, Td (time constant of derivative block). +
  8. +
  9. +Set the limits yMax and yMin according to your specification. +
  10. +
  11. +Perform simulations such that the output of the PID controller +goes in its limits. Tune Ni (Ni Ti is the time constant of +the anti-windup compensation) such that the input to the limiter +block (= lim.u) goes quickly enough back to its limits. +If Ni is decreased, this happens faster. If Ni is very large, the +anti-windup compensation is not effective and the controller works bad. +
  12. +
+

References

+

+R. Montgomery and R. McDowall (2008). +\"Fundamentals of HVAC Control Systems.\" +American Society of Heating Refrigerating and Air-Conditioning Engineers Inc. Atlanta, GA. +

+", + revisions=" +
    +
  • +May 20, 2022, by Michael Wetter:
    +Refactored implementation to use new derivative block from CDL package.
    +This is for +Buildings, issue 3022. +
  • +
  • +May 6, 2022, by Michael Wetter:
    +Corrected wrong documentation in how the derivative of the control error is approximated.
    +This is for +Buildings, issue 2994. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 15, 2020, by Michael Wetter:
    +Added scaling factor r, removed set point weights wp and wd. +Revised documentation.
    +This is for Buildings, issue 2182. +
  • +
  • +August 4, 2020, by Jianjun Hu:
    +Removed the conditional inputs trigger and y_rest_in. +Refactored to internally implement the derivative block.
    +This is for Buildings, issue 2056. +
  • +
  • +June 1, 2020, by Michael Wetter:
    +Corrected wrong convention of reverse and direct action.
    +This is for Buildings, issue 1365. +
  • +
  • +April 23, 2020, by Michael Wetter:
    +Changed default parameters for limits yMax from unspecified to 1 +and yMin from -yMax to 0.
    +This is for +Buildings, issue 1888. +
  • +
  • +April 7, 2020, by Michael Wetter:
    +Reimplemented block using only CDL constructs. +This refactoring removes the no longer use parameters xd_start that was +used to initialize the state of the derivative term. This state is now initialized +based on the requested initial output yd_start which is a new parameter +with a default of 0. +Also, removed the parameters y_start and initType because +the initial output of the controller can be set by using xi_start +and yd_start. +This is a non-backward compatible change, made to simplify the controller through +the removal of options that can be realized differently and are hardly ever used. +This refactoring also removes the parameter strict that +was used in the output limiter. The new implementation enforces a strict check by default.
    +This is for +Buildings, issue 1878. +
  • +
  • +March 9, 2020, by Michael Wetter:
    +Corrected unit declaration for gain k.
    +See Buildings, issue 1821. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +February 25, 2020, by Michael Wetter:
    +Changed icon to display the output value. +
  • +
  • +October 19, 2019, by Michael Wetter:
    +Disabled homotopy to ensure bounded outputs +by copying the implementation from MSL 3.2.3 and by +hardcoding the implementation for homotopyType=NoHomotopy.
    +See Buildings, issue 1221. +
  • +
  • +November 13, 2017, by Michael Wetter:
    +Changed default controller type from PID to PI. +
  • +
  • +November 6, 2017, by Michael Wetter:
    +Explicitly declared types and used integrator with reset from CDL. +
  • +
  • +October 22, 2017, by Michael Wetter:
    +Added to CDL to have a PI controller with integrator reset. +
  • +
  • +September 29, 2016, by Michael Wetter:
    +Refactored model. +
  • +
  • +August 25, 2016, by Michael Wetter:
    +Removed parameter limitsAtInit because it was only propagated to +the instance limiter, but this block no longer makes use of this parameter. +This is a non-backward compatible change.
    +Revised implemenentation, added comments, made some parameter in the instances final. +
  • +
  • July 18, 2016, by Philipp Mehrfeld:
    +Added integrator reset. +This is for Buildings, issue 494. +
  • +
  • +March 15, 2016, by Michael Wetter:
    +Changed the default value to strict=true in order to avoid events +when the controller saturates. +This is for Buildings, issue 433. +
  • +
  • +February 24, 2010, by Michael Wetter:
    +First implementation. +
  • +
+")); +end PID; diff --git a/IBPSA/Controls/OBC/CDL/Reals/PIDWithReset.mo b/IBPSA/Controls/OBC/CDL/Reals/PIDWithReset.mo new file mode 100644 index 0000000000..9c2f75b7c0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/PIDWithReset.mo @@ -0,0 +1,616 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block PIDWithReset + "P, PI, PD, and PID controller with output reset" + parameter IBPSA.Controls.OBC.CDL.Types.SimpleController controllerType = + IBPSA.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller"; + parameter Real k(min=100*Constants.eps)=1 + "Gain of controller" + annotation (Dialog(group="Control gains")); + parameter Real Ti( + final quantity="Time", + final unit="s", + min=100*Constants.eps)=0.5 + "Time constant of integrator block" + annotation (Dialog(group="Control gains",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real Td( + final quantity="Time", + final unit="s", + min=100*Constants.eps)=0.1 + "Time constant of derivative block" + annotation (Dialog(group="Control gains",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Real r(min=100*Constants.eps)=1 + "Typical range of control error, used for scaling the control error"; + parameter Real yMax=1 + "Upper limit of output" + annotation (Dialog(group="Limits")); + parameter Real yMin=0 + "Lower limit of output" + annotation (Dialog(group="Limits")); + parameter Real Ni( + min=100*Constants.eps)=0.9 + "Ni*Ti is time constant of anti-windup compensation" + annotation (Dialog(tab="Advanced",group="Integrator anti-windup",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real Nd( + min=100*Constants.eps)=10 + "The higher Nd, the more ideal the derivative block" + annotation (Dialog(tab="Advanced",group="Derivative block",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Real xi_start=0 + "Initial value of integrator state" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real yd_start=0 + "Initial value of derivative output" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Boolean reverseActing=true + "Set to true for reverse acting, or false for direct acting control action"; + parameter Real y_reset=xi_start + "Value to which the controller output is reset if the boolean trigger has a rising edge" + annotation (Dialog(enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID,group="Integrator reset")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_s + "Connector of setpoint input signal" + annotation (Placement(transformation(extent={{-260,-20},{-220,20}}),iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_m + "Connector of measurement input signal" + annotation (Placement(transformation(origin={0,-220},extent={{20,-20},{-20,20}},rotation=270),iconTransformation(extent={{20,-20},{-20,20}},rotation=270,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{220,-20},{260,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Resets the controller output when trigger becomes true" + annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={-160,-220}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={-60,-120}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract controlError + "Control error (set point - measurement)" + annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter P(final k=k) + "Proportional action" + annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset I( + final k=k/Ti, + final y_start=xi_start) if with_I + "Integral term" + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Derivative D( + final y_start=yd_start) if with_D + "Derivative term" + annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errP + "P error" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errD if with_D + "D error" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI1 if with_I + "I error (before anti-windup compensation)" + annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI2 if with_I + "I error (after anti-windup compensation)" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Limiter lim( + final uMax=yMax, + final uMin=yMin) + "Limiter" + annotation (Placement(transformation(extent={{120,80},{140,100}}))); +protected + final parameter Real revAct= if reverseActing then 1 else -1 + "Switch for sign for reverse or direct acting controller"; + final parameter Boolean with_I = + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI or + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable integral action" + annotation (Evaluate=true,HideResult=true); + final parameter Boolean with_D = + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD or + controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable derivative action" + annotation (Evaluate=true,HideResult=true); + Sources.Constant kDer(k=k*Td) if with_D + "Gain for derivative block" + annotation (Placement(transformation(extent={{-100,110},{-80,130}}))); + Sources.Constant TDer(k=Td/Nd) if with_D + "Time constant for approximation in derivative block" + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Dzero( + final k=0) if not with_D + "Zero input signal" + annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, + {-30,110}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Izero( + final k=0) if not with_I + "Zero input signal" + annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( + final k=revAct/r) + "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( + final k=revAct/r) + "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPD + "Outputs P and D gains added" + annotation (Placement(transformation(extent={{20,124},{40,144}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPID + "Outputs P, I and D gains added" + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I + "Error for anti-windup compensation" + annotation (Placement(transformation(extent={{160,50},{180,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai( + k=1/(k*Ni)) if with_I + "Gain for anti-windup compensation" + annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant yResSig( + final k=y_reset) if with_I + "Signal for y_reset" + annotation (Placement(transformation(extent={{-140,-84},{-120,-64}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract addRes if with_I + "Adder for integrator reset" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( + final k=yMin < yMax) + "Check for values of yMin and yMax" + annotation (Placement(transformation(extent={{120,-160},{140,-140}}))); + IBPSA.Controls.OBC.CDL.Utilities.Assert assMesYMinMax( + message="LimPID: Limits must be yMin < yMax") + "Assertion on yMin and yMax" + annotation (Placement(transformation(extent={{160,-160},{180,-140}}))); + +equation + connect(trigger,I.trigger) + annotation (Line(points={{-160,-220},{-160,-140},{-40,-140},{-40,-12}},color={255,0,255})); + connect(u_s,uS_revAct.u) + annotation (Line(points={{-240,0},{-210,0},{-210,40},{-202,40}},color={0,0,127})); + connect(u_m,uMea_revAct.u) + annotation (Line(points={{0,-220},{0,-160},{-210,-160},{-210,-40},{-202,-40}},color={0,0,127})); + connect(errD.u2,uMea_revAct.y) + annotation (Line(points={{-142,64},{-150,64},{-150,-40},{-178,-40}}, color={0,0,127})); + connect(D.u,errD.y) + annotation (Line(points={{-52,70},{-118,70}}, color={0,0,127})); + connect(errI1.u1,uS_revAct.y) + annotation (Line(points={{-142,12},{-170,12},{-170,40},{-178,40}}, + color={0,0,127})); + connect(addPID.u1,addPD.y) + annotation (Line(points={{78,96},{50,96},{50,134},{42,134}},color={0,0,127})); + connect(lim.y,y) + annotation (Line(points={{142,90},{200,90},{200,0},{240,0}},color={0,0,127})); + connect(antWinErr.y,antWinGai.u) + annotation (Line(points={{182,60},{190,60},{190,-20},{182,-20}},color={0,0,127})); + connect(addPD.u2,Dzero.y) + annotation (Line(points={{18,128},{-10,128},{-10,100},{-28,100}}, + color={0,0,127})); + connect(D.y,addPD.u2) + annotation (Line(points={{-28,70},{-10,70},{-10,128},{18,128}},color={0,0,127})); + connect(addPID.u2,I.y) + annotation (Line(points={{78,84},{60,84},{60,0},{-28,0}},color={0,0,127})); + connect(addRes.y,I.y_reset_in) + annotation (Line(points={{-78,-80},{-60,-80},{-60,-8},{-52,-8}},color={0,0,127})); + connect(antWinErr.u2,lim.y) + annotation (Line(points={{158,54},{150,54},{150,90},{142,90}}, color={0,0,127})); + connect(I.u,errI2.y) + annotation (Line(points={{-52,0},{-78,0}},color={0,0,127})); + connect(errI1.y,errI2.u1) + annotation (Line(points={{-118,6},{-102,6}}, color={0,0,127})); + connect(controlError.u1,u_s) + annotation (Line(points={{-202,0},{-240,0}}, color={0,0,127})); + connect(cheYMinMax.y,assMesYMinMax.u) + annotation (Line(points={{142,-150},{158,-150}},color={255,0,255})); + connect(Izero.y,addPID.u2) + annotation (Line(points={{-28,30},{60,30},{60,84},{78,84}}, + color={0,0,127})); + connect(errP.u1,uS_revAct.y) + annotation (Line(points={{-142,146},{-170,146},{-170,40},{-178,40}},color={0,0,127})); + connect(errD.u1,uS_revAct.y) + annotation (Line(points={{-142,76},{-170,76},{-170,40},{-178,40}},color={0,0,127})); + connect(addPD.u1, P.y) + annotation (Line(points={{18,140},{-28,140}}, color={0,0,127})); + connect(P.u, errP.y) + annotation (Line(points={{-52,140},{-118,140}},color={0,0,127})); + connect(addPID.y, lim.u) + annotation (Line(points={{102,90},{118,90}},color={0,0,127})); + connect(addPID.y, antWinErr.u1) annotation (Line(points={{102,90},{114,90},{ + 114,66},{158,66}}, color={0,0,127})); + connect(addRes.u1, yResSig.y) + annotation (Line(points={{-102,-74},{-118,-74}}, color={0,0,127})); + connect(u_m, controlError.u2) annotation (Line(points={{0,-220},{0,-160},{ + -210,-160},{-210,-12},{-202,-12}}, + color={0,0,127})); + connect(uMea_revAct.y, errP.u2) annotation (Line(points={{-178,-40},{-150,-40}, + {-150,134},{-142,134}}, color={0,0,127})); + connect(uMea_revAct.y, errI1.u2) annotation (Line(points={{-178,-40},{-150, + -40},{-150,0},{-142,0}}, + color={0,0,127})); + connect(antWinGai.y, errI2.u2) annotation (Line(points={{158,-20},{-110,-20}, + {-110,-6},{-102,-6}}, + color={0,0,127})); + connect(addPD.y, addRes.u2) annotation (Line(points={{42,134},{50,134},{50, + -100},{-110,-100},{-110,-86},{-102,-86}}, + color={0,0,127})); + connect(kDer.y, D.k) annotation (Line(points={{-78,120},{-58,120},{-58,78},{ + -52,78}}, color={0,0,127})); + connect(TDer.y, D.T) annotation (Line(points={{-78,90},{-60,90},{-60,74},{-52, + 74}}, color={0,0,127})); + + annotation ( + defaultComponentName="conPID", + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-6,-20},{66,-66}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.P), + extent={{-32,-22},{68,-62}}, + textColor={0,0,0}, + textString="P", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI), + extent={{-26,-22},{74,-62}}, + textColor={0,0,0}, + textString="PI", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD), + extent={{-16,-22},{88,-62}}, + textColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={175,175,175}, + textString="P D"), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID), + extent={{-14,-22},{86,-62}}, + textColor={0,0,0}, + textString="PID", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Polygon( + points={{-80,82},{-88,60},{-72,60},{-80,82}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-100}}, + color={192,192,192}), + Line( + points={{-90,-80},{70,-80}}, + color={192,192,192}), + Polygon( + points={{74,-80},{52,-72},{52,-88},{74,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-80,-80},{-80,-22}}, + color={0,0,0}), + Line( + points={{-80,-22},{6,56}}, + color={0,0,0}), + Line( + points={{6,56},{68,56}}, + color={0,0,0}), + Rectangle( + extent=DynamicSelect({{100,-100},{84,-100}},{{100,-100},{84,-100+(y-yMin)/(yMax-yMin)*200}}), + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), + Diagram( + coordinateSystem( + extent={{-220,-200},{220,200}}), graphics={Rectangle( + extent={{-56,180},{-24,-16}}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Text( + extent={{-52,184},{-28,156}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textColor={0,0,0}, + textString="PID")}), + Documentation( + info=" +

+PID controller in the standard form +

+

+yu = k/r   (e(t) + 1 ⁄ Ti   ∫ e(τ) dτ + Td d⁄dt e(t)), +

+

+with output reset, +where +yu is the control signal before output limitation, +e(t) = us(t) - um(t) is the control error, +with us being the set point and um being +the measured quantity, +k is the gain, +Ti is the time constant of the integral term, +Td is the time constant of the derivative term, +and +r is a scaling factor, with default r=1. +The scaling factor should be set to the typical order of magnitude of the range of the error e. +For example, you may set r=100 to r=1000 +if the control input is a pressure of a heating water circulation pump in units of Pascal, or +leave r=1 if the control input is a room temperature. +

+

+Note that the units of k are the inverse of the units of the control error, +while the units of Ti and Td are seconds. +

+

+The actual control output is +

+

+y = min( ymax, max( ymin, y)), +

+

+where ymin and ymax are limits for the control signal. +

+

P, PI, PD, or PID action

+

+Through the parameter controllerType, the controller can be configured +as P, PI, PD or PID controller. The default configuration is PI. +

+

Reverse or direct action

+

+Through the parameter reverseActing, the controller can be configured to +be reverse or direct acting. +The above standard form is reverse acting, which is the default configuration. +For a reverse acting controller, for a constant set point, +an increase in measurement signal u_m decreases the control output signal y +(Montgomery and McDowall, 2008). +Thus, +

+
    +
  • + for a heating coil with a two-way valve, leave reverseActing = true, but +
  • +
  • + for a cooling coil with a two-way valve, set reverseActing = false. +
  • +
+

+If reverseAction=false, then the error e above is multiplied by -1. +

+

Anti-windup compensation

+

+The controller anti-windup compensation is as follows: +Instead of the above basic control law, the implementation is +

+

+yu = k   (e(t) ⁄ r + 1 ⁄ Ti   ∫ (-Δy + e(τ) ⁄ r) dτ + Td ⁄ r d⁄dt e(t)), +

+

+where the anti-windup compensation Δy is +

+

+Δy = (yu - y) ⁄ (k Ni), +

+

+where +Ni > 0 is the time constant for the anti-windup compensation. +To accelerate the anti-windup, decrease Ni. +

+

+Note that the anti-windup term (-Δy + e(τ) ⁄ r) shows that the range of +the typical control error r should be set to a reasonable value so that +

+

+e(τ) ⁄ r = (us(τ) - um(τ)) ⁄ r +

+

+has order of magnitude one, and hence the anti-windup compensation should work well. +

+

Reset of the controller output

+

+Whenever the value of boolean input signal trigger changes from +false to true, the controller output is reset by setting +y to the value of the parameter y_reset. +

+

Approximation of the derivative term

+

+The derivative of the control error d ⁄ dt e(t) is approximated using +

+

+d⁄dt x(t) = (e(t)-x(t)) Nd ⁄ Td, +

+

+and +

+

+d⁄dt e(t) ≈ Nd (e(t)-x(t)), +

+

+where x(t) is an internal state. +

+

Guidance for tuning the control gains

+

+The parameters of the controller can be manually adjusted by performing +closed loop tests (= controller + plant connected +together) and using the following strategy: +

+
    +
  1. Set very large limits, e.g., set ymax = 1000. +
  2. +
  3. +Select a P-controller and manually enlarge the parameter k +(the total gain of the controller) until the closed-loop response +cannot be improved any more. +
  4. +
  5. +Select a PI-controller and manually adjust the parameters +k and Ti (the time constant of the integrator). +The first value of Ti can be selected such that it is in the +order of the time constant of the oscillations occurring with +the P-controller. If, e.g., oscillations in the order of 100 seconds +occur in the previous step, start with Ti=1/100 seconds. +
  6. +
  7. +If you want to make the reaction of the control loop faster +(but probably less robust against disturbances and measurement noise) +select a PID-controller and manually adjust parameters +k, Ti, Td (time constant of derivative block). +
  8. +
  9. +Set the limits yMax and yMin according to your specification. +
  10. +
  11. +Perform simulations such that the output of the PID controller +goes in its limits. Tune Ni (Ni Ti is the time constant of +the anti-windup compensation) such that the input to the limiter +block (= lim.u) goes quickly enough back to its limits. +If Ni is decreased, this happens faster. If Ni is very large, the +anti-windup compensation is not effective and the controller works bad. +
  12. +
+

References

+

+R. Montgomery and R. McDowall (2008). +\"Fundamentals of HVAC Control Systems.\" +American Society of Heating Refrigerating and Air-Conditioning Engineers Inc. Atlanta, GA. +

+", + revisions=" +
    +
  • +May 20, 2022, by Michael Wetter:
    +Refactored implementation to use new derivative block from CDL package.
    +This is for +Buildings, issue 3022. +
  • +
  • +May 6, 2022, by Michael Wetter:
    +Corrected wrong documentation in how the derivative of the control error is approximated.
    +This is for +Buildings, issue 2994. +
  • +
  • +April 30, 2021, by Michael Wetter:
    +Corrected error in non-released development version +when reset trigger is true.
    +Refactored implementation to have separate blocks that show the P, I and D contribution, +each with the control gain applied.
    +This is for +Buildings, issue 2475. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 15, 2020, by Michael Wetter:
    +Added scaling factor r, removed set point weights wp and wd. +Revised documentation.
    +This is for Buildings, issue 2182. +
  • +
  • +August 4, 2020, by Jianjun Hu:
    +Removed the input y_reset_in. +Refactored to internally implement the derivative block.
    +This is for Buildings, issue 2056. +
  • +
  • +June 1, 2020, by Michael Wetter:
    +Corrected wrong convention of reverse and direct action.
    +This is for Buildings, issue 1365. +
  • +
  • +April 23, 2020, by Michael Wetter:
    +Changed default parameters for limits yMax from unspecified to 1 +and yMin from -yMax to 0.
    +This is for +Buildings, issue 1888. +
  • +
  • +April 7, 2020, by Michael Wetter:
    +Reimplemented block using only CDL constructs. +This refactoring removes the no longer use parameters xd_start that was +used to initialize the state of the derivative term. This state is now initialized +based on the requested initial output yd_start which is a new parameter +with a default of 0. +Also, removed the parameters y_start and initType because +the initial output of the controller can be set by using xi_start +and yd_start. +This is a non-backward compatible change, made to simplify the controller through +the removal of options that can be realized differently and are hardly ever used. +This refactoring also removes the parameter strict that +was used in the output limiter. The new implementation enforces a strict check by default.
    +This is for +Buildings, issue 1878. +
  • +
  • +March 9, 2020, by Michael Wetter:
    +Corrected unit declaration for gain k.
    +See Buildings, issue 1821. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +February 25, 2020, by Michael Wetter:
    +Changed icon to display the output value. +
  • +
  • +October 19, 2019, by Michael Wetter:
    +Disabled homotopy to ensure bounded outputs +by copying the implementation from MSL 3.2.3 and by +hardcoding the implementation for homotopyType=NoHomotopy.
    +See Buildings, issue 1221. +
  • +
  • +November 13, 2017, by Michael Wetter:
    +Changed default controller type from PID to PI. +
  • +
  • +November 6, 2017, by Michael Wetter:
    +Explicitly declared types and used integrator with reset from CDL. +
  • +
  • +October 22, 2017, by Michael Wetter:
    +Added to CDL to have a PI controller with integrator reset. +
  • +
  • +September 29, 2016, by Michael Wetter:
    +Refactored model. +
  • +
  • +August 25, 2016, by Michael Wetter:
    +Removed parameter limitsAtInit because it was only propagated to +the instance limiter, but this block no longer makes use of this parameter. +This is a non-backward compatible change.
    +Revised implemenentation, added comments, made some parameter in the instances final. +
  • +
  • July 18, 2016, by Philipp Mehrfeld:
    +Added integrator reset. +This is for Buildings, issue 494. +
  • +
  • +March 15, 2016, by Michael Wetter:
    +Changed the default value to strict=true in order to avoid events +when the controller saturates. +This is for Buildings, issue 433. +
  • +
  • +February 24, 2010, by Michael Wetter:
    +First implementation. +
  • +
+")); +end PIDWithReset; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo b/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo new file mode 100644 index 0000000000..4a4b072e84 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo @@ -0,0 +1,144 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Ramp "Limit the changing rate of the input" + + parameter Real raisingSlewRate( + min=Constants.small, + unit="1/s") + "Maximum speed with which to increase the output"; + parameter Real fallingSlewRate( + max=-Constants.small, + unit="1/s")=-raisingSlewRate + "Maximum speed with which to decrease the output"; + parameter Real Td( + final quantity="Time", + final unit="s", + min=Constants.eps)=raisingSlewRate*0.001 + "Derivative time constant"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input that is being rate limited" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput active + "Set to true to enable rate limiter" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Rate limited output if active is true, else output is equal to input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Real thr=(u-y)/Td + "Approximation to derivative between input and output"; + Real y_internal + "Internal variable to track the slew limited value"; + +initial equation + assert(raisingSlewRate > 0, + "raisingSlewRate must be larger than zero."); + assert(fallingSlewRate < 0, + "fallingSlewRate must be less than zero."); + y_internal = u; + +equation + when active then + reinit(y_internal, u); + end when; + der(y_internal)=smooth(1, + noEvent( + if thr < fallingSlewRate then + fallingSlewRate + else + if thr > raisingSlewRate then raisingSlewRate else thr + ) + ); + y = if active then y_internal else u; + +annotation (defaultComponentName="ram", + Icon(coordinateSystem(preserveAspectRatio=false), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name"), + Line( + points={{-90,-80},{82,-80}}, + color={192,192,192}), + Polygon( + points={{90,-80},{68,-72},{68,-88},{90,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,58},{-80,-90}}, + color={192,192,192}), + Polygon( + points={{-80,80},{-88,58},{-72,58},{-80,80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line(points={{-80,-44},{-60,20},{-44,26},{40,8},{40,-4}}, + color={0,0,127}), + Line(points={{-80,-80},{-60,-80},{-60,-50},{40,-50},{40,-80},{58,-80}}, + color={254,0,254}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3))), + Line(points={{40,-4},{58,-28},{76,28}}, + color={0,0,127})}), + Diagram(coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Block that limits the rate of change of the input u by a ramp +if the boolean input active is true, +otherwise the block outputs y = u. +

+

+This block computes a threshold for the rate of change between +input u and output y as +thr = (u-y)/Td, where Td > 0 is a parameter. +The output y is computed as follows: +

    +
  • +If thr < fallingSlewRate, then dy/dt = fallingSlewRate, +
  • +
  • +if thr > raisingSlewRate, then dy/dt = raisingSlewRate, +
  • +
  • +otherwise, dy/dt = thr. +
  • +
+

+A smaller time constant Td > 0 means a higher accuracy for the derivative approximation. +

+

+Note that when the input activate switches to false, +the output y can have a discontinuity. +

+

Implementation

+

+For the block to work with arbitrary inputs and in order to produce a differentiable output, +the input is numerically differentiated with derivative time constant Td. +

+", +revisions=" +
    +
  • +February 15, 2024, by Michael Wetter:
    +Updated documentation. +
  • +
  • +November 16, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end Ramp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Round.mo b/IBPSA/Controls/OBC/CDL/Reals/Round.mo new file mode 100644 index 0000000000..740af8d4b8 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Round.mo @@ -0,0 +1,92 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Round + "Round real number to given digits" + parameter Integer n + "Number of digits to be round to"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to be rounded" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with rounded input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Real fac=10^n + "Factor used for rounding"; + +equation + y=if (u > 0) then + floor( u*fac+0.5)/fac + else + ceil(u*fac-0.5)/fac; + annotation ( + defaultComponentName="rou", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,127}, + extent={{-56,4},{72,106}}, + textString="round( )"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + textColor={0,0,127}, + extent={{-60,-88},{54,-34}}, + textString="%n"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs the input after rounding it to n digits. +

+

+For example, +

+
    +
  • +set n = 0 to round to the nearest integer, +
  • +
  • +set n = 1 to round to the next decimal point, and +
  • +
  • +set n = -1 to round to the next multiple of ten. +
  • +
+

+Hence, the block outputs +

+
+    y = floor(u*(10^n) + 0.5)/(10^n)  for  u > 0,
+    y = ceil(u*(10^n) - 0.5)/(10^n)   for  u < 0.
+
+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Round; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sin.mo b/IBPSA/Controls/OBC/CDL/Reals/Sin.mo new file mode 100644 index 0000000000..0433e205be --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sin.mo @@ -0,0 +1,97 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Sin "Output the sine of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u( + final unit="rad", + displayUnit="deg") + "Input for the sine function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sine of input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.sin(u); + annotation ( + defaultComponentName="sin", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-80,68}}, + color={192,192,192}), + Line( + points={{-90,0},{68,0}}, + color={192,192,192}), + Line( + points={{-80,0},{-68.7,34.2},{-61.5,53.1},{-55.1,66.4},{-49.4,74.6},{-43.8,79.1},{-38.2,79.8},{-32.6,76.6},{-26.9,69.7},{-21.3,59.4},{-14.9,44.1},{-6.83,21.2},{10.1,-30.8},{17.3,-50.2},{23.7,-64.2},{29.3,-73.1},{35,-78.4},{40.6,-80},{46.2,-77.6},{51.9,-71.5},{57.5,-61.9},{63.9,-47.2},{72,-24.8},{80,0}}, + smooth=Smooth.Bezier), + Polygon( + points={{90,0},{68,8},{68,-8},{90,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{12,84},{84,36}}, + textColor={192,192,192}, + textString="sin"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = sin(u), +where +u is an input. +

+ +

+\"sin.png\" +

+ +", + revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the input.
    +This is for +Buildings, issue 3277. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Sin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sort.mo b/IBPSA/Controls/OBC/CDL/Reals/Sort.mo new file mode 100644 index 0000000000..2eb5357cb2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sort.mo @@ -0,0 +1,102 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Sort + "Sort elements of input vector in ascending or descending order" + parameter Integer nin( + final min=0)=0 + "Number of input signals" + annotation (Dialog(connectorSizing=true),HideResult=true); + parameter Boolean ascending=true + "Set to true if ascending order, otherwise order is descending"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input to be sorted" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nin] + "Output with sorted input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput yIdx[nin] + "Indices of the sorted vector with respect to the original vector" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}), + iconTransformation(extent={{100,-80},{140,-40}}))); +equation + (y, yIdx)=Modelica.Math.Vectors.sort(u, ascending=ascending); + + annotation ( + defaultComponentName="sort", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{-58,70},{54,-60}}, + textColor={0,0,89}, + textString="sort")}), + Documentation( + info=" +

+Block that sorts the elements of the input signal u. +If the parameter ascending = true, then the output signal y satisfies +yi <= yi+1 for all i ∈ {1, ..., n-1}. +Otherwise, it satisfies +yi >= yi+1 for all i ∈ {1, ..., n-1}. +The output signal yIdx contains the indices of the sorted elements, +with respect to the input vector u. +

+

Usage

+

+Note that this block shall only be used for input signals u that are +time sampled.
+Otherwise, in simulation, numerical noise from a nonlinear solver or from an +implicit time integration algorithm may cause the simulation to stall. +Numerical noise can be present if an input depends +on a state variable or a quantity that requires an iterative solution, +such as a temperature or a mass flow rate of an HVAC system.
+In real controllers, measurement noise may cause the output to change frequently. +

+

+This block may for example be used in a variable air volume flow +controller to access the position of the dampers that are most open. +

+", revisions=" +
    +
  • +April 18, 2024, by Jianjun Hu:
    +Added an output variable with the indices of the sorted elements. +This is for Buildings, issue 3809. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +September 22, 2017, by Michael Wetter:
    +Reimplemented function to make it work with OpenModelica. +
  • +
  • +September 14, 2017, by Jianjun Hu:
    +Changed model name. +
  • +
  • +January 10, 2017, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
  • +November 21, 2011, by Michael Wetter:
    +Removed assert statement. +
  • +
  • +November 25, 2008, by Michael Wetter:
    +First implementation. +
  • +
+")); +end Sort; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo new file mode 100644 index 0000000000..3916da50c9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/CalendarTime.mo @@ -0,0 +1,183 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +model CalendarTime + "Computes the unix time stamp and calendar time from the simulation time" + parameter IBPSA.Controls.OBC.CDL.Types.ZeroTime zerTim + "Enumeration for choosing how reference time (time = 0) should be defined"; + parameter Integer yearRef( + min=firstYear, + max=lastYear)=2016 + "Year when time = 0, used if zerTim=Custom" + annotation (Dialog(enable=zerTim == IBPSA.Controls.OBC.CDL.Types.ZeroTime.Custom)); + parameter Real offset( + final quantity="Time", + final unit="s")=0 + "Offset that is added to 'time', may be used for computing time in different time zone" + annotation (Dialog(tab="Advanced")); + discrete IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput year + "Year" + annotation (Placement(transformation(extent={{100,-40},{120,-20}}),iconTransformation(extent={{100,-40},{120,-20}}))); + discrete IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput month + "Month of the year" + annotation (Placement(transformation(extent={{100,-10},{120,10}}),iconTransformation(extent={{100,-10},{120,10}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput day( + fixed=false) + "Day of the month" + annotation (Placement(transformation(extent={{100,20},{120,40}}),iconTransformation(extent={{100,20},{120,40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput hour( + fixed=false) + "Hour of the day" + annotation (Placement(transformation(extent={{100,50},{120,70}}),iconTransformation(extent={{100,50},{120,70}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput minute + "Minute of the hour" + annotation (Placement(transformation(extent={{100,80},{120,100}}),iconTransformation(extent={{100,80},{120,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput weekDay( + fixed=false) + "Integer output representing week day (monday = 1, sunday = 7)" + annotation (Placement(transformation(extent={{100,-70},{120,-50}}),iconTransformation(extent={{100,-70},{120,-50}}))); + +protected + final constant Integer firstYear=2010 + "First year that is supported, i.e. the first year in timeStampsNewYear[:]"; + final constant Integer lastYear=firstYear+21 + "Last year that is supported (actual building automation system need to support a larger range)"; + IBPSA.Utilities.Time.CalendarTime calTim( + final zerTim=zerTim, + final yearRef=yearRef, + final offset=offset) + "Calendar time" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(calTim.minute,minute) + annotation (Line(points={{11,9},{55.5,9},{55.5,90},{110,90}},color={0,0,127})); + connect(calTim.hour,hour) + annotation (Line(points={{11,6.4},{60,6.4},{60,60},{110,60}},color={255,127,0})); + connect(calTim.day,day) + annotation (Line(points={{11,3.8},{64,3.8},{64,30},{110,30}},color={255,127,0})); + connect(calTim.month,month) + annotation (Line(points={{11,1.2},{80,1.2},{80,0},{110,0}},color={255,127,0})); + connect(calTim.year,year) + annotation (Line(points={{11,-1.4},{64,-1.4},{64,-30},{110,-30}},color={255,127,0})); + connect(calTim.weekDay,weekDay) + annotation (Line(points={{11,-4},{60,-4},{60,-60},{110,-60}},color={255,127,0})); + annotation ( + defaultComponentName="calTim", + Documentation( + info=" +

+Block that outputs minute, hour, day of the month, month, year and weekday. +

+

Assumption and limitations

+

+The implementation only supports date computations from year 2010 up to and including 2020. +Daylight saving and time zones are not supported. +

+

Typical use and important parameters

+

+The user must define which time and date correspond to time = 0 +using the model parameters zerTim, and, if +zerTim == CDL.Types.ZeroTime.Custom, +the parameter yearRef. +The user can choose from new year, midnight for a number of years: +2010 to 2020 and also 1970. +The latter corresponds to a unix stamp of 0. +Note that when choosing the reference time equal to 0 at 1970, +the actual simulation time must be within the 2010-2020 range. +For example, startTime = 1262304000 corresponds +to the simulation starting on the 1st of January 2010 local time +when setting zerTim = CDL.Types.ZeroTime.UnixTimeStamp. +This is within the 2010-2020 range and is therefore allowed. +

+", + revisions=" +
    +
  • +March 30, 2022, by Michael Wetter:
    +Increased value of lastYear as the underlying implementation allows +for 21 years. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +August 20, 2019, by Filip Jorissen:
    +Revised implementation such that the meaning of time is better explained +and unix time stamps are correctly defined with respect to GMT. +(see Buildings, issue 1192). +
  • +
  • +March 14, 2017, by Michael Wetter:
    +Refactored implementation. +
  • +
  • +February 23, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
  • +August 3, 2016, by Filip Jorissen:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={223,211,169}, + lineThickness=5.0, + borderPattern=BorderPattern.Raised, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Ellipse( + extent={{-94,94},{16,-16}}, + lineColor={160,160,164}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-34,92},{96,82}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Minute"), + Text( + extent={{-28,64},{96,54}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Hour"), + Text( + extent={{-38,36},{96,24}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Day"), + Text( + extent={{-50,4},{96,-6}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Month"), + Text( + extent={{-70,-24},{96,-34}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Year"), + Text( + extent={{-68,-54},{96,-66}}, + textColor={28,108,200}, + horizontalAlignment=TextAlignment.Right, + textString="Weekday"), + Line( + points={{-40,38},{-64,62}}, + thickness=0.5), + Line( + points={{-40,38},{-14,38}}, + thickness=0.5)})); +end CalendarTime; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/CivilTime.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/CivilTime.mo new file mode 100644 index 0000000000..f442b718e0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/CivilTime.mo @@ -0,0 +1,137 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block CivilTime "Civil time" + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y(final unit="s") + "Civil time" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=time; + annotation ( + defaultComponentName="civTim", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}, + grid={1,1}), + graphics={ + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + extent={{-80,80},{80,-80}}, + lineColor={160,160,164}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line( + points={{0,80},{0,60}}, + color={160,160,164}), + Line( + points={{80,0},{60,0}}, + color={160,160,164}), + Line( + points={{0,-80},{0,-60}}, + color={160,160,164}), + Line( + points={{-80,0},{-60,0}}, + color={160,160,164}), + Line( + points={{37,70},{26,50}}, + color={160,160,164}), + Line( + points={{70,38},{49,26}}, + color={160,160,164}), + Line( + points={{71,-37},{52,-27}}, + color={160,160,164}), + Line( + points={{39,-70},{29,-51}}, + color={160,160,164}), + Line( + points={{-39,-70},{-29,-52}}, + color={160,160,164}), + Line( + points={{-71,-37},{-50,-26}}, + color={160,160,164}), + Line( + points={{-71,37},{-54,28}}, + color={160,160,164}), + Line( + points={{-38,70},{-28,51}}, + color={160,160,164}), + Line( + points={{0,0},{-50,50}}, + thickness=0.5), + Line( + points={{0,0},{40,0}}, + thickness=0.5), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

Block that outputs the civil time. +

+

Implementation

+

+This block outputs the time of the model. +In the case of a building automation system, the +building automation system synchronizes time, and hence +need to assign a value for the output of this block. +Daylight saving time shall not be taken into account, +e.g, the block always outputs civil time rather than +daylight savings time. +

+

+If a simulation starts +at t=-1, then this block outputs first t=-1, +and its output is advanced at the same rate as the simulation time. +

+ +

+Note that the block has not been included in the ASHRAE Standard 231p. +However, in the future versions of the ASHRAE 231 Standard, the block should be added. +

+", + revisions=" +
    +
  • +December 12, 2023, by Jianjun Hu:
    +Renamed the block from ModelTime to CivilTime. +This is for +Buildings, issue 3596. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 14, 2017, by Michael Wetter:
    +Revised implemenation. +
  • +
  • +February 23, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
  • +January 16, 2015, by Michael Wetter:
    +Moved block from +IBPSA.Utilities.SimulationTime +to +IBPSA.Utilities.Time.ModelTime. +
  • +
  • +May 18, 2010, by Wangda Zuo:
    +First implementation. +
  • +
+")); +end CivilTime; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Constant.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Constant.mo new file mode 100644 index 0000000000..1d7ff89569 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Constant.mo @@ -0,0 +1,80 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block Constant + "Output constant signal of type Real" + parameter Real k + "Constant output value"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Constant output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=k; + annotation ( + defaultComponentName="con", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{82,-70}}, + color={192,192,192}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,0},{80,0}}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="k=%k"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs a constant signal y = k, +where k is a real-valued parameter. +

+

+\"Constant.png\" +

+", + revisions=" +
    +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 16, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Pulse.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Pulse.mo new file mode 100644 index 0000000000..b6243f85be --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Pulse.mo @@ -0,0 +1,164 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block Pulse + "Generate pulse signal of type Real" + parameter Real amplitude=1.0 + "Amplitude of pulse"; + parameter Real width( + final min=Constants.small, + final max=1, + final unit="1")=0.5 + "Width of pulse in fraction of period"; + parameter Real period( + final quantity="Time", + final unit="s", + final min=Constants.small) + "Time for one period"; + parameter Real shift( + final quantity="Time", + final unit="s")=0 + "Shift time for output"; + parameter Real offset=0.0 + "Offset of output signals"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Pulse output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + Logical.Sources.Pulse booPul( + final width=width, + final period=period, + final shift=shift) + "Boolean pulse" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Conversions.BooleanToReal booToRea( + final realTrue=offset+amplitude, + final realFalse=offset) + "Boolean to real conversion" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + +equation + connect(booPul.y,booToRea.u) + annotation (Line(points={{-18,0},{18,0}},color={255,0,255})); + connect(y,booToRea.y) + annotation (Line(points={{120,0},{42,0}},color={0,0,127})); + annotation ( + defaultComponentName="pul", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{82,-70}}, + color={192,192,192}), + Text( + extent={{-147,-152},{153,-112}}, + textColor={0,0,0}, + textString="period=%period"), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3))), + Polygon( + points={{-80,52},{-68,56},{-68,48},{-80,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{-80,52},{-4,52}}, + color={135,135,135}), + Text( + extent={{-66,80},{-8,56}}, + textColor={135,135,135}, + textString="%period"), + Polygon( + points={{-2,52},{-14,56},{-14,48},{-2,52}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Line( + points={{40,34},{72,34}}, + color={135,135,135}), + Polygon( + points={{74,34},{62,38},{62,30},{74,34}}, + fillColor={135,135,135}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Text( + extent={{38,64},{96,40}}, + textColor={135,135,135}, + textString="%shift"), + Line( + points={{79,-70},{40,-70},{40,44},{-1,44},{-1,-70},{-41,-70},{-41,44},{-80,44}}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+Block that outputs a pulse signal as shown below. +

+

+\"Pulse.png\" +

+

+The pulse signal is generated an infinite number of times, and aligned with time=shift. +

+", + revisions=" +
    +
  • +December 03, 2020, by Milica Grahovac:
    +Renamed delay parameter to shift.
    +This is for +Buildings, issue 2282. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Refactored implementation, avoided state events.
    +This is for +Buildings, issue 2170. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 16, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Ramp.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Ramp.mo new file mode 100644 index 0000000000..d112e1c718 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Ramp.mo @@ -0,0 +1,106 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block Ramp + "Generate ramp signal" + parameter Real height=1 + "Height of ramps"; + parameter Real duration( + final quantity="Time", + final unit="s", + min=Constants.small) + "Duration of ramp (= 0.0 gives a Step)"; + parameter Real offset=0 + "Offset of output signal"; + parameter Real startTime( + final quantity="Time", + final unit="s")=0 + "Output = offset for time < startTime"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Ramp output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=offset+( + if time < startTime then + 0 + else + if time < (startTime+duration) then + (time-startTime)*height/duration + else + height); + annotation ( + defaultComponentName="ram", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-70},{82,-70}}, + color={192,192,192}), + Polygon( + points={{90,-70},{68,-62},{68,-78},{90,-70}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-70},{-40,-70},{31,38}}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="duration=%duration"), + Line( + points={{31,38},{86,38}}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+The Real output y is a ramp signal: +

+ +

+\"Ramp.png\" +

+", + revisions=" +
    +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 16, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Ramp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Sin.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Sin.mo new file mode 100644 index 0000000000..e1bd26397d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Sin.mo @@ -0,0 +1,120 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block Sin + "Generate sine signal" + parameter Real amplitude=1 + "Amplitude of sine wave"; + parameter Real freqHz( + final quantity="Frequency", + final unit="Hz", + start=1) + "Frequency of sine wave"; + parameter Real phase( + final quantity="Angle", + final unit="rad", + displayUnit="deg")=0 + "Phase of sine wave"; + parameter Real offset=0 + "Offset of output signal"; + parameter Real startTime( + final quantity="Time", + final unit="s")=0 + "Output = offset for time < startTime"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Sine output signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=offset+( + if time < startTime then + 0 + else + amplitude*Modelica.Math.sin( + 2*IBPSA.Controls.OBC.CDL.Constants.pi*freqHz*(time-startTime)+phase)); + annotation ( + defaultComponentName="sin", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Text( + textColor={0,0,255}, + extent={{-148,104},{152,144}}, + textString="%name"), + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-80}}, + color={192,192,192}), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,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,0},{-68.7,34.2},{-61.5,53.1},{-55.1,66.4},{-49.4,74.6},{-43.8,79.1},{-38.2,79.8},{-32.6,76.6},{-26.9,69.7},{-21.3,59.4},{-14.9,44.1},{-6.83,21.2},{10.1,-30.8},{17.3,-50.2},{23.7,-64.2},{29.3,-73.1},{35,-78.4},{40.6,-80},{46.2,-77.6},{51.9,-71.5},{57.5,-61.9},{63.9,-47.2},{72,-24.8},{80,0}}, + smooth=Smooth.Bezier), + Text( + extent={{-147,-152},{153,-112}}, + textColor={0,0,0}, + textString="freqHz=%freqHz"), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs a sine. +

+

+\"Sin.png\"/ +

+", + revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +April 13, 2023, by Michael Wetter:
    +Renamed block from Sine to Sin +to use consistent naming with + +IBPSA.Controls.OBC.CDL.Reals.Sin.
    +This is for +Buildings, issue 3339 +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +November 06, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
+")); +end Sin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/TimeTable.mo new file mode 100644 index 0000000000..a508f401e7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/TimeTable.mo @@ -0,0 +1,328 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +block TimeTable + "Table look-up with respect to time and linear or periodic extrapolation" + parameter Real table[:,:] + "Table matrix (time = first column is time in seconds, unless timeScale <> 1)"; + parameter CDL.Types.Smoothness smoothness=CDL.Types.Smoothness.LinearSegments + "Smoothness of table interpolation"; + parameter CDL.Types.Extrapolation extrapolation=CDL.Types.Extrapolation.Periodic + "Extrapolation of data outside the definition range"; + parameter Real offset[:]=fill(0, nout) + "Offsets of output signals as a vector with length equal to number of table matrix columns less one"; + parameter Real timeScale( + final unit="1")=1 + "Time scale of first table column. Set to 3600 if time in table is in hours"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout] + "Output with tabulated values" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + final parameter Integer nout=size(table,2)-1 + "Dimension of output vector"; + parameter Real t0( + final quantity="Time", + final unit="s", + fixed=false) + "First sample time instant"; + parameter Real timeRange( + final quantity="Time", + final unit="s")=timeScale*(table[end,1]-table[1,1]) + "Range of time in table"; + final parameter Integer nT=size( + table, + 1) + "Number of time stamps"; + // CDL uses different enumerations for smoothness and for extrapolation + // than the Modelica Standard Library. Hence, we cast the CDL + // enumeration to the MSL enumaration. + Modelica.Blocks.Sources.CombiTimeTable tab( + final tableOnFile=false, + final table=table, + final columns=2:size( + tab.table, + 2), + final smoothness= + if smoothness == CDL.Types.Smoothness.LinearSegments then + Modelica.Blocks.Types.Smoothness.LinearSegments + else + Modelica.Blocks.Types.Smoothness.ConstantSegments, + final extrapolation= + if extrapolation == CDL.Types.Extrapolation.HoldLastPoint then + Modelica.Blocks.Types.Extrapolation.HoldLastPoint + elseif extrapolation == CDL.Types.Extrapolation.LastTwoPoints then + Modelica.Blocks.Types.Extrapolation.LastTwoPoints + else + Modelica.Blocks.Types.Extrapolation.Periodic, + final offset=offset, + final startTime= + if (extrapolation == Types.Extrapolation.Periodic) then t0 else 0, + final timeScale=timeScale) + "Time table" + annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); + +initial equation + // If the table has only one time stamp, then timeRange is zero. + // We can then set t0 to be equal to the start of the simulation. + t0= + if nT == 1 then + time + else + IBPSA.Utilities.Math.Functions.round( + x=integer(time/timeRange)*timeRange, + n=6); + +equation + connect(tab.y,y) + annotation (Line(points={{9,0},{120,0}},color={0,0,127})); + annotation ( + defaultComponentName="timTab", + Documentation( + info=" +

+Block that outputs values of a time table. +

+

+The block takes as a parameter a time table of a format: +

+
+table = [ 0*3600, 0;
+          6*3600, 0;
+          6*3600, 1;
+         18*3600, 1;
+         18*3600, 0;
+         24*3600, 0];
+
+

+where the first column is time in seconds, and the remaining +column(s) are the table values. +Any number of columns can be specified. +The parameter smoothness determines how the table values +are interpolated. The following settings are allowed: +

+ + + + + + + + + + + +
smoothnessDescription
CDL.Types.LinearSegmentsTable points are linearly interpolated.
CDL.Types.ConstantSegmentsTable points are not interpolated, + but the previous tabulated value is returned.
+ +

+The parameter extrapolation determines how the table +values are extrapolated. The following settings are allowed: +

+ + + + + + + + + + + + + + + +
extrapolationDescription
CDL.Types.HoldLastPointHold the first or last table point outside of the table scope.
CDL.Types.LastTwoPointsExtrapolate by using the derivative at the first or last table points + outside of the table scope.
CDL.Types.PeriodicRepeat the table scope periodically with periodicity + (max(table[:, 1]-min(table[:, 1]))*timeScale).
+ +

+If extrapolation === CDL.Types.Periodic, then the above example +would give a schedule with periodicity of one day. The simulation can start at any time, +whether it is a multiple of a day or not, and positive or negative. +

+ +

+The value of the parameter offset is added to the tabulated +values. +The parameters timeScale is used to scale the first column +of the table. For example, set timeScale = 3600 if the first +column is in hour (because in CDL, the time unit is seconds). +

+

+If the table has only one row, no interpolation is performed and +the table values of this row are just returned. +

+

+An interval boundary is defined by two identical time values +following each other. For example +

+
+   table = [0, 0;
+            1, 0;
+            1, 1;
+            2, 3;
+            3, 5;
+            3, 2;
+            4, 4;
+            5, 5];
+
+

+defines three intervalls: 0..1, 1..3, 3..5. Within an interval the defined +interpolation method is applied (so the table outputs within an interval are +continuous if smoothness = CDL.Types.LinearSegments). +

+

+Example: +

+
+  table = [0, 0;
+           1, 0;
+           1, 1;
+           2, 4;
+           3, 9;
+           4, 16];
+  smoothness = CDL.Types.LinearSegments;
+
+If, e.g., time = 1.0, the output y =  0.0 (before event), 1.0 (after event)
+    e.g., time = 1.5, the output y =  2.5,
+    e.g., time = 2.0, the output y =  4.0,
+    e.g., time = 5.0, the output y = 23.0 (i.e., extrapolation via last 2 points).
+
+

Implementation

+

+For simulation, +no time events are generated within an interval +in order that also intervals with many points do not reduce the simulation efficiency. +If the table points are largely changing, it is adviseable to force +time events by duplicating every time point (especially, if the model in which +the table is present allows the variable step integrator to make large +integrator steps). For example, if a sawtooth signal is defined with the table, +it is more reliable to define the table as: +

+
+   table = [0, 0;
+            1, 2;
+            1, 2;
+            2, 0;
+            2, 0;
+            3, 2;
+            3, 2];
+
+

+instead of +

+
+   table = [0, 0;
+            1, 2;
+            2, 0;
+            3, 2];
+
+

+because time events are then generated at every time point. +

+

+Building automation systems typically have discrete time semantics +with fixed sampling times, and no notion of superdense time (in which +a tabulated value can change without advancing time). +Therefore, to implement a table with two equal time stamps, +a CDL translator may parameterize +a table in the building automation in such a way that the step change happens +at the time indicated in the first column, whereas previous sampling times +output the tabulated value at the last transition. For example, +

+
+table = [0, 0;
+         1, 0;
+         1, 1];
+smoothness = CDL.Types.ConstantSegments;
+
+

+may be converted such that a building automation system with a sampling time +of 0.5 seconds outputs +

+
+  t = 0, 0.5, 1, ...
+  y = 0, 0  , 1, ...
+
+", + revisions=" +
    +
  • +October 21, 2021, by Michael Wetter:
    +Removed writing output value in icon (as it is an array of values). +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +October 19, 2020, by Michael Wetter:
    +Revised to call round() as a function.
    +For Buildings, issue 2170. +
  • +
  • +October 7, 2020, by Michael Wetter:
    +Revised implementation to add timeSpan. +
  • +
  • +March 13, 2020, by Michael Wetter:
    +Corrected implementation so that the table also works if the simulation +starts at a negative time.
    +This is for +Buildings, issue 1834. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 14, 2017, by Michael Wetter:
    +Refactored and simplified implementation. +
  • +
  • +February 23, 2017, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{-80.0,90.0},{-88.0,68.0},{-72.0,68.0},{-80.0,90.0}}), + Line( + points={{-80.0,68.0},{-80.0,-80.0}}, + color={192,192,192}), + Line( + points={{-90.0,-70.0},{82.0,-70.0}}, + color={192,192,192}), + Polygon( + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid, + points={{90.0,-70.0},{68.0,-62.0},{68.0,-78.0},{90.0,-70.0}}), + Rectangle( + lineColor={255,255,255}, + fillColor={255,215,136}, + fillPattern=FillPattern.Solid, + extent={{-48.0,-50.0},{2.0,70.0}}), + Line( + points={{-48.0,-50.0},{-48.0,70.0},{52.0,70.0},{52.0,-50.0},{-48.0,-50.0},{-48.0,-20.0},{52.0,-20.0},{52.0,10.0},{-48.0,10.0},{-48.0,40.0},{52.0,40.0},{52.0,70.0},{2.0,70.0},{2.0,-51.0}})})); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo new file mode 100644 index 0000000000..cfb80c267a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mo @@ -0,0 +1,48 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model CalendarTimeMonths + "Validation model for the calendar time model" + IBPSA.Controls.OBC.CDL.Reals.Sources.CalendarTime calTim( + zerTim=IBPSA.Controls.OBC.CDL.Types.ZeroTime.NY2017) + "Computes date and time assuming time=0 corresponds to new year 2017" + annotation (Placement(transformation(extent={{-20,-10},{0,10}}))); + annotation ( + experiment( + StartTime=172800, + Tolerance=1e-6, + StopTime=345600), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonths.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the use of the + +IBPSA.Controls.OBC.CDL.Reals.Sources.CalendarTime +block for a period of a couple of months. +This shorter simulation time has been selected to +store the reference results that are used in the regression tests +at a resulation that makes sense for the minute and hour outputs. +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end CalendarTimeMonths; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo new file mode 100644 index 0000000000..29b563f55f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mo @@ -0,0 +1,32 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model CalendarTimeMonthsMinus + "Validation model for the calendar time model with start time slightly below the full hour" + extends IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths; + annotation ( + experiment( + StartTime=172799, + Tolerance=1e-6, + StopTime=345599), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsMinus.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the use of the + +IBPSA.Controls.OBC.CDL.Reals.Sources.CalendarTime. +It is identical to + +IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths +except that the start and end time are different. +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+")); +end CalendarTimeMonthsMinus; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo new file mode 100644 index 0000000000..e3501a96af --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mo @@ -0,0 +1,32 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model CalendarTimeMonthsPlus + "Validation model for the calendar time model with start time slightly higher than the full hour" + extends IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths; + annotation ( + experiment( + StartTime=172801, + Tolerance=1e-6, + StopTime=345601), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CalendarTimeMonthsPlus.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the use of the + +IBPSA.Controls.OBC.CDL.Reals.Sources.CalendarTime. +It is identical to + +IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.CalendarTimeMonths +except that the start and end time are different. +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+")); +end CalendarTimeMonthsPlus; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mo new file mode 100644 index 0000000000..a37495396b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mo @@ -0,0 +1,41 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model CivilTime "Test model for the CivilTime block" + IBPSA.Controls.OBC.CDL.Reals.Sources.CivilTime civTim + "Civil time" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StartTime=-1, + Tolerance=1e-6, + StopTime=1), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/CivilTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model tests the implementation of the block that outputs the +civil time. +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end CivilTime; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo new file mode 100644 index 0000000000..ab692e8100 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mo @@ -0,0 +1,44 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model Constant + "Validate the Constant block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con( + k=2.5) + "Block output real constant value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Constant.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sources.Constant. +

+ +", + revisions=" +
    +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Constant; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo new file mode 100644 index 0000000000..45e165d61f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mo @@ -0,0 +1,47 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model Pulse + "Validation model for the Pulse block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pulse( + amplitude=2.0, + width=0.5, + offset=0.2, + period=1) + "Block that generates pulse signal of type Real" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Pulse.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse. +

+ +", + revisions=" +
    +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Pulse; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo new file mode 100644 index 0000000000..440bd89ff0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mo @@ -0,0 +1,46 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model Ramp + "Validation model for the Ramp" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + height=2, + duration=3, + offset=0.5, + startTime=1.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Ramp.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp. +

+", + revisions=" +
    +
  • +July 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Ramp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo new file mode 100644 index 0000000000..310b6032cb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mo @@ -0,0 +1,47 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model Sin + "Validation model for Sin" + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=5, + freqHz=1/60, + phase=0, + offset=10, + startTime=10) + "Sine source block" + annotation (Placement(transformation(extent={{-12,-10},{8,10}}))); + annotation ( + experiment( + StopTime=130.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/Sin.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp. +

+", + revisions=" +
    +
  • +November 06, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Sin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo new file mode 100644 index 0000000000..a1a2e1e337 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mo @@ -0,0 +1,123 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model TimeTable + "Validation model for TimeTable block" + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinHol( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments, hold first and last value" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinDer( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.LastTwoPoints, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments, extrapolate with der" + annotation (Placement(transformation(extent={{50,10},{70,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabCon( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinCon( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + table=[ + 0,0; + 6*3600,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + annotation ( + experiment( + Tolerance=1e-6, + StopTime=172800), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTable.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the TimeTable block. It takes as a parameter a time table of +the format +

+
+table = [ 0*3600, 0;
+          6*3600, 1;
+         18*3600, 0.5;
+         24*3600, 0];
+
+

+The block timTabLin applies smoothness method of linear segments +between table points, periodically repeat the table scope. +

+

+The block timTabLinHol applies smoothness method of linear segments +between table points, hold the last table points when it becomes outside of +table scope. +

+

+The block timTabLinDer applies smoothness method of linear segments +between table points, extrapolate by using the derivative at the last table +points to find points outside the table scope. +

+

+The block timTabCon applies smoothness method of constant segments +between table points, periodically repeat the table scope. +

+

+The block timTabLinCon applies smoothness method of linear segments +between table points, periodically repeat the table scope. Table points is +different so to ensure constant zero during time range of +(0*3600, 6*36000). +

+
+table = [ 0*3600, 0;
+          6*3600, 0;
+          6*3600, 1;
+         18*3600, 0.5;
+         24*3600, 0];
+
+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTable; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo new file mode 100644 index 0000000000..fa0c2d642f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mo @@ -0,0 +1,91 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources.Validation; +model TimeTableNegativeStartTime + "Validation model for TimeTable block with negative start time" + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLin( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinHol( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.HoldLastPoint, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments, hold first and last value" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinDer( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.LastTwoPoints, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments, extrapolate with der" + annotation (Placement(transformation(extent={{50,10},{70,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabCon( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[ + 0,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of constant segments" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTabLinCon( + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.LinearSegments, + table=[ + 0,0; + 6*3600,0; + 6*3600,1; + 18*3600,0.5; + 24*3600,0]) + "Time table with smoothness method of linear segments" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + annotation ( + experiment( + Tolerance=1e-6, + StartTime=-129600.0, + StopTime=172800), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Sources/Validation/TimeTableNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model validates the block + +IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable. +The model is identical to + +IBPSA.Controls.OBC.CDL.Reals.Sources.Validation.TimeTable +except that the start time is negative, and not a multiple of a full day. +", + revisions=" +

    +
  • +March 13, 2020, by Michael Wetter:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end TimeTableNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.mo new file mode 100644 index 0000000000..13e6b5a2f7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Reals.Sources; +package Validation "Collection of models that validate the continuous sources blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Reals.Sources. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.order b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.order new file mode 100644 index 0000000000..44b8c845d0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/Validation/package.order @@ -0,0 +1,10 @@ +CalendarTimeMonths +CalendarTimeMonthsMinus +CalendarTimeMonthsPlus +CivilTime +Constant +Pulse +Ramp +Sin +TimeTable +TimeTableNegativeStartTime diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/package.mo b/IBPSA/Controls/OBC/CDL/Reals/Sources/package.mo new file mode 100644 index 0000000000..0b4acd7fcd --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/package.mo @@ -0,0 +1,33 @@ +within IBPSA.Controls.OBC.CDL.Reals; +package Sources "Package with blocks that generate source signals" + annotation ( + Documentation( + info=" +

+Package with blocks that generate signals. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-70,-4.5},{0,4.5}}), + Polygon( + origin={23.3333,0.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-23.333,30.0},{46.667,0.0},{-23.333,-30.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Sources; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sources/package.order b/IBPSA/Controls/OBC/CDL/Reals/Sources/package.order new file mode 100644 index 0000000000..95a5483879 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sources/package.order @@ -0,0 +1,8 @@ +CalendarTime +CivilTime +Constant +Pulse +Ramp +Sin +TimeTable +Validation diff --git a/IBPSA/Controls/OBC/CDL/Reals/Sqrt.mo b/IBPSA/Controls/OBC/CDL/Reals/Sqrt.mo new file mode 100644 index 0000000000..bf9bb433e1 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Sqrt.mo @@ -0,0 +1,83 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Sqrt + "Output the square root of the input (input >= 0 required)" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input to square root function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with square root of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=sqrt(u); + + annotation ( + defaultComponentName="sqr", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-80},{68,-80}}, + color={192,192,192}), + Polygon( + points={{90,-80},{68,-72},{68,-88},{90,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-80},{-79.2,-68.7},{-78.4,-64},{-76.8,-57.3},{-73.6,-47.9},{-67.9,-36.1},{-59.1,-22.2},{-46.2,-6.49},{-28.5,10.7},{-4.42,30},{27.7,51.3},{69.5,74.7},{80,80}}, + smooth=Smooth.Bezier), + Polygon( + points={{-80,90},{-88,68},{-72,68},{-80,90}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-88},{-80,68}}, + color={192,192,192}), + Text( + extent={{-8,-4},{64,-52}}, + textColor={192,192,192}, + textString="sqrt"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs square root of the input y = sqrt(u), +where u is an input. The input u must be non-negative. +

+", + revisions=" +
    +
  • +February 15, 2024, by Michael Wetter:
    +Updated documentation. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +March 15, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Sqrt; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Subtract.mo b/IBPSA/Controls/OBC/CDL/Reals/Subtract.mo new file mode 100644 index 0000000000..a5e7e1c190 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Subtract.mo @@ -0,0 +1,73 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Subtract "Output the difference of the two inputs" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input with minuend" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u2 + "Input with subtrahend" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with difference" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=u1-u2; + annotation ( + defaultComponentName="sub", + Documentation( + info=" +

+Block that outputs y as the difference of the +two input signals u1 and u2, +

+
+    y = u1 - u2
+
+", +revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse( + lineColor={0,0,127}, + extent={{-50,-50},{50,50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-100,60},{-74,24},{-44,24}}, + color={0,0,127}), + Line( + points={{-100,-60},{-74,-28},{-42,-28}}, + color={0,0,127}), + Line( + points={{50,0},{100,0}}, + color={0,0,127}), + Text( + extent={{-38,-28},{38,40}}, + textString="-", + textColor={0,0,0}), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))})); +end Subtract; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Switch.mo b/IBPSA/Controls/OBC/CDL/Reals/Switch.mo new file mode 100644 index 0000000000..dfaf50be50 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Switch.mo @@ -0,0 +1,124 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Switch + "Switch between two Real signals" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u1 + "Input u1" + annotation (Placement(transformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u2 + "Boolean switch input signal, if true, y=u1, else y=u3" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u3 + "Input u3" + annotation (Placement(transformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Output with u1 if u2 is true, else u3" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=smooth(0, if u2 then u1 else u3); + annotation ( + defaultComponentName="swi", + Documentation( + info=" +

+Block that outputs one of two real input signals based on a boolean input signal. +

+

+If the input signal u2 is true, +the block outputs y = u1. +Otherwise, it outputs y = u3. +

+", + revisions=" +
    +
  • +February 27, 2023, by Michael Wetter:
    +Added smoothOrder(0, ...) as Dymola 2023x assumes y to be +smooth, and simulations can then fail if it differentiated this output. +
  • +
  • +July 17, 2020, by Jianjun Hu:
    +Changed icon to display dynamically which input signal is being outputted.
    +This is for +Buildings, issue 2033. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + fillColor={210,210,210}, + lineThickness=5.0, + fillPattern=FillPattern.Solid, + borderPattern=BorderPattern.Raised), + Line( + points={{12.0,0.0},{100.0,0.0}}, + color={0,0,127}), + Line( + points={{-100.0,0.0},{-40.0,0.0}}, + color={255,0,255}), + Line( + points={{-100.0,-80.0},{-40.0,-80.0},{-40.0,-80.0}}, + color={0,0,127}), + Line( + points={{-40.0,12.0},{-40.0,-12.0}}, + color={255,0,255}), + Line( + points={{-100.0,80.0},{-40.0,80.0}}, + color={0,0,127}), + Line( + points=DynamicSelect({{10,0},{-40,80}},{{10,0}, + if u2 then + {-40,80} + else + {-40,-80}}), + color={0,0,127}, + thickness=1.0), + Ellipse( + lineColor={0,0,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{2.0,-8.0},{18.0,8.0}}), + Ellipse( + extent={{-71,7},{-85,-7}}, + lineColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if u2 then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{-90,80},{-46,54}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {0,0,0} + else + {235,235,235}), + textString="true"), + Text( + extent={{-90,-46},{-38,-76}}, + textColor=DynamicSelect({0,0,0}, + if u2 then + {235,235,235} + else + {0,0,0}), + textString="false"), + Text( + extent={{-150,150},{150,110}}, + textColor={0,0,255}, + textString="%name")})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Tan.mo b/IBPSA/Controls/OBC/CDL/Reals/Tan.mo new file mode 100644 index 0000000000..bce583559a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Tan.mo @@ -0,0 +1,97 @@ +within IBPSA.Controls.OBC.CDL.Reals; +block Tan "Output the tangent of the input" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u( + final unit="rad", + displayUnit="deg") + "Input for the tangent function" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Tangent of the input" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=Modelica.Math.tan(u); + annotation ( + defaultComponentName="tan", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Text( + extent={{-90,72},{-18,24}}, + textColor={192,192,192}, + textString="tan"), + Line( + points={{0,-80},{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), + Polygon( + points={{90,0},{68,8},{68,-8},{90,0}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,0},{68,0}}, + color={192,192,192}), + Line( + points={{-80,-80},{-78.4,-68.4},{-76.8,-59.7},{-74.4,-50},{-71.2,-40.9},{-67.1,-33},{-60.7,-24.8},{-51.1,-17.2},{-35.8,-9.98},{-4.42,-1.07},{33.4,9.12},{49.4,16.2},{59.1,23.2},{65.5,30.6},{70.4,39.1},{73.6,47.4},{76,56.1},{77.6,63.8},{80,80}}, + smooth=Smooth.Bezier), + Text( + extent={{226,60},{106,10}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(y, + leftJustified=false, + significantDigits=3)))}), + Documentation( + info=" +

+Block that outputs y = tan(u), +where +u is an input. +

+ +

+\"tan.png\" +

+ +", + revisions=" +
    +
  • +November 8, 2024, by Michael Wetter:
    +Added final keyword to unit declaration as block is only valid for this unit.
    +Also added displayUnit keyword. +
  • +
  • +March 7, 2023, by Jianjun Hu:
    +Added unit rad to the input.
    +This is for +Buildings, issue 3277. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +Changed icon to display dynamically the output value. +
  • +
  • +January 3, 2017, by Michael Wetter:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end Tan; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Abs.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Abs.mo new file mode 100644 index 0000000000..ed7bda692b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Abs.mo @@ -0,0 +1,60 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Abs + "Validation model for the absolute block" + IBPSA.Controls.OBC.CDL.Reals.Abs abs1 + "Block that outputs the absolute value of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + height=2, + duration=1, + offset=-1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp.y,abs1.u) + annotation (Line(points={{-38,0},{-38,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Abs.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Abs. +The input varies from -1 to +1. +

+", + revisions=" + +
    +
  • +February 22, 2017, by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Abs; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Acos.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Acos.mo new file mode 100644 index 0000000000..20690cd640 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Acos.mo @@ -0,0 +1,52 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Acos "Validation model for the Acos block" + IBPSA.Controls.OBC.CDL.Reals.Acos arcCos + "Block that outputs the arc tangent of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y, arcCos.u) + annotation (Line(points={{-38,0},{-12,0},{-12,0}}, color={0,0,127})); + +annotation ( + experiment(StopTime=1.0, Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Acos.mos" "Simulate and plot"), +Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Acos. +

+

+The input u varies from -1 to +1. +

+", +revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Acos; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Add.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Add.mo new file mode 100644 index 0000000000..822bbcadeb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Add.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Add + "Validation model for the add block" + IBPSA.Controls.OBC.CDL.Reals.Add add1 + "Block that outputs the sum of the two inputs" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + height=2, + duration=1, + offset=-1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,add1.u1) + annotation (Line(points={{-38,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,add1.u2) + annotation (Line(points={{-38,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Add.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Add. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +1. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Add; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/AddParameter.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/AddParameter.mo new file mode 100644 index 0000000000..ae436a8d60 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/AddParameter.mo @@ -0,0 +1,56 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model AddParameter + "Validation model for the AddParameter block" + IBPSA.Controls.OBC.CDL.Reals.AddParameter addPar( + p=0.5) + "Block that outputs the sum of an input plus a parameter" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,addPar.u) + annotation (Line(points={{-38,0},{-38,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/AddParameter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.AddParameter. +

+

+The input u varies from -2 to +2. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end AddParameter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Asin.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Asin.mo new file mode 100644 index 0000000000..2f02e6a55f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Asin.mo @@ -0,0 +1,52 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Asin "Validation model for the Asin block" + IBPSA.Controls.OBC.CDL.Reals.Asin arcSin + "Block that outputs the arc tangent of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y, arcSin.u) + annotation (Line(points={{-38,0},{-12,0},{-12,0}}, color={0,0,127})); + +annotation ( + experiment(StopTime=1.0, Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Asin.mos" "Simulate and plot"), +Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Asin. +

+

+The input u varies from -1 to +1. +

+", +revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Asin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan.mo new file mode 100644 index 0000000000..2eb745c746 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Atan + "Validation model for the Atan block" + IBPSA.Controls.OBC.CDL.Reals.Atan atan1 + "Block that outputs the arc tangent of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,atan1.u) + annotation (Line(points={{-38,0},{-12,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Atan. +

+

+The input u varies from -2 to +2. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Atan; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan2.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan2.mo new file mode 100644 index 0000000000..be7cf20a00 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Atan2.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Atan2 + "Validation model for the Atan2 block" + IBPSA.Controls.OBC.CDL.Reals.Atan2 atan2_1 + "Block that outputs atan(u1/u2) of the inputs u1 and u2" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,atan2_1.u1) + annotation (Line(points={{-38,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,atan2_1.u2) + annotation (Line(points={{-38,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Atan2.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Atan2. +

+

+The input u1 varies from -2 to +2, +The input u2 varies from +1 to +3. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Atan2; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Average.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Average.mo new file mode 100644 index 0000000000..3aa70eaf76 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Average.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Average + "Validation model for the Average block" + IBPSA.Controls.OBC.CDL.Reals.Average avg1 + "Block that outputs the average of its two inputs" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=6) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=1.5, + height=3.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,avg1.u1) + annotation (Line(points={{-39,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,avg1.u2) + annotation (Line(points={{-39,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Average.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Average. +

+

+The input u1 varies from -2.0 to +6.0, input u2 varies from +1.5 to +4.5 +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Average; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Cos.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Cos.mo new file mode 100644 index 0000000000..50d1253aec --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Cos.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Cos + "Validation model for the Cos block" + IBPSA.Controls.OBC.CDL.Reals.Cos cos1 + "Block that outputs the cosine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.283) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,cos1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Cos.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Cos. +

+

+The input u varies from 0.0 to +6.283. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Cos; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Derivative.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Derivative.mo new file mode 100644 index 0000000000..3401139851 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Derivative.mo @@ -0,0 +1,130 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Derivative + "Test model for the derivative block" + IBPSA.Controls.OBC.CDL.Reals.Derivative der1(y_start=1) + "Derivative block with input gains" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Reals.Sources.Constant con(k=1) "Outputs 1" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + Reals.Sources.Ramp ram( + height=0.09, + duration=10, + offset=0.01, + startTime=5) "Ramp for time constant used in approximating derivative" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.CivilTime modTim + "Civil time" + annotation (Placement(transformation(extent={{-110,0},{-90,20}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes(y_start=1) + "Integration of input" + annotation (Placement(transformation(extent={{0,0},{20,20}}))); + Logical.Sources.Constant booSig(k=false) "Contant boolean signal" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Cos cos "Cosine of model time" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Derivative der2(y_start=0) + "Derivative block with input gains" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + Reals.Sources.Constant con2(k=2) "Outputs 2" + annotation (Placement(transformation(extent={{-40,-72},{-20,-52}}))); + Reals.Sources.Constant T(k=0.1) "Time constant for derivative approximation" + annotation (Placement(transformation(extent={{0,-90},{20,-70}}))); + Utilities.Assert assMes(message="Differentiated value differs more than threshold") + "Issue an error if results differ more than a threshold" + annotation (Placement(transformation(extent={{170,26},{190,46}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub + "Difference between original signal, and differentiated integral of that signal" + annotation (Placement(transformation(extent={{80,26},{100,46}}))); + IBPSA.Controls.OBC.CDL.Reals.Abs abs "Absolute difference" + annotation (Placement(transformation(extent={{110,26},{130,46}}))); + IBPSA.Controls.OBC.CDL.Reals.LessThreshold lesThr(t=0.1, h=0.01) + "Output true if difference is within expected accuracy" + annotation (Placement(transformation(extent={{140,26},{160,46}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai(final k=1) + "Dummy gain to avoid unit difference error" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); +equation + connect(con.y, der1.k) annotation (Line(points={{-58,80},{-10,80},{-10,58},{38, + 58}}, color={0,0,127})); + connect(ram.y, der1.T) annotation (Line(points={{-58,50},{-20,50},{-20,54},{38, + 54}}, color={0,0,127})); + connect(intWitRes.y, der1.u) annotation (Line(points={{22,10},{30,10},{30,50}, + {38,50}}, color={0,0,127})); + connect(booSig.y, intWitRes.trigger) + annotation (Line(points={{-18,-20},{10,-20},{10,-2}}, color={255,0,255})); + connect(intWitRes.u, cos.y) + annotation (Line(points={{-2,10},{-18,10}}, color={0,0,127})); + connect(intWitRes.y_reset_in, cos.y) annotation (Line(points={{-2,2},{-10,2},{ + -10,10},{-18,10}}, color={0,0,127})); + connect(intWitRes.y, der2.u) annotation (Line(points={{22,10},{30,10},{30,-70}, + {38,-70}}, color={0,0,127})); + connect(con2.y, der2.k) annotation (Line(points={{-18,-62},{38,-62}}, + color={0,0,127})); + connect(T.y, der2.T) annotation (Line(points={{22,-80},{34,-80},{34,-66},{38,-66}}, + color={0,0,127})); + connect(der1.y, sub.u1) annotation (Line(points={{62,50},{70,50},{70,42},{78,42}}, + color={0,0,127})); + connect(cos.y, sub.u2) annotation (Line(points={{-18,10},{-10,10},{-10,30},{78, + 30}}, color={0,0,127})); + connect(sub.y, abs.u) + annotation (Line(points={{102,36},{108,36}}, color={0,0,127})); + connect(abs.y, lesThr.u) + annotation (Line(points={{132,36},{138,36}}, color={0,0,127})); + connect(lesThr.y, assMes.u) + annotation (Line(points={{162,36},{168,36}}, color={255,0,255})); + connect(modTim.y, gai.u) + annotation (Line(points={{-88,10},{-82,10}}, color={0,0,127})); + connect(gai.y, cos.u) + annotation (Line(points={{-58,10},{-42,10}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-07), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Derivative.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Derivative. +The model integrates a time varying signal, and the differentiates this integrated signal. +Hence, the output der1.y matches the non-integrated signal intWitRes.u, +within a small approximation tolerance. +

+

+The instance der1 uses a varying input for T which controls the accuracy of +the derivative approximation. At the start of the simulation, T is small and hence +the output der1.y matches the signal intWitRes.u well. +As expected, the approximation error increases with increasing der1.T. +

+

+The instance der2 uses a gain of 2, and it initializes the output to 0. +Hence, there is a fast transient at the beginning, and afterwards the output matches der1.y = der2.y / 2. +

+", + revisions=" + +"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-120,-100},{200,100}}))); +end Derivative; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Divide.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Divide.mo new file mode 100644 index 0000000000..39e79ca46b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Divide.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Divide "Validation model for the Divide block" + IBPSA.Controls.OBC.CDL.Reals.Divide div1 + "Block that outputs first input divided by second input: u1/u2" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + height=2, + duration=1, + offset=1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,div1.u1) + annotation (Line(points={{-38,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,div1.u2) + annotation (Line(points={{-38,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Divide.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Divide. +

+

+The input u1 varies from -2 to +2, input u2 varies from +1 to +3. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Division to Divide.
    +This is for Buildings, issue 2865. +
  • +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Divide; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Exp.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Exp.mo new file mode 100644 index 0000000000..d2d001865f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Exp.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Exp + "Validation model for the Exp block" + IBPSA.Controls.OBC.CDL.Reals.Exp Exp1 + "Block that outputs the exponential (base e) of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,Exp1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Exp.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Exp. +

+

+The input u varies from 0.0 to +2. +

+", + revisions=" +
    +
  • +March 17, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Exp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Greater.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Greater.mo new file mode 100644 index 0000000000..07a5550c46 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Greater.mo @@ -0,0 +1,79 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Greater + "Validation model for the Greater block" + IBPSA.Controls.OBC.CDL.Reals.Greater gre + "Greater block, without hysteresis" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Greater greHys(h=1) + "Greater block, with hysteresis" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + height=5, + duration=10, + offset=-1.5) "Ramp source" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=3, + freqHz=1/10, + offset=-2, + startTime=1) + "Sine source" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); +equation + connect(ram1.y, gre.u2) annotation (Line(points={{-18,-30},{20,-30},{20,22},{38, + 22}}, color={0,0,127})); + connect(ram1.y, greHys.u2) annotation (Line(points={{-18,-30},{20,-30},{20,-38}, + {38,-38}}, color={0,0,127})); + connect(sin.y, gre.u1) + annotation (Line(points={{-18,30},{38,30}}, color={0,0,127})); + connect(sin.y, greHys.u1) annotation (Line(points={{-18,30},{30,30},{30,-30},{ + 38,-30}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Greater.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Greater. +The instance gre has no hysteresis, and the +instance greHys has a hysteresis. +

+", +revisions=" +
    +
  • +March 14, 2023, by Jianjun Hu:
    +Changed the greater block input to avoid near zero crossing.
    +This is for + +issue 3294. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Updated model to add a test case with hysteresis. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Greater; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo new file mode 100644 index 0000000000..2d013ed070 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mo @@ -0,0 +1,70 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model GreaterThreshold + "Validation model for the GreaterThreshold block" + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold gre(t=2) + "Greater block, without hysteresis" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greHys(t=2, h=1) + "Greater block, with hysteresis" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=8, + freqHz=1/10, + offset=-2, + startTime=1) + "Sine source" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); +equation + connect(sin.y, gre.u) + annotation (Line(points={{-18,30},{38,30}}, color={0,0,127})); + connect(sin.y, greHys.u) annotation (Line(points={{-18,30},{20,30},{20,-20},{38, + -20}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/GreaterThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold. +The instance gre has no hysteresis, and the +instance greHys has a hysteresis. +

+", + revisions=" +
    +
  • +March 14, 2023, by Jianjun Hu:
    +Changed the greater block input to avoid near zero crossing.
    +This is for + +issue 3294. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Updated model to add a test case with hysteresis. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end GreaterThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo new file mode 100644 index 0000000000..8dce075b65 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Hysteresis.mo @@ -0,0 +1,99 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Hysteresis + "Validation model for the Hysteresis block" + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hysteresis( + final uLow=0, + final uHigh=1) + "Transform Real to Boolean signal with Hysteresis" + annotation (Placement(transformation(extent={{50,30},{70,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hysteresis1( + final uLow=0, + final uHigh=1, + final pre_y_start=true) + "Transform Real to Boolean signal with Hysteresis" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hysteresis2( + final uLow=0+0.01, + final uHigh=1-0.01) + "Transform Real to Boolean signal with Hysteresis" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + +protected + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + final duration=1, + final offset=0, + final height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-74,30},{-54,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-30,30},{-10,50}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gain1( + final k=2.5) + "Block that outputs the product of a gain value with the input signal" + annotation (Placement(transformation(extent={{10,30},{30,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + final amplitude=1, + final freqHz=10) + "Sine signal" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin2( + final amplitude=1, + final freqHz=5) + "Sine signal" + annotation (Placement(transformation(extent={{-40,-50},{-20,-30}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-52,40},{-32,40}},color={0,0,127})); + connect(sin1.y,gain1.u) + annotation (Line(points={{-8,40},{8,40}},color={0,0,127})); + connect(gain1.y,hysteresis.u) + annotation (Line(points={{32,40},{48,40}},color={0,0,127})); + connect(hysteresis2.u,sin2.y) + annotation (Line(points={{18,-40},{-18,-40}},color={0,0,127})); + connect(sin.y,hysteresis1.u) + annotation (Line(points={{-18,0},{18,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Hysteresis.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Hysteresis. +

+", + revisions=" +
    +
  • +March 14, 2023, by Jianjun Hu:
    +Changed the greater block input to avoid near zero crossing.
    +This is for + +issue 3294. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Hysteresis; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo new file mode 100644 index 0000000000..335df90b42 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mo @@ -0,0 +1,101 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model IntegratorWithReset + "Test model for integrator with reset" + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intDef(final + y_start=-2) + "Integrator with default values" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1(final + y_start=-2, + final k=0.5) + "Integrator with reset" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes2( + final y_start=-5, + final k=0.5) + "Integrator with reset and y_reset = 2" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant cons( + final k=10) + "Constant as source term" + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booleanPulse( + final width=0.5, + final period=0.2) + "Boolean pulse" + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger sampleTrigger( + final period=0.2) + "Sample trigger" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + final height=-1, + final duration=1, + final offset=-2) + "Ramp as a source term" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + +equation + connect(cons.y,intWitRes1.u) + annotation (Line(points={{-38,70},{-20,70},{-20,30},{-2,30}},color={0,0,127})); + connect(cons.y,intWitRes2.u) + annotation (Line(points={{-38,70},{-20,70},{-20,-10},{-2,-10}},color={0,0,127})); + connect(sampleTrigger.y,intWitRes1.trigger) + annotation (Line(points={{-38,10},{10,10},{10,18}},color={255,0,255})); + connect(booleanPulse.y,intWitRes2.trigger) + annotation (Line(points={{-38,-70},{10,-70},{10,-22}},color={255,0,255})); + connect(ramp.y,intWitRes2.y_reset_in) + annotation (Line(points={{-38,-30},{-14,-30},{-14,-18},{-2,-18}},color={0,0,127})); + connect(cons.y,intDef.u) + annotation (Line(points={{-38,70},{-2,70}},color={0,0,127})); + connect(ramp.y,intWitRes1.y_reset_in) + annotation (Line(points={{-38,-30},{-14,-30},{-14,22},{-2,22}},color={0,0,127})); + connect(ramp.y,intDef.y_reset_in) + annotation (Line(points={{-38,-30},{-14,-30},{-14,62},{-2,62}},color={0,0,127})); + connect(sampleTrigger.y,intDef.trigger) + annotation (Line(points={{-38,10},{-26,10},{-26,52},{10,52},{10,58}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/IntegratorWithReset.mos" "Simulate and plot"), + Documentation( + info=" +

+This model tests the implementation of + +IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset +with and without reset, and with different start values +and reset values. +

+

+The integrator intWitRes1 is triggered by a sample trigger +which becomes true at t=0, while intWitRes2 is triggered +by a boolean pulse with is true at t=0. +Hence, intWitRes1 starts with y(0)=y_reset while +intWitRes2 starts with y(0)=y_start. +

+", + revisions=" +
    +
  • +March 23, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegratorWithReset; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Less.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Less.mo new file mode 100644 index 0000000000..6736c4b131 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Less.mo @@ -0,0 +1,81 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Less + "Validation model for the Less block" + IBPSA.Controls.OBC.CDL.Reals.Less les + "Less block, without hysteresis" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Less lesHys( + h=1) + "Less block, with hysteresis" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=3, + freqHz=1/10, + offset=-2, + startTime=1) + "Sine source" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + height=5, + duration=10, + offset=-2) + "Ramp source" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); +equation + connect(sin.y, les.u1) + annotation (Line(points={{-18,40},{18,40}}, color={0,0,127})); + connect(sin.y, lesHys.u1) annotation (Line(points={{-18,40},{0,40},{0,-20},{18, + -20}}, color={0,0,127})); + connect(ram1.y, les.u2) annotation (Line(points={{-18,-20},{-10,-20},{-10,32}, + {18,32}}, color={0,0,127})); + connect(ram1.y, lesHys.u2) annotation (Line(points={{-18,-20},{-10,-20},{-10,-28}, + {18,-28}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Less.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Less. +The instance les has no hysteresis, and the +instance lesHys has a hysteresis. +

+", + revisions=" +
    +
  • +March 14, 2023, by Jianjun Hu:
    +Changed the greater block input to avoid near zero crossing.
    +This is for + +issue 3294. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Updated model to add a test case with hysteresis. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Less; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo new file mode 100644 index 0000000000..6637c59322 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/LessThreshold.mo @@ -0,0 +1,70 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model LessThreshold + "Validation model for the LessThreshold block" + IBPSA.Controls.OBC.CDL.Reals.LessThreshold les(t=2) + "Less block, without hysteresis" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.LessThreshold lesHys(t=2, h=1) + "Less block, with hysteresis" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sin( + amplitude=8, + freqHz=1/10, + offset=-2, + startTime=1) + "Sine source" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); +equation + connect(sin.y, les.u) + annotation (Line(points={{-18,30},{18,30}}, color={0,0,127})); + connect(sin.y, lesHys.u) annotation (Line(points={{-18,30},{0,30},{0,-20},{18, + -20}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LessThreshold.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.LessThreshold. +The instance les has no hysteresis, and the +instance lesHys has a hysteresis. +

+", + revisions=" +
    +
  • +March 14, 2023, by Jianjun Hu:
    +Changed the greater block input to avoid near zero crossing.
    +This is for + +issue 3294. +
  • +
  • +August 5, 2020, by Michael Wetter:
    +Updated model to add a test case with hysteresis. +
  • +
  • +April 1, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end LessThreshold; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo new file mode 100644 index 0000000000..f3e253f17d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mo @@ -0,0 +1,166 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model LimitSlewRate "Validation model for the LimitSlewRate block" + IBPSA.Controls.OBC.CDL.Reals.LimitSlewRate sleRatLim( + raisingSlewRate=1/30) + "Block that limit the increase or decrease rate of input" + annotation (Placement(transformation(extent={{70,-10},{90,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + offset=0, + height=1.5, + duration=20, + startTime=10) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,100},{-60,120}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + offset=0, + height=-1.5, + startTime=60, + duration=20) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add + "Signal adder" + annotation (Placement(transformation(extent={{-40,80},{-20,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( + offset=0, + height=-1.5, + duration=30, + startTime=120+60) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( + offset=0, + height=1.5, + duration=30, + startTime=120) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( + offset=0, + height=-1.5, + startTime=240+60, + duration=40) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp6( + offset=0, + height=1.5, + startTime=240, + duration=40) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add1 + "Signal adder" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add2 + "Signal adder" + annotation (Placement(transformation(extent={{-40,-48},{-20,-28}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp7( + offset=0, + height=-1.5, + duration=50, + startTime=360+60) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-130},{-60,-110}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp8( + offset=0, + height=1.5, + duration=50, + startTime=360) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-80,-100},{-60,-80}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add3 + "Signal adder" + annotation (Placement(transformation(extent={{-40,-120},{-20,-100}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add4 + "Signal adder" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add5 + "Signal adder" + annotation (Placement(transformation(extent={{0,-80},{20,-60}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add6 + "Signal adder" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + +equation + connect(ramp1.y,add.u1) + annotation (Line(points={{-58,110},{-46,110},{-46,96},{-42,96}},color={0,0,127})); + connect(ramp2.y,add.u2) + annotation (Line(points={{-58,80},{-52,80},{-52,84},{-42,84}},color={0,0,127})); + connect(ramp4.y,add1.u1) + annotation (Line(points={{-58,50},{-50,50},{-50,36},{-42,36}},color={0,0,127})); + connect(ramp3.y,add1.u2) + annotation (Line(points={{-58,20},{-50,20},{-50,24},{-42,24}},color={0,0,127})); + connect(ramp6.y,add2.u1) + annotation (Line(points={{-58,-20},{-50,-20},{-50,-32},{-42,-32}},color={0,0,127})); + connect(ramp5.y,add2.u2) + annotation (Line(points={{-58,-50},{-50,-50},{-50,-44},{-42,-44}},color={0,0,127})); + connect(ramp8.y,add3.u1) + annotation (Line(points={{-58,-90},{-50,-90},{-50,-104},{-42,-104}},color={0,0,127})); + connect(ramp7.y,add3.u2) + annotation (Line(points={{-58,-120},{-50,-120},{-50,-116},{-42,-116}},color={0,0,127})); + connect(add.y,add4.u1) + annotation (Line(points={{-18,90},{-12,90},{-12,66},{-2,66}},color={0,0,127})); + connect(add1.y,add4.u2) + annotation (Line(points={{-18,30},{-10,30},{-10,54},{-2,54}},color={0,0,127})); + connect(add2.y,add5.u1) + annotation (Line(points={{-18,-38},{-10,-38},{-10,-64},{-2,-64}},color={0,0,127})); + connect(add3.y,add5.u2) + annotation (Line(points={{-18,-110},{-12,-110},{-12,-76},{-2,-76}},color={0,0,127})); + connect(add4.y,add6.u1) + annotation (Line(points={{22,60},{24,60},{24,6},{38,6}},color={0,0,127})); + connect(add5.y,add6.u2) + annotation (Line(points={{22,-70},{24,-70},{24,-6},{38,-6}},color={0,0,127})); + connect(sleRatLim.u,add6.y) + annotation (Line(points={{68,0},{68,0},{62,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=480, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/LimitSlewRate.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.LimitSlewRate. +

+

+The input ramp1.u varies from 0 to +1.5, +in 1 s. +

+

+The increase and decrease rate limits are [increase/incDt, -decrease/decDt] , which is [1, -1] here. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from SlewRateLimiter to LimitSlewRate.
    +This is for Buildings, issue 2865. +
  • +
  • +March 29, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Diagram( + coordinateSystem( + extent={{-100,-140},{100,140}})), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end LimitSlewRate; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Limiter.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Limiter.mo new file mode 100644 index 0000000000..a4ce6c979a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Limiter.mo @@ -0,0 +1,57 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Limiter + "Validation model for the Limiter block" + IBPSA.Controls.OBC.CDL.Reals.Limiter limiter1( + uMax=2.5, + uMin=1.2) + "Block that limit the range of a signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,limiter1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Limiter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Limiter. +

+

+The input u varies from 0.0 to +2. +

+", + revisions=" +
    +
  • +March 20, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Limiter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Line.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Line.mo new file mode 100644 index 0000000000..57be9565b4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Line.mo @@ -0,0 +1,128 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Line + "Validation model for the Line block" + IBPSA.Controls.OBC.CDL.Reals.Line line1 + "Block that out the value of the input x along a line specified by two points" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant x1( + k=1.0) + "Block that generate x1" + annotation (Placement(transformation(extent={{-60,52},{-40,72}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant f1( + k=0.5) + "Block that generate f(x1)" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant x2( + k=2.0) + "Block that generate x2" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant f2( + k=1.5) + "Block that generate f(x2)" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + offset=0, + duration=0.5, + startTime=0.25, + height=3) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Line line2( + limitAbove=true, + limitBelow=false) + "Block that out the value of the input x along a line specified by two points" + annotation (Placement(transformation(extent={{-10,-40},{10,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Line line3( + limitBelow=true, + limitAbove=false) + "Block that out the value of the input x along a line specified by two points" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + +equation + connect(ramp1.y,line1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + connect(f1.y,line1.f1) + annotation (Line(points={{-39,30},{-24,30},{-24,4},{-12,4}},color={0,0,127})); + connect(x1.y,line1.x1) + annotation (Line(points={{-39,62},{-26,62},{-26,8},{-12,8}},color={0,0,127})); + connect(x2.y,line1.x2) + annotation (Line(points={{-39,-30},{-24,-30},{-24,-4},{-12,-4}},color={0,0,127})); + connect(f2.y,line1.f2) + annotation (Line(points={{-39,-60},{-26,-60},{-26,-8},{-12,-8}},color={0,0,127})); + connect(ramp1.y,line2.u) + annotation (Line(points={{-39,0},{-36,0},{-36,-30},{-12,-30}},color={0,0,127})); + connect(f1.y,line2.f1) + annotation (Line(points={{-39,30},{-24,30},{-24,-26},{-12,-26}},color={0,0,127})); + connect(x1.y,line2.x1) + annotation (Line(points={{-39,62},{-26,62},{-26,-22},{-12,-22}},color={0,0,127})); + connect(x2.y,line2.x2) + annotation (Line(points={{-39,-30},{-24,-30},{-24,-34},{-12,-34}},color={0,0,127})); + connect(f2.y,line2.f2) + annotation (Line(points={{-39,-60},{-26,-60},{-26,-38},{-12,-38}},color={0,0,127})); + connect(ramp1.y,line3.u) + annotation (Line(points={{-39,0},{-36,0},{-36,-60},{-12,-60}},color={0,0,127})); + connect(f1.y,line3.f1) + annotation (Line(points={{-39,30},{-24,30},{-24,-56},{-12,-56}},color={0,0,127})); + connect(x1.y,line3.x1) + annotation (Line(points={{-39,62},{-26,62},{-26,-52},{-12,-52}},color={0,0,127})); + connect(x2.y,line3.x2) + annotation (Line(points={{-39,-30},{-24,-30},{-24,-64},{-12,-64}},color={0,0,127})); + connect(f2.y,line3.f2) + annotation (Line(points={{-39,-60},{-26,-60},{-26,-68},{-12,-68}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Line.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Line. +

+

+The input u varies from 0.0 to +2. +

+

+The block outputs y = a + b u, +where +u is an input +and the coefficients a and b +are determined so that the line intercepts the two input points +specified by the two points x1 and f1, +and x2 and f2. +

+

+The parameters limitBelow and limitAbove +determine whether x1 and x2 are also used +to limit the input u. +

+", + revisions=" +
    +
  • +March 25, 2018, by Michael Wetter:
    +Improved test to validate that the limits are properly used. +
  • +
  • +March 20, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Line; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Log.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Log.mo new file mode 100644 index 0000000000..52b138963a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Log.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Log + "Validation model for the Log block" + IBPSA.Controls.OBC.CDL.Reals.Log log1 + "Block that outputs the natural (base e) logarithm of the input (input > 0 required)" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=1, + height=5) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,log1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Log. +

+

+The input u varies from +1 to +6. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Log; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Log10.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Log10.mo new file mode 100644 index 0000000000..9a844dc8a0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Log10.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Log10 + "Validation model for the Log10 block" + IBPSA.Controls.OBC.CDL.Reals.Log10 log10_1 + "Block that outputs the base 10 logarithm of the input (input > 0 required)" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=1, + height=9) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,log10_1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Log10.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Log10. +

+

+The input u varies from +1 to +10. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Log10; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo new file mode 100644 index 0000000000..322ffab0a3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixGain.mo @@ -0,0 +1,84 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MatrixGain + "Validation model for the MatrixGain block" + IBPSA.Controls.OBC.CDL.Reals.MatrixGain matGai( + K=[ + 1,0; + 1,1; + 1,2]) + "Block that outputs the product of a matrix gain value with the input signal" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixGain matGai1( + K=[ + 1,2; + 3,4]) + "Block that outputs the product of a matrix gain value with the input signal" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp( + duration=1, + offset=0, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-30},{-20,-10}}))); + Reals.Sources.Ramp ramp2( + duration=1, + offset=0, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + +equation + connect(ramp2.y,matGai1.u[2]) + annotation (Line(points={{-19,-60},{0,-60},{0,-40},{18,-40}},color={0,0,127})); + connect(ramp1.y,matGai1.u[1]) + annotation (Line(points={{-19,-20},{0,-20},{0,-40},{18,-40}},color={0,0,127})); + connect(ramp.y,matGai.u[1]) + annotation (Line(points={{-19,40},{18,40}},color={0,0,127})); + connect(ramp.y,matGai.u[2]) + annotation (Line(points={{-19,40},{18,40}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixGain.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MatrixGain. +

+

+The input vector output two identical values u[1] and +u[2] that vary from 0.0 to +2. +

+", + revisions=" +
    +
  • +February 11, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MatrixGain; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo new file mode 100644 index 0000000000..43d5ad8d6f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMax.mo @@ -0,0 +1,75 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MatrixMax + "Validation model for the MatrixMax block" + Reals.Sources.Constant con[3,3]( + k={{1,2,3},{6,4,2},{3,9,6}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Reals.Sources.Constant con1[2,3]( + k={{1,4,3},{2,2,6}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Reals.Sources.Constant con2[2,3]( + k={{1,2,3},{6,4,2}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMax matMax( + rowMax=false, + nRow=3, + nCol=3) + "Matrix maximum" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMax matMax1( + nCol=3, + nRow=2) + "Matrix maximum" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMax matMax2( + nCol=3, + nRow=2) + "Matrix maximum" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + +equation + connect(con.y,matMax.u) + annotation (Line(points={{-19,60},{-2,60}},color={0,0,127})); + connect(con1.y,matMax1.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(con2.y,matMax2.u) + annotation (Line(points={{-19,-60},{-2,-60}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMax.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MatrixMax. +

+", + revisions=" +
    +
  • +May 17, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MatrixMax; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo new file mode 100644 index 0000000000..66a71fe46e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MatrixMin.mo @@ -0,0 +1,77 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MatrixMin + "Validation model for the MatrixMin block" + Reals.Sources.Constant con[3,3]( + k={{-1,-2,-3},{-6,-4,-2},{-3,-9,-6}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + Reals.Sources.Constant con1[2,3]( + k={{-1,-4,-3},{-2,-2,-6}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + Reals.Sources.Constant con2[2,3]( + k={{-1,-2,-3},{-6,-4,-2}}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMin matMin( + nRow=3, + nCol=3, + rowMin=false) + "Matrix minimum" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMin matMin1( + nCol=3, + rowMin=false, + nRow=2) + "Matrix minimum" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.MatrixMin matMin2( + nCol=3, + rowMin=true, + nRow=2) + "Matrix minimum" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); + +equation + connect(con.y,matMin.u) + annotation (Line(points={{-19,60},{-2,60}},color={0,0,127})); + connect(con1.y,matMin1.u) + annotation (Line(points={{-19,0},{-2,0}},color={0,0,127})); + connect(con2.y,matMin2.u) + annotation (Line(points={{-19,-60},{-2,-60}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MatrixMin.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MatrixMin. +

+", + revisions=" +
    +
  • +May 17, 2019, by Milica Grahovac:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MatrixMin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Max.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Max.mo new file mode 100644 index 0000000000..82660df86d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Max.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Max + "Validation model for the Max block" + IBPSA.Controls.OBC.CDL.Reals.Max max1 + "Block that pass through the largest signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,max1.u1) + annotation (Line(points={{-39,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,max1.u2) + annotation (Line(points={{-39,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Max.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Max. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +1. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Max; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Min.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Min.mo new file mode 100644 index 0000000000..7ff7169fc0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Min.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Min + "Validation model for the Min block" + IBPSA.Controls.OBC.CDL.Reals.Min min1 + "Block that pass through the smallest signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,min1.u1) + annotation (Line(points={{-39,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,min1.u2) + annotation (Line(points={{-39,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Min.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Min. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +1. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Min; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Modulo.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Modulo.mo new file mode 100644 index 0000000000..23a527bc88 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Modulo.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Modulo + "Validation model for the Modulo block" + IBPSA.Controls.OBC.CDL.Reals.Modulo mod1 + "Block that outputs the remainder of first input divided by second input (~=0)" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=6) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=1.5, + height=3.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,mod1.u1) + annotation (Line(points={{-39,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,mod1.u2) + annotation (Line(points={{-39,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Modulo.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Modulo. +

+

+The input u1 varies from -2.0 to +6.0, input u2 varies from +1.5 to +4.5 +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Modulo; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo new file mode 100644 index 0000000000..1f7d2a7f8a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage.mo @@ -0,0 +1,113 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MovingAverage "Validation model for the MovingAverage block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sinInpNoDel( + freqHz=1/80) "Start from zero second" + annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve1(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve2(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve3(delta=300) + "Moving average with 300 s sliding window" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve4(delta=400) + "Moving average with 400 s sliding window" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve5(delta=500) + "Moving average with 500 s sliding window" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sinInp50sDel( + freqHz=1/80, + startTime=50) + "Start from 50 seconds" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve6(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve7(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin sinInp100sDel( + freqHz=1/80, + startTime=100) + "Start from 100 seconds" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve8(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve9(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + +equation + connect(sinInpNoDel.y,movAve3.u) + annotation (Line(points={{-69,60},{-60,60},{-60,0},{-42,0}},color={0,0,127})); + connect(sinInpNoDel.y,movAve1.u) + annotation (Line(points={{-69,60},{-42,60}},color={0,0,127})); + connect(sinInpNoDel.y,movAve2.u) + annotation (Line(points={{-69,60},{-60,60},{-60,30},{-42,30}},color={0,0,127})); + connect(sinInpNoDel.y,movAve5.u) + annotation (Line(points={{-69,60},{-60,60},{-60,-60},{-42,-60}},color={0,0,127})); + connect(sinInpNoDel.y,movAve4.u) + annotation (Line(points={{-69,60},{-60,60},{-60,-30},{-42,-30}},color={0,0,127})); + connect(sinInp50sDel.y,movAve6.u) + annotation (Line(points={{21,60},{21,60},{58,60}},color={0,0,127})); + connect(sinInp50sDel.y,movAve7.u) + annotation (Line(points={{21,60},{21,60},{40,60},{40,30},{58,30}},color={0,0,127})); + connect(sinInp100sDel.y,movAve9.u) + annotation (Line(points={{21,-20},{21,-20},{40,-20},{40,-50},{58,-50}},color={0,0,127})); + connect(sinInp100sDel.y,movAve8.u) + annotation (Line(points={{21,-20},{58,-20}},color={0,0,127})); + annotation ( + experiment( + StopTime=900.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MovingAverage. +

+

+The input sinInpNoDel, sinInp50sDel, +sinInp100sDel, generate sine outputs with same frequency of +1/80 Hz, but different start times of 0 second, +50 second, 100 second. +

+", +revisions=" +
    +
  • +March 17, 2023, by Michael Wetter:
    +Replaced blocks from Modelica Standard Library with CDL blocks. +
  • +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from MovingMean to MovingAverage.
    +This is for Buildings, issue 2865. +
  • +
  • +June 29, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MovingAverage; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo new file mode 100644 index 0000000000..245206c99b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mo @@ -0,0 +1,106 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MovingAverage_nonZeroStart + "Validation model for the MovingAverage block" + Modelica.Blocks.Sources.Sine sinInpNoDel(f=1/80) "Start from zero second" + annotation (Placement(transformation(extent={{-90,50},{-70,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve1(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve2(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve3(delta=300) + "Moving average with 300 s sliding window" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve4(delta=400) + "Moving average with 400 s sliding window" + annotation (Placement(transformation(extent={{-40,-40},{-20,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve5(delta=500) + "Moving average with 500 s sliding window" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + Modelica.Blocks.Sources.Sine sinInp50sDel(f=1/80, startTime=50) + "Start from 50 seconds" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve6(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{60,50},{80,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve7(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Modelica.Blocks.Sources.Sine sinInp100sDel(f=1/80, startTime=100) + "Start from 100 seconds" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve8(delta=100) + "Moving average with 100 s sliding window" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.MovingAverage movAve9(delta=200) + "Moving average with 200 s sliding window" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + +equation + connect(sinInpNoDel.y,movAve3.u) + annotation (Line(points={{-69,60},{-60,60},{-60,0},{-42,0}},color={0,0,127})); + connect(sinInpNoDel.y,movAve1.u) + annotation (Line(points={{-69,60},{-42,60}},color={0,0,127})); + connect(sinInpNoDel.y,movAve2.u) + annotation (Line(points={{-69,60},{-60,60},{-60,30},{-42,30}},color={0,0,127})); + connect(sinInpNoDel.y,movAve5.u) + annotation (Line(points={{-69,60},{-60,60},{-60,-60},{-42,-60}},color={0,0,127})); + connect(sinInpNoDel.y,movAve4.u) + annotation (Line(points={{-69,60},{-60,60},{-60,-30},{-42,-30}},color={0,0,127})); + connect(sinInp50sDel.y,movAve6.u) + annotation (Line(points={{21,60},{21,60},{58,60}},color={0,0,127})); + connect(sinInp50sDel.y,movAve7.u) + annotation (Line(points={{21,60},{21,60},{40,60},{40,30},{58,30}},color={0,0,127})); + connect(sinInp100sDel.y,movAve9.u) + annotation (Line(points={{21,-20},{21,-20},{40,-20},{40,-50},{58,-50}},color={0,0,127})); + connect(sinInp100sDel.y,movAve8.u) + annotation (Line(points={{21,-20},{58,-20}},color={0,0,127})); + annotation ( + experiment( + StartTime=100, + StopTime=900.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MovingAverage_nonZeroStart.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MovingAverage. +

+

+The inputs sinInpNoDel, sinInp50sDel and +sinInp100sDel generate sine outputs with the same frequency of +1/80 Hertz, but different start times of 0 seconds, +50 seconds and 100 seconds. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from MovingMean to MovingAverage.
    +This is for Buildings, issue 2865. +
  • +
  • +June 29, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MovingAverage_nonZeroStart; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMax.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMax.mo new file mode 100644 index 0000000000..14327a02f7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMax.mo @@ -0,0 +1,56 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MultiMax + "Validation model for the MultiMax block" + parameter Integer sizOfVec=5 + "Size of the input vector"; + IBPSA.Controls.OBC.CDL.Reals.MultiMax maxVal( + nin=sizOfVec) + "Block that outputs the maximum element of the input vector" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con[sizOfVec]( + k={1,2,3,4,5}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); + +equation + connect(con.y,maxVal.u) + annotation (Line(points={{-37,0},{-24.5,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMax.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MultiMax. +

+

+The input vectorcon has size 5 and its element values are {1,2,3,4,5}. +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiMax; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMin.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMin.mo new file mode 100644 index 0000000000..a03a49f5bd --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiMin.mo @@ -0,0 +1,58 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MultiMin + "Validation model for the MultiMin block" + parameter Integer sizOfVec=5 + "Size of the input vector"; + IBPSA.Controls.OBC.CDL.Reals.MultiMin minVal( + nin=sizOfVec) + "Block that outputs the minimum element of the input vector" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con[sizOfVec]( + k={1,2,3,4,5}) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-58,-10},{-38,10}}))); + +equation + for i in 1:sizOfVec loop + connect(con[i].y,minVal.u[i]) + annotation (Line(points={{-37,0},{-24.5,0},{-12,0}},color={0,0,127})); + end for; + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiMin.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MultiMin. +

+

+The input vectorcon has size 5 and its element values are {1,2,3,4,5}. +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiMin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiSum.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiSum.mo new file mode 100644 index 0000000000..eebdba0895 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiSum.mo @@ -0,0 +1,137 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MultiSum + "Model to validate the application of MultiSum block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + height=2, + duration=1, + offset=-1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( + height=3, + duration=1, + offset=-1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( + height=3, + duration=1, + offset=-2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( + height=3, + duration=1, + offset=-3) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum_5( + nin=5, + k={1,0.5,0.1,1,2}) + "Sum of Reals, y = k[1]*u[1] + k[2]*u[2] + ... + k[5]*u[5]" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum_2( + nin=2, + k={1,0.5}) + "Sum of Reals, y = k[1]*u[1] + k[2]*u[2]" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum_1( + nin=1, + k={1}) + "Sum of Reals, y = k[1]*u[1]" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum_3( + nin=3) + "Sum of Reals, y = k[1]*u[1] + k[2]*u[2]" + annotation (Placement(transformation(extent={{40,-92},{60,-72}}))); + +equation + connect(ramp1.y,mulSum_5.u[1]) + annotation (Line(points={{-39,60},{-39,60},{20,60},{20,-28.4},{38,-28.4}},color={0,0,127})); + connect(ramp2.y,mulSum_5.u[2]) + annotation (Line(points={{-39,30},{-39,30},{10,30},{10,-29.2},{38,-29.2}},color={0,0,127})); + connect(ramp3.y,mulSum_5.u[3]) + annotation (Line(points={{-39,0},{0,0},{0,-30},{38,-30}},color={0,0,127})); + connect(ramp4.y,mulSum_5.u[4]) + annotation (Line(points={{-39,-30},{-20,-30},{-20,-32},{10,-32},{10,-30.8},{38,-30.8}},color={0,0,127})); + connect(ramp5.y,mulSum_5.u[5]) + annotation (Line(points={{-39,-60},{20,-60},{20,-31.6},{38,-31.6}},color={0,0,127})); + connect(ramp1.y,mulSum_1.u[1]) + annotation (Line(points={{-39,60},{20,60},{20,50},{38,50}},color={0,0,127})); + connect(ramp1.y,mulSum_2.u[1]) + annotation (Line(points={{-39,60},{20,60},{20,11},{38,11}},color={0,0,127})); + connect(ramp2.y,mulSum_2.u[2]) + annotation (Line(points={{-39,30},{10,30},{10,9},{38,9}},color={0,0,127})); + connect(ramp4.y,mulSum_3.u[1]) + annotation (Line(points={{-39,-30},{-0.5,-30},{-0.5,-80.6667},{38,-80.6667}},color={0,0,127})); + connect(ramp5.y,mulSum_3.u[2]) + annotation (Line(points={{-39,-60},{0,-60},{0,-82},{38,-82}},color={0,0,127})); + connect(ramp5.y,mulSum_3.u[3]) + annotation (Line(points={{-39,-60},{0,-60},{0,-83.3333},{38,-83.3333}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiSum.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MultiSum. +

+

+The inputs and gains are configured as follows: +

+
    +
  • +u1 varies from -2 to +2, +with gain k = 1. +
  • +
  • +u2 varies from -1 to +1, +with gain k = 0.5. +
  • +
  • +u3 varies from -1 to +2, +with gain k = 0.1. +
  • +
  • +u4 varies from -2 to +1, +with gain k = 1. +
  • +
  • +u5 varies from -3 to 0, +with gain k = 2. +
  • +
+", + revisions=" +
    +
  • +June 28, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiSum; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Multiply.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Multiply.mo new file mode 100644 index 0000000000..2616dd9f62 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Multiply.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Multiply "Validation model for the Multiply block" + IBPSA.Controls.OBC.CDL.Reals.Multiply product1 + "Block that outputs product of the two inputs" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1, + height=3) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y,product1.u1) + annotation (Line(points={{-38,20},{-26,20},{-26,6},{-12,6}},color={0,0,127})); + connect(ramp2.y,product1.u2) + annotation (Line(points={{-38,-20},{-26,-20},{-26,-6},{-12,-6}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Multiply.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Multiply. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +2. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Product to Multiply.
    +This is for Buildings, issue 2865. +
  • +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Multiply; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo new file mode 100644 index 0000000000..692e9f4d0a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mo @@ -0,0 +1,59 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model MultiplyByParameter "Validation model for the Gain block" + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gain1(k=2.5) + "Block that outputs the product of a gain value with the input signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,gain1.u) + annotation (Line(points={{-38,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/MultiplyByParameter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter. +

+

+The input u varies from 0.0 to +2. +

+", +revisions=" +
    +
  • +January 27, 2022, by Jianjun Hu:
    +Renamed the block name from Gain to MultiplyByParameter.
    +This is for Buildings, issue 2865. +
  • +
  • +March 20, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end MultiplyByParameter; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PID.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PID.mo new file mode 100644 index 0000000000..6cdfe5ccca --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PID.mo @@ -0,0 +1,122 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PID + "Test model for PID controller" + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pulse( + period=0.25) + "Setpoint" + annotation (Placement(transformation(extent={{-90,14},{-70,34}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + Ti=1, + Td=1, + yMin=-1) + "PID controller" + annotation (Placement(transformation(extent={{-30,40},{-10,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant const( + k=0.5) + "Measurement data" + annotation (Placement(transformation(extent={{-90,-22},{-70,-2}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPI( + Ti=1, + Td=1, + yMin=-1, + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI) + "PI controller" + annotation (Placement(transformation(extent={{-30,2},{-10,22}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPD( + Ti=1, + Td=1, + yMin=-1, + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PD) + "PD controller" + annotation (Placement(transformation(extent={{-30,-30},{-10,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limP( + Ti=1, + Td=1, + yMin=-1, + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.P) + "P controller" + annotation (Placement(transformation(extent={{-30,-60},{-10,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.PID noLimPID( + Ti=1, + Td=1, + yMax=1e15, + yMin=-1e15, + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID) + "PID controller with no output limit" + annotation (Placement(transformation(extent={{-30,-90},{-10,-70}}))); + +equation + connect(pulse.y,limPID.u_s) + annotation (Line(points={{-68,24},{-54,24},{-54,50},{-32,50}},color={0,0,127})); + connect(const.y,limPID.u_m) + annotation (Line(points={{-68,-12},{-62,-12},{-62,30},{-20,30},{-20,38}},color={0,0,127})); + connect(const.y,limPI.u_m) + annotation (Line(points={{-68,-12},{-62,-12},{-62,-2},{-20,-2},{-20,0}},color={0,0,127})); + connect(const.y,limPD.u_m) + annotation (Line(points={{-68,-12},{-62,-12},{-62,-34},{-20,-34},{-20,-32}},color={0,0,127})); + connect(pulse.y,limPI.u_s) + annotation (Line(points={{-68,24},{-54,24},{-54,12},{-32,12}},color={0,0,127})); + connect(pulse.y,limPD.u_s) + annotation (Line(points={{-68,24},{-54,24},{-54,-20},{-32,-20}},color={0,0,127})); + connect(pulse.y,limP.u_s) + annotation (Line(points={{-68,24},{-54,24},{-54,-50},{-32,-50}},color={0,0,127})); + connect(pulse.y,noLimPID.u_s) + annotation (Line(points={{-68,24},{-54,24},{-54,-80},{-32,-80}},color={0,0,127})); + connect(const.y,limP.u_m) + annotation (Line(points={{-68,-12},{-62,-12},{-62,-64},{-20,-64},{-20,-62}},color={0,0,127})); + connect(const.y,noLimPID.u_m) + annotation (Line(points={{-68,-12},{-62,-12},{-62,-96},{-20,-96},{-20,-92}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PID.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PID. +This tests the different settings for the controller types. +

+", + revisions=" +
    +
  • +October 15, 2020, by Michael Wetter:
    +Removed instance limPIDOri which was identical to limPID. +
  • +
  • +March 24, 2017, by Jianjun Hu:
    +Added into CDL, simplified the validation model. +
  • +
  • +April 26, 2016, by Michael Wetter:
    +Relaxed tolerance of assertions from 1E-10 +to 1E-3 as the default relative tolerance in JModelica +is 1E-4. +This is for +Buildings, issue 510. +
  • +
  • +November 21, 2011, by Michael Wetter:
    +Added documentation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end PID; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo new file mode 100644 index 0000000000..a2c17ea4cf --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mo @@ -0,0 +1,81 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PIDInitialDerivativeOutput + "Test model for LimPID controller with initial output of the derivative term specified" + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant ySet( + k=0.75) + "Set point" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant yMea( + k=0.75) + "Measured value" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=3, + yd_start=0.2) + "PID controller" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPD( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PD, + k=3, + yd_start=0.2) + "PD controller" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +equation + connect(ySet.y,limPID.u_s) + annotation (Line(points={{-18,40},{0,40},{0,30},{18,30}},color={0,0,127})); + connect(ySet.y,limPD.u_s) + annotation (Line(points={{-18,40},{0,40},{0,-30},{18,-30}},color={0,0,127})); + connect(yMea.y,limPID.u_m) + annotation (Line(points={{-18,10},{30,10},{30,18}},color={0,0,127})); + connect(yMea.y,limPD.u_m) + annotation (Line(points={{-18,10},{-4,10},{-4,-50},{30,-50},{30,-42}},color={0,0,127})); + annotation ( + experiment( + StopTime=0.2, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialDerivativeOutput.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PID. +

+

+This model validates setting the initial output of the controller to a specified value. +Note that the control error must be zero for the initial output to be at the specified value. +See the description of + +IBPSA.Controls.OBC.CDL.Reals.PID. +

+", + revisions=" +
    +
  • +April 8, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-100,-100},{100,100}}))); +end PIDInitialDerivativeOutput; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo new file mode 100644 index 0000000000..b2c1ea38e4 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mo @@ -0,0 +1,88 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PIDInitialState + "Test model for LimPID controller with initial state specified" + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant ySet( + k=0.75) + "Set point" + annotation (Placement(transformation(extent={{-40,30},{-20,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant yMea( + k=0.5) + "Measured value" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=3, + xi_start=0.25) + "PID controller" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.PID limPI( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + k=3, + xi_start=0.25) + "PI controller" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + +equation + connect(ySet.y,limPID.u_s) + annotation (Line(points={{-18,40},{0,40},{0,30},{18,30}},color={0,0,127})); + connect(ySet.y,limPI.u_s) + annotation (Line(points={{-18,40},{0,40},{0,-30},{18,-30}},color={0,0,127})); + connect(yMea.y,limPID.u_m) + annotation (Line(points={{-18,10},{30,10},{30,18}},color={0,0,127})); + connect(yMea.y,limPI.u_m) + annotation (Line(points={{-18,10},{-4,10},{-4,-50},{30,-50},{30,-42}},color={0,0,127})); + annotation ( + experiment( + StopTime=1, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDInitialState.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PID. +

+

+This model validates setting the initial state of the controller to a specified value. +

+

+The model sets the initial values xi_start=0.25 +of the integrator for both instances of the controller. +For the instance limPID, it also sets the initial value of the state of the +derivative block xd_start=-0.5. +The derivative block obtains as an input signal the value +u=-0.5 because the set point weight for the derivative action is wd=0. +Therefore, an initial state of x(t0)=-0.5 causes the state of the derivative +block to be at steady-state, because +dx(t)/dt = (u - x)/T. +

+", + revisions=" +
    +
  • +April 8, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-100,-100},{100,100}}))); +end PIDInitialState; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDScale.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDScale.mo new file mode 100644 index 0000000000..781841e085 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDScale.mo @@ -0,0 +1,120 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PIDScale + "Test model for PID controller with scaling of the control error" + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pulse( + amplitude=1000, + period=50) + "Setpoint" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.PID pidSca( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=2, + Ti=1, + Td=2, + r=1000, + yMin=-1) + "PID controller with scaling of control input" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset pla1( + k=1000) + "Plant model" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Reals.Sources.Constant resVal( + k=0) + "Reset value" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Logical.Sources.Constant resSig( + k=false) + "Reset signal" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID pidNoSca( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=2, + Ti=1, + Td=2, + yMin=-1) + "PID controller without scaling of control input" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=1/1000) + "Gain to scale setpoint" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=1/1000) + "Gain to scale measured value" + annotation (Placement(transformation(extent={{52,-90},{32,-70}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset pla2( + k=1000) + "Plant model" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + +equation + connect(pulse.y,pidSca.u_s) + annotation (Line(points={{-58,50},{-2,50}},color={0,0,127})); + connect(pla1.u,pidSca.y) + annotation (Line(points={{38,50},{22,50}},color={0,0,127})); + connect(pla1.y,pidSca.u_m) + annotation (Line(points={{62,50},{82,50},{82,0},{10,0},{10,38}},color={0,0,127})); + connect(resVal.y,pla1.y_reset_in) + annotation (Line(points={{-58,10},{30,10},{30,42},{38,42}},color={0,0,127})); + connect(resSig.y,pla1.trigger) + annotation (Line(points={{-58,-30},{50,-30},{50,38}},color={255,0,255})); + connect(gai.y,pidNoSca.u_s) + annotation (Line(points={{-18,-50},{-2,-50}},color={0,0,127})); + connect(gai.u,pulse.y) + annotation (Line(points={{-42,-50},{-50,-50},{-50,50},{-60,50}},color={0,0,127})); + connect(pidNoSca.y,pla2.u) + annotation (Line(points={{22,-50},{38,-50}},color={0,0,127})); + connect(pla2.y,gai1.u) + annotation (Line(points={{62,-50},{70,-50},{70,-80},{54,-80}},color={0,0,127})); + connect(gai1.y,pidNoSca.u_m) + annotation (Line(points={{30,-80},{10,-80},{10,-60}},color={0,0,127})); + connect(pla2.y_reset_in,resVal.y) + annotation (Line(points={{38,-58},{30,-58},{30,10},{-60,10}},color={0,0,127})); + connect(resSig.y,pla2.trigger) + annotation (Line(points={{-58,-30},{26,-30},{26,-64},{50,-64},{50,-62}},color={255,0,255})); + annotation ( + experiment( + StopTime=100.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDScale.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PID +with and without setting of the parameter that scales the control error. +

+

+The test has two combinations of a PID controller and a plant. +In PIDSca, the control error is scaled inside the controller, whereas +in the configuration that has PIDNoSca, the setpoint signal and the +measurement signal is scaled outside of the controller. +Both controllers and plants have the same trajectory, thereby validating that +the scaling is implemented correctly. +

+", + revisions=" + +"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end PIDScale; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo new file mode 100644 index 0000000000..12186226f9 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mo @@ -0,0 +1,167 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PIDWithReset + "Test model for LimPID controller with reset trigger" + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal setPoi + "Set point" + annotation (Placement(transformation(extent={{-20,-40},{0,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.CivilTime modTim + "Civil time" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greEquThr( + t=1) + "Outputs true after t=1" + annotation (Placement(transformation(extent={{-52,-70},{-32,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset limPIDPar( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=1, + Ti=1, + Td=1, + yMin=-1, + y_reset=0.5) + "Controller, reset to parameter value" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes1 + "Integrator whose output should be brought to the set point" + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset limPIDInp( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=1, + Ti=1, + Td=1, + yMin=-1, + y_reset=0.75) + "Controller, reset to input value" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes2 + "Integrator whose output should be brought to the set point" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant resVal( + k=0) + "Reset value" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset limPIPar( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=1, + Td=1, + yMin=-1, + y_reset=0.5) + "Controller, reset to parameter value" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes3 + "Integrator whose output should be brought to the set point" + annotation (Placement(transformation(extent={{60,-40},{80,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset limPIInp( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + k=1, + Ti=1, + Td=1, + yMin=-1, + y_reset=0.75) + "Controller, reset to input value" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset intWitRes4 + "Integrator whose output should be brought to the set point" + annotation (Placement(transformation(extent={{60,-80},{80,-60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Constant false" + annotation (Placement(transformation(extent={{-80,30},{-60,50}}))); + +equation + connect(limPIDPar.u_s,setPoi.y) + annotation (Line(points={{18,70},{6,70},{6,-30},{2,-30}},color={0,0,127})); + connect(intWitRes1.u,limPIDPar.y) + annotation (Line(points={{58,70},{42,70}},color={0,0,127})); + connect(intWitRes1.y,limPIDPar.u_m) + annotation (Line(points={{82,70},{90,70},{90,50},{30,50},{30,58}},color={0,0,127})); + connect(modTim.y,greEquThr.u) + annotation (Line(points={{-58,-60},{-54,-60}},color={0,0,127})); + connect(greEquThr.y,setPoi.u) + annotation (Line(points={{-30,-60},{-26,-60},{-26,-30},{-22,-30}},color={255,0,255})); + connect(greEquThr.y,limPIDPar.trigger) + annotation (Line(points={{-30,-60},{12,-60},{12,50},{24,50},{24,58}},color={255,0,255})); + connect(intWitRes2.u,limPIDInp.y) + annotation (Line(points={{58,30},{42,30}},color={0,0,127})); + connect(intWitRes2.y,limPIDInp.u_m) + annotation (Line(points={{82,30},{90,30},{90,10},{30,10},{30,18}},color={0,0,127})); + connect(limPIDInp.u_s,setPoi.y) + annotation (Line(points={{18,30},{6,30},{6,-30},{2,-30}},color={0,0,127})); + connect(limPIPar.u_s,setPoi.y) + annotation (Line(points={{18,-30},{2,-30}},color={0,0,127})); + connect(intWitRes3.u,limPIPar.y) + annotation (Line(points={{58,-30},{42,-30}},color={0,0,127})); + connect(intWitRes3.y,limPIPar.u_m) + annotation (Line(points={{82,-30},{90,-30},{90,-50},{30,-50},{30,-42}},color={0,0,127})); + connect(greEquThr.y,limPIPar.trigger) + annotation (Line(points={{-30,-60},{12,-60},{12,-50},{24,-50},{24,-42}},color={255,0,255})); + connect(intWitRes4.u,limPIInp.y) + annotation (Line(points={{58,-70},{42,-70}},color={0,0,127})); + connect(intWitRes4.y,limPIInp.u_m) + annotation (Line(points={{82,-70},{90,-70},{90,-90},{30,-90},{30,-82}},color={0,0,127})); + connect(limPIInp.u_s,setPoi.y) + annotation (Line(points={{18,-70},{6,-70},{6,-30},{2,-30}},color={0,0,127})); + connect(greEquThr.y,limPIInp.trigger) + annotation (Line(points={{-30,-60},{12,-60},{12,-90},{24,-90},{24,-82}},color={255,0,255})); + connect(limPIDInp.trigger,greEquThr.y) + annotation (Line(points={{24,18},{24,10},{12,10},{12,-60},{-30,-60}},color={255,0,255})); + connect(resVal.y,intWitRes1.y_reset_in) + annotation (Line(points={{-58,0},{48,0},{48,62},{58,62}},color={0,0,127})); + connect(resVal.y,intWitRes2.y_reset_in) + annotation (Line(points={{-58,0},{48,0},{48,22},{58,22}},color={0,0,127})); + connect(resVal.y,intWitRes3.y_reset_in) + annotation (Line(points={{-58,0},{48,0},{48,-38},{58,-38}},color={0,0,127})); + connect(resVal.y,intWitRes4.y_reset_in) + annotation (Line(points={{-58,0},{48,0},{48,-78},{58,-78}},color={0,0,127})); + connect(con.y,intWitRes1.trigger) + annotation (Line(points={{-58,40},{-20,40},{-20,-6},{54,-6},{54,54},{70,54},{70,58}},color={255,0,255})); + connect(con.y,intWitRes2.trigger) + annotation (Line(points={{-58,40},{-20,40},{-20,-6},{70,-6},{70,18}},color={255,0,255})); + connect(con.y,intWitRes3.trigger) + annotation (Line(points={{-58,40},{-20,40},{-20,-6},{54,-6},{54,-46},{70,-46},{70,-42}},color={255,0,255})); + connect(con.y,intWitRes4.trigger) + annotation (Line(points={{-58,40},{-20,40},{-20,-6},{54,-6},{54,-86},{70,-86},{70,-82}},color={255,0,255})); + annotation ( + experiment( + StopTime=10, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithReset.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PID. +

+

+This model validates the controller for different settings of the control output reset. +

+", + revisions=" +
    +
  • +April 7, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + extent={{-100,-100},{100,100}}))); +end PIDWithReset; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo new file mode 100644 index 0000000000..06eac2deb7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mo @@ -0,0 +1,130 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model PIDWithResetScale + "Test model for PID controller with reset and scaling of the control error" + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pulse( + amplitude=1000, + period=50) + "Setpoint" + annotation (Placement(transformation(extent={{-80,60},{-60,80}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset pidSca( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=2, + Ti=1, + Td=2, + r=1000, + yMin=-1, + y_reset=0) + "PID controller with scaling of control input" + annotation (Placement(transformation(extent={{0,40},{20,60}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset pla1( + k=1000) + "Plant model" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + Reals.Sources.Constant resVal( + k=0) + "Reset value" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + Logical.Sources.Constant resSig( + k=false) + "Reset signal" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset pidNoSca( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=2, + Ti=1, + Td=2, + yMin=-1, + y_reset=0) + "PID controller without scaling of control input" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=1/1000) + "Gain to scale setpoint" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=1/1000) + "Gain to scale measured value" + annotation (Placement(transformation(extent={{52,-90},{32,-70}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset pla2( + k=1000) + "Plant model" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + Logical.Sources.Pulse booPul( + period=30) + "Pulse for controller reset" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + +equation + connect(pulse.y,pidSca.u_s) + annotation (Line(points={{-58,70},{-30,70},{-30,50},{-2,50}},color={0,0,127})); + connect(pla1.u,pidSca.y) + annotation (Line(points={{38,50},{22,50}},color={0,0,127})); + connect(pla1.y,pidSca.u_m) + annotation (Line(points={{62,50},{82,50},{82,0},{10,0},{10,38}},color={0,0,127})); + connect(resVal.y,pla1.y_reset_in) + annotation (Line(points={{-58,0},{30,0},{30,42},{38,42}},color={0,0,127})); + connect(resSig.y,pla1.trigger) + annotation (Line(points={{-58,-30},{50,-30},{50,38}},color={255,0,255})); + connect(gai.y,pidNoSca.u_s) + annotation (Line(points={{-18,-50},{-2,-50}},color={0,0,127})); + connect(gai.u,pulse.y) + annotation (Line(points={{-42,-50},{-50,-50},{-50,70},{-58,70}},color={0,0,127})); + connect(pidNoSca.y,pla2.u) + annotation (Line(points={{22,-50},{38,-50}},color={0,0,127})); + connect(pla2.y,gai1.u) + annotation (Line(points={{62,-50},{70,-50},{70,-80},{54,-80}},color={0,0,127})); + connect(gai1.y,pidNoSca.u_m) + annotation (Line(points={{30,-80},{10,-80},{10,-60}},color={0,0,127})); + connect(pla2.y_reset_in,resVal.y) + annotation (Line(points={{38,-58},{30,-58},{30,0},{-58,0}},color={0,0,127})); + connect(resSig.y,pla2.trigger) + annotation (Line(points={{-58,-30},{26,-30},{26,-64},{50,-64},{50,-62}},color={255,0,255})); + connect(booPul.y,pidSca.trigger) + annotation (Line(points={{-58,30},{4,30},{4,38}},color={255,0,255})); + connect(booPul.y,pidNoSca.trigger) + annotation (Line(points={{-58,30},{-10,30},{-10,-72},{4,-72},{4,-62}},color={255,0,255})); + annotation ( + experiment( + StopTime=100.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/PIDWithResetScale.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.PIDWithReset +with and without setting of the parameter that scales the control error. +

+

+The test has two combinations of a PID controller and a plant. +In PIDSca, the control error is scaled inside the controller, whereas +in the configuration that has PIDNoSca, the setpoint signal and the +measurement signal is scaled outside of the controller. +Both controllers and plants have the same trajectory, thereby validating that +the scaling is implemented correctly. +

+", + revisions=" + +"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end PIDWithResetScale; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Ramp.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Ramp.mo new file mode 100644 index 0000000000..e51c1e8ea6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Ramp.mo @@ -0,0 +1,127 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Ramp "Validation model for the Ramp block" + + IBPSA.Controls.OBC.CDL.Reals.Ramp ramUp( + final raisingSlewRate=1/20) + "Ramp the input increasing" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Ramp ramUp1( + final raisingSlewRate=1/10) + "Ramp the input increasing in different speed" + annotation (Placement(transformation(extent={{-40,10},{-20,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Ramp ramUpDow( + final raisingSlewRate=1/5) + "Limit the increase and decrease of the input if the active is true" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Ramp ramUpDow1( + final raisingSlewRate=1/5, + final fallingSlewRate=-1/2) + "Different increase and decrease slew rate limits" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final width=0.9, + final period=12, + final shift=1) + "Boolean pulse" + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul( + final width=0.8, + final period=12.0, + final shift=2.0) + "Boolean pulse" + annotation (Placement(transformation(extent={{-100,70},{-80,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul2( + final width=0.9, + final period=12, + final shift=2) + "Boolean pulse" + annotation (Placement(transformation(extent={{-100,-100},{-80,-80}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul1( + final width=0.2, + final period=12.0, + final shift=1.5) + "Boolean pulse" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul2( + final width=0.3, + final period=12.0, + final shift=3.0) + "Boolean pulse" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul5( + final width=0.9, + final period=12, + final shift=1) + "Boolean pulse" + annotation (Placement(transformation(extent={{20,-40},{40,-20}}))); +equation + connect(booPul2.y, ramUpDow.active) annotation (Line(points={{-78,-90},{-60,-90}, + {-60,-68},{-42,-68}}, color={255,0,255})); + connect(booPul5.y, ramUpDow1.active) annotation (Line(points={{42,-30},{70, + -30},{70,-8},{78,-8}}, + color={255,0,255})); + connect(pul.y, ramUp.u) annotation (Line(points={{-78,80},{-60,80},{-60,80},{-42, + 80}}, color={0,0,127})); + connect(pul.y, ramUp1.u) annotation (Line(points={{-78,80},{-60,80},{-60,20},{ + -42,20}}, color={0,0,127})); + connect(booPul1.y, ramUp.active) annotation (Line(points={{-78,30},{-70,30},{-70, + 72},{-42,72}}, color={255,0,255})); + connect(booPul1.y, ramUp1.active) annotation (Line(points={{-78,30},{-70,30},{ + -70,12},{-42,12}}, color={255,0,255})); + connect(pul1.y, ramUpDow.u) annotation (Line(points={{-78,-30},{-60,-30},{-60, + -60},{-42,-60}}, color={0,0,127})); + connect(pul2.y, ramUpDow1.u) + annotation (Line(points={{42,30},{70,30},{70,0},{78,0}}, color={0,0,127})); + annotation ( + experiment( + StopTime=10.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Ramp.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Ramp. +

+
    +
  • +The instances ramUp and ramUp1 shows ramping up the +input in different speed. +
  • +
  • +The instance ramUpDow shows ramping up and down the input in +the same speed. It also shows that the output will be the ramped input if +the boolean input active is true. +
  • +
  • +The instance ramUpDow1 shows ramping up and down the input in +the different speed. +
  • +
+", +revisions=" +
    +
  • +November 16, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-120,-140},{120,140}}))); +end Ramp; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Round.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Round.mo new file mode 100644 index 0000000000..12a6ff7f1d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Round.mo @@ -0,0 +1,76 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Round + "Validation model for the Round block" + IBPSA.Controls.OBC.CDL.Reals.Round round1( + n=0) + "Round real number to given digits" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-3.5, + height=7.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round2( + n=1) + "Round real number to given digits" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Round round3( + n=-1) + "Round real number to given digits" + annotation (Placement(transformation(extent={{40,-60},{60,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai(k=0.1) "Gain" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(k=10) "Gain" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + +equation + connect(ramp1.y,round1.u) + annotation (Line(points={{-39,0},{-20,0},{-20,50},{38,50}},color={0,0,127})); + connect(ramp1.y,gai.u) + annotation (Line(points={{-39,0},{-20,0},{-2,0}},color={0,0,127})); + connect(round2.u,gai.y) + annotation (Line(points={{38,0},{21,0}},color={0,0,127})); + connect(ramp1.y,gai1.u) + annotation (Line(points={{-39,0},{-20,0},{-20,-50},{-2,-50}},color={0,0,127})); + connect(round3.u,gai1.y) + annotation (Line(points={{38,-50},{30,-50},{21,-50}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Round.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Round. +

+

+The input u varies from -3.5 to +3.5. +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Round; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Sin.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sin.mo new file mode 100644 index 0000000000..e6a3d40070 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sin.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Sin + "Validation model for the Sin block" + IBPSA.Controls.OBC.CDL.Reals.Sin sin1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=6.2831852) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,sin1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sin.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sin. +

+

+The input u varies from 0.0 to +2π. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Sin; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Sort.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sort.mo new file mode 100644 index 0000000000..b405676561 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sort.mo @@ -0,0 +1,109 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Sort + "Validation model for the Sort block" + IBPSA.Controls.OBC.CDL.Reals.Sort sorAsc( + nin=5) + "Block that sorts signals in ascending order" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,56},{-40,76}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=1, + offset=-1, + height=3) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,22},{-40,42}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp3( + duration=1, + offset=2, + height=-4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp4( + duration=1, + offset=3, + height=-1) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-42},{-40,-22}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp5( + duration=1, + offset=0, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-74},{-40,-54}}))); + IBPSA.Controls.OBC.CDL.Reals.Sort sorDes( + nin=5, + ascending=false) + "Block that sorts signals in ascending order" + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + +equation + connect(ramp1.y,sorAsc.u[1]) + annotation (Line(points={{-39,66},{-22,66},{-22,28.4},{-2,28.4}},color={0,0,127})); + connect(ramp2.y,sorAsc.u[2]) + annotation (Line(points={{-39,32},{-20,32},{-20,29.2},{-2,29.2}},color={0,0,127})); + connect(ramp3.y,sorAsc.u[3]) + annotation (Line(points={{-39,0},{-22,0},{-22,30},{-2,30}},color={0,0,127})); + connect(ramp4.y,sorAsc.u[4]) + annotation (Line(points={{-39,-32},{-22,-32},{-22,30.8},{-2,30.8}},color={0,0,127})); + connect(ramp5.y,sorAsc.u[5]) + annotation (Line(points={{-39,-64},{-20,-64},{-20,31.6},{-2,31.6}},color={0,0,127})); + connect(ramp1.y,sorDes.u[1]) + annotation (Line(points={{-39,66},{-22,66},{-22,-31.6},{-2,-31.6}},color={0,0,127})); + connect(ramp2.y,sorDes.u[2]) + annotation (Line(points={{-39,32},{-20,32},{-20,-30.8},{-2,-30.8}},color={0,0,127})); + connect(ramp3.y,sorDes.u[3]) + annotation (Line(points={{-39,0},{-22,0},{-22,-30},{-2,-30}},color={0,0,127})); + connect(ramp4.y,sorDes.u[4]) + annotation (Line(points={{-39,-32},{-22,-32},{-22,-29.2},{-2,-29.2}},color={0,0,127})); + connect(ramp5.y,sorDes.u[5]) + annotation (Line(points={{-39,-64},{-20,-64},{-20,-28.4},{-2,-28.4}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sort.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sort. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +2, +input u3 varies from +2 to -2, input u4 varies from +3 to +2, +input u5 varies from 0 to +4, +

+", + revisions=" +
    +
  • +September 14, 2017, by Jianjun Hu:
    +Changed model name. +
  • +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Sort; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Sqrt.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sqrt.mo new file mode 100644 index 0000000000..0b476f6938 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Sqrt.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Sqrt + "Validation model for the Sqrt block" + IBPSA.Controls.OBC.CDL.Reals.Sqrt sqrt1 + "Block that outputs the square root of the input (input >= 0 required)" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=0, + height=9) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,sqrt1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Sqrt.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Sqrt. +

+

+The input u varies from 0.0 to +9.0. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Sqrt; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Subtract.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Subtract.mo new file mode 100644 index 0000000000..8fc615897e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Subtract.mo @@ -0,0 +1,62 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Subtract "Validation model for the Subtract block" + IBPSA.Controls.OBC.CDL.Reals.Subtract sub + "Block that outputs the difference of the two inputs" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-2, + height=4) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + height=2, + duration=1, + offset=-0.5) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + +equation + connect(ramp1.y, sub.u1) annotation (Line(points={{-38,20},{-26,20},{-26,6},{-12, + 6}}, color={0,0,127})); + connect(ramp2.y, sub.u2) annotation (Line(points={{-38,-20},{-26,-20},{-26,-6}, + {-12,-6}}, color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Subtract.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Subtract. +

+

+The input u1 varies from -2 to +2, input u2 varies from -1 to +1. +

+", + revisions=" +
    +
  • +January 28, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Subtract; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Switch.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Switch.mo new file mode 100644 index 0000000000..ca772c6b80 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Switch.mo @@ -0,0 +1,66 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Switch "Validation model for the Switch block" + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=5, + offset=-1, + height=6) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-26,22},{-6,42}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp2( + duration=5, + offset=-1, + height=2) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-26,-42},{-6,-22}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + width=0.5, + period=2) + "Block that outputs cyclic on and off" + annotation (Placement(transformation(extent={{-26,-10},{-6,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Switch switch1 + "Switch between two real inputs" + annotation (Placement(transformation(extent={{26,-10},{46,10}}))); + +equation + connect(booPul.y,switch1.u2) + annotation (Line(points={{-4,0},{-4,0},{24,0}},color={255,0,255})); + connect(ramp2.y,switch1.u3) + annotation (Line(points={{-4,-32},{8,-32},{8,-8},{24,-8}},color={0,0,127})); + connect(ramp1.y,switch1.u1) + annotation (Line(points={{-4,32},{8,32},{8,8},{24,8}},color={0,0,127})); + annotation ( + experiment( + StopTime=5.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Switch.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Switch. +

+", + revisions=" +
    +
  • +April 2, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Switch; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/Tan.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/Tan.mo new file mode 100644 index 0000000000..8b5f1c40eb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/Tan.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Reals.Validation; +model Tan + "Validation model for the Tan block" + IBPSA.Controls.OBC.CDL.Reals.Tan tan1 + "Block that outputs the sine of the input" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ramp1( + duration=1, + offset=-1.5, + height=3.0) + "Block that generates ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ramp1.y,tan1.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Reals/Validation/Tan.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Reals.Tan. +

+

+The input u varies from -1.5 to +1.5. +

+", + revisions=" +
    +
  • +March 22, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Tan; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Reals/Validation/package.mo new file mode 100644 index 0000000000..34615e147b --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Reals; +package Validation "Collection of models that validate the continuous blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Reals. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}}), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Reals/Validation/package.order b/IBPSA/Controls/OBC/CDL/Reals/Validation/package.order new file mode 100644 index 0000000000..a3a46092e0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/Validation/package.order @@ -0,0 +1,50 @@ +Abs +Acos +Add +AddParameter +Asin +Atan +Atan2 +Average +Cos +Derivative +Divide +Exp +Greater +GreaterThreshold +Hysteresis +IntegratorWithReset +Less +LessThreshold +LimitSlewRate +Limiter +Line +Log +Log10 +MatrixGain +MatrixMax +MatrixMin +Max +Min +Modulo +MovingAverage +MovingAverage_nonZeroStart +MultiMax +MultiMin +MultiSum +Multiply +MultiplyByParameter +PID +PIDInitialDerivativeOutput +PIDInitialState +PIDScale +PIDWithReset +PIDWithResetScale +Ramp +Round +Sin +Sort +Sqrt +Subtract +Switch +Tan diff --git a/IBPSA/Controls/OBC/CDL/Reals/package.mo b/IBPSA/Controls/OBC/CDL/Reals/package.mo new file mode 100644 index 0000000000..2666a2b1b2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL; +package Reals "Package with blocks for continuous variables" + annotation ( + Documentation( + info=" +

+Package with blocks for elementary mathematical functions +for continuous variables. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Text( + extent={{-52,86},{52,-92}}, + textColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + textString="R"), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0)})); +end Reals; diff --git a/IBPSA/Controls/OBC/CDL/Reals/package.order b/IBPSA/Controls/OBC/CDL/Reals/package.order new file mode 100644 index 0000000000..29bdf47966 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Reals/package.order @@ -0,0 +1,47 @@ +Abs +Acos +Add +AddParameter +Asin +Atan +Atan2 +Average +Cos +Derivative +Divide +Exp +Greater +GreaterThreshold +Hysteresis +IntegratorWithReset +Less +LessThreshold +LimitSlewRate +Limiter +Line +Log +Log10 +MatrixGain +MatrixMax +MatrixMin +Max +Min +Modulo +MovingAverage +MultiMax +MultiMin +MultiSum +Multiply +MultiplyByParameter +PID +PIDWithReset +Ramp +Round +Sin +Sort +Sqrt +Subtract +Switch +Tan +Sources +Validation diff --git a/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractSignal.mo new file mode 100644 index 0000000000..13bc1e3149 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractSignal.mo @@ -0,0 +1,178 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block BooleanExtractSignal + "Extract signals from a boolean input signal vector" + parameter Integer nin=1 + "Number of inputs"; + parameter Integer nout=1 + "Number of outputs"; + parameter Integer extract[nout]=1:nout + "Extracting vector"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Boolean input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y[nout] + "Boolean signals extracted from the input vector with the extraction scheme specified by the integer vector" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + assert( + Modelica.Math.BooleanVectors.andTrue({(extract[i] > 0 and extract[i] <= nin) for i in 1:nout}), + "In " + getInstanceName() + ": The element of the extracting vector has out of range value.", + AssertionLevel.error); + +equation + for i in 1:nout loop + y[i]=u[extract[i]]; + end for; + annotation ( + defaultComponentName="extBooSig", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-90,51},{-50,-49}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Rectangle( + extent={{50,50},{90,-50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Polygon( + points={{-94.4104,1.90792},{-94.4104,-2.09208},{-90.4104,-0.0920762},{-94.4104,1.90792}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Line( + points={{-72,2},{-60.1395,12.907},{-49.1395,12.907}}, + color={255,0,255}), + Line( + points={{-73,4},{-59,40},{-49,40}}, + color={255,0,255}), + Line( + points={{-113,0},{-76.0373,-0.0180176}}, + color={255,0,255}), + Ellipse( + extent={{-81.0437,4.59255},{-71.0437,-4.90745}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Line( + points={{-73,-5},{-60,-40},{-49,-40}}, + color={255,0,255}), + Line( + points={{-72,-2},{-60.0698,-12.907},{-49.0698,-12.907}}, + color={255,0,255}), + Polygon( + points={{-48.8808,-11},{-48.8808,-15},{-44.8808,-13},{-48.8808,-11}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Line( + points={{-46,13},{-35,13},{35,-30},{45,-30}}, + color={255,0,255}), + Line( + points={{-45,40},{-35,40},{35,0},{44,0}}, + color={255,0,255}), + Line( + points={{-45,-40},{-34,-40},{35,30},{44,30}}, + color={255,0,255}), + Polygon( + points={{-49,42},{-49,38},{-45,40},{-49,42}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Polygon( + points={{-48.8728,-38.0295},{-48.8728,-42.0295},{-44.8728,-40.0295},{-48.8728,-38.0295}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Polygon( + points={{-48.9983,14.8801},{-48.9983,10.8801},{-44.9983,12.8801},{-48.9983,14.8801}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Ellipse( + extent={{69.3052,4.12743},{79.3052,-5.37257}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Line( + points={{80,0},{100,0}}, + color={255,0,255}), + Polygon( + points={{43.1618,32.3085},{43.1618,28.3085},{47.1618,30.3085},{43.1618,32.3085}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Polygon( + points={{43.2575,1.80443},{43.2575,-2.19557},{47.2575,-0.195573},{43.2575,1.80443}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Polygon( + points={{43.8805,-28.1745},{43.8805,-32.1745},{47.8805,-30.1745},{43.8805,-28.1745}}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineColor={255,0,255}), + Line( + points={{48,0},{70,0}}, + color={255,0,255}), + Line( + points={{47,30},{60,30},{73,3}}, + color={255,0,255}), + Line( + points={{49,-30},{60,-30},{74,-4}}, + color={255,0,255}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="extract=%extract"), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Extract signals from the vector-valued boolean input signal and transfer them +to the vector-valued boolean output signal. +

+

+The extraction scheme is specified by the integer vector extract. +This vector specifies which input signals are taken and in which +order they are transferred to the output vector. Note that the +dimension of extract has to match the number of outputs and the elements +of extract has to be in the range of [1, nin]. +Additionally, the dimensions of the input connector signals and +the output connector signals have to be explicitly defined via the +parameters nin and nout. +

+

Example

+

+The specification +

+
     nin = 7 \"Number of inputs\";
+     nout = 4 \"Number of outputs\";
+     extract[nout] = {6,3,3,2} \"Extracting vector\";
+
+

extracts four output signals (nout=4) +from the seven elements of the +input vector (nin=7):

+
   y[1, 2, 3, 4] = u[6, 3, 3, 2];
+
+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end BooleanExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractor.mo new file mode 100644 index 0000000000..c12f2aaadb --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/BooleanExtractor.mo @@ -0,0 +1,148 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block BooleanExtractor + "Extract scalar signal out of boolean signal vector dependent on integer input index" + parameter Integer nin=1 + "Number of inputs"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput index + "Index of input vector element to be extracted out" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Boolean input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y + "Boolean signal extracted from input vector, u[index]" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + assert( + index > 0 and index <= nin, + "In " + getInstanceName() + ": The extract index is out of the range.", + AssertionLevel.warning); + y = u[min(nin, max(1, index))]; + +annotation (defaultComponentName="extIndBoo", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-40,-50}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-84.4104,1.9079},{-84.4104,-2.09208},{-80.4104,-0.09208},{-84.4104,1.9079}}, + lineColor={255,0,255}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-62,2},{-50.1395,12.907},{-39.1395,12.907}}, + color={255,0,255}), + Line( + points={{-63,4},{-49,40},{-39,40}}, + color={255,0,255}), + Line( + points={{-102,0},{-65.0373,-0.01802}}, + color={255,0,255}), + Ellipse( + extent={{-70.0437,4.5925},{-60.0437,-4.90745}}, + lineColor={0,0,127}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-63,-5},{-50,-40},{-39,-40}}, + color={255,0,255}), + Line( + points={{-62,-2},{-50.0698,-12.907},{-39.0698,-12.907}}, + color={255,0,255}), + Polygon( + points={{-38.8808,-11},{-38.8808,-15},{-34.8808,-13},{-38.8808,-11}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-39,42},{-39,38},{-35,40},{-39,42}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.8728,-38.0295},{-38.8728,-42.0295},{-34.8728,-40.0295},{-38.8728,-38.0295}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.9983,14.8801},{-38.9983,10.8801},{-34.9983,12.8801},{-38.9983,14.8801}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-30,50},{30,-50}}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{100,0},{0,0}}, + color={255,0,255}), + Line( + points={{0,2},{0,-104}}, + color={255,128,0}), + Line( + points={{-35,40},{-20,40}}, + color={255,0,255}), + Line( + points={{-35,13},{-20,13}}, + color={255,0,255}), + Line( + points={{-35,-13},{-20,-13}}, + color={255,0,255}), + Line( + points={{-35,-40},{-20,-40}}, + color={255,0,255}), + Polygon( + points={{0,0},{-20,13},{-20,13},{0,0},{0,0}}, + lineColor={255,0,255}), + Ellipse( + extent={{-6,6},{6,-6}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Block that returns +

+
    y = u[index];
+
+

+where u is a vector-valued Boolean input signal and +index is an Integer input signal. When the index +is out of range, +

+
    +
  • +then y = u[nin] if index > nin, and +
  • +
  • +y = u[1] if index < 1. +
  • +
+", +revisions=" +
    +
  • +September 30, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end BooleanExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/BooleanScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/BooleanScalarReplicator.mo new file mode 100644 index 0000000000..ada7fb5678 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/BooleanScalarReplicator.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block BooleanScalarReplicator "Boolean signal replicator" + parameter Integer nout=1 + "Number of outputs"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y[nout] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="booScaRep", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={255,0,255}), + Line( + points={{100,0},{10,0}}, + color={255,0,255}), + Line( + points={{0,0},{100,10}}, + color={255,0,255}), + Line( + points={{0,0},{100,-10}}, + color={255,0,255}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), + Documentation( + info=" +

+This block replicates the Boolean input signal to an array of nout +identical Boolean output signals. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to BooleanScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end BooleanScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorFilter.mo new file mode 100644 index 0000000000..cde256c18d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorFilter.mo @@ -0,0 +1,69 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block BooleanVectorFilter "Filter a boolean vector based on a boolean mask" + + parameter Integer nin "Size of input vector"; + parameter Integer nout "Size of output vector"; + parameter Boolean msk[nin]=fill(true,nin) "Array mask"; + + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Input signals from which values are extracted" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y[nout] + "Output with extracted input signals" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Integer mskId[nout] = Modelica.Math.BooleanVectors.index(msk) + "Indices of included element in input vector"; + +initial equation + assert(nout==sum({if msk[i] then 1 else 0 for i in 1:nin}), + "In " + getInstanceName() + ": The size of the output vector does not + match the size of included elements in the mask."); +equation + y = u[mskId]; + annotation ( + defaultComponentName="booVecFil", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line(points={{-102,0},{-60,0}}, color={255,0,255}), + Line(points={{70,0},{100,0}}, color={255,0,255}), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Polygon( + points={{-60,80},{-60,-80},{20,-10},{60,-10},{80,10},{20,10},{-60,80}}, + lineColor={0,0,0}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid, + lineThickness=0.5)}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+", info=" +

+This block filters a Boolean vector of size nin to +a vector of size nout given a Boolean mask +msk. +

+

+If an entry in msk is true, then the value +of this input will be sent to the output y, otherwise it +will be discarded. +

+

+The parameter msk must have exactly nout entries +set to true, otherwise an error message is issued. +

+")); +end BooleanVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorReplicator.mo new file mode 100644 index 0000000000..fe9da2cfb7 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/BooleanVectorReplicator.mo @@ -0,0 +1,67 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block BooleanVectorReplicator "Boolean vector signal replicator" + + parameter Integer nin=1 "Size of input vector"; + parameter Integer nout=1 "Number of row in output"; + + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u[nin] + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput y[nout, nin] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="booVecRep", + Documentation( + info=" +

+This block replicates a Boolean vector input signal of size nin, +to a matrix with nout rows and nin columns, +where each row is duplicating the input vector. +

+", + revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+"), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,0,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={255,0,255}), + Line( + points={{100,0},{10,0}}, + color={255,0,255}), + Line( + points={{0,0},{100,10}}, + color={255,0,255}), + Line( + points={{0,0},{100,-10}}, + color={255,0,255}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={255,0,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line( + points={{-100,-10},{0,0}}, + color={255,0,255}), + Line( + points={{-100,10},{0,0}}, + color={255,0,255})})); +end BooleanVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractSignal.mo new file mode 100644 index 0000000000..3d9c57188e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractSignal.mo @@ -0,0 +1,178 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block IntegerExtractSignal + "Extract signals from an integer input signal vector" + parameter Integer nin=1 + "Number of inputs"; + parameter Integer nout=1 + "Number of outputs"; + parameter Integer extract[nout]=1:nout + "Extracting vector"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Integer input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout] + "Integer signals extracted from the input vector with the extraction scheme specified by the integer vector" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + assert( + Modelica.Math.BooleanVectors.andTrue({(extract[i] > 0 and extract[i] <= nin) for i in 1:nout}), + "In " + getInstanceName() + ": The element of the extracting vector has out of range value.", + AssertionLevel.error); + +equation + for i in 1:nout loop + y[i]=u[extract[i]]; + end for; + annotation ( + defaultComponentName="extIntSig", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-90,51},{-50,-49}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Rectangle( + extent={{50,50},{90,-50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Polygon( + points={{-94.4104,1.90792},{-94.4104,-2.09208},{-90.4104,-0.0920762},{-94.4104,1.90792}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{-72,2},{-60.1395,12.907},{-49.1395,12.907}}, + color={255,127,0}), + Line( + points={{-73,4},{-59,40},{-49,40}}, + color={255,127,0}), + Line( + points={{-113,0},{-76.0373,-0.0180176}}, + color={255,127,0}), + Ellipse( + extent={{-81.0437,4.59255},{-71.0437,-4.90745}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{-73,-5},{-60,-40},{-49,-40}}, + color={255,127,0}), + Line( + points={{-72,-2},{-60.0698,-12.907},{-49.0698,-12.907}}, + color={255,127,0}), + Polygon( + points={{-48.8808,-11},{-48.8808,-15},{-44.8808,-13},{-48.8808,-11}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{-46,13},{-35,13},{35,-30},{45,-30}}, + color={255,127,0}), + Line( + points={{-45,40},{-35,40},{35,0},{44,0}}, + color={255,127,0}), + Line( + points={{-45,-40},{-34,-40},{35,30},{44,30}}, + color={255,127,0}), + Polygon( + points={{-49,42},{-49,38},{-45,40},{-49,42}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Polygon( + points={{-48.8728,-38.0295},{-48.8728,-42.0295},{-44.8728,-40.0295},{-48.8728,-38.0295}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Polygon( + points={{-48.9983,14.8801},{-48.9983,10.8801},{-44.9983,12.8801},{-48.9983,14.8801}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Ellipse( + extent={{69.3052,4.12743},{79.3052,-5.37257}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{80,0},{100,0}}, + color={255,127,0}), + Polygon( + points={{43.1618,32.3085},{43.1618,28.3085},{47.1618,30.3085},{43.1618,32.3085}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Polygon( + points={{43.2575,1.80443},{43.2575,-2.19557},{47.2575,-0.195573},{43.2575,1.80443}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Polygon( + points={{43.8805,-28.1745},{43.8805,-32.1745},{47.8805,-30.1745},{43.8805,-28.1745}}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{48,0},{70,0}}, + color={255,127,0}), + Line( + points={{47,30},{60,30},{73,3}}, + color={255,127,0}), + Line( + points={{49,-30},{60,-30},{74,-4}}, + color={255,127,0}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="extract=%extract"), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Extract signals from the vector-valued integer input signal and transfer them +to the vector-valued integer output signal. +

+

+The extraction scheme is specified by the integer vector extract. +This vector specifies which input signals are taken and in which +order they are transferred to the output vector. Note that the +dimension of extract has to match the number of outputs and +the elements of extract has to be in the range of [1, nin]. +Additionally, the dimensions of the input connector signals and +the output connector signals have to be explicitly defined via the +parameters nin and nout. +

+

Example

+

+The specification +

+
     nin = 7 \"Number of inputs\";
+     nout = 4 \"Number of outputs\";
+     extract[nout] = {6,3,3,2} \"Extracting vector\";
+
+

extracts four output signals (nout=4) +from the seven elements of the +input vector (nin=7):

+
   y[1, 2, 3, 4] = u[6, 3, 3, 2];
+
+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end IntegerExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractor.mo new file mode 100644 index 0000000000..4a957ddf10 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/IntegerExtractor.mo @@ -0,0 +1,148 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block IntegerExtractor + "Extract scalar signal out of integer signal vector dependent on integer input index" + parameter Integer nin=1 + "Number of inputs"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput index + "Index of input vector element to be extracted out" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Integer input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y + "Integer signal extracted from input vector, u[index]" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + assert( + index > 0 and index <= nin, + "In " + getInstanceName() + ": The extract index is out of the range.", + AssertionLevel.warning); + y = u[min(nin, max(1, index))]; + +annotation (defaultComponentName="extIndInt", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-40,-50}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-84.4104,1.9079},{-84.4104,-2.09208},{-80.4104,-0.09208},{-84.4104,1.9079}}, + lineColor={255,127,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-62,2},{-50.1395,12.907},{-39.1395,12.907}}, + color={255,127,0}), + Line( + points={{-63,4},{-49,40},{-39,40}}, + color={255,127,0}), + Line( + points={{-102,0},{-65.0373,-0.01802}}, + color={255,127,0}), + Ellipse( + extent={{-70.0437,4.5925},{-60.0437,-4.90745}}, + lineColor={255,127,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-63,-5},{-50,-40},{-39,-40}}, + color={255,127,0}), + Line( + points={{-62,-2},{-50.0698,-12.907},{-39.0698,-12.907}}, + color={255,127,0}), + Polygon( + points={{-38.8808,-11},{-38.8808,-15},{-34.8808,-13},{-38.8808,-11}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-39,42},{-39,38},{-35,40},{-39,42}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.8728,-38.0295},{-38.8728,-42.0295},{-34.8728,-40.0295},{-38.8728,-38.0295}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.9983,14.8801},{-38.9983,10.8801},{-34.9983,12.8801},{-38.9983,14.8801}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-30,50},{30,-50}}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid, + lineColor={255,127,0}), + Line( + points={{100,0},{0,0}}, + color={255,127,0}), + Line( + points={{0,2},{0,-104}}, + color={255,127,0}), + Line( + points={{-35,40},{-20,40}}, + color={255,127,0}), + Line( + points={{-35,13},{-20,13}}, + color={255,127,0}), + Line( + points={{-35,-13},{-20,-13}}, + color={255,127,0}), + Line( + points={{-35,-40},{-20,-40}}, + color={255,127,0}), + Polygon( + points={{0,0},{-20,13},{-20,13},{0,0},{0,0}}, + lineColor={255,127,0}), + Ellipse( + extent={{-6,6},{6,-6}}, + lineColor={255,127,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Block that returns +

+
    y = u[index];
+
+

+where u is a vector-valued Integer input signal and +index is an Integer input signal. When the index +is out of range, +

+
    +
  • +then y = u[nin] if index > nin, and +
  • +
  • +y = u[1] if index < 1. +
  • +
+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end IntegerExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/IntegerScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/IntegerScalarReplicator.mo new file mode 100644 index 0000000000..e4864ac5b0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/IntegerScalarReplicator.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block IntegerScalarReplicator "Integer signal replicator" + parameter Integer nout=1 + "Number of outputs"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="intScaRep", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={255,127,0}), + Line( + points={{100,0},{10,0}}, + color={255,127,0}), + Line( + points={{0,0},{100,10}}, + color={255,127,0}), + Line( + points={{0,0},{100,-10}}, + color={255,127,0}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), + Documentation( + info=" +

+This block replicates the Integer input signal to an array of nout +identical Integer output signals. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to IntegerScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end IntegerScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorFilter.mo new file mode 100644 index 0000000000..29ff14c6a6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorFilter.mo @@ -0,0 +1,69 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block IntegerVectorFilter "Filter an integer vector based on a boolean mask" + + parameter Integer nin "Size of input vector"; + parameter Integer nout "Size of output vector"; + parameter Boolean msk[nin]=fill(true,nin) "Array mask"; + + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Input signals from which values are extracted" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout] + "Output with extracted input signals" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Integer mskId[nout] = Modelica.Math.BooleanVectors.index(msk) + "Indices of included element in input vector"; + +initial equation + assert(nout==sum({if msk[i] then 1 else 0 for i in 1:nin}), + "In " + getInstanceName() + ": The size of the output vector does not + match the size of included elements in the mask."); +equation + y = u[mskId]; + annotation ( + defaultComponentName="intVecFil", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Polygon( + points={{-60,80},{-60,-80},{20,-10},{60,-10},{80,10},{20,10},{-60,80}}, + lineColor={0,0,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Line(points={{-100,0},{-60,0}}, color={255,127,0}), + Line(points={{70,0},{100,0}}, color={255,127,0})}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+", info=" +

+This block filters a Integer vector of size nin to +a vector of size nout given a Boolean mask +msk. +

+

+If an entry in msk is true, then the value +of this input will be sent to the output y, otherwise it +will be discarded. +

+

+The parameter msk must have exactly nout entries +set to true, otherwise an error message is issued. +

+")); +end IntegerVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorReplicator.mo new file mode 100644 index 0000000000..e0a73dd33d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/IntegerVectorReplicator.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block IntegerVectorReplicator "Integer vector signal replicator" + + parameter Integer nin=1 "Size of input vector"; + parameter Integer nout=1 "Number of row in output"; + + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput u[nin] + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.IntegerOutput y[nout, nin] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="intVecRep", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={255,127,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={255,127,0}), + Line( + points={{100,0},{10,0}}, + color={255,127,0}), + Line( + points={{0,0},{100,10}}, + color={255,127,0}), + Line( + points={{0,0},{100,-10}}, + color={255,127,0}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={255,127,0}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line(points={{-100,-10},{0,0}}, color={255,127,0}), + Line(points={{-100,10},{0,0}}, color={255,127,0})}), + Documentation( + info=" +

+This block replicates an Integer vector input signal of size nin, +to a matrix with nout rows and nin columns, +where each row is duplicating the input vector. +

+", + revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+")); +end IntegerVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/RealExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/RealExtractSignal.mo new file mode 100644 index 0000000000..da171e5e1a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/RealExtractSignal.mo @@ -0,0 +1,187 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block RealExtractSignal + "Extract signals from a real input signal vector" + parameter Integer nin=1 + "Number of inputs"; + parameter Integer nout=1 + "Number of outputs"; + parameter Integer extract[nout]=1:nout + "Extracting vector"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Real input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout] + "Real signals extracted from the input vector with the extraction scheme specified by the integer vector" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +initial equation + assert( + Modelica.Math.BooleanVectors.andTrue({(extract[i] > 0 and extract[i] <= nin) for i in 1:nout}), + "In " + getInstanceName() + ": The element of the extracting vector has out of range value.", + AssertionLevel.error); + +equation + for i in 1:nout loop + y[i]=u[extract[i]]; + end for; + annotation ( + defaultComponentName="extReaSig", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-90,51},{-50,-49}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Rectangle( + extent={{50,50},{90,-50}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Polygon( + points={{-94.4104,1.90792},{-94.4104,-2.09208},{-90.4104,-0.0920762},{-94.4104,1.90792}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{-72,2},{-60.1395,12.907},{-49.1395,12.907}}, + color={0,0,127}), + Line( + points={{-73,4},{-59,40},{-49,40}}, + color={0,0,127}), + Line( + points={{-113,0},{-76.0373,-0.0180176}}, + color={0,0,127}), + Ellipse( + extent={{-81.0437,4.59255},{-71.0437,-4.90745}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{-73,-5},{-60,-40},{-49,-40}}, + color={0,0,127}), + Line( + points={{-72,-2},{-60.0698,-12.907},{-49.0698,-12.907}}, + color={0,0,127}), + Polygon( + points={{-48.8808,-11},{-48.8808,-15},{-44.8808,-13},{-48.8808,-11}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{-46,13},{-35,13},{35,-30},{45,-30}}, + color={0,0,127}), + Line( + points={{-45,40},{-35,40},{35,0},{44,0}}, + color={0,0,127}), + Line( + points={{-45,-40},{-34,-40},{35,30},{44,30}}, + color={0,0,127}), + Polygon( + points={{-49,42},{-49,38},{-45,40},{-49,42}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Polygon( + points={{-48.8728,-38.0295},{-48.8728,-42.0295},{-44.8728,-40.0295},{-48.8728,-38.0295}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Polygon( + points={{-48.9983,14.8801},{-48.9983,10.8801},{-44.9983,12.8801},{-48.9983,14.8801}}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Ellipse( + extent={{69.3052,4.12743},{79.3052,-5.37257}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{80,0},{100,0}}, + color={0,0,127}), + Polygon( + points={{43.1618,32.3085},{43.1618,28.3085},{47.1618,30.3085},{43.1618,32.3085}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Polygon( + points={{43.2575,1.80443},{43.2575,-2.19557},{47.2575,-0.195573},{43.2575,1.80443}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Polygon( + points={{43.8805,-28.1745},{43.8805,-32.1745},{47.8805,-30.1745},{43.8805,-28.1745}}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{48,0},{70,0}}, + color={0,0,127}), + Line( + points={{47,30},{60,30},{73,3}}, + color={0,0,127}), + Line( + points={{49,-30},{60,-30},{74,-4}}, + color={0,0,127}), + Text( + extent={{-150,-150},{150,-110}}, + textColor={0,0,0}, + textString="extract=%extract"), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Extract signals from the vector-valued real input signal and transfer them +to the vector-valued real output signal. +

+

+The extraction scheme is specified by the integer vector extract. +This vector specifies which input signals are taken and in which +order they are transferred to the output vector. Note that the +dimension of extract has to match the number of outputs and the elements +of extract has to be in the range of [1, nin]. +Additionally, the dimensions of the input connector signals and +the output connector signals have to be explicitly defined via the +parameters nin and nout. +

+

Example

+

+The specification +

+
     nin = 7 \"Number of inputs\";
+     nout = 4 \"Number of outputs\";
+     extract[nout] = {6,3,3,2} \"Extracting vector\";
+
+

extracts four output signals (nout=4) +from the seven elements of the +input vector (nin=7):

+
   y[1, 2, 3, 4] = u[6, 3, 3, 2];
+
+", +revisions=" +
    +
  • +October 14, 2022, by Jianjun Hu:
    +Added assertion to check if there is any element in extracting vector is out of range. +
  • +
  • +July 19, 2018, by Jianjun Hu:
    +Changed block name. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end RealExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/RealExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/RealExtractor.mo new file mode 100644 index 0000000000..c0b723c1c6 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/RealExtractor.mo @@ -0,0 +1,159 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block RealExtractor + "Extract scalar signal out of real signal vector dependent on integer input index" + parameter Integer nin=1 + "Number of inputs"; + IBPSA.Controls.OBC.CDL.Interfaces.IntegerInput index + "Index of input vector element to be extracted out" + annotation (Placement(transformation(origin={0,-120},extent={{-20,-20},{20,20}},rotation=90))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Real input signals" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Real signal extracted from input vector, u[index]" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +algorithm + assert( + index > 0 and index <= nin, + "In " + getInstanceName() + ": The extract index is out of the range.", + AssertionLevel.warning); + y := u[min(nin, max(1, index))]; + +annotation (defaultComponentName="extIndRea", + Icon( + coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,50},{-40,-50}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-84.4104,1.9079},{-84.4104,-2.09208},{-80.4104,-0.09208},{-84.4104,1.9079}}, + lineColor={0,0,127}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Line( + points={{-62,2},{-50.1395,12.907},{-39.1395,12.907}}, + color={0,0,127}), + Line( + points={{-63,4},{-49,40},{-39,40}}, + color={0,0,127}), + Line( + points={{-102,0},{-65.0373,-0.01802}}, + color={0,0,127}), + Ellipse( + extent={{-70.0437,4.5925},{-60.0437,-4.90745}}, + lineColor={0,0,127}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Line( + points={{-63,-5},{-50,-40},{-39,-40}}, + color={0,0,127}), + Line( + points={{-62,-2},{-50.0698,-12.907},{-39.0698,-12.907}}, + color={0,0,127}), + Polygon( + points={{-38.8808,-11},{-38.8808,-15},{-34.8808,-13},{-38.8808,-11}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-39,42},{-39,38},{-35,40},{-39,42}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.8728,-38.0295},{-38.8728,-42.0295},{-34.8728,-40.0295},{-38.8728,-38.0295}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{-38.9983,14.8801},{-38.9983,10.8801},{-34.9983,12.8801},{-38.9983,14.8801}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-30,50},{30,-50}}, + fillColor={235,235,235}, + fillPattern=FillPattern.Solid, + lineColor={0,0,127}), + Line( + points={{100,0},{0,0}}, + color={0,0,127}), + Line( + points={{0,2},{0,-104}}, + color={255,128,0}), + Line( + points={{-35,40},{-20,40}}, + color={0,0,127}), + Line( + points={{-35,13},{-20,13}}, + color={0,0,127}), + Line( + points={{-35,-13},{-20,-13}}, + color={0,0,127}), + Line( + points={{-35,-40},{-20,-40}}, + color={0,0,127}), + Polygon( + points={{0,0},{-20,13},{-20,13},{0,0},{0,0}}, + lineColor={0,0,127}), + Ellipse( + extent={{-6,6},{6,-6}}, + lineColor={255,128,0}, + fillColor={255,128,0}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-100,100},{100,140}}, + textString="%name")}), + Documentation( + info=" +

+Block that returns +

+
    y = u[index];
+
+

+where u is a vector-valued Real input signal and +index is an Integer input signal. When the index +is out of range, +

+
    +
  • +then y = u[nin] if index > nin, and +
  • +
  • +y = u[1] if index < 1. +
  • +
+", +revisions=" +
    +
  • +April 19, 2023, by Michael Wetter:
    +Converted equation section to algorithm section. +This works around the issue reported +in OpenModelica, #10580. +
  • +
  • +October 14, 2022, by Jianjun Hu:
    +Changed output from a specified value to the element with the nearest valid index when the index input is out of range. +
  • +
  • +July 19, 2018, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end RealExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/RealScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/RealScalarReplicator.mo new file mode 100644 index 0000000000..76375e611a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/RealScalarReplicator.mo @@ -0,0 +1,65 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block RealScalarReplicator + "Real signal replicator" + parameter Integer nout=1 + "Number of outputs"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="reaScaRep", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={0,0,127}), + Line( + points={{100,0},{10,0}}, + color={0,0,127}), + Line( + points={{0,0},{100,10}}, + color={0,0,127}), + Line( + points={{0,0},{100,-10}}, + color={0,0,127}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")}), + Documentation( + info=" +

+This block replicates the Real input signal to an array of nout +identical Real output signals. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to RealScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation, based on the implementation of the +Modelica Standard Library. +
  • +
+")); +end RealScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/RealVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/RealVectorFilter.mo new file mode 100644 index 0000000000..e1f32071af --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/RealVectorFilter.mo @@ -0,0 +1,70 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block RealVectorFilter "Filter a real vector of based on a boolean mask" + + parameter Integer nin "Size of input vector"; + parameter Integer nout "Size of output vector"; + parameter Boolean msk[nin]=fill(true,nin) "Array mask"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input signals from which values are extracted" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout] + "Output with extracted input signals" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +protected + parameter Integer mskId[nout] = Modelica.Math.BooleanVectors.index(msk) + "Indices of included element in input vector"; + +initial equation + assert(nout==sum({if msk[i] then 1 else 0 for i in 1:nin}), + "In " + getInstanceName() + ": The size of the output vector does not + match the size of included elements in the mask."); +equation + y = u[mskId]; + annotation ( + defaultComponentName="reaVecFil", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Polygon( + points={{-60,80},{-60,-80},{20,-10},{60,-10},{80,10},{20,10},{-60,80}}, + lineColor={0,0,0}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid, + lineThickness=0.5), + Line(points={{-100,0},{-60,0}}, color={0,0,127}), + Line(points={{70,0},{100,0}}, color={0,0,127})}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+", info=" +

+This block filters a Real vector of size nin to +a vector of size nout given a boolean mask +msk. +

+

+If an entry in msk is true, then the value +of this input will be sent to the output y, otherwise it +will be discarded. +

+

+The parameter msk must have exactly nout entries +set to true, otherwise an error message is issued. +

+")); +end RealVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/RealVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/RealVectorReplicator.mo new file mode 100644 index 0000000000..1ed80049dc --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/RealVectorReplicator.mo @@ -0,0 +1,63 @@ +within IBPSA.Controls.OBC.CDL.Routing; +block RealVectorReplicator "Real vector signal replicator" + + parameter Integer nin=1 "Size of input vector"; + parameter Integer nout=1 "Number of row in output"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u[nin] + "Input signal to be replicated" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y[nout, nin] + "Output with replicated input signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + +equation + y=fill(u, nout); + annotation ( + defaultComponentName="reaVecRep", + Documentation( + info=" +

+This block replicates an Real vector input signal of size nin, +to a matrix with nout rows and nin columns, +where each row is duplicating the input vector. +

+", + revisions=" +
    +
  • +June 22, 2021, by Baptiste Ravache:
    +First implementation +
  • +
+"), + Icon(graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-100,0},{-6,0}}, + color={0,0,127}), + Line( + points={{100,0},{10,0}}, + color={0,0,127}), + Line( + points={{0,0},{100,10}}, + color={0,0,127}), + Line( + points={{0,0},{100,-10}}, + color={0,0,127}), + Ellipse( + extent={{-14,16},{16,-14}}, + lineColor={0,0,0}, + fillColor={0,0,127}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Line(points={{-100,-10},{0,0}}, color={0,0,127}), + Line(points={{-100,10},{0,0}}, color={0,0,127})})); +end RealVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mo new file mode 100644 index 0000000000..87d38a5c92 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mo @@ -0,0 +1,94 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model BooleanExtractSignal + "Validation model for extracting boolean signals" + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractSignal extBooSig( + final nin=4, + final nout=3, + final extract={3,2,4}) + "Block that extracts signal from a boolean input signal vector" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractSignal extBooSig1( + final nin=4, + final nout=5, + final extract={3,2,4,1,1}) + "Block that extracts signal from a boolean input signal vector" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=true) + "Block that outputs true signal" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Block that outputs false signal" + annotation (Placement(transformation(extent={{-80,-78},{-60,-58}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final period=0.2) "Generate pulse signal of type boolean" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final period=0.3) + "Generate pulse signal of type boolean" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + +equation + connect(con1.y, extBooSig.u[1]) annotation (Line(points={{-58,60},{-10,60},{-10, + 29.25},{38,29.25}}, color={255,0,255})); + connect(booPul.y, extBooSig.u[2]) annotation (Line(points={{-58,30},{-20,30},{ + -20,29.75},{38,29.75}}, color={255,0,255})); + connect(booPul1.y, extBooSig.u[3]) annotation (Line(points={{-58,-30},{10,-30}, + {10,30.25},{38,30.25}}, color={255,0,255})); + connect(con.y, extBooSig.u[4]) annotation (Line(points={{-58,-68},{20,-68},{20, + 30.75},{38,30.75}}, color={255,0,255})); + connect(con1.y, extBooSig1.u[1]) annotation (Line(points={{-58,60},{-10,60},{-10, + -30.75},{38,-30.75}}, color={255,0,255})); + connect(booPul.y, extBooSig1.u[2]) annotation (Line(points={{-58,30},{-20,30}, + {-20,-30.25},{38,-30.25}}, color={255,0,255})); + connect(booPul1.y, extBooSig1.u[3]) annotation (Line(points={{-58,-30},{10,-30}, + {10,-29.75},{38,-29.75}}, color={255,0,255})); + connect(con.y, extBooSig1.u[4]) annotation (Line(points={{-58,-68},{20,-68},{20, + -29.25},{38,-29.25}}, color={255,0,255})); +annotation ( + experiment(StopTime=1.0,Tolerance=1e-06), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractSignal.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.BooleanExtractSignal. +

+

+The instance extBooSig has the input vector with dimension of 4 and +the extracting vector is [3, 2, 4]. Thus the output vectors is [u[3], u[2], u[4]]. +

+

+The instance extBooSig1 has the input vector with dimension of 4 and +the extracting vector is [3, 2, 4, 1, 1]. Thus the output vectors is [u[3], u[2], u[4], u[1], u[1]]. +

+

+Note that when the extracting vector extract has any element with the value that +is out of range [1, nin], e.g. [1, 4] for instance in extBooSig. +It will issue error and the model will not translate. +

+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mo new file mode 100644 index 0000000000..66dc1022fc --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mo @@ -0,0 +1,177 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model BooleanExtractor + "Validation model for the boolean extractor block" + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor extIndBoo( + final nin=4) "Extracts signal from an input signal vector" + annotation (Placement(transformation(extent={{40,80},{60,100}}))); + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor extIndBoo1( + final nin=4) + "Extracts signal from an input signal vector when the extract index is out of the upper range" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor extIndBoo2( + final nin=4) + "Extracts signal from an input signal vector when the extract index is out of the lower range" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor extIndBoo3( + final nin=4) + "Extracts signal from an input signal vector when the extract index changes from within range to out of range" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor extIndBoo4( + final nin=4) + "Extracts signal from an input signal vector when the extract index changes from out of range to within range" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con1( + final k=true) + "Block that outputs true signal" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) + "Block that outputs false signal" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + final period=0.2) "Generate pulse signal of type boolean" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul1( + final period=0.3) + "Generate pulse signal of type boolean" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=2) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt1( + k=6) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt2( + k=0) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul( + final amplitude=3, + final period=1, + final offset=-1) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul1( + final amplitude=-3, + final period=1, + final offset=3) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-100},{20,-80}}))); + +equation + connect(conInt.y, extIndBoo.index) + annotation (Line(points={{22,70},{50,70},{50,78}}, color={255,127,0})); + connect(conInt1.y, extIndBoo1.index) + annotation (Line(points={{22,30},{50,30},{50,38}}, color={255,127,0})); + connect(con1.y, extIndBoo.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + 89.25},{38,89.25}}, color={255,0,255})); + connect(booPul.y, extIndBoo.u[2]) annotation (Line(points={{-58,30},{-30,30},{ + -30,89.75},{38,89.75}}, color={255,0,255})); + connect(booPul1.y, extIndBoo.u[3]) annotation (Line(points={{-58,-20},{-20,-20}, + {-20,90.25},{38,90.25}}, color={255,0,255})); + connect(con.y, extIndBoo.u[4]) annotation (Line(points={{-58,-70},{-10,-70},{-10, + 90.75},{38,90.75}}, color={255,0,255})); + connect(con1.y, extIndBoo1.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + 49.25},{38,49.25}}, color={255,0,255})); + connect(booPul.y, extIndBoo1.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,49.75},{38,49.75}}, color={255,0,255})); + connect(booPul1.y, extIndBoo1.u[3]) annotation (Line(points={{-58,-20},{-20,-20}, + {-20,50.25},{38,50.25}}, color={255,0,255})); + connect(con.y, extIndBoo1.u[4]) annotation (Line(points={{-58,-70},{-10,-70},{ + -10,50.75},{38,50.75}}, color={255,0,255})); + connect(con1.y, extIndBoo2.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + 9.25},{38,9.25}}, color={255,0,255})); + connect(booPul.y, extIndBoo2.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,9.75},{38,9.75}}, color={255,0,255})); + connect(booPul1.y, extIndBoo2.u[3]) annotation (Line(points={{-58,-20},{-10,-20}, + {-10,10.25},{38,10.25}}, color={255,0,255})); + connect(con.y, extIndBoo2.u[4]) annotation (Line(points={{-58,-70},{-10,-70},{ + -10,10.75},{38,10.75}}, color={255,0,255})); + connect(conInt2.y, extIndBoo2.index) + annotation (Line(points={{22,-10},{50,-10},{50,-2}}, color={255,127,0})); + connect(con1.y, extIndBoo3.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + -30.75},{38,-30.75}}, color={255,0,255})); + connect(booPul.y, extIndBoo3.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,-30.25},{38,-30.25}}, color={255,0,255})); + connect(booPul1.y, extIndBoo3.u[3]) annotation (Line(points={{-58,-20},{-20,-20}, + {-20,-29.75},{38,-29.75}}, color={255,0,255})); + connect(con.y, extIndBoo3.u[4]) annotation (Line(points={{-58,-70},{-10,-70},{ + -10,-29.25},{38,-29.25}}, color={255,0,255})); + connect(intPul.y, extIndBoo3.index) annotation (Line(points={{22,-50},{50,-50}, + {50,-42}}, color={255,127,0})); + connect(intPul1.y, extIndBoo4.index) + annotation (Line(points={{22,-90},{50,-90},{50,-82}}, color={255,127,0})); + connect(con1.y, extIndBoo4.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + -70.75},{38,-70.75}}, color={255,0,255})); + connect(booPul.y, extIndBoo4.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,-70.25},{38,-70.25}}, color={255,0,255})); + connect(booPul1.y, extIndBoo4.u[3]) annotation (Line(points={{-58,-20},{-20,-20}, + {-20,-69.75},{38,-69.75}}, color={255,0,255})); + connect(con.y, extIndBoo4.u[4]) annotation (Line(points={{-58,-70},{-10,-70},{ + -10,-69.25},{38,-69.25}}, color={255,0,255})); +annotation ( + experiment(StopTime=1.0,Tolerance=1e-06), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanExtractor.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.BooleanExtractor. +

+

+The instances extIndBoo, extIndBoo1, extIndBoo2, +extIndBoo3, and extIndBoo4 have the same input vector with +dimension of 4. However, they have different extract index and thus different output. +

+
    +
  • +The instance extIndBoo has the extract index of 2. The output is u[2]. +
  • +
  • +The instance extIndBoo1 has the extract index of 6. +Thus it is out of upper range [1, 4] and it outputs u[4]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndBoo2 has the extract index of 0. +Thus it is out of lower range [1, 4] and it outputs u[1]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndBoo3 has the extract index changing from 2 +to -1. Thus it first outputs u[2], and then changes to u[1]. +At the moment when the extract index becomes out of range, it issues a warning. +
  • +
  • +The instance extIndBoo4 has the extract index changing from 0 +to 3. Thus it first outputs u[1], and then changes to u[3]. +It issues a warning at the start of the simulation. +
  • +
+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}}))); +end BooleanExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mo new file mode 100644 index 0000000000..039b9e5040 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mo @@ -0,0 +1,55 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model BooleanScalarReplicator + "Validation model for the BooleanScalarReplicator block" + IBPSA.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( + nout=3) + "Block that outputs the array replicating input value" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + period=0.2) + "Block that outputs boolean pulse" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + +equation + connect(booPul.y,booRep.u) + annotation (Line(points={{-19,0},{18,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanScalarReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.BooleanScalarReplicator. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to BooleanScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mo new file mode 100644 index 0000000000..7335948539 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mo @@ -0,0 +1,49 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model BooleanVectorFilter + "Validation model for the BooleanVectorFilter block" + IBPSA.Controls.OBC.CDL.Routing.BooleanVectorFilter + booFil(nin=3, nout=2, msk={true,false,true}) + "Block that filter the input vector" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Logical.Sources.Constant booInp[3](k={true,true,false}) "Boolean inputs" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); +equation + connect(booInp.y, booFil.u) + annotation (Line(points={{-18,0},{18,0}}, color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorFilter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.BooleanVectorFilter. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mo new file mode 100644 index 0000000000..10e973702a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mo @@ -0,0 +1,49 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model BooleanVectorReplicator + "Validation model for the BooleanVectorReplicator block" + IBPSA.Controls.OBC.CDL.Routing.BooleanVectorReplicator booRep(nin=2, nout=3) + "Block that outputs the vector replicating input value" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul[2](period=fill(0.2,2)) + "Block that outputs boolean pulse" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + +equation + connect(booPul.y, booRep.u) + annotation (Line(points={{-18,0},{18,0}}, color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/BooleanVectorReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.BooleanVectorReplicator. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end BooleanVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mo new file mode 100644 index 0000000000..24ed9ed0f2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mo @@ -0,0 +1,99 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model IntegerExtractSignal + "Validation model for extracting integer signals" + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractSignal extIntSig( + final nin=4, + final nout=3, + final extract={3,2,4}) + "Block that extracts signal from an integer input signal vector" + annotation (Placement(transformation(extent={{40,20},{60,40}}))); + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractSignal extIntSig1( + final nin=4, + final nout=5, + final extract={3,2,4,2,3}) + "Block that extracts signal from an integer input signal vector" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt2( + final k=1) + "Block that outputs integer constant" + annotation (Placement(transformation(extent={{-80,50},{-60,70}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul( + final amplitude=1, + final period=0.2) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul1( + final period=0.3, + final amplitude=2, + final offset=-1) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{-80,-30},{-60,-10}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt3( + final k=4) + "Block that outputs integer constant" + annotation (Placement(transformation(extent={{-80,-70},{-60,-50}}))); + +equation + connect(conInt2.y,extIntSig. u[1]) annotation (Line(points={{-58,60},{-20,60}, + {-20,29.25},{38,29.25}}, color={255,127,0})); + connect(intPul.y,extIntSig. u[2]) annotation (Line(points={{-58,20},{-10,20},{ + -10,29.75},{38,29.75}}, color={255,127,0})); + connect(intPul1.y,extIntSig. u[3]) annotation (Line(points={{-58,-20},{0,-20}, + {0,30.25},{38,30.25}}, color={255,127,0})); + connect(conInt3.y,extIntSig. u[4]) annotation (Line(points={{-58,-60},{10,-60}, + {10,30.75},{38,30.75}}, color={255,127,0})); + connect(conInt2.y, extIntSig1.u[1]) annotation (Line(points={{-58,60},{-20,60}, + {-20,-30.75},{38,-30.75}}, color={255,127,0})); + connect(intPul.y, extIntSig1.u[2]) annotation (Line(points={{-58,20},{-10,20}, + {-10,-30.25},{38,-30.25}}, color={255,127,0})); + connect(intPul1.y, extIntSig1.u[3]) annotation (Line(points={{-58,-20},{0,-20}, + {0,-29.75},{38,-29.75}}, color={255,127,0})); + connect(conInt3.y, extIntSig1.u[4]) annotation (Line(points={{-58,-60},{10,-60}, + {10,-29.25},{38,-29.25}}, color={255,127,0})); +annotation ( + experiment(StopTime=1.0,Tolerance=1e-06), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractSignal.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.IntegerExtractSignal. +

+

+The instance extIntSig has the input vector with dimension of 4 and +the extracting vector is [3, 2, 4]. Thus the output vectors is [u[3], u[2], u[4]]. +

+

+The instance extIntSig1 has the input vector with dimension of 4 and +the extracting vector is [3, 2, 4, 2, 3]. +Thus the output vectors is [u[3], u[2], u[4], u[2], u[3]]. +

+

+Note that when the extracting vector extract has any element with the value that +is out of range [1, nin], e.g. [1, 4] for instance in extIntSig. +It will issue error and the model will not translate. +

+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegerExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mo new file mode 100644 index 0000000000..3685a4c29f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mo @@ -0,0 +1,177 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model IntegerExtractor + "Validation model for the integer extractor block" + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor extIndInt( + final nin=4) "Extracts signal from an input signal vector" + annotation (Placement(transformation(extent={{40,80},{60,100}}))); + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor extIndInt1( + final nin=4) + "Extracts signal from an input signal vector when the extract index is out of the upper range" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor extIndInt2( + final nin=4) + "Extracts signal from an input signal vector when the extract index is out of the lower range" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor extIndInt3( + final nin=4) + "Extracts signal from an input signal vector when the extract index changes from within range to out of range" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor extIndInt4( + final nin=4) + "Extracts signal from an input signal vector when the extract index changes from out of range to within range" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt2( + final k=0) + "Block that outputs integer constant" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt3( + final k=4) + "Block that outputs integer constant" + annotation (Placement(transformation(extent={{-80,-90},{-60,-70}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul( + final amplitude=1, + final period=0.2) "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{-80,20},{-60,40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul1( + final period=0.3, + final amplitude=2, + final offset=-1) "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=2) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt1(k=6) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt4(k=0) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul2( + final period=1, + final amplitude=3, + final offset=-1) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul3( + final period=1, + final amplitude=-3, + final offset=3) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-100},{20,-80}}))); + +equation + connect(conInt1.y, extIndInt1.index) + annotation (Line(points={{22,30},{50,30},{50,38}}, color={255,127,0})); + connect(conInt2.y, extIndInt.u[1]) annotation (Line(points={{-58,80},{-40,80}, + {-40,89.25},{38,89.25}}, color={255,127,0})); + connect(intPul.y, extIndInt.u[2]) annotation (Line(points={{-58,30},{-30,30},{ + -30,89.75},{38,89.75}}, color={255,127,0})); + connect(intPul1.y, extIndInt.u[3]) annotation (Line(points={{-58,-30},{-20,-30}, + {-20,90.25},{38,90.25}}, color={255,127,0})); + connect(conInt3.y, extIndInt.u[4]) annotation (Line(points={{-58,-80},{-10,-80}, + {-10,90.75},{38,90.75}}, color={255,127,0})); + connect(conInt2.y, extIndInt1.u[1]) annotation (Line(points={{-58,80},{-40,80}, + {-40,49.25},{38,49.25}}, color={255,127,0})); + connect(intPul.y, extIndInt1.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,49.75},{38,49.75}}, color={255,127,0})); + connect(intPul1.y, extIndInt1.u[3]) annotation (Line(points={{-58,-30},{-20,-30}, + {-20,50.25},{38,50.25}}, color={255,127,0})); + connect(conInt3.y, extIndInt1.u[4]) annotation (Line(points={{-58,-80},{-10,-80}, + {-10,50.75},{38,50.75}}, color={255,127,0})); + connect(conInt.y, extIndInt.index) + annotation (Line(points={{22,70},{50,70},{50,78}}, color={255,127,0})); + connect(conInt4.y, extIndInt2.index) + annotation (Line(points={{22,-10},{50,-10},{50,-2}}, color={255,127,0})); + connect(conInt2.y, extIndInt2.u[1]) annotation (Line(points={{-58,80},{-40,80}, + {-40,9.25},{38,9.25}}, color={255,127,0})); + connect(intPul.y, extIndInt2.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,9.75},{38,9.75}}, color={255,127,0})); + connect(intPul1.y, extIndInt2.u[3]) annotation (Line(points={{-58,-30},{-20,-30}, + {-20,10.25},{38,10.25}}, color={255,127,0})); + connect(conInt3.y, extIndInt2.u[4]) annotation (Line(points={{-58,-80},{-10,-80}, + {-10,10.75},{38,10.75}}, color={255,127,0})); + connect(conInt2.y, extIndInt3.u[1]) annotation (Line(points={{-58,80},{-40,80}, + {-40,-30.75},{38,-30.75}}, color={255,127,0})); + connect(intPul.y, extIndInt3.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,-30.25},{38,-30.25}}, color={255,127,0})); + connect(intPul1.y, extIndInt3.u[3]) annotation (Line(points={{-58,-30},{-20,-30}, + {-20,-29.75},{38,-29.75}}, color={255,127,0})); + connect(conInt3.y, extIndInt3.u[4]) annotation (Line(points={{-58,-80},{-10,-80}, + {-10,-29.25},{38,-29.25}}, color={255,127,0})); + connect(intPul2.y, extIndInt3.index) annotation (Line(points={{22,-50},{50,-50}, + {50,-42}}, color={255,127,0})); + connect(intPul3.y, extIndInt4.index) + annotation (Line(points={{22,-90},{50,-90},{50,-82}}, color={255,127,0})); + connect(conInt2.y, extIndInt4.u[1]) annotation (Line(points={{-58,80},{-40,80}, + {-40,-70.75},{38,-70.75}}, color={255,127,0})); + connect(intPul.y, extIndInt4.u[2]) annotation (Line(points={{-58,30},{-30,30}, + {-30,-70.25},{38,-70.25}}, color={255,127,0})); + connect(intPul1.y, extIndInt4.u[3]) annotation (Line(points={{-58,-30},{-20,-30}, + {-20,-69.75},{38,-69.75}}, color={255,127,0})); + connect(conInt3.y, extIndInt4.u[4]) annotation (Line(points={{-58,-80},{-10,-80}, + {-10,-69.25},{38,-69.25}}, color={255,127,0})); +annotation ( + experiment(StopTime=1.0, Tolerance=1e-06), + __Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerExtractor.mos" "Simulate and plot"), + Documentation(info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.IntegerExtractor. +

+

+The instances extIndInt, extIndInt1, extIndInt2, +extIndInt3, and extIndInt4 have the same input vector with +dimension of 4. However, they have different extract index and thus different output. +

+
    +
  • +The instance extIndInt has the extract index of 2. The output is u[2]. +
  • +
  • +The instance extIndInt1 has the extract index of 6. +Thus it is out of upper range [1, 4] and it outputs u[4]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndInt2 has the extract index of 0. +Thus it is out of lower range [1, 4] and it outputs u[1]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndInt3 has the extract index changing from 2 +to -1. Thus it first outputs u[2], and then changes to u[1]. +At the moment when the extract index becomes out of range, it issues a warning. +
  • +
  • +The instance extIndInt4 has the extract index changing from 0 +to 3. Thus it first outputs u[1], and then changes to u[3]. +It issues a warning at the start of the simulation. +
  • +
+", +revisions=" +
    +
  • +October 5, 2022, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}}))); +end IntegerExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo new file mode 100644 index 0000000000..1c500c9671 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mo @@ -0,0 +1,62 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model IntegerScalarReplicator + "Validation model for the IntegerScalarReplicator block" + IBPSA.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep( + nout=3) + "Block that outputs the array replicating input value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + height=5, + duration=1, + offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt + "Convert Real input to Integer output" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ram.y,reaToInt.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + connect(reaToInt.y,intRep.u) + annotation (Line(points={{11,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerScalarReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.IntegerScalarReplicator. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to IntegerScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegerScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mo new file mode 100644 index 0000000000..28f221403c --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mo @@ -0,0 +1,49 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model IntegerVectorFilter + "Validation model for the IntegerVectorFilter block" + IBPSA.Controls.OBC.CDL.Routing.IntegerVectorFilter + intFil(nin=3, nout=2, msk={true,false,true}) + "Block that filter the input vector" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Integers.Sources.Constant IntInp[3](k={1,2,3}) "Integer inputs" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); +equation + connect(IntInp.y, intFil.u) + annotation (Line(points={{-18,0},{18,0}}, color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorFilter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.IntegerVectorFilter. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegerVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo new file mode 100644 index 0000000000..95c3b9336e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mo @@ -0,0 +1,57 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model IntegerVectorReplicator + "Validation model for the IntegerVectorReplicator block" + IBPSA.Controls.OBC.CDL.Routing.IntegerVectorReplicator + intRep(nin=2, nout=3) + "Block that outputs the vector replicating input value" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram[2]( + height=fill(5,2), + duration=fill(1,2), + offset=fill(-2,2)) "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Conversions.RealToInteger reaToInt[2] + "Convert Real input to Integer output" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + +equation + connect(ram.y,reaToInt.u) + annotation (Line(points={{-38,0},{-12,0}},color={0,0,127})); + connect(reaToInt.y,intRep.u) + annotation (Line(points={{12,0},{38,0}},color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/IntegerVectorReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.IntegerVectorReplicator. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end IntegerVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo new file mode 100644 index 0000000000..6626dd3443 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mo @@ -0,0 +1,120 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model RealExtractSignal + "Validation model for the extract signal block" + IBPSA.Controls.OBC.CDL.Routing.RealExtractSignal extSig( + final nin=5, + final nout=3, + final extract={1,2,5}) + "Block that extracts signals from an input signal vector" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Routing.RealExtractSignal extSig1( + final nin=5, + final nout=6, + final extract={1,2,5,3,4,2}) + "Block that extracts signals from an input signal vector" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + final height=5, + final duration=1, + final offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + final duration=1, + final height=4, + final offset=-1) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + final duration=1, + final height=3, + final offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul( + final amplitude=0.5, + final period=0.2) + "Generate pulse signal of type Real" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul1( + final period=0.2, + final amplitude=1.5, + final offset=-0.2) + "Generate pulse signal of type Real" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ram.y,extSig.u[1]) + annotation (Line(points={{-38,60},{-20,60},{-20,39.2},{18,39.2}}, color={0,0,127})); + connect(pul.y,extSig.u[2]) + annotation (Line(points={{-38,30},{-16,30},{-16,39.6},{18,39.6}}, color={0,0,127})); + connect(pul1.y,extSig.u[3]) + annotation (Line(points={{-38,0},{-12,0},{-12,40},{18,40}}, color={0,0,127})); + connect(ram1.y,extSig.u[4]) + annotation (Line(points={{-38,-30},{-8,-30},{-8,40.4},{18,40.4}}, color={0,0,127})); + connect(ram2.y,extSig.u[5]) + annotation (Line(points={{-38,-60},{-4,-60},{-4,40.8},{18,40.8}},color={0,0,127})); + connect(ram.y, extSig1.u[1]) annotation (Line(points={{-38,60},{-20,60},{-20,-40.8}, + {18,-40.8}}, color={0,0,127})); + connect(pul.y, extSig1.u[2]) annotation (Line(points={{-38,30},{-16,30},{-16,-40.4}, + {18,-40.4}}, color={0,0,127})); + connect(pul1.y, extSig1.u[3]) annotation (Line(points={{-38,0},{-12,0},{-12,-40}, + {18,-40}}, color={0,0,127})); + connect(ram1.y, extSig1.u[4]) annotation (Line(points={{-38,-30},{-8,-30},{-8, + -39.6},{18,-39.6}}, color={0,0,127})); + connect(ram2.y, extSig1.u[5]) annotation (Line(points={{-38,-60},{-4,-60},{-4, + -39.2},{18,-39.2}}, color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractSignal.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.RealExtractSignal. +

+

+The instance extSig has the input vector with dimension of 4 and +the extracting vector is [1, 2, 5]. +Thus the output vectors is [u[1], u[2], u[5]]. +

+

+The instance extSig1 has the input vector with dimension of 4 and +the extracting vector is [1, 2, 5, 3, 4, 2]. Thus the output vectors is [u[1], u[2], u[5], u[3], u[4], u[2]]. +

+

+Note that when the extracting vector extract has any element with the value that +is out of range [1, nin], e.g. [1, 4] for instance in extSig. +It will issue error and the model will not translate. +

+", +revisions=" +
    +
  • +October 14, 2022, by Jianjun Hu:
    +Added validation when the number of outputs is more than the number of inputs. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end RealExtractSignal; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo new file mode 100644 index 0000000000..b720fd33f0 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealExtractor.mo @@ -0,0 +1,206 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model RealExtractor + "Validation model for the extractor block" + IBPSA.Controls.OBC.CDL.Routing.RealExtractor extIndSig( + final nin=5) "Extracts signal from an input signal vector" + annotation (Placement(transformation(extent={{40,80},{60,100}}))); + IBPSA.Controls.OBC.CDL.Routing.RealExtractor extIndSig1( + final nin=5) + "Extracts signal from an input signal vector when the extract index is out of the upper range" + annotation (Placement(transformation(extent={{40,40},{60,60}}))); + IBPSA.Controls.OBC.CDL.Routing.RealExtractor extIndSig2( + final nin=5) + "Extracts signal from an input signal vector when the extract index is out of the lower range" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + IBPSA.Controls.OBC.CDL.Routing.RealExtractor extIndSig3( + final nin=5) + "Extracts signal from an input signal vector when the extract index changes from within range to out of range" + annotation (Placement(transformation(extent={{40,-40},{60,-20}}))); + IBPSA.Controls.OBC.CDL.Routing.RealExtractor extIndSig4( + final nin=5) + "Extracts signal from an input signal vector when the extract index changes from out of range to within range" + annotation (Placement(transformation(extent={{40,-80},{60,-60}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + final height=5, + final duration=1, + final offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram1( + final duration=1, + final height=4, + final offset=-1) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-80,-20},{-60,0}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram2( + final duration=1, + final height=3, + final offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-80,-50},{-60,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul( + final amplitude=0.5, + final period=0.2) + "Generate pulse signal of type Real" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul1( + final period=0.2, + final amplitude=1.5, + final offset=-0.2) + "Generate pulse signal of type Real" + annotation (Placement(transformation(extent={{-80,10},{-60,30}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt( + final k=2) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt1(k=6) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,20},{20,40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Constant conInt2(k=0) + "Index to extract input signal" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul( + final amplitude=3, + final period=1, + final offset=-1) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-60},{20,-40}}))); + IBPSA.Controls.OBC.CDL.Integers.Sources.Pulse intPul1( + final amplitude=-3, + final period=1, + final offset=3) + "Generate pulse signal of type Integer" + annotation (Placement(transformation(extent={{0,-100},{20,-80}}))); +equation + connect(ram.y,extIndSig.u[1]) + annotation (Line(points={{-58,80},{-40,80},{-40,89.2},{38,89.2}}, color={0,0,127})); + connect(pul.y,extIndSig.u[2]) + annotation (Line(points={{-58,50},{-34,50},{-34,89.6},{38,89.6}}, color={0,0,127})); + connect(pul1.y,extIndSig.u[3]) + annotation (Line(points={{-58,20},{-28,20},{-28,90},{38,90}},color={0,0,127})); + connect(ram1.y,extIndSig.u[4]) + annotation (Line(points={{-58,-10},{-22,-10},{-22,90.4},{38,90.4}}, color={0,0,127})); + connect(ram2.y,extIndSig.u[5]) + annotation (Line(points={{-58,-40},{-16,-40},{-16,90.8},{38,90.8}}, color={0,0,127})); + connect(conInt.y,extIndSig.index) + annotation (Line(points={{22,70},{50,70},{50,78}},color={255,127,0})); + connect(conInt1.y,extIndSig1.index) + annotation (Line(points={{22,30},{50,30},{50,38}}, color={255,127,0})); + connect(ram.y,extIndSig1.u[1]) + annotation (Line(points={{-58,80},{-40,80},{-40,49.2},{38,49.2}}, color={0,0,127})); + connect(pul.y,extIndSig1.u[2]) + annotation (Line(points={{-58,50},{-34,50},{-34,49.6},{38,49.6}}, color={0,0,127})); + connect(pul1.y,extIndSig1.u[3]) + annotation (Line(points={{-58,20},{-28,20},{-28,50},{38,50}}, color={0,0,127})); + connect(ram1.y,extIndSig1.u[4]) + annotation (Line(points={{-58,-10},{-22,-10},{-22,50.4},{38,50.4}}, color={0,0,127})); + connect(ram2.y,extIndSig1.u[5]) + annotation (Line(points={{-58,-40},{-16,-40},{-16,50.8},{38,50.8}},color={0,0,127})); + connect(conInt2.y, extIndSig2.index) + annotation (Line(points={{22,-10},{50,-10},{50,-2}}, color={255,127,0})); + connect(ram.y, extIndSig2.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + 9.2},{38,9.2}}, color={0,0,127})); + connect(pul.y, extIndSig2.u[2]) annotation (Line(points={{-58,50},{-34,50},{-34, + 9.6},{38,9.6}}, color={0,0,127})); + connect(pul1.y, extIndSig2.u[3]) annotation (Line(points={{-58,20},{-28,20},{-28, + 10},{38,10}}, color={0,0,127})); + connect(ram1.y, extIndSig2.u[4]) annotation (Line(points={{-58,-10},{-22,-10}, + {-22,10.4},{38,10.4}}, color={0,0,127})); + connect(ram2.y, extIndSig2.u[5]) annotation (Line(points={{-58,-40},{-16,-40}, + {-16,10.8},{38,10.8}}, color={0,0,127})); + connect(ram.y, extIndSig3.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + -30.8},{38,-30.8}}, color={0,0,127})); + connect(pul.y, extIndSig3.u[2]) annotation (Line(points={{-58,50},{-34,50},{-34, + -30.4},{38,-30.4}}, color={0,0,127})); + connect(pul1.y, extIndSig3.u[3]) annotation (Line(points={{-58,20},{-28,20},{-28, + -30},{38,-30}}, color={0,0,127})); + connect(ram1.y, extIndSig3.u[4]) annotation (Line(points={{-58,-10},{-22,-10}, + {-22,-29.6},{38,-29.6}}, color={0,0,127})); + connect(ram2.y, extIndSig3.u[5]) annotation (Line(points={{-58,-40},{-16,-40}, + {-16,-29.2},{38,-29.2}}, color={0,0,127})); + connect(ram.y, extIndSig4.u[1]) annotation (Line(points={{-58,80},{-40,80},{-40, + -70.8},{38,-70.8}}, color={0,0,127})); + connect(pul.y, extIndSig4.u[2]) annotation (Line(points={{-58,50},{-34,50},{-34, + -70.4},{38,-70.4}}, color={0,0,127})); + connect(pul1.y, extIndSig4.u[3]) annotation (Line(points={{-58,20},{-28,20},{-28, + -70},{38,-70}}, color={0,0,127})); + connect(ram1.y, extIndSig4.u[4]) annotation (Line(points={{-58,-10},{-22,-10}, + {-22,-69.6},{38,-69.6}}, color={0,0,127})); + connect(ram2.y, extIndSig4.u[5]) annotation (Line(points={{-58,-40},{-16,-40}, + {-16,-69.2},{38,-69.2}}, color={0,0,127})); + connect(intPul.y, extIndSig3.index) + annotation (Line(points={{22,-50},{50,-50},{50,-42}}, color={255,127,0})); + connect(intPul1.y, extIndSig4.index) + annotation (Line(points={{22,-90},{50,-90},{50,-82}}, color={255,127,0})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealExtractor.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.RealExtractor. +

+

+The instances extIndSig, extIndSig1, extIndSig2, +extIndSig3, and extIndSig4 have the same input vector with +dimension of 5. However, they have different extract index and thus different output. +

+
    +
  • +The instance extIndSig has the extract index of 2. The output is u[2]. +
  • +
  • +The instance extIndSig1 has the extract index of 6. +Thus it is out of upper range [1, 5] and it outputs u[5]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndSig2 has the extract index of 0. +Thus it is out of lower range [1, 5] and it outputs u[1]. +It also issues a warning to indicate that the extract index is out of range. +
  • +
  • +The instance extIndSig3 has the extract index changing from 2 +to -1. Thus it first outputs u[2], and then changes to u[1]. +At the moment when the extract index becomes out of range, it issues a warning. +
  • +
  • +The instance extIndSig4 has the extract index changing from 0 +to 3. Thus it first outputs u[1], and then changes to u[3]. +It issues a warning at the start of the simulation. +
  • +
+", +revisions=" +
    +
  • +October 14, 2022, by Jianjun Hu:
    +Added more validations. +
  • +
  • +July 19, 2018, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-100,-120},{100,120}}))); +end RealExtractor; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo new file mode 100644 index 0000000000..33b2b18eac --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mo @@ -0,0 +1,57 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model RealScalarReplicator + "Validation model for the RealScalarReplicator block" + IBPSA.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep( + nout=3) + "Block that outputs the array replicating input value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram( + height=5, + duration=1, + offset=-2) + "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ram.y,reaRep.u) + annotation (Line(points={{-39,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealScalarReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.RealScalarReplicator. +

+", + revisions=" +
    +
  • +July 27, 2021, by Baptiste Ravache:
    +Renamed to RealScalarReplicator. +
  • +
  • +July 24, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end RealScalarReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo new file mode 100644 index 0000000000..7c29b49995 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mo @@ -0,0 +1,49 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model RealVectorFilter + "Validation model for the RealVectorFilter block" + IBPSA.Controls.OBC.CDL.Routing.RealVectorFilter + reaFil(nin=3, nout=2, msk={true,false,true}) + "Block that filter the input vector" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + + Reals.Sources.Constant ReaInp[3](k={1,2,3}) "Real inputs" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); +equation + connect(ReaInp.y, reaFil.u) + annotation (Line(points={{-18,0},{18,0}}, color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorFilter.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.RealVectorFilter. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end RealVectorFilter; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo new file mode 100644 index 0000000000..0247bf813d --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mo @@ -0,0 +1,52 @@ +within IBPSA.Controls.OBC.CDL.Routing.Validation; +model RealVectorReplicator + "Validation model for the RealVectorReplicator block" + IBPSA.Controls.OBC.CDL.Routing.RealVectorReplicator + reaRep(nin=2, nout=3) + "Block that outputs the vector replicating input value" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp ram[2]( + height=fill(5,2), + duration=fill(1,2), + offset=fill(-2,2)) "Block that outputs ramp signal" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + +equation + connect(ram.y,reaRep.u) + annotation (Line(points={{-38,0},{-12,0}},color={0,0,127})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Routing/Validation/RealVectorReplicator.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Routing.RealVectorReplicator. +

+", + revisions=" +
    +
  • +June 25, 2021, by Baptiste Ravache:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end RealVectorReplicator; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Routing/Validation/package.mo new file mode 100644 index 0000000000..982dccc2aa --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Routing; +package Validation "Collection of models that validate the routing blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Routing. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Routing/Validation/package.order b/IBPSA/Controls/OBC/CDL/Routing/Validation/package.order new file mode 100644 index 0000000000..c5606d9843 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/Validation/package.order @@ -0,0 +1,15 @@ +BooleanExtractSignal +BooleanExtractor +BooleanScalarReplicator +BooleanVectorFilter +BooleanVectorReplicator +IntegerExtractSignal +IntegerExtractor +IntegerScalarReplicator +IntegerVectorFilter +IntegerVectorReplicator +RealExtractSignal +RealExtractor +RealScalarReplicator +RealVectorFilter +RealVectorReplicator diff --git a/IBPSA/Controls/OBC/CDL/Routing/package.mo b/IBPSA/Controls/OBC/CDL/Routing/package.mo new file mode 100644 index 0000000000..e2ac3a28cc --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/package.mo @@ -0,0 +1,34 @@ +within IBPSA.Controls.OBC.CDL; +package Routing "Package with blocks that combine and extract signals" + annotation ( + Documentation( + info=" +

+This package contains blocks to combine and extract signals. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Line( + points={{-90,0},{4,0}}, + color={95,95,95}), + Line( + points={{88,65},{48,65},{-8,0}}, + color={95,95,95}), + Line( + points={{-8,0},{93,0}}, + color={95,95,95}), + Line( + points={{87,-65},{48,-65},{-8,0}}, + color={95,95,95})})); +end Routing; diff --git a/IBPSA/Controls/OBC/CDL/Routing/package.order b/IBPSA/Controls/OBC/CDL/Routing/package.order new file mode 100644 index 0000000000..99919894d5 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Routing/package.order @@ -0,0 +1,16 @@ +BooleanExtractSignal +BooleanExtractor +BooleanScalarReplicator +BooleanVectorFilter +BooleanVectorReplicator +IntegerExtractSignal +IntegerExtractor +IntegerScalarReplicator +IntegerVectorFilter +IntegerVectorReplicator +RealExtractSignal +RealExtractor +RealScalarReplicator +RealVectorFilter +RealVectorReplicator +Validation diff --git a/IBPSA/Controls/OBC/CDL/Types/Extrapolation.mo b/IBPSA/Controls/OBC/CDL/Types/Extrapolation.mo new file mode 100644 index 0000000000..556ac9fb3a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/Extrapolation.mo @@ -0,0 +1,33 @@ +within IBPSA.Controls.OBC.CDL.Types; +type Extrapolation = enumeration( + HoldLastPoint + "Hold the first/last table point outside of the table scope", + LastTwoPoints + "Extrapolate by using the derivative at the first/last table points outside of the table scope", + Periodic + "Repeat the table scope periodically") + "Enumeration defining the extrapolation of time table interpolation" + annotation (Documentation(info=" +

+Enumeration for the type of extrapolation that is used when reading data from a table. +The possible values are: +

+ + + + + + + + + + + +
EnumerationDescription
HoldLastPoint +Hold the first or last point outside of the table scope. +
LastTwoPoints +Extrapolate by using the derivative at the first or last table points outside of the table scope. +
Periodic +Repeat the table scope periodically. +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Types/SimpleController.mo b/IBPSA/Controls/OBC/CDL/Types/SimpleController.mo new file mode 100644 index 0000000000..bf712562b2 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/SimpleController.mo @@ -0,0 +1,41 @@ +within IBPSA.Controls.OBC.CDL.Types; +type SimpleController = enumeration( + P "P controller", + PI "PI controller", + PD "PD controller", + PID "PID controller") + "Enumeration defining P, PI, PD, or PID simple controller type" + annotation (Evaluate=true,Documentation(info=" +

+Enumeration to define the type of the controller. +Possible values are: +

+ + + + + + + + + + + + +
EnumerationDescription
P +Controller with proportional term. +
PI +Controller with proportional and integral terms. +
PD +Controller with proportional and derivative term. +
PID +Controller with proportional, integral and derivative terms. +
+",revisions=" +
    +
  • +March 23, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Types/Smoothness.mo b/IBPSA/Controls/OBC/CDL/Types/Smoothness.mo new file mode 100644 index 0000000000..54eb898037 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/Smoothness.mo @@ -0,0 +1,25 @@ +within IBPSA.Controls.OBC.CDL.Types; +type Smoothness = enumeration( + LinearSegments "Table points are linearly interpolated", + ConstantSegments "Table points are not interpolated, but the previous tabulated value is returned") + "Enumeration defining the smoothness of table interpolation" + annotation (Documentation(info=" +

+Enumeration for the type of smoothness that is used when interpolating data from a table. +The possible values are: +

+ + + + + + + + + +
EnumerationDescription
LinearSegments +Linearly interpolate table points. +
ConstantSegments +Do not interpolate, but rather use the previously tabulated value. +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Types/ZeroTime.mo b/IBPSA/Controls/OBC/CDL/Types/ZeroTime.mo new file mode 100644 index 0000000000..6ce41ba621 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/ZeroTime.mo @@ -0,0 +1,86 @@ +within IBPSA.Controls.OBC.CDL.Types; +type ZeroTime = enumeration( + UnixTimeStamp "Thu, 01 Jan 1970 00:00:00 local time", + UnixTimeStampGMT "Thu, 01 Jan 1970 00:00:00 GMT", + Custom "User specified local time", + NY2010 "New year 2010, 00:00:00 local time", + NY2011 "New year 2011, 00:00:00 local time", + NY2012 "New year 2012, 00:00:00 local time", + NY2013 "New year 2013, 00:00:00 local time", + NY2014 "New year 2014, 00:00:00 local time", + NY2015 "New year 2015, 00:00:00 local time", + NY2016 "New year 2016, 00:00:00 local time", + NY2017 "New year 2017, 00:00:00 local time", + NY2018 "New year 2018, 00:00:00 local time", + NY2019 "New year 2019, 00:00:00 local time", + NY2020 "New year 2020, 00:00:00 local time", + NY2021 "New year 2021, 00:00:00 local time", + NY2022 "New year 2022, 00:00:00 local time", + NY2023 "New year 2023, 00:00:00 local time", + NY2024 "New year 2024, 00:00:00 local time", + NY2025 "New year 2025, 00:00:00 local time", + NY2026 "New year 2026, 00:00:00 local time", + NY2027 "New year 2027, 00:00:00 local time", + NY2028 "New year 2028, 00:00:00 local time", + NY2029 "New year 2029, 00:00:00 local time", + NY2030 "New year 2030, 00:00:00 local time", + NY2031 "New year 2031, 00:00:00 local time", + NY2032 "New year 2032, 00:00:00 local time", + NY2033 "New year 2033, 00:00:00 local time", + NY2034 "New year 2034, 00:00:00 local time", + NY2035 "New year 2035, 00:00:00 local time", + NY2036 "New year 2036, 00:00:00 local time", + NY2037 "New year 2037, 00:00:00 local time", + NY2038 "New year 2038, 00:00:00 local time", + NY2039 "New year 2039, 00:00:00 local time", + NY2040 "New year 2040, 00:00:00 local time", + NY2041 "New year 2041, 00:00:00 local time", + NY2042 "New year 2042, 00:00:00 local time", + NY2043 "New year 2043, 00:00:00 local time", + NY2044 "New year 2044, 00:00:00 local time", + NY2045 "New year 2045, 00:00:00 local time", + NY2046 "New year 2046, 00:00:00 local time", + NY2047 "New year 2047, 00:00:00 local time", + NY2048 "New year 2048, 00:00:00 local time", + NY2049 "New year 2049, 00:00:00 local time", + NY2050 "New year 2050, 00:00:00 local time") + "Use this to set the date corresponding to time = 0" + annotation (Documentation(info=" +

+Type for choosing how to set the reference time in + +IBPSA.Controls.OBC.CDL.Reals.Sources.CalendarTime. +

+

+For example, CDL.Types.TimeReference.NY2016 +means that if model time is 0, it is +January 1, 2016, 0:00:00 local time. +

+",revisions=" +
    +
  • +March 8, 2024, by Jelger Jansen:
    +Extend functionality to year 2050.
    +This is for +Buildings, issue 1847. +
  • +
  • +March 14, 2017, by Michael Wetter:
    +Revised documentation. +
  • +
  • +February 23, 2017, by Milica Grahovac:
    +Initial CDL implementation. +
  • +
  • +September 10, 2016, by Michael Wetter:
    +Revised implementation and moved to new package + +IBPSA.Utilities.Time.CalendarTime.Types. +
  • +
  • +August 3, 2016, by Filip Jorissen:
    +First implementation. +
  • +
+")); diff --git a/IBPSA/Controls/OBC/CDL/Types/package.mo b/IBPSA/Controls/OBC/CDL/Types/package.mo new file mode 100644 index 0000000000..98d27ea8ce --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL; +package Types "Package with type definitions" + annotation ( + Documentation( + info=" +

+This package contains type definitions. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={-12.167,-23}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{12.167,65},{14.167,93},{36.167,89},{24.167,20},{4.167,-30},{14.167,-30},{24.167,-30},{24.167,-40},{-5.833,-50},{-15.833,-30},{4.167,20},{12.167,65}}, + smooth=Smooth.Bezier, + lineColor={0,0,0}), + Polygon( + origin={2.7403,1.6673}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{49.2597,22.3327},{31.2597,24.3327},{7.2597,18.3327},{-26.7403,10.3327},{-46.7403,14.3327},{-48.7403,6.3327},{-32.7403,0.3327},{-6.7403,4.3327},{33.2597,14.3327},{49.2597,14.3327},{49.2597,22.3327}}, + smooth=Smooth.Bezier)})); +end Types; diff --git a/IBPSA/Controls/OBC/CDL/Types/package.order b/IBPSA/Controls/OBC/CDL/Types/package.order new file mode 100644 index 0000000000..5b39c19665 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Types/package.order @@ -0,0 +1,4 @@ +Extrapolation +SimpleController +Smoothness +ZeroTime diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Assert.mo b/IBPSA/Controls/OBC/CDL/Utilities/Assert.mo new file mode 100644 index 0000000000..6c361a89c5 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Assert.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Utilities; +block Assert + "Print a warning message when input becomes false" + parameter String message + "Message written when u becomes false"; + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput u + "Boolean input that triggers assert when it becomes false" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + +equation + assert(u, message, AssertionLevel.warning); + annotation ( + defaultComponentName="assMes", + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{0,80},{-80,-60},{80,-60},{0,80}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0}), + Text( + extent={{-100,160},{100,106}}, + textColor={0,0,255}, + textString="%name"), + Polygon( + points={{0,72},{-72,-56},{72,-56},{0,72}}, + lineColor={0,0,0}, + fillColor={255,255,170}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-4,38},{2,-24}}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Ellipse( + extent={{-6,-32},{4,-42}}, + pattern=LinePattern.None, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid)}), + Documentation( + info=" +

+Block that writes a warning if the input becomes false. +

+

+Tools or control systems are expected to write message together +with a time stamp to an output device and/or a log file. +

+", + revisions=" +
    +
  • +November 6, 2017, by Michael Wetter:
    +Simplified implementation. +
  • +
  • +November 3, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+")); +end Assert; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/SunRiseSet.mo b/IBPSA/Controls/OBC/CDL/Utilities/SunRiseSet.mo new file mode 100644 index 0000000000..8d162683ae --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/SunRiseSet.mo @@ -0,0 +1,391 @@ +within IBPSA.Controls.OBC.CDL.Utilities; +block SunRiseSet + "Next sunrise and sunset time" + parameter Real lat( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Latitude"; + parameter Real lon( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Longitude"; + parameter Real timZon( + final quantity="Time", + final unit="s", + displayUnit="h") + "Time zone"; + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput nextSunRise( + final quantity="Time", + final unit="s", + displayUnit="h") + "Time of next sunrise" + annotation (Placement(transformation(extent={{100,40},{140,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput nextSunSet( + final quantity="Time", + final unit="s", + displayUnit="h") + "Time of next sunset" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput sunUp + "Output with true if the sun is up" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); + +protected + constant Real k1=sin( + 23.45*2*Modelica.Constants.pi/360) + "Intermediate constant"; + constant Real k2=2*Modelica.Constants.pi/365.25 + "Intermediate constant"; + parameter Real staTim( + final quantity="Time", + final unit="s", + fixed=false) + "Simulation start time"; + parameter Real timDifLocCiv( + final quantity="Time", + final unit="s", + fixed=false) + "Time difference between local and civil time"; + + Real eqnTim( + final quantity="Time", + final unit="s") + "Equation of time"; + Real timCor( + final quantity="Time", + final unit="s") + "Time correction"; + Real decAng( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Declination angle"; + Real Bt + "Intermediate variable to calculate equation of time"; + Real cosHou + "Cosine of hour angle"; + + + function nextHourAngle + "Calculate the hour angle when the sun rises or sets next time" + input Real t( + final quantity="Time", + final unit="s") + "Current simulation time"; + input Real timDifLocCiv( + final quantity="Time", + final unit="s") + "Time difference between local and civil time"; + input Real lat( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Latitude"; + output Real houAng( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Solar hour angle"; + output Real tNext( + final quantity="Time", + final unit="s") + "Timesnap when sun rises or sets next time"; + output Real timCor( + final quantity="Time", + final unit="s") + "Time correction"; + + protected + Integer iDay; + Boolean compute + "Flag, set to false when the sun rise or sets "; + Real Bt + "Intermediate variable to calculate equation of time"; + Real eqnTim( + final quantity="Time", + final unit="s") + "Equation of time"; + Real decAng( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Declination angle"; + Real cosHou + "Cosine of hour angle"; + + algorithm + iDay := 1; + compute := true; + while compute loop + tNext := t+iDay*86400; + Bt := Modelica.Constants.pi*((tNext+86400)/86400-81)/182; + eqnTim := 60*(9.87*Modelica.Math.sin( + 2*Bt)-7.53*Modelica.Math.cos(Bt)-1.5*Modelica.Math.sin(Bt)); + timCor := eqnTim+timDifLocCiv; + decAng := Modelica.Math.asin( + -k1*Modelica.Math.cos( + (tNext/86400+10)*k2)); + cosHou :=-Modelica.Math.tan(lat)*Modelica.Math.tan(decAng); + compute := abs(cosHou) > 1; + iDay := iDay+1; + end while; + houAng := Modelica.Math.acos(cosHou); + end nextHourAngle; + + function computeSunRise + "Output the next sunrise time" + input Real t( + final quantity="Time", + final unit="s") + "Current simulation time"; + input Real staTim( + final quantity="Time", + final unit="s") + "Simulation start time"; + input Real timDifLocCiv( + final quantity="Time", + final unit="s") + "Time difference between local and civil time"; + input Real lat( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Latitude"; + output Real nextSunRise( + final quantity="Time", + final unit="s"); + + protected + Real houAng( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Solar hour angle"; + Real tNext( + final quantity="Time", + final unit="s") + "Timesnap when sun rises next time"; + Real timCor( + final quantity="Time", + final unit="s") + "Time correction"; + Real sunRis( + final quantity="Time", + final unit="s") + "Sunrise of the same day as input time"; + Real cosHou( + final quantity="Time", + final unit="s") + "Cosine of hour angle"; + + algorithm + (houAng,tNext,timCor) := nextHourAngle( + t=t, + timDifLocCiv=timDifLocCiv, + lat=lat); + sunRis :=(12-houAng*24/(2*Modelica.Constants.pi)-timCor/3600)*3600+floor( + tNext/86400)*86400; + //If simulation start time has passed the sunrise of the initial day, output + //the sunrise of the next day. + if staTim > sunRis then + nextSunRise := sunRis+86400; + else + nextSunRise := sunRis; + end if; + end computeSunRise; + + function computeSunSet + "Output the next sunset time" + input Real t( + final quantity="Time", + final unit="s") + "Current simulation time"; + input Real staTim( + final quantity="Time", + final unit="s") + "Simulation start time"; + input Real timDifLocCiv( + final quantity="Time", + final unit="s") + "Time difference between local and civil time"; + input Real lat( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Latitude"; + output Real nextSunSet( + final quantity="Time", + final unit="s"); + + protected + Real houAng( + final quantity="Angle", + final unit="rad", + displayUnit="deg") + "Solar hour angle"; + Real tNext( + final quantity="Time", + final unit="s") + "Timesnap when sun sets next time"; + Real timCor( + final quantity="Time", + final unit="s") + "Time correction"; + Real sunSet( + final quantity="Time", + final unit="s") + "Sunset of the same day as input time"; + Real cosHou( + final quantity="Time", + final unit="s") + "Cosine of hour angle"; + + algorithm + (houAng,tNext,timCor) := nextHourAngle( + t=t, + timDifLocCiv=timDifLocCiv, + lat=lat); + sunSet :=(12+houAng*24/(2*Modelica.Constants.pi)-timCor/3600)*3600+floor( + tNext/86400)*86400; + //If simulation start time has passed the sunset of the initial day, output + //the sunset of the next day. + if staTim > sunSet then + nextSunSet := sunSet+86400; + else + nextSunSet := sunSet; + end if; + end computeSunSet; + +initial equation + staTim=time; + timDifLocCiv=lon*43200/Modelica.Constants.pi-timZon; + nextSunRise=computeSunRise( + t=time-86400, + staTim=staTim, + timDifLocCiv=timDifLocCiv, + lat=lat); + + //In the polar cases where the sun is up during initialization, the next sunset + //actually occurs before the next sunrise + if cosHou <-1 then + nextSunSet=computeSunSet( + t=time-86400, + staTim=staTim, + timDifLocCiv=timDifLocCiv, + lat=lat)-86400; + else + nextSunSet=computeSunSet( + t=time-86400, + staTim=staTim, + timDifLocCiv=timDifLocCiv, + lat=lat); + end if; + +equation + Bt=Modelica.Constants.pi*((time+86400)/86400-81)/182; + eqnTim=60*(9.87*Modelica.Math.sin( + 2*Bt)-7.53*Modelica.Math.cos(Bt)-1.5*Modelica.Math.sin(Bt)); + timCor=eqnTim+timDifLocCiv; + decAng=Modelica.Math.asin( + -k1*Modelica.Math.cos( + (time/86400+10)*k2)); + cosHou=-Modelica.Math.tan(lat)*Modelica.Math.tan(decAng); + //When time passes the current sunrise/sunset, output the next sunrise/sunset + when time >= pre(nextSunRise) then + nextSunRise=computeSunRise( + t=time, + staTim=staTim, + timDifLocCiv=timDifLocCiv, + lat=lat); + end when; + when time >= pre(nextSunSet) then + nextSunSet=computeSunSet( + t=time, + staTim=staTim, + timDifLocCiv=timDifLocCiv, + lat=lat); + end when; + sunUp=nextSunSet < nextSunRise; + annotation ( + defaultComponentName="sunRiseSet", + Documentation( + info=" +

+This block outputs the next sunrise and sunset time. +The sunrise time keeps constant until the model time reaches the next sunrise, +at which time the output gets updated. +Similarly, the output for the next sunset is updated at each sunset. +

+

+The time zone parameter is based on UTC time; for instance, Eastern Standard Time is -5h. +Note that daylight savings time is not considered in this component. +

+

Validation

+

+A validation can be found at + +IBPSA.Controls.OBC.CDL.Utilities.Validation.SunRiseSet. +

+", + revisions=" +
    +
  • +January 4, 2022, by Michael Wetter:
    +Changed implementation to avoid NaN in OpenModelica.
    +This is for +Buildings, issue 2835. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +November 27, 2018, by Kun Zhang:
    +First implementation. +This is for +issue 829. +
  • +
+"), + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-100,160},{100,106}}, + textColor={0,0,255}, + textString="%name"), + Ellipse( + extent={{70,-100},{-70,20}}, + lineColor={238,46,47}, + startAngle=0, + endAngle=180), + Line( + points={{-94,-40},{92,-40},{92,-40}}, + color={28,108,200}, + thickness=0.5), + Line( + points={{0,60},{0,32}}, + color={238,46,47}), + Line( + points={{60,40},{40,20}}, + color={238,46,47}), + Line( + points={{94,-6},{70,-6}}, + color={238,46,47}), + Line( + points={{10,10},{-10,-10}}, + color={238,46,47}, + origin={-50,30}, + rotation=90), + Line( + points={{-70,-6},{-94,-6}}, + color={238,46,47})})); +end SunRiseSet; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/Assert.mo b/IBPSA/Controls/OBC/CDL/Utilities/Validation/Assert.mo new file mode 100644 index 0000000000..c3b9e8705e --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/Assert.mo @@ -0,0 +1,51 @@ +within IBPSA.Controls.OBC.CDL.Utilities.Validation; +model Assert + "Validate the Assert block" + IBPSA.Controls.OBC.CDL.Utilities.Assert assert( + message="input became false") + "Trigger warning and print warning message" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse booPul( + period=0.5) + "Output boolean pulse" + annotation (Placement(transformation(extent={{-40,-10},{-20,10}}))); + +equation + connect(booPul.y,assert.u) + annotation (Line(points={{-19,0},{18,0}},color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/Assert.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.CDL.Utilities.Assert. +

+", + revisions=" +
    +
  • +November 3, 2017, by Jianjun Hu:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end Assert; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mo b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mo new file mode 100644 index 0000000000..7b4b05ad2a --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mo @@ -0,0 +1,77 @@ +within IBPSA.Controls.OBC.CDL.Utilities.Validation; +model SunRiseSet + "Test model for the block SunRiseSet" + + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetArctic( + lat=1.2566370614359, + lon=-1.2566370614359, + timZon=-18000) + "Arctic circle case" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSf( + lat=0.6457718232379, + lon=-2.1293016874331, + timZon=-28800) + "San Francisco as an example in the northen hemisphere" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetAntarctic( + lat=-1.3089969389957, + lon=0.99483767363677, + timZon=14400) + "Antarctic circle case" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSyd( + lat=-0.59341194567807, + lon=2.6354471705114, + timZon=36000) + "Sydney as an example in the southern hemisphere" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + annotation ( + experiment( + StopTime=31536000, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSet.mos" "Simulate and plot"), + Documentation( + info=" +

+This example includes four instances of the + +IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet block: +Two normal cases, an arctic and antarctic case. +The normal cases are represented by San Francisco and Sydney, +where there is a sunrise and sunset every day. +

+

+Above the arctic circle and below the antarctic circle, +in winter and summer there is a period in which there is no sunset and sunrise +for a few days. +Hence, the output signals of the block remain constant. +

+", + revisions=" +
    +
  • +March 17, 2023, by Michael Wetter:
    +Removed extends statement and added graphical annotation for icon. +
  • +
  • +November 27, 2018, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SunRiseSet; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mo b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mo new file mode 100644 index 0000000000..d17a95c0ed --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Utilities.Validation; +model SunRiseSetNegativeStartTime + "Test model for the block SunRiseSet with negative start time" + + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetArctic( + lat=1.2566370614359, + lon=-1.2566370614359, + timZon=-18000) + "Arctic circle case" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSf( + lat=0.6457718232379, + lon=-2.1293016874331, + timZon=-28800) + "San Francisco as a test example in the northen hemisphere" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetAntarctic( + lat=-1.3089969389957, + lon=0.99483767363677, + timZon=14400) + "Antarctic circle case" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSyd( + lat=-0.59341194567807, + lon=2.6354471705114, + timZon=36000) + "Sydney as a test example in the southern hemisphere" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + annotation ( + experiment( + StartTime=-43200, + StopTime=259200, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

This example includes 4 tests for the +IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet block: 2 normal cases, an arctic and antarctic case. +The normal cases are represented by San Francisco and Sydney, where there is a sunrise and sunset every day.

+

This model starts the simulation from -12 hour instead of 0.

+", + revisions=" +
    +
  • +March 17, 2023, by Michael Wetter:
    +Removed extends statement and added graphical annotation for icon. +
  • +
  • +November 27, 2018, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SunRiseSetNegativeStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mo b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mo new file mode 100644 index 0000000000..21fcd54b80 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mo @@ -0,0 +1,68 @@ +within IBPSA.Controls.OBC.CDL.Utilities.Validation; +model SunRiseSetPositiveStartTime + "Test model for the block SunRiseSet with positive start time" + + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetArctic( + lat=1.2566370614359, + lon=-1.2566370614359, + timZon=-18000) + "Arctic circle case" + annotation (Placement(transformation(extent={{-10,50},{10,70}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSf( + lat=0.6457718232379, + lon=-2.1293016874331, + timZon=-28800) + "San Francisco as a test example in the northen hemisphere" + annotation (Placement(transformation(extent={{-10,-30},{10,-10}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetAntarctic( + lat=-1.3089969389957, + lon=0.99483767363677, + timZon=14400) + "Antarctic circle case" + annotation (Placement(transformation(extent={{-10,10},{10,30}}))); + IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet sunRiseSetSyd( + lat=-0.59341194567807, + lon=2.6354471705114, + timZon=36000) + "Sydney as a test example in the southern hemisphere" + annotation (Placement(transformation(extent={{-10,-70},{10,-50}}))); + annotation ( + experiment( + StartTime=43200, + StopTime=345600, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/CDL/Utilities/Validation/SunRiseSetPositiveStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

This example includes 4 tests for the +IBPSA.Controls.OBC.CDL.Utilities.SunRiseSet block: 2 normal cases, an arctic and antarctic case. +The normal cases are represented by San Francisco and Sydney, where there is a sunrise and sunset every day.

+

This model starts the simulation from 12 hour instead of 0.

+", + revisions=" +
    +
  • +March 17, 2023, by Michael Wetter:
    +Removed extends statement and added graphical annotation for icon. +
  • +
  • +November 27, 2018, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SunRiseSetPositiveStartTime; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.mo b/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.mo new file mode 100644 index 0000000000..fe00591499 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.CDL.Utilities; +package Validation "Collection of models that validate the utilities blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.CDL.Utilities. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.order b/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.order new file mode 100644 index 0000000000..1b5a39d88f --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/Validation/package.order @@ -0,0 +1,4 @@ +Assert +SunRiseSet +SunRiseSetNegativeStartTime +SunRiseSetPositiveStartTime diff --git a/IBPSA/Controls/OBC/CDL/Utilities/package.mo b/IBPSA/Controls/OBC/CDL/Utilities/package.mo new file mode 100644 index 0000000000..b0f113f019 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/package.mo @@ -0,0 +1,39 @@ +within IBPSA.Controls.OBC.CDL; +package Utilities "Package with utility functions" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains utility models +that are used throughout the library. +

+"), + Icon( + coordinateSystem( + extent={{-100.0,-100.0},{100.0,100.0}}), + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={1.3835,-4.1418}, + rotation=45.0, + fillColor={64,64,64}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-15.0,93.333},{-15.0,68.333},{0.0,58.333},{15.0,68.333},{15.0,93.333},{20.0,93.333},{25.0,83.333},{25.0,58.333},{10.0,43.333},{10.0,-41.667},{25.0,-56.667},{25.0,-76.667},{10.0,-91.667},{0.0,-91.667},{0.0,-81.667},{5.0,-81.667},{15.0,-71.667},{15.0,-61.667},{5.0,-51.667},{-5.0,-51.667},{-15.0,-61.667},{-15.0,-71.667},{-5.0,-81.667},{0.0,-81.667},{0.0,-91.667},{-10.0,-91.667},{-25.0,-76.667},{-25.0,-56.667},{-10.0,-41.667},{-10.0,43.333},{-25.0,58.333},{-25.0,83.333},{-20.0,93.333}}), + Polygon( + origin={10.1018,5.218}, + rotation=-45.0, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-15.0,87.273},{15.0,87.273},{20.0,82.273},{20.0,27.273},{10.0,17.273},{10.0,7.273},{20.0,2.273},{20.0,-2.727},{5.0,-2.727},{5.0,-77.727},{10.0,-87.727},{5.0,-112.727},{-5.0,-112.727},{-10.0,-87.727},{-5.0,-77.727},{-5.0,-2.727},{-20.0,-2.727},{-20.0,2.273},{-10.0,7.273},{-10.0,17.273},{-20.0,27.273},{-20.0,82.273}})})); +end Utilities; diff --git a/IBPSA/Controls/OBC/CDL/Utilities/package.order b/IBPSA/Controls/OBC/CDL/Utilities/package.order new file mode 100644 index 0000000000..e7322e50f3 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/Utilities/package.order @@ -0,0 +1,3 @@ +Assert +SunRiseSet +Validation diff --git a/IBPSA/Controls/OBC/CDL/package.mo b/IBPSA/Controls/OBC/CDL/package.mo new file mode 100644 index 0000000000..54ae177284 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/package.mo @@ -0,0 +1,64 @@ +within IBPSA.Controls.OBC; +package CDL "Package with blocks, examples and validation tests for control description language" + annotation ( + Documentation( + info=" +

+Package that has Elementary Blocks +that form the Control Description Language (CDL). +

+

+The implementation is structured into sub-packages. +The packages Validation +contain validation models. +These are not part of the CDL specification, but rather +implemented to provide reference responses computed by the CDL blocks. +For a specification of CDL, see + +https://obc.lbl.gov/specification/cdl.html. +

+", + revisions=" +
    +
  • +December 22, 2016, by Michael Wetter:
    +Firt implementation, based on the blocks from the Modelica Standard Library. +
  • +
+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end CDL; diff --git a/IBPSA/Controls/OBC/CDL/package.order b/IBPSA/Controls/OBC/CDL/package.order new file mode 100644 index 0000000000..2a8aa44364 --- /dev/null +++ b/IBPSA/Controls/OBC/CDL/package.order @@ -0,0 +1,11 @@ +Constants +Conversions +Discrete +Integers +Logical +Psychrometrics +Reals +Routing +Utilities +Types +Interfaces diff --git a/IBPSA/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo b/IBPSA/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo new file mode 100644 index 0000000000..21200ac458 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/BaseClasses/OptimalStartCalculation.mo @@ -0,0 +1,316 @@ +within IBPSA.Controls.OBC.Utilities.BaseClasses; +block OptimalStartCalculation + "Base class for the block OptimalStart" + parameter Real tOptMax( + final quantity="Time", + final unit="s") + "Maximum optimal start time"; + parameter Real thrOptOn( + final quantity="Time", + final unit="s") + "Threshold time for the output optOn to become true"; + parameter Integer nDay + "Number of previous days for averaging the temperature slope"; + parameter Real uLow( + final quantity="TemperatureDifference", + final unit="K") + "Threshold to determine if the zone temperature reaches the occupied setpoint, + should be a non-negative number"; + parameter Real uHigh( + final quantity="TemperatureDifference", + final unit="K") + "Threshold to determine the need to start the HVAC system before occupancy, + should be greater than uLow"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TDif( + final quantity="TemperatureDifference", + final unit="K") + "Difference between zone setpoint and measured temperature, must be bigger than zero for heating and cooling if setpoint is not yet reached" + annotation (Placement(transformation(extent={{-320,100},{-280,140}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput staCal + "Start calculation" + annotation (Placement(transformation(extent={{-320,20},{-280,60}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput tNexOcc( + final quantity="Time", + final unit="s", + displayUnit="h") + "Time until next occupancy" + annotation (Placement(transformation(extent={{-320,-160},{-280,-120}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput tOpt( + final quantity="Time", + final unit="s", + displayUnit="h") + "Optimal start time of HVAC system" + annotation (Placement(transformation(extent={{440,40},{480,80}}), + iconTransformation(extent={{100,20},{140,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput optOn + "Optimal start boolean output" + annotation (Placement(transformation(extent={{440,-80},{480,-40}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + +protected + constant Real tReaMin( + final quantity="Time", + final unit="s", + displayUnit="h")=120 + "Minimum value for optimal start time if the system reached the set point almost immediately (used to avoid division by zero)"; + constant Real temSloDef( + final quantity="TemperatureSlope", + final unit="K/s")=1/3600 + "Minimum value for temperature slope (used to avoid division by zero)"; + IBPSA.Controls.OBC.CDL.Logical.Sources.SampleTrigger samTri( + final period=86400, + final shift=0) + "Trigger that triggers each midnight" + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean samTemSloAve( + final n=nDay) + "Calculate the averaged temperature slope over the past n days" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler dTCalOn + "Get the sampled temperature difference at the same time each day" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler dTHVACOn + "Get the temperature difference when the HVAC system starts" + annotation (Placement(transformation(extent={{-40,110},{-20,130}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con( + final k=0) + "Deadband case" + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant timReaMin( + final k=tReaMin) + "Minimum time to reach set point (used to avoid division by zero)" + annotation (Placement(transformation(extent={{-80,-42},{-60,-22}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant defTemSlo( + final k=temSloDef) + "Default temperature slope in case of zero division" + annotation (Placement(transformation(extent={{88,-40},{108,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.Edge edg + "HVAC start time" + annotation (Placement(transformation(extent={{-148,-90},{-128,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.FallingEdge falEdg + "The instant when the zone temperature reaches setpoint" + annotation (Placement(transformation(extent={{-148,-30},{-128,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hys( + final uLow=uLow, + final uHigh=uHigh) + "Comparing zone temperature with zone setpoint" + annotation (Placement(transformation(extent={{-260,64},{-240,84}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hysOpt( + final pre_y_start=false, + final uHigh=0, + final uLow=-60) + "Hysteresis to activate the optimal start" + annotation (Placement(transformation(extent={{320,-90},{340,-70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant maxStaTim( + final k=tOptMax) + "Maximum optimal start time" + annotation (Placement(transformation(extent={{210,-40},{230,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.TrueFalseHold truHol( + final falseHoldDuration=0, + final trueHoldDuration=tOptMax + 11*3600) + "Hold the start time for timer" + annotation (Placement(transformation(extent={{-240,0},{-220,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Divide temSlo + "Calculate temperature slope" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Pre pre + "Break algebraic loops" + annotation (Placement(transformation(extent={{390,-16},{410,4}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub1 + "Calculate the time duration to reach the setpoint" + annotation (Placement(transformation(extent={{-88,-10},{-68,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub2 + "Calculate differential between time-to-next-occupancy and the cool-down time" + annotation (Placement(transformation(extent={{280,-90},{300,-70}}))); + IBPSA.Controls.OBC.CDL.Reals.Min min + "Get the final optimal start time" + annotation (Placement(transformation(extent={{240,-16},{260,4}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triSam + "The instant when the zone temperature reaches setpoint with maximum time cutoff" + annotation (Placement(transformation(extent={{-130,0},{-110,20}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler triSam1 + "Record the start time when the HVAC system is turned on" + annotation (Placement(transformation(extent={{-130,-60},{-110,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.Latch lat + "Stop calculation when the zone temperature reaches setpoint" + annotation (Placement(transformation(extent={{-188,70},{-168,90}}))); + IBPSA.Controls.OBC.CDL.Logical.Timer tim + "Record time duration for the zone temperature to reach setpoint" + annotation (Placement(transformation(extent={{-210,0},{-190,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Becomes true when the setpoint is reached" + annotation (Placement(transformation(extent={{-220,64},{-200,84}}))); + IBPSA.Controls.OBC.CDL.Reals.Divide tOptCal + "Calculate optimal start time using the averaged previous temperature slope" + annotation (Placement(transformation(extent={{160,-10},{180,10}}))); + IBPSA.Controls.OBC.CDL.Discrete.TriggeredSampler samTimOpt + "Get the sampled optimal start time at the same time each day" + annotation (Placement(transformation(extent={{190,-10},{210,10}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greThr( + final t=thrOptOn) + "The threshold for optOn signal becomes true" + annotation (Placement(transformation(extent={{320,-16},{340,4}}))); + IBPSA.Controls.OBC.CDL.Logical.And and2 + "Logical and" + annotation (Placement(transformation(extent={{360,-16},{380,4}}))); + IBPSA.Controls.OBC.CDL.Reals.Max timRea + "Time required to reach the set point" + annotation (Placement(transformation(extent={{-40,-16},{-20,4}}))); + IBPSA.Controls.OBC.CDL.Reals.Max temSloAve + "Temperature slope during heat up or cool down over the past sampled days" + annotation (Placement(transformation(extent={{120,-16},{140,4}}))); + IBPSA.Controls.OBC.CDL.Reals.Switch dTUse + "dT used in the calculations (to avoid negative dT)" + annotation (Placement(transformation(extent={{80,70},{100,90}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold reqStaUp( + final t=0, + final h=0) + "Output true if optimal startup is needed" + annotation (Placement(transformation(extent={{10,70},{30,90}}))); + IBPSA.Controls.OBC.CDL.Logical.And triAve + "Trigger sampling but only if optimal start up is needed" + annotation (Placement(transformation(extent={{40,-42},{60,-22}}))); + +equation + connect(tim.y,triSam.u) + annotation (Line(points={{-188,10},{-132,10}},color={0,0,127})); + connect(falEdg.y,triSam.trigger) + annotation (Line(points={{-126,-20},{-120,-20},{-120,-1.8}},color={255,0,255})); + connect(not1.y,lat.clr) + annotation (Line(points={{-198,74},{-190,74}},color={255,0,255})); + connect(temSlo.y,samTemSloAve.u) + annotation (Line(points={{22,0},{58,0}},color={0,0,127})); + connect(TDif,hys.u) + annotation (Line(points={{-300,120},{-272,120},{-272,74},{-262,74}},color={0,0,127})); + connect(staCal,dTCalOn.trigger) + annotation (Line(points={{-300,40},{-30,40},{-30,68.2}},color={255,0,255})); + connect(TDif,dTHVACOn.u) + annotation (Line(points={{-300,120},{-42,120}},color={0,0,127})); + connect(pre.y,dTHVACOn.trigger) + annotation (Line(points={{412,-6},{420,-6},{420,104},{-30,104},{-30,108.2}},color={255,0,255})); + connect(pre.y,lat.u) + annotation (Line(points={{412,-6},{420,-6},{420,150},{-190,150},{-190,80}},color={255,0,255})); + connect(edg.y,triSam1.trigger) + annotation (Line(points={{-126,-80},{-120,-80},{-120,-61.8}},color={255,0,255})); + connect(triSam1.y,sub1.u2) + annotation (Line(points={{-108,-50},{-100,-50},{-100,-6},{-90,-6}},color={0,0,127})); + connect(triSam.y,sub1.u1) + annotation (Line(points={{-108,10},{-100,10},{-100,6},{-90,6}},color={0,0,127})); + connect(TDif,dTCalOn.u) + annotation (Line(points={{-300,120},{-140,120},{-140,80},{-42,80}},color={0,0,127})); + connect(tNexOcc,sub2.u2) + annotation (Line(points={{-300,-140},{272,-140},{272,-86},{278,-86}},color={0,0,127})); + connect(sub2.y,hysOpt.u) + annotation (Line(points={{302,-80},{318,-80}},color={0,0,127})); + connect(min.y,sub2.u1) + annotation (Line(points={{262,-6},{270,-6},{270,-74},{278,-74}},color={0,0,127})); + connect(staCal,truHol.u) + annotation (Line(points={{-300,40},{-260,40},{-260,10},{-242,10}},color={255,0,255})); + connect(truHol.y,tim.u) + annotation (Line(points={{-218,10},{-212,10}},color={255,0,255})); + connect(tim.y,triSam1.u) + annotation (Line(points={{-188,10},{-168,10},{-168,-50},{-132,-50}},color={0,0,127})); + connect(min.y,tOpt) + annotation (Line(points={{262,-6},{270,-6},{270,60},{460,60}},color={0,0,127})); + connect(not1.u,hys.y) + annotation (Line(points={{-222,74},{-238,74}},color={255,0,255})); + connect(lat.y,edg.u) + annotation (Line(points={{-166,80},{-162,80},{-162,-80},{-150,-80}},color={255,0,255})); + connect(lat.y,falEdg.u) + annotation (Line(points={{-166,80},{-162,80},{-162,-20},{-150,-20}},color={255,0,255})); + connect(tOptCal.y,samTimOpt.u) + annotation (Line(points={{182,0},{188,0}},color={0,0,127})); + connect(staCal,samTimOpt.trigger) + annotation (Line(points={{-300,40},{146,40},{146,-20},{200,-20},{200,-11.8}},color={255,0,255})); + connect(dTHVACOn.y,temSlo.u1) + annotation (Line(points={{-18,120},{-10,120},{-10,6},{-2,6}},color={0,0,127})); + connect(min.y,greThr.u) + annotation (Line(points={{262,-6},{318,-6}},color={0,0,127})); + connect(hysOpt.y,and2.u2) + annotation (Line(points={{342,-80},{350,-80},{350,-14},{358,-14}},color={255,0,255})); + connect(greThr.y,and2.u1) + annotation (Line(points={{342,-6},{358,-6}},color={255,0,255})); + connect(and2.y,pre.u) + annotation (Line(points={{382,-6},{388,-6}},color={255,0,255})); + connect(pre.y,optOn) + annotation (Line(points={{412,-6},{420,-6},{420,-60},{460,-60}},color={255,0,255})); + connect(timRea.y,temSlo.u2) + annotation (Line(points={{-18,-6},{-2,-6}},color={0,0,127})); + connect(timRea.u1,sub1.y) + annotation (Line(points={{-42,0},{-66,0}},color={0,0,127})); + connect(temSloAve.y,tOptCal.u2) + annotation (Line(points={{142,-6},{158,-6}},color={0,0,127})); + connect(temSloAve.u1,samTemSloAve.y) + annotation (Line(points={{118,0},{82,0}},color={0,0,127})); + connect(defTemSlo.y,temSloAve.u2) + annotation (Line(points={{110,-30},{112,-30},{112,-12},{118,-12}},color={0,0,127})); + connect(min.u1,samTimOpt.y) + annotation (Line(points={{238,0},{212,0}},color={0,0,127})); + connect(maxStaTim.y,min.u2) + annotation (Line(points={{232,-30},{234,-30},{234,-12},{238,-12}},color={0,0,127})); + connect(reqStaUp.u,dTCalOn.y) + annotation (Line(points={{8,80},{-18,80}},color={0,0,127})); + connect(dTUse.u2,reqStaUp.y) + annotation (Line(points={{78,80},{32,80}},color={255,0,255})); + connect(dTCalOn.y,dTUse.u1) + annotation (Line(points={{-18,80},{2,80},{2,100},{52,100},{52,88},{78,88}},color={0,0,127})); + connect(con.y,dTUse.u3) + annotation (Line(points={{62,60},{72,60},{72,72},{78,72}},color={0,0,127})); + connect(dTUse.y,tOptCal.u1) + annotation (Line(points={{102,80},{150,80},{150,6},{158,6}},color={0,0,127})); + connect(triAve.u2,samTri.y) + annotation (Line(points={{38,-40},{22,-40}},color={255,0,255})); + connect(reqStaUp.y,triAve.u1) + annotation (Line(points={{32,80},{36,80},{36,-32},{38,-32}},color={255,0,255})); + connect(triAve.y,samTemSloAve.trigger) + annotation (Line(points={{62,-32},{70,-32},{70,-12}},color={255,0,255})); + connect(timReaMin.y, timRea.u2) annotation (Line(points={{-58,-32},{-50,-32}, + {-50,-12},{-42,-12}}, color={0,0,127})); + annotation ( + defaultComponentName="optStaCal", + Documentation( + info=" +

+This base class contains the algorithm for the optimal start calculation. For the +description of the algorithm, please refer to the documentation for the block + +IBPSA.Controls.OBC.Utilities.OptimalStart. +

+", + revisions=" +
    +
  • +January 30, 2021, by Michael Wetter:
    +Refactored sampling of history of temperature slope to only sample when control error requires optimal start up. +Refactored guarding against division by zero.
    +This is for +Buildings, issue 2345. +
  • +
  • +October 20, 2020, by Michael Wetter:
    +Reimplemented trigger of the moving average computation. +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Diagram( + coordinateSystem( + extent={{-280,-160},{440,160}})), + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name")})); +end OptimalStartCalculation; diff --git a/IBPSA/Controls/OBC/Utilities/BaseClasses/package.mo b/IBPSA/Controls/OBC/Utilities/BaseClasses/package.mo new file mode 100644 index 0000000000..876a6f3908 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/BaseClasses/package.mo @@ -0,0 +1,29 @@ +within IBPSA.Controls.OBC.Utilities; +package BaseClasses "Package with base classes" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains base classes to construct blocks in +IBPSA.Controls.OBC.Utilities. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Ellipse( + extent={{-30,-30},{30,30}}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid)})); +end BaseClasses; diff --git a/IBPSA/Controls/OBC/Utilities/BaseClasses/package.order b/IBPSA/Controls/OBC/Utilities/BaseClasses/package.order new file mode 100644 index 0000000000..8b68ab4181 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/BaseClasses/package.order @@ -0,0 +1 @@ +OptimalStartCalculation diff --git a/IBPSA/Controls/OBC/Utilities/OptimalStart.mo b/IBPSA/Controls/OBC/Utilities/OptimalStart.mo new file mode 100644 index 0000000000..5846edbc08 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/OptimalStart.mo @@ -0,0 +1,383 @@ +within IBPSA.Controls.OBC.Utilities; +block OptimalStart + "Block that outputs the optimal start time for an HVAC system before occupancy" + parameter Real tOptMax( + final quantity="Time", + final unit="s", + displayUnit="h", + final min=0, + max=21600)=10800 + "Maximum optimal start time"; + parameter Integer nDay( + min=1)=3 + "Number of previous days used to compute the optimal start up time"; + parameter Boolean computeHeating=false + "Set to true to compute optimal start for heating"; + parameter Boolean computeCooling=false + "Set to true to compute optimal start for cooling"; + parameter Real uLow( + final quantity="TemperatureDifference", + final unit="K", + final min=0)=0 + "Threshold to determine if the zone temperature reaches the occupied setpoint, + must be a non-negative number"; + parameter Real uHigh( + final quantity="TemperatureDifference", + final unit="K", + final min=0)=0.5 + "Threshold to determine the need to start the HVAC system before occupancy, + must be greater than uLow"; + parameter Real thrOptOn( + final quantity="Time", + final unit="s", + displayUnit="h", + final min=0, + max=10800)=60 + "Threshold time, optimal start on signal becomes true when tOpt larger than thrOptOn"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSetZonHea( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) if computeHeating + "Zone heating setpoint temperature during occupancy" + annotation (Placement(transformation(extent={{-180,60},{-140,100}}), + iconTransformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TZon( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) + "Zone temperature" + annotation (Placement(transformation(extent={{-180,-60},{-140,-20}}), + iconTransformation(extent={{-140,-60},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSetZonCoo( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) if computeCooling + "Zone cooling setpoint temperature during occupancy" + annotation (Placement(transformation(extent={{-180,20},{-140,60}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput tNexOcc( + final quantity="Time", + final unit="s", + displayUnit="h") + "Time until next occupancy" + annotation (Placement(transformation(extent={{-180,-100},{-140,-60}}), + iconTransformation(extent={{-140,-100},{-100,-60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput tOpt( + final quantity="Time", + final unit="s", + displayUnit="h") + "Optimal start time duration of HVAC system" + annotation (Placement(transformation(extent={{140,20},{180,60}}), + iconTransformation(extent={{100,20},{140,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput optOn + "Outputs true if the HVAC system remains in the optimal start period" + annotation (Placement(transformation(extent={{140,-60},{180,-20}}), + iconTransformation(extent={{100,-60},{140,-20}}))); + IBPSA.Controls.OBC.Utilities.BaseClasses.OptimalStartCalculation optHea( + final tOptMax=tOptMax, + final thrOptOn=thrOptOn, + final nDay=nDay, + final uLow=uLow, + final uHigh=uHigh) if computeHeating + "Optimal start time for heating system" + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + IBPSA.Controls.OBC.Utilities.BaseClasses.OptimalStartCalculation optCoo( + final tOptMax=tOptMax, + final thrOptOn=thrOptOn, + final nDay=nDay, + final uLow=uLow, + final uHigh=uHigh) if computeCooling + "Optimal start time for cooling system" + annotation (Placement(transformation(extent={{20,-80},{40,-60}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold hysSta( + t=60, + h=60) + "Hysteresis to activate the optimal start boolean output" + annotation (Placement(transformation(extent={{-70,-10},{-50,10}}))); + +protected + IBPSA.Controls.OBC.CDL.Reals.Max max + "Get the maximum optimal start time " + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + IBPSA.Controls.OBC.CDL.Reals.AddParameter addPar( + p=-tOptMax) + "Maximum optimal start time" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Or or2 + "Get the optimal start boolean output" + annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dTHea if computeHeating + "Temperature difference between heating setpoint and zone temperature" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dTCoo if computeCooling + "Temperature difference between zone temperature and cooling setpoint" + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + IBPSA.Controls.OBC.CDL.Logical.FallingEdge falEdg + "Stop calculation" + annotation (Placement(transformation(extent={{-30,-10},{-10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con2( + final k=0) if not computeHeating + "Becomes effective when optimal start is only for heating" + annotation (Placement(transformation(extent={{60,40},{80,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con1( + final k=0) if not computeCooling + "Becomes effective when optimal start is only for cooling" + annotation (Placement(transformation(extent={{60,10},{80,30}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con( + final k=false) if not computeHeating + "Becomes effective when optimal start is only for heating" + annotation (Placement(transformation(extent={{60,-30},{80,-10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con3( + final k=false) if not computeCooling + "Becomes effective when optimal start is only for cooling" + annotation (Placement(transformation(extent={{60,-94},{80,-74}}))); + +equation + connect(TSetZonCoo,dTCoo.u2) + annotation (Line(points={{-160,40},{-132,40},{-132,-56},{-82,-56}},color={0,0,127})); + connect(TZon,dTCoo.u1) + annotation (Line(points={{-160,-40},{-90,-40},{-90,-44},{-82,-44}}, color={0,0,127})); + connect(TZon,dTHea.u2) + annotation (Line(points={{-160,-40},{-122,-40},{-122,74},{-82,74}},color={0,0,127})); + connect(TSetZonHea,dTHea.u1) + annotation (Line(points={{-160,80},{-126,80},{-126,86},{-82,86}},color={0,0,127})); + connect(max.y,tOpt) + annotation (Line(points={{122,40},{160,40}},color={0,0,127})); + connect(con2.y,max.u1) + annotation (Line(points={{82,50},{88,50},{88,46},{98,46}},color={0,0,127})); + connect(con1.y,max.u2) + annotation (Line(points={{82,20},{88,20},{88,34},{98,34}},color={0,0,127})); + connect(dTCoo.y,optCoo.TDif) + annotation (Line(points={{-58,-50},{-22,-50},{-22,-62},{18,-62}},color={0,0,127})); + connect(dTHea.y,optHea.TDif) + annotation (Line(points={{-58,80},{-8,80},{-8,78},{18,78}},color={0,0,127})); + connect(tNexOcc,addPar.u) + annotation (Line(points={{-160,-80},{-120,-80},{-120,0},{-102,0}},color={0,0,127})); + connect(tNexOcc,optHea.tNexOcc) + annotation (Line(points={{-160,-80},{-120,-80},{-120,62},{18,62}},color={0,0,127})); + connect(optCoo.tOpt,max.u2) + annotation (Line(points={{42,-66},{88,-66},{88,34},{98,34}},color={0,0,127})); + connect(optHea.tOpt,max.u1) + annotation (Line(points={{42,74},{88,74},{88,46},{98,46}},color={0,0,127})); + connect(tNexOcc,optCoo.tNexOcc) + annotation (Line(points={{-160,-80},{-68,-80},{-68,-78},{18,-78}},color={0,0,127})); + connect(falEdg.y,optHea.staCal) + annotation (Line(points={{-8,0},{0,0},{0,70},{18,70}},color={255,0,255})); + connect(falEdg.y,optCoo.staCal) + annotation (Line(points={{-8,0},{0,0},{0,-70},{18,-70}},color={255,0,255})); + connect(or2.y,optOn) + annotation (Line(points={{122,-40},{160,-40}},color={255,0,255})); + connect(con.y,or2.u1) + annotation (Line(points={{82,-20},{92,-20},{92,-40},{98,-40}},color={255,0,255})); + connect(con3.y,or2.u2) + annotation (Line(points={{82,-84},{92,-84},{92,-48},{98,-48}},color={255,0,255})); + connect(optCoo.optOn,or2.u2) + annotation (Line(points={{42,-74},{50,-74},{50,-48},{98,-48}},color={255,0,255})); + connect(optHea.optOn,or2.u1) + annotation (Line(points={{42,66},{92,66},{92,-40},{98,-40}},color={255,0,255})); + connect(falEdg.u,hysSta.y) + annotation (Line(points={{-32,0},{-48,0}},color={255,0,255})); + connect(addPar.y,hysSta.u) + annotation (Line(points={{-78,0},{-72,0}},color={0,0,127})); + annotation ( + defaultComponentName="optSta", + Documentation( + info=" +

+This block predicts the shortest time for an HVAC system to meet the occupied setpoint +prior to the scheduled occupancy. The block requires inputs of zone temperature, +occupied zone setpoint(s) and next occupancy. The two outputs are the optimal start +duration tOpt and the optimal start on signal optOn for +the HVAC system. +

+

+The block estimates the thermal mass of a zone using its measured air temperature gradient +with respect to time. Once the temperature slope of a zone is known, the optimal start +time can be calculated by the difference between the zone temperature +and the occupied setpoint divided by the temperature slope, assuming the zone responds +as if all thermal mass were concentrated in the room air. +

+

+The temperature slope is self-tuned based on past data. The moving +average of the temperature slope of the past nDay days +is calculated and used for +the prediction of the optimal start time in the current day. +

+

Parameters

+

+The parameter nDay is used to compute the moving average of the temperature +slope; the first n days of simulation is therefore used to +initialize the block. +

+

+The parameter +tOptMax is the maximum allowed optimal start time. +

+

+The block includes two hysteresis parameters uLow and uHigh. +The parameter +uLow is used to determine if the zone temperature reaches +the setpoint. The algorithm assumes that the zone temperature has reached the setpoint if +TSetZonHea-TZon ≤ uLow for a heating system, or +TZon-TSetZonCoo ≤ uLow for a cooling system, where +TSetZonHea +denotes the zone heating setpoint during occupancy, TSetZonCoo +denotes the zone cooling setpoint during occupancy, and TZon denotes the +zone temperature. +The parameter +uHigh is used by the algorithm to determine if there is a need to +start the HVAC system prior to occupancy. If +TSetZonHea-TZon ≤ uHigh for heating case or +TZon-TSetZonCoo ≤ uHigh for cooling case, +then there is no need for the system to start before the occupancy. +

+

+The optimal start is only active (i.e., the optimal start on signal optOn +becomes true) if the optimal start time is larger than the parameter +thrOptOn. +

+

Configuration for HVAC systems

+

+The block can be used for heating system only or cooling system only or for both +heating and cooling system. +The two parameters computeHeating and computeCooling are +used to configure the block for these three scenarios. +

+

+The block calculates the optimal start time separately for heating and cooling systems. +The base class + +IBPSA.Controls.OBC.Utilities.BaseClasses.OptimalStartCalculation is used +for the calculation. +

+

Algorithm

+

+The algorithm is as follows: +

+
Step 1: Calculate temeperature slope TSlo
+

+Once the HVAC system is started, a timer records the time duration +Δt for the zone temperature to reach the +setpoint. At the time when the timer starts, the zone temperature TSam1 is sampled. +The temperature slope is +approximated using the equation TSlo = |TSetZonOcc-TSam1|/Δt, +where TSetZonOcc is the occupied zone setpoint. Note that if +Δt is greater than the maximum optimal start time tOptMax, +then tOptMax is used instead of Δt. +This is to avoid corner cases where the setpoint is never reached, e.g., the HVAC +system is undersized, or there is a steady-state error associated with the HVAC control. +

+
Step 2: Calculate temperature slope moving average TSloMa
+

+After computing the temperature slope of each day, the moving average of the +temperature slope TSloMa during the previous nDay days +is calculated. Please refer to + +IBPSA.Controls.OBC.CDL.Discrete.TriggeredMovingMean for details about +the moving average algorithm. +

+
Step 3: Calculate optimal start time tOpt
+

+Each day at a certain time before the occupancy, the algorithm takes another +sample of the zone temperature, denoted as TSam2. The sample +takes place tOptMax prior to occupancy start time. +

+

+The optimal start time is then calculated as tOpt = |TSetZonOcc-TSam2|/TSloMa. +

+

Validation

+

+Validation models can be found in the package + +IBPSA.Controls.OBC.Utilities.Validation. +

+", + revisions=" +
    +
  • +January 30, 2021, by Michael Wetter:
    +Refactored sampling of history of temperature slope to only sample when control error requires optimal start up. +Refactored guarding against division by zero.
    +This is for +Buildings, issue 2345. +
  • +
  • +August 6, 2020, by Michael Wetter:
    +Replaced hysteresis with new inequality block. +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +This is for Buildings, issue #1589. +
  • +
+"), + Diagram( + coordinateSystem( + extent={{-140,-100},{140,100}})), + Icon( + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-70,40},{10,40},{10,-28},{70,-28}}, + color={28,108,200}), + Line( + points={{-34,40},{-20,32},{-12,22},{-6,2},{0,-16},{10,-28}}, + smooth=Smooth.Bezier, + color={238,46,47}), + Text( + extent={{-68,56},{-44,40}}, + textColor={28,108,200}, + textString="TSet"), + Polygon( + points={{-70,92},{-78,70},{-62,70},{-70,92}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-70,70},{-70,-78}}, + color={192,192,192}), + Line( + points={{-88,-60},{70,-60}}, + color={192,192,192}), + Polygon( + points={{92,-60},{70,-52},{70,-68},{92,-60}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{10,40},{24,32},{32,22},{38,2},{44,-16},{54,-28}}, + smooth=Smooth.Bezier, + color={28,108,200}, + pattern=LinePattern.Dot), + Text( + textColor={0,0,255}, + extent={{-150,110},{150,150}}, + textString="%name"), + Ellipse( + extent={{79,-33},{93,-47}}, + lineColor=DynamicSelect({235,235,235}, + if optOn then + {0,255,0} + else + {235,235,235}), + fillColor=DynamicSelect({235,235,235}, + if optOn then + {0,255,0} + else + {235,235,235}), + fillPattern=FillPattern.Solid), + Text( + extent={{226,106},{106,56}}, + textColor={0,0,0}, + textString=DynamicSelect("",String(tOpt, + leftJustified=false, + significantDigits=3)))})); +end OptimalStart; diff --git a/IBPSA/Controls/OBC/Utilities/PIDWithInputGains.mo b/IBPSA/Controls/OBC/Utilities/PIDWithInputGains.mo new file mode 100644 index 0000000000..ae25b3a5eb --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/PIDWithInputGains.mo @@ -0,0 +1,565 @@ +within IBPSA.Controls.OBC.Utilities; +block PIDWithInputGains + "P, PI, PD, and PID controller with output reset and input gains" + parameter IBPSA.Controls.OBC.CDL.Types.SimpleController controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI + "Type of controller"; + parameter Real r( + min=100*CDL.Constants.eps)=1 + "Typical range of control error, used for scaling the control error"; + parameter Real yMax=1 + "Upper limit of output" + annotation (Dialog(group="Limits")); + parameter Real yMin=0 + "Lower limit of output" + annotation (Dialog(group="Limits")); + parameter Real Ni( + min=100*CDL.Constants.eps)=0.9 + "Ni*Ti is time constant of anti-windup compensation" + annotation (Dialog(tab="Advanced",group="Integrator anti-windup",enable=controllerType == CDL.Types.SimpleController.PI or controllerType ==CDL.Types.SimpleController.PID)); + parameter Real Nd( + min=100*CDL.Constants.eps)=10 + "The higher Nd, the more ideal the derivative block" + annotation (Dialog(tab="Advanced",group="Derivative block",enable=controllerType == CDL.Types.SimpleController.PD or controllerType ==CDL.Types.SimpleController.PID)); + parameter Real xi_start=0 + "Initial value of integrator state" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID)); + parameter Real yd_start=0 + "Initial value of derivative output" + annotation (Dialog(tab="Advanced",group="Initialization",enable=controllerType == CDL.Types.SimpleController.PD or controllerType == CDL.Types.SimpleController.PID)); + parameter Boolean reverseActing=true + "Set to true for reverse acting, or false for direct acting control action"; + parameter Real y_reset=xi_start + "Value to which the controller output is reset if the boolean trigger has a rising edge" + annotation (Dialog(enable=controllerType == CDL.Types.SimpleController.PI or controllerType == CDL.Types.SimpleController.PID,group="Integrator reset")); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_s + "Connector for setpoint input signal" + annotation (Placement(transformation(extent={{-260,-20},{-220,20}}),iconTransformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput u_m + "Connector for measurement input signal" + annotation (Placement(transformation(origin={0,-220},extent={{20,-20},{-20,20}},rotation=270),iconTransformation(extent={{20,-20},{-20,20}},rotation=270,origin={0,-120}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput k( + min=100*IBPSA.Controls.OBC.CDL.Constants.eps) + "Connector for control gain signal" + annotation (Placement(transformation(extent={{-260,160},{-220,200}}),iconTransformation(extent={{-140,60},{-100,100}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput Ti( + quantity="Time", + unit="s", + min=100*IBPSA.Controls.OBC.CDL.Constants.eps) + if with_I + "Connector for time constant signal for the integral term" + annotation (Placement(transformation(extent={{-260,100},{-220,140}}), + iconTransformation(extent={{-140,20},{-100,60}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput Td( + quantity="Time", + unit="s", + min=100*IBPSA.Controls.OBC.CDL.Constants.eps) + if with_D + "Connector for time constant signal for the derivative term" + annotation (Placement(transformation(extent={{-260,40},{-220,80}}), iconTransformation(extent={{-140,-60},{-100,-20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput y + "Connector for actuator output signal" + annotation (Placement(transformation(extent={{220,-20},{260,20}}),iconTransformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput trigger + "Resets the controller output when trigger becomes true" + annotation (Placement(transformation(extent={{-20,-20},{20,20}},rotation=90,origin={-160,-220}),iconTransformation(extent={{-20,-20},{20,20}},rotation=90,origin={-60,-120}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract controlError + "Control error (set point - measurement)" + annotation (Placement(transformation(extent={{-200,-16},{-180,4}}))); + IBPSA.Controls.OBC.CDL.Reals.Multiply P + "Proportional action" + annotation (Placement(transformation(extent={{-50,130},{-30,150}}))); + IBPSA.Controls.OBC.CDL.Reals.IntegratorWithReset I( + final k=1, + final y_start=xi_start) if with_I + "Integral term" + annotation (Placement(transformation(extent={{-50,-10},{-30,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Derivative D( + final y_start=yd_start) if with_D + "Derivative term" + annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errP + "P error" + annotation (Placement(transformation(extent={{-140,130},{-120,150}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errD if with_D + "D error" + annotation (Placement(transformation(extent={{-140,60},{-120,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI1 if with_I + "I error (before anti-windup compensation)" + annotation (Placement(transformation(extent={{-140,-4},{-120,16}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract errI2 if with_I + "I error (after anti-windup compensation)" + annotation (Placement(transformation(extent={{-100,-10},{-80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Limiter lim( + final uMax=yMax, + final uMin=yMin) + "Limiter" + annotation (Placement(transformation(extent={{120,80},{140,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Divide antWinGai2 if with_I + "Outputs of anti-windup compensation" + annotation (Placement(transformation(extent={{100,-30},{80,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Divide gaiI if with_I "Gain of the integral term" + annotation (Placement(transformation(extent={{-200,116},{-180,136}}))); + IBPSA.Controls.OBC.CDL.Reals.Multiply errIWithGai if with_I + "I error (after multiplying with the gain of the integral term)" + annotation (Placement(transformation(extent={{-84,28},{-64,48}}))); + IBPSA.Controls.OBC.CDL.Reals.Multiply mulkTd if with_D + "Product of k and Td" + annotation (Placement(transformation(extent={{-200,150},{-180,170}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greThrkTd( + t=1E-6, + h=1E-6/2) + if with_D + "Check if k*Td is larger than 0" + annotation (Placement(transformation(extent={{140,160},{160,180}}))); + +protected + final parameter Real revAct= + if reverseActing then + 1 + else + -1 + "Switch for sign for reverse or direct acting controller"; + final parameter Boolean with_I=controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI or controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable integral action" + annotation (Evaluate=true,HideResult=true); + final parameter Boolean with_D=controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD or controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID + "Boolean flag to enable derivative action" + annotation (Evaluate=true,HideResult=true); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Dzero( + final k=0) if not with_D + "Zero input signal" + annotation (Evaluate=true,HideResult=true,Placement(transformation(extent={{-50,90}, + {-30,110}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant Izero( + final k=0) if not with_I + "Zero input signal" + annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uS_revAct( + final k=revAct/r) "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,30},{-180,50}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter uMea_revAct( + final k=revAct/r) + "Set point multiplied by reverse action sign" + annotation (Placement(transformation(extent={{-200,-50},{-180,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPD + "Outputs P and D gains added" + annotation (Placement(transformation(extent={{20,124},{40,144}}))); + IBPSA.Controls.OBC.CDL.Reals.Add addPID + "Outputs P, I and D gains added" + annotation (Placement(transformation(extent={{80,80},{100,100}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract antWinErr if with_I + "Error for anti-windup compensation" + annotation (Placement(transformation(extent={{160,50},{180,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter antWinGai1(k=1/Ni) + if with_I "Gain for anti-windup compensation without the proportional gain" + annotation (Placement(transformation(extent={{180,-30},{160,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant yResSig( + final k=y_reset) if with_I + "Signal for y_reset" + annotation (Placement(transformation(extent={{-140,-84},{-120,-64}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract addRes if with_I + "Adder for integrator reset" + annotation (Placement(transformation(extent={{-100,-90},{-80,-70}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant cheYMinMax( + final k=yMin < yMax) "Check for values of yMin and yMax" + annotation (Placement(transformation(extent={{140,120},{160,140}}))); + IBPSA.Controls.OBC.CDL.Utilities.Assert assMesYMinMax( + message="LimPID: Limits must be yMin < yMax") "Assertion on yMin and yMax" + annotation (Placement(transformation(extent={{180,120},{200,140}}))); + IBPSA.Controls.OBC.CDL.Utilities.Assert assMeskTd( + message="LimPIDWithInputGains: Limits must be k*Td > 0") + if with_D + "Assertion on k and Td" + annotation (Placement(transformation(extent={{180,160},{200,180}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter gaiT(final k=1/Nd) if with_D + "Gain to compute time constant for derivative action" + annotation (Placement(transformation(extent={{-140,100},{-120,120}}))); + +equation + connect(trigger,I.trigger) + annotation (Line(points={{-160,-220},{-160,-140},{-40,-140},{-40,-12}},color={255,0,255})); + connect(u_s,uS_revAct.u) + annotation (Line(points={{-240,0},{-210,0},{-210,40},{-202,40}},color={0,0,127})); + connect(u_m,uMea_revAct.u) + annotation (Line(points={{0,-220},{0,-160},{-210,-160},{-210,-40},{-202,-40}},color={0,0,127})); + connect(errD.u2,uMea_revAct.y) + annotation (Line(points={{-142,64},{-150,64},{-150,-40},{-178,-40}}, color={0,0,127})); + connect(D.u,errD.y) + annotation (Line(points={{-52,70},{-118,70}}, color={0,0,127})); + connect(errI1.u1,uS_revAct.y) + annotation (Line(points={{-142,12},{-170,12},{-170,40},{-178,40}}, + color={0,0,127})); + connect(addPID.u1,addPD.y) + annotation (Line(points={{78,96},{50,96},{50,134},{42,134}},color={0,0,127})); + connect(lim.y,y) + annotation (Line(points={{142,90},{200,90},{200,0},{240,0}},color={0,0,127})); + connect(antWinErr.y, antWinGai1.u) + annotation (Line(points={{182,60},{190,60},{190,-20},{182,-20}}, color={0,0,127})); + connect(addPD.u2,Dzero.y) + annotation (Line(points={{18,128},{-10,128},{-10,100},{-28,100}}, + color={0,0,127})); + connect(D.y,addPD.u2) + annotation (Line(points={{-28,70},{-10,70},{-10,128},{18,128}},color={0,0,127})); + connect(addPID.u2,I.y) + annotation (Line(points={{78,84},{68,84},{68,0},{-28,0}},color={0,0,127})); + connect(addRes.y,I.y_reset_in) + annotation (Line(points={{-78,-80},{-60,-80},{-60,-8},{-52,-8}},color={0,0,127})); + connect(antWinErr.u2,lim.y) + annotation (Line(points={{158,54},{150,54},{150,90},{142,90}}, color={0,0,127})); + connect(errI1.y,errI2.u1) + annotation (Line(points={{-118,6},{-102,6}}, color={0,0,127})); + connect(controlError.u1,u_s) + annotation (Line(points={{-202,0},{-240,0}}, color={0,0,127})); + connect(cheYMinMax.y,assMesYMinMax.u) + annotation (Line(points={{162,130},{178,130}}, color={255,0,255})); + connect(Izero.y,addPID.u2) + annotation (Line(points={{-28,30},{58,30},{58,84},{78,84}}, + color={0,0,127})); + connect(errP.u1,uS_revAct.y) + annotation (Line(points={{-142,146},{-170,146},{-170,40},{-178,40}},color={0,0,127})); + connect(errD.u1,uS_revAct.y) + annotation (Line(points={{-142,76},{-170,76},{-170,40},{-178,40}},color={0,0,127})); + connect(addPD.u1, P.y) + annotation (Line(points={{18,140},{-28,140}}, color={0,0,127})); + connect(addPID.y, lim.u) + annotation (Line(points={{102,90},{118,90}},color={0,0,127})); + connect(addPID.y, antWinErr.u1) + annotation (Line(points={{102,90},{114,90},{114,66},{158,66}},color={0,0,127})); + connect(addRes.u1, yResSig.y) + annotation (Line(points={{-102,-74},{-118,-74}}, color={0,0,127})); + connect(u_m, controlError.u2) + annotation (Line(points={{0,-220},{0,-160},{-210,-160},{-210,-12},{-202,-12}}, + color={0,0,127})); + connect(uMea_revAct.y, errP.u2) + annotation (Line(points={{-178,-40},{-150,-40},{-150,134},{-142,134}}, color={0,0,127})); + connect(uMea_revAct.y, errI1.u2) + annotation (Line(points={{-178,-40},{-150,-40},{-150,0},{-142,0}}, color={0,0,127})); + connect(addPD.y, addRes.u2) + annotation (Line(points={{42,134},{50,134},{50,-100},{-110,-100},{-110,-86}, + {-102,-86}}, color={0,0,127})); + connect(errP.y, P.u2) + annotation (Line(points={{-118,140},{-74,140},{-74,134},{-52,134}}, color={0,0,127})); + connect(P.u1, k) + annotation (Line(points={{-52,146},{-70,146},{-70,188},{-212,188},{-212,180}, + {-240,180}}, color={0,0,127})); + connect(antWinGai1.y, antWinGai2.u1) + annotation (Line(points={{158,-20},{140,-20},{140,-14},{102,-14}}, + color={0,0,127})); + connect(antWinGai2.u2, k) + annotation (Line(points={{102,-26},{108,-26},{108,188},{-212,188},{-212,180}, + {-240,180}}, color={0,0,127})); + connect(antWinGai2.y, errI2.u2) + annotation (Line(points={{78,-20},{-110,-20},{-110,-6},{-102,-6}}, + color={0,0,127})); + connect(gaiI.u1, k) + annotation (Line(points={{-202,132},{-212,132},{-212,180},{-240,180}}, color={0,0,127})); + connect(gaiI.u2, Ti) + annotation (Line(points={{-202,120},{-240,120}}, color={0,0,127})); + connect(gaiI.y, errIWithGai.u1) + annotation (Line(points={{-178,126},{-100,126},{-100,44},{-86,44}},color={0,0,127})); + connect(errI2.y, errIWithGai.u2) + annotation (Line(points={{-78,0},{-70,0},{-70,20},{-100,20},{-100,32},{-86, + 32}}, color={0,0,127})); + connect(errIWithGai.y, I.u) + annotation (Line(points={{-62,38},{-60,38},{-60,0},{-52,0}}, color={0,0,127})); + connect(mulkTd.u1, k) + annotation (Line(points={{-202,166},{-212,166},{-212,180},{-240,180}},color={0,0,127})); + connect(greThrkTd.y, assMeskTd.u) + annotation (Line(points={{162,170},{178,170}}, color={255,0,255})); + connect(mulkTd.y, greThrkTd.u) + annotation (Line(points={{-178,160},{-168,160},{-168,184},{132,184},{132, + 170},{138,170}}, color={0,0,127})); + connect(mulkTd.u2, Td) + annotation (Line(points={{-202,154},{-206,154},{-206,60},{-240,60}},color={0,0,127})); + connect(Td, gaiT.u) + annotation (Line(points={{-240,60},{-180,60},{-180,110},{-142,110}}, color={0,0,127})); + connect(gaiT.y, D.T) + annotation (Line(points={{-118,110},{-84,110},{-84,74},{-52,74}}, color={0,0,127})); + connect(mulkTd.y, D.k) annotation (Line(points={{-178,160},{-168,160},{-168, + 184},{-80,184},{-80,78},{-52,78}}, color={0,0,127})); + annotation ( + defaultComponentName="conPID", + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-6,-20},{66,-66}}, + lineColor={255,255,255}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.P), + extent={{-32,-22},{68,-62}}, + textColor={0,0,0}, + textString="P", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PI), + extent={{-26,-22},{74,-62}}, + textColor={0,0,0}, + textString="PI", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PD), + extent={{-16,-22},{88,-62}}, + textColor={0,0,0}, + fillPattern=FillPattern.Solid, + fillColor={175,175,175}, + textString="P D"), + Text( + visible=(controllerType == IBPSA.Controls.OBC.CDL.Types.SimpleController.PID), + extent={{-14,-22},{86,-62}}, + textColor={0,0,0}, + textString="PID", + fillPattern=FillPattern.Solid, + fillColor={175,175,175}), + Polygon( + points={{-80,82},{-88,60},{-72,60},{-80,82}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,68},{-80,-100}}, + color={192,192,192}), + Line( + points={{-90,-80},{70,-80}}, + color={192,192,192}), + Polygon( + points={{74,-80},{52,-72},{52,-88},{74,-80}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255}), + Line( + points={{-80,-80},{-80,-22}}, + color={0,0,0}), + Line( + points={{-80,-22},{6,56}}, + color={0,0,0}), + Line( + points={{6,56},{68,56}}, + color={0,0,0}), + Rectangle( + extent=DynamicSelect({{100,-100},{84,-100}},{{100,-100},{84,-100+(y-yMin)/(yMax-yMin)*200}}), + fillColor={175,175,175}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None, + lineColor={0,0,0})}), + Diagram( + coordinateSystem( + extent={{-220,-200},{220,200}}), graphics={Rectangle( + extent={{-56,180},{-24,-16}}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Text( + extent={{-52,184},{-28,156}}, + pattern=LinePattern.None, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + textColor={0,0,0}, + textString="PID")}), + Documentation( + info=" +

+PID controller in the standard form +

+

+yu = k/r   (e(t) + 1 ⁄ Ti   ∫ e(τ) dτ + Td d⁄dt e(t)), +

+

+with output reset, +where +yu is the control signal before output limitation, +e(t) = us(t) - um(t) is the control error, +with us being the set point and um being +the measured quantity, +k is the gain, +Ti is the time constant of the integral term, +Td is the time constant of the derivative term, +r is a scaling factor, with default r=1. +The scaling factor should be set to the typical order of magnitude of the range of the error e. +For example, you may set r=100 to r=1000 +if the control input is a pressure of a heating water circulation pump in units of Pascal, or +leave r=1 if the control input is a room temperature. +

+

+Note that the units of k are the inverse of the units of the control error, +while the units of Ti and Td are seconds. +

+

+The actual control output is +

+

+y = min( ymax, max( ymin, y)), +

+

+where ymin and ymax are limits for the control signal. +

+

+This block is identical to + +IBPSA.Controls.OBC.CDL.Reals.PIDWithReset, +except that the controller gains +k, Ti and Td are inputs rather than parameters. +

+

P, PI, PD, or PID action

+

+Through the parameter controllerType, the controller can be configured +as P, PI, PD or PID controller. The default configuration is PI. +

+

Reverse or direct action

+

+Through the parameter reverseActing, the controller can be configured to +be reverse or direct acting. +The above standard form is reverse acting, which is the default configuration. +For a reverse acting controller, for a constant set point, +an increase in measurement signal u_m decreases the control output signal y +(Montgomery and McDowall, 2008). +Thus, +

+
    +
  • + for a heating coil with a two-way valve, leave reverseActing = true, but +
  • +
  • + for a cooling coil with a two-way valve, set reverseActing = false. +
  • +
+

+If reverseAction=false, then the error e above is multiplied by -1. +

+

Anti-windup compensation

+

+The controller anti-windup compensation is as follows: +Instead of the above basic control law, the implementation is +

+

+yu = k   (e(t) ⁄ r + 1 ⁄ Ti   ∫ (-Δy + e(τ) ⁄ r) dτ + Td ⁄ r d⁄dt e(t)), +

+

+where the anti-windup compensation Δy is +

+

+Δy = (yu - y) ⁄ (k Ni), +

+

+where +Ni > 0 is the time constant for the anti-windup compensation. +To accelerate the anti-windup, decrease Ni. +

+

+Note that the anti-windup term (-Δy + e(τ) ⁄ r) shows that the range of +the typical control error r should be set to a reasonable value so that +

+

+e(τ) ⁄ r = (us(τ) - um(τ)) ⁄ r +

+

+has order of magnitude one, and hence the anti-windup compensation should work well. +

+

Reset of the controller output

+

+Whenever the value of boolean input signal trigger changes from +false to true, the controller output is reset by setting +y to the value of the parameter y_reset. +

+

Approximation of the derivative term

+

+The derivative of the control error d ⁄ dt e(t) is approximated using +

+

+d⁄dt x(t) = (e(t)-x(t)) Nd ⁄ Td, +

+

+and +

+

+d⁄dt e(t) ≈ Nd (e(t)-x(t)), +

+

+where x(t) is an internal state. +

+

Guidance for tuning the control gains

+

+The parameters of the controller can be manually adjusted by performing +closed loop tests (= controller + plant connected +together) and using the following strategy: +

+
    +
  1. Set very large limits, e.g., set ymax = 1000. +
  2. +
  3. +Select a P-controller and manually enlarge the parameter k +(the total gain of the controller) until the closed-loop response +cannot be improved any more. +
  4. +
  5. +Select a PI-controller and manually adjust the parameters +k and Ti (the time constant of the integrator). +The first value of Ti can be selected such that it is in the +order of the time constant of the oscillations occurring with +the P-controller. If, e.g., oscillations in the order of 100 seconds +occur in the previous step, start with Ti=1/100 seconds. +
  6. +
  7. +If you want to make the reaction of the control loop faster +(but probably less robust against disturbances and measurement noise) +select a PID-controller and manually adjust parameters +k, Ti, Td (time constant of derivative block). +
  8. +
  9. +Set the limits yMax and yMin according to your specification. +
  10. +
  11. +Perform simulations such that the output of the PID controller +goes in its limits. Tune Ni (Ni Ti is the time constant of +the anti-windup compensation) such that the input to the limiter +block (= lim.u) goes quickly enough back to its limits. +If Ni is decreased, this happens faster. If Ni is very large, the +anti-windup compensation is not effective and the controller works bad. +
  12. +
+

References

+

+R. Montgomery and R. McDowall (2008). +\"Fundamentals of HVAC Control Systems.\" +American Society of Heating Refrigerating and Air-Conditioning Engineers Inc. Atlanta, GA. +

+", +revisions=" +
    +
  • +June 5, 2023, by Jianjun Hu:
    +Changed the instance antWinGai2 to be conditional.
    +This is for +Buildings, issue 3423. +
  • +
  • +May 17, 2022, by Sen Huang:
    +Changing the gains from parameters to inputs
    +This is for +Buildings, issue 2993. +
  • +
  • +April 30, 2021, by Michael Wetter:
    +Corrected error in non-released development version +when reset trigger is true.
    +Refactored implementation to have separate blocks that show the P, I and D contribution, +each with the control gain applied.
    +This is for +Buildings, issue 2475. +
  • +
+")); +end PIDWithInputGains; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo b/IBPSA/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo new file mode 100644 index 0000000000..f0178cee30 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/SupplyReturnTemperatureReset.mo @@ -0,0 +1,486 @@ +within IBPSA.Controls.OBC.Utilities.SetPoints; +block SupplyReturnTemperatureReset + "Block to compute the supply and return set point" + parameter Real m=1.3 + "Exponent for heat transfer"; + parameter Real TSup_nominal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") + "Supply temperature" + annotation (Dialog(group="Nominal conditions")); + parameter Real TRet_nominal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") + "Return temperature" + annotation (Dialog(group="Nominal conditions")); + parameter Real TZon_nominal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")=293.15 + "Zone temperature" + annotation (Dialog(group="Nominal conditions")); + parameter Real TOut_nominal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") + "Outside temperature" + annotation (Dialog(group="Nominal conditions")); + parameter Real dTOutHeaBal( + final quantity="TemperatureDifference", + final unit="K", + displayUnit="K")=8 + "Offset for heating curve"; + CDL.Interfaces.RealInput TSetZon( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) + "Zone setpoint temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + CDL.Interfaces.RealInput TOut( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) + "Outside temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + CDL.Interfaces.RealOutput TSup( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) + "Setpoint for supply temperature" + annotation (Placement(transformation(extent={{100,40},{140,80}}))); + CDL.Interfaces.RealOutput TRet( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC", + min=200) + "Setpoint for return temperature" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); + +protected + CDL.Reals.Sources.Constant dTOutHeaBal_nominal( + final k=dTOutHeaBal, + y(final quantity="TemperatureDifference", + final unit="K")) + "Offset of outdoor temperature to take into account heat gain" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); + CDL.Reals.Sources.Constant TSup_nom( + final k=TSup_nominal, + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Heating supply water temperature at nominal condition" + annotation (Placement(transformation(extent={{-80,160},{-60,180}}))); + CDL.Reals.Sources.Constant TZon_nom( + final k=TZon_nominal, + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Zone temperature at design condition" + annotation (Placement(transformation(extent={{-80,80},{-60,100}}))); + CDL.Reals.Sources.Constant zer( + final k=1E-100) + "Small positive constant to avoid log(0)" + annotation (Placement(transformation(extent={{0,60},{20,80}}))); + CDL.Reals.Sources.Constant TRet_nom( + final k=TRet_nominal, + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Heating return water temperature at nominal condition" + annotation (Placement(transformation(extent={{-80,120},{-60,140}}))); + CDL.Reals.Sources.Constant TOut_nom( + final k=TOut_nominal, + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Outside temperature at design condition" + annotation (Placement(transformation(extent={{-80,38},{-60,58}}))); + CDL.Reals.Sources.Constant expM( + final k=m) + "Exponent of heat transfer" + annotation (Placement(transformation(extent={{-80,-180},{-60,-160}}))); + CDL.Reals.Sources.Constant one( + final k=1) + "Outputs 1" + annotation (Placement(transformation(extent={{-80,-140},{-60,-120}}))); + CDL.Reals.Add TOutOffSet( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Effective outside temperature for heat transfer (takes into account zone heat gains)" + annotation (Placement(transformation(extent={{-80,-58},{-60,-38}}))); + CDL.Reals.Subtract qRelDen( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Denominator for relative heating load calculation" + annotation (Placement(transformation(extent={{-40,74},{-20,94}}))); + CDL.Reals.Subtract qRelNum( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Numerator for relative heating load calculation" + annotation (Placement(transformation(extent={{-40,-52},{-20,-32}}))); + CDL.Reals.Divide qRel "Relative heating load = Q_flow/Q_flow_nominal" + annotation (Placement(transformation(extent={{0,24},{20,44}}))); + CDL.Reals.Subtract dTFlu2_nom + "Heating supply minus return water temperature at nominal condition" + annotation (Placement(transformation(extent={{-40,150},{-20,170}}))); + CDL.Reals.Average TFluAve_nominal( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Average heating water temperature at nominal condition" + annotation (Placement(transformation(extent={{-40,120},{-20,140}}))); + CDL.Reals.Subtract dTFluAve_nominal( + y(final quantity="TemperatureDifference", + final unit="K")) + "Average heating water temperature minus room temperature at nominal condition" + annotation (Placement(transformation(extent={{36,110},{56,130}}))); + CDL.Reals.Divide mInv "Inverse of heat transfer exponent, y = 1/m" + annotation (Placement(transformation(extent={{-40,-160},{-20,-140}}))); + CDL.Reals.Add TAve( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Average of supply and return temperature" + annotation (Placement(transformation(extent={{-40,276},{-20,296}}))); + CDL.Reals.Add TSupCur( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Current supply water temperature" + annotation (Placement(transformation(extent={{42,270},{62,290}}))); + CDL.Reals.Subtract TRetCur( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Current return water temperature" + annotation (Placement(transformation(extent={{40,238},{60,258}}))); + CDL.Reals.Max qRel0 + "Relative heating load, but always non-zero value" + annotation (Placement(transformation(extent={{32,30},{52,50}}))); + CDL.Reals.Multiply pro "Product used to compute q^(1/m)" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + CDL.Reals.Exp qRaiInvM + "Outputs qRel^(1/m)" + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + CDL.Reals.Log log1 + "Logarithm used for evaluation of qRel^(1/m)" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + CDL.Reals.Multiply dTQ(y( + final quantity="TemperatureDifference", + final unit="K")) "Temperature contribution due to qRel^(1/m)" + annotation (Placement(transformation(extent={{-80,220},{-60,240}}))); + CDL.Reals.Multiply dTFlu(y( + final quantity="TemperatureDifference", + final unit="K")) "Supply minus return water temperature" + annotation (Placement(transformation(extent={{0,220},{20,240}}))); + CDL.Reals.Add TOutOffSet_nominal( + y(final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC")) + "Effective outside temperature for heat transfer at nominal condition (takes into account zone heat gains)" + annotation (Placement(transformation(extent={{-44,32},{-24,52}}))); + CDL.Reals.MultiplyByParameter gai( + final k=0.5, + y(final quantity="TemperatureDifference", + final unit="K")) "Gain factor" + annotation (Placement(transformation(extent={{0,150},{20,170}}))); + +equation + connect(dTOutHeaBal_nominal.y,TOutOffSet.u1) + annotation (Line(points={{-58,0},{-52,0},{-52,-28},{-86,-28},{-86,-42},{-82,-42}},color={0,0,127})); + connect(TOut,TOutOffSet.u2) + annotation (Line(points={{-120,60},{-90,60},{-90,-54},{-82,-54}},color={0,0,127})); + connect(TZon_nom.y,qRelDen.u1) + annotation (Line(points={{-58,90},{-42,90}},color={0,0,127})); + connect(qRel.y,qRel0.u2) + annotation (Line(points={{22,34},{30,34}},color={0,0,127})); + connect(zer.y,qRel0.u1) + annotation (Line(points={{22,70},{26,70},{26,46},{30,46}},color={0,0,127})); + connect(dTFlu2_nom.u1,TSup_nom.y) + annotation (Line(points={{-42,166},{-48,166},{-48,170},{-58,170}},color={0,0,127})); + connect(dTFlu2_nom.u2,TRet_nom.y) + annotation (Line(points={{-42,154},{-52,154},{-52,130},{-58,130}},color={0,0,127})); + connect(TFluAve_nominal.u1,TSup_nom.y) + annotation (Line(points={{-42,136},{-48,136},{-48,170},{-58,170}},color={0,0,127})); + connect(TRet_nom.y,TFluAve_nominal.u2) + annotation (Line(points={{-58,130},{-52,130},{-52,124},{-42,124}},color={0,0,127})); + connect(dTFluAve_nominal.u2,TZon_nom.y) + annotation (Line(points={{34,114},{-50,114},{-50,90},{-58,90}},color={0,0,127})); + connect(qRel0.y,log1.u) + annotation (Line(points={{54,40},{64,40},{64,-80},{-90,-80},{-90,-100},{-82,-100}},color={0,0,127})); + connect(one.y,mInv.u1) + annotation (Line(points={{-58,-130},{-50,-130},{-50,-144},{-42,-144}},color={0,0,127})); + connect(expM.y,mInv.u2) + annotation (Line(points={{-58,-170},{-50,-170},{-50,-156},{-42,-156}},color={0,0,127})); + connect(log1.y,pro.u1) + annotation (Line(points={{-58,-100},{-50,-100},{-50,-94},{-42,-94}},color={0,0,127})); + connect(pro.u2,mInv.y) + annotation (Line(points={{-42,-106},{-48,-106},{-48,-120},{-10,-120},{-10,-150},{-18,-150}},color={0,0,127})); + connect(qRaiInvM.u,pro.y) + annotation (Line(points={{-2,-100},{-18,-100}},color={0,0,127})); + connect(dTQ.u1,dTFluAve_nominal.y) + annotation (Line(points={{-82,236},{-92,236},{-92,204},{60,204},{60,120},{58, + 120}}, color={0,0,127})); + connect(qRaiInvM.y,dTQ.u2) + annotation (Line(points={{22,-100},{46,-100},{46,-98},{70,-98},{70,206},{-90,206},{-90,224},{-82,224}},color={0,0,127})); + connect(TSetZon,TAve.u1) + annotation (Line(points={{-120,-60},{-94,-60},{-94,292},{-42,292}},color={0,0,127})); + connect(TAve.u2,dTQ.y) + annotation (Line(points={{-42,280},{-52,280},{-52,230},{-58,230}},color={0,0,127})); + connect(qRel0.y,dTFlu.u2) + annotation (Line(points={{54,40},{64,40},{64,216},{-6,216},{-6,224},{-2,224}},color={0,0,127})); + connect(TSupCur.u1,TAve.y) + annotation (Line(points={{40,286},{-18,286}},color={0,0,127})); + connect(dTFlu.y,TSupCur.u2) + annotation (Line(points={{22,230},{32,230},{32,274},{40,274}},color={0,0,127})); + connect(TSupCur.y,TSup) + annotation (Line(points={{64,280},{88,280},{88,60},{120,60}},color={0,0,127})); + connect(TRetCur.u1,TAve.y) + annotation (Line(points={{38,254},{12,254},{12,286},{-18,286}},color={0,0,127})); + connect(TRetCur.u2,dTFlu.y) + annotation (Line(points={{38,242},{32,242},{32,230},{22,230}},color={0,0,127})); + connect(TRetCur.y,TRet) + annotation (Line(points={{62,248},{80,248},{80,-60},{120,-60}},color={0,0,127})); + connect(qRel.u1,qRelNum.y) + annotation (Line(points={{-2,40},{-12,40},{-12,-42},{-18,-42}},color={0,0,127})); + connect(qRel.u2,qRelDen.y) + annotation (Line(points={{-2,28},{-6,28},{-6,84},{-18,84}},color={0,0,127})); + connect(TOutOffSet_nominal.u1,TOut_nom.y) + annotation (Line(points={{-46,48},{-58,48}},color={0,0,127})); + connect(dTOutHeaBal_nominal.y,TOutOffSet_nominal.u2) + annotation (Line(points={{-58,0},{-52,0},{-52,36},{-46,36}},color={0,0,127})); + connect(TOutOffSet_nominal.y,qRelDen.u2) + annotation (Line(points={{-22,42},{-20,42},{-20,66},{-50,66},{-50,78},{-42,78}},color={0,0,127})); + connect(TSetZon, qRelNum.u1) annotation (Line(points={{-120,-60},{-48,-60},{-48, + -36},{-42,-36}}, color={0,0,127})); + connect(TOutOffSet.y, qRelNum.u2) + annotation (Line(points={{-58,-48},{-42,-48}}, color={0,0,127})); + connect(dTFlu2_nom.y, gai.u) + annotation (Line(points={{-18,160},{-2,160}}, color={0,0,127})); + connect(gai.y, dTFlu.u1) annotation (Line(points={{22,160},{28,160},{28,180},{ + -10,180},{-10,236},{-2,236}}, color={0,0,127})); + connect(TFluAve_nominal.y, dTFluAve_nominal.u1) annotation (Line(points={{-18, + 130},{10,130},{10,126},{34,126}}, color={0,0,127})); + annotation ( + defaultComponentName="watRes", + Documentation( + info=" +

+This block computes the set point temperatures for the +supply and return water temperature. +The set point for the zone air temperature can be an input to the model. +It allows to use this model with systems that have night set back. +

+

+If used to reset the temperature in a heating system, +the parameter dTOutHeaBal can be used to shift the heating curve +to take into account that heat gains from solar, equipment and people +make up for some of the transmission losses. +For example, in energy efficient houses, the heating may not be switched on if +the outside air temperature is greater than +12°C, even if a zone temperature of 20°C is required. +In such a situation, set dTOutHeaBal=20-12=8 Kelvin to +shift the heating curve. +

+

Typical usage

+

+The figure below shows a typical usage for a hot water temperature reset +for a heating system. +The parameters of the block heaCur +are for a heating system with +60°C supply water temperature and +40°C return water temperature at +an outside temperature of +-10°C and a room temperature of +20°C. The offset for the temperature reset is +8 Kelvin, i.e., above +12°C outside temperature, there is no heating load. +The figure shows the computed supply and return water temperatures. +

+

+ +

+", + revisions=" +
    +
  • +October 21, 2021, by Michael Wetter:
    +Corrected icon. +
  • +
  • +February 8, 2021, by Michael Wetter:
    +Renamed to IBPSA.Controls.OBC.Utilities.SetPoints.SupplyReturnTemperatureReset +and reimplemented using elementary CDL blocks.
    +This is for +Buildings, issue 2355. +
  • +
  • +November 12, 2020, by Michael Wetter:
    +Reformulated to remove dependency to Modelica.Units.SI.
    +This is for +Buildings, issue 2243. +
  • +
  • +January 3, 2020, by Jianjun Hu:
    +Changed name from HotWaterTemperatureReset to +SupplyReturnTemperatureReset. +This is for +Buildings, issue 860. +
  • +
  • +January 10, 2017, by Milica Grahovac:
    +First CDL implementation. +
  • +
  • +May 29, 2014, by Michael Wetter:
    +Removed undesirable annotation Evaluate=true. +
  • +
  • +February 13, 2013, by Michael Wetter:
    +Corrected error that led to wrong results if the zone air temperature is +different from its nominal value TZon_nominal. +See ticket Buildings, issue 74. +
  • +
  • +November 21, 2011, by Michael Wetter:
    +Improved documentation. +
  • +
  • +February 5, 2009 by Michael Wetter:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + extent={{-100,-100},{100,100}}), + graphics={ + Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Polygon( + points={{90,-82},{68,-74},{68,-90},{90,-82}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-90,-82},{82,-82}}, + color={192,192,192}), + Line( + points={{-80,76},{-80,-92}}, + color={192,192,192}), + Polygon( + points={{-80,88},{-88,66},{-72,66},{-80,86},{-80,88}}, + lineColor={192,192,192}, + fillColor={192,192,192}, + fillPattern=FillPattern.Solid), + Line( + points={{-80,-82},{60,32}}), + Line( + points={{-80,-82},{-42,-38},{4,2},{60,32}}, + smooth=Smooth.Bezier), + Line( + points={{-80,-82},{-58,-42},{-4,8},{60,32}}, + smooth=Smooth.Bezier), + Text( + extent={{-152,120},{-102,70}}, + textColor={0,0,127}, + textString="TOut"), + Text( + extent={{-152,-4},{-102,-54}}, + textColor={0,0,127}, + textString="TSetZon"), + Text( + extent={{40,86},{90,36}}, + textColor={0,0,127}, + textString="TSup"), + Text( + extent={{42,-30},{92,-80}}, + textColor={0,0,127}, + textString="TRet"), + Text( + extent={{-150,150},{150,110}}, + textString="%name", + textColor={0,0,255})}), + Diagram( + coordinateSystem( + extent={{-100,-200},{100,340}}), + graphics={ + Rectangle( + extent={{-84,320},{76,212}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-34,318},{66,306}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Current fluid setpoint temperatures"), + Rectangle( + extent={{-84,-84},{76,-192}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-26,-178},{74,-190}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Computation of qRel^(1/m)"), + Rectangle( + extent={{-86,200},{-16,-22}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-84,198},{-36,190}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Nominal values"), + Rectangle( + extent={{-10,102},{58,-22}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-4,98},{56,90}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Guard against 0^(1/m)"), + Rectangle( + extent={{-84,-28},{58,-76}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{-6,-68},{60,-76}}, + textColor={0,0,255}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + horizontalAlignment=TextAlignment.Left, + textString="Numerator for qRel")})); +end SupplyReturnTemperatureReset; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo new file mode 100644 index 0000000000..9fb1d42a71 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mo @@ -0,0 +1,103 @@ +within IBPSA.Controls.OBC.Utilities.SetPoints.Validation; +model SupplyReturnTemperatureReset + "Test model for the heating curve" + IBPSA.Controls.OBC.Utilities.SetPoints.SupplyReturnTemperatureReset heaCur( + m=1, + TSup_nominal=333.15, + TRet_nominal=313.15, + TOut_nominal=263.15) + "Compute the supply and return set point of heating systems with varying outdoor temperature" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TOut( + height=40, + duration=1, + offset=263.15, + y(unit="K")) + "Outdoor temperature varying from -10 degC to 30 degC" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.Utilities.SetPoints.SupplyReturnTemperatureReset heaCur1( + m=1, + dTOutHeaBal=15, + TSup_nominal=333.15, + TRet_nominal=313.15, + TOut_nominal=263.15) + "Compute the supply and return set point of heating systems with changing room setpoint temperature" + annotation (Placement(transformation(extent={{20,-50},{40,-30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse TRoo1( + offset=273.15+20, + shift=0.5, + amplitude=-5, + period=1, + y(unit="K")) + "Night set back from 20 degC to 15 degC" + annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TOut1( + k=273.15-10, + y(unit="K")) + "Constant outdoor air temperature" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TRoo( + k=273.15+20, + y(unit="K")) + "Room temperature 20 degC" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + +equation + connect(TOut1.y,heaCur1.TOut) + annotation (Line(points={{-38,-20},{-38,-20},{0,-20},{0,-34},{18,-34}},color={0,0,127})); + connect(TOut.y,heaCur.TOut) + annotation (Line(points={{-38,60},{-38,60},{0,60},{0,46},{18,46}},color={0,0,127})); + connect(TRoo.y,heaCur.TSetZon) + annotation (Line(points={{-38,20},{0,20},{0,34},{18,34}},color={0,0,127})); + connect(TRoo1.y,heaCur1.TSetZon) + annotation (Line(points={{-38,-60},{0,-60},{0,-46},{18,-46}},color={0,0,127})); + annotation ( + experiment( + Tolerance=1e-6, + StopTime=1.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureReset.mos" "Simulate and plot"), + Documentation( + info=" +

+Example that demonstrates the use of the hot water temperature reset +for a heating system. +The parameters of the block heaCur +are for a heating system with +60°C supply water temperature and +40°C return water temperature at +an outside temperature of +-10°C and a room temperature of +20°C. The offset for the temperature reset is +8 Kelvin, i.e., above +12°C outside temperature, there is no heating load. +The figure below shows the computed supply and return water temperatures. +

+

+ +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SupplyReturnTemperatureReset; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo new file mode 100644 index 0000000000..b536e9207b --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mo @@ -0,0 +1,75 @@ +within IBPSA.Controls.OBC.Utilities.SetPoints.Validation; +model SupplyReturnTemperatureResetExponent + "Test model for the heating curve with different exponent" + IBPSA.Controls.OBC.Utilities.SetPoints.SupplyReturnTemperatureReset heaCur( + m=1, + TSup_nominal=313.15, + TRet_nominal=308.15, + TOut_nominal=263.15) + "Compute the supply and return set point of heating systems with varying outdoor temperature and m=1" + annotation (Placement(transformation(extent={{20,30},{40,50}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TOut( + height=30, + duration=1, + offset=258.15, + y(unit="K")) + "Outdoor temperature varying from -10 degC to 30 degC" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TRoo( + k=273.15+20, + y(unit="K")) + "Room temperature 20 degC" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.Utilities.SetPoints.SupplyReturnTemperatureReset heaCurM( + m=1.3, + TSup_nominal=313.15, + TRet_nominal=308.15, + TOut_nominal=263.15) + "Compute the supply and return set point of heating systems with varying outdoor temperature and m=1.3" + annotation (Placement(transformation(extent={{20,-20},{40,0}}))); + +equation + connect(TOut.y,heaCur.TOut) + annotation (Line(points={{-38,60},{-38,60},{0,60},{0,46},{18,46}},color={0,0,127})); + connect(TRoo.y,heaCur.TSetZon) + annotation (Line(points={{-38,20},{-10,20},{-10,34},{18,34}},color={0,0,127})); + connect(heaCurM.TOut,TOut.y) + annotation (Line(points={{18,-4},{0,-4},{0,60},{-38,60}},color={0,0,127})); + connect(TRoo.y,heaCurM.TSetZon) + annotation (Line(points={{-38,20},{-10,20},{-10,-16},{18,-16}},color={0,0,127})); + annotation ( + experiment( + Tolerance=1e-6, + StopTime=1.0), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/SetPoints/Validation/SupplyReturnTemperatureResetExponent.mos" "Simulate and plot"), + Documentation( + info=" +

+Example that demonstrates the use of the hot water temperature reset +for a heating system. +Both instances are identical except that heaCurM sets m=1.3. +

+", + revisions=" +
    +
  • +July 18, 2017, by Jianjun Hu:
    +First implementation in CDL. +
  • +
+"), + Icon( + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})})); +end SupplyReturnTemperatureResetExponent; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.mo b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.mo new file mode 100644 index 0000000000..be8825a472 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC.Utilities.SetPoints; +package Validation "Collection of models that validate the SetPoints blocks of the CDL" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains models that validate the blocks in + +IBPSA.Controls.OBC.Utilities.SetPoints. +

+

+The examples plot various outputs, which have been verified against +analytical solutions. These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={8.0,14.0}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.order b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.order new file mode 100644 index 0000000000..cf5551e9de --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/Validation/package.order @@ -0,0 +1,2 @@ +SupplyReturnTemperatureReset +SupplyReturnTemperatureResetExponent diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/package.mo b/IBPSA/Controls/OBC/Utilities/SetPoints/package.mo new file mode 100644 index 0000000000..1a7c371b65 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/package.mo @@ -0,0 +1,46 @@ +within IBPSA.Controls.OBC.Utilities; +package SetPoints "Package with blocks for setpoint resets" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains components models to compute set points for control systems. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Ellipse( + origin={10.0,10.0}, + fillColor={76,76,76}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-80.0,-80.0},{-20.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,-80.0},{60.0,-20.0}}), + Ellipse( + origin={10.0,10.0}, + fillColor={128,128,128}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{0.0,0.0},{60.0,60.0}}), + Ellipse( + origin={10.0,10.0}, + lineColor={128,128,128}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-80.0,0.0},{-20.0,60.0}})})); +end SetPoints; diff --git a/IBPSA/Controls/OBC/Utilities/SetPoints/package.order b/IBPSA/Controls/OBC/Utilities/SetPoints/package.order new file mode 100644 index 0000000000..b51882f1ee --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/SetPoints/package.order @@ -0,0 +1,2 @@ +SupplyReturnTemperatureReset +Validation diff --git a/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo new file mode 100644 index 0000000000..dc4e71e72c --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mo @@ -0,0 +1,153 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model OptimalStartCoolingNegativeStartTime + "Validation model for the block OptimalStart for cooling system with a negative start time" + IBPSA.Controls.OBC.Utilities.OptimalStart optStaCoo( + computeHeating=false, + computeCooling=true) + "Optimal start for cooling system" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + Modelica.Blocks.Continuous.Integrator TRoo( + k=0.0000005, + y_start=24+273.15) + "Room air temperature" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( + k=24+273.15) + "Zone cooling setpoint during occupancy" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOut( + amplitude=5, + freqHz=1/86400, + offset=28+273.15, + startTime( + displayUnit="s")=-691200) + "Outdoor dry bulb temperature to test cooling system" + annotation (Placement(transformation(extent={{-194,50},{-174,70}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=100) + "Overall heat loss coefficient" + annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dT + "Temperature difference between zone and outdoor" + annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add dTdt + "Temperature derivative" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-2000) + "Heat extraction in the zone" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + realTrue=-6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add + "Reset setpoint from unoccupied to occupied during optimal start period" + annotation (Placement(transformation(extent={{120,0},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=1, + reverseActing=false) + "PI control signal for the cooling power" + annotation (Placement(transformation(extent={{160,0},{180,20}}))); + IBPSA.Controls.SetPoints.OccupancySchedule occSch( + occupancy=3600*{7,19}, + period=24*3600) + "Daily schedule" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetCoo( + realTrue=273.15+24, + realFalse=273.15+30, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for cooling" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + +equation + connect(dT.y,UA.u) + annotation (Line(points={{-138,10},{-122,10}},color={0,0,127})); + connect(dTdt.y,TRoo.u) + annotation (Line(points={{-58,10},{-42,10}},color={0,0,127})); + connect(QCoo.y,dTdt.u2) + annotation (Line(points={{-98,-50},{-88,-50},{-88,4},{-82,4}},color={0,0,127})); + connect(TRoo.y,optStaCoo.TZon) + annotation (Line(points={{-19,10},{-8,10},{-8,6},{18,6}},color={0,0,127})); + connect(TSetCooOcc.y,optStaCoo.TSetZonCoo) + annotation (Line(points={{-18,80},{0,80},{0,14},{18,14}},color={0,0,127})); + connect(UA.y,dTdt.u1) + annotation (Line(points={{-98,10},{-90,10},{-90,16},{-82,16}},color={0,0,127})); + connect(optStaCoo.optOn,booToRea.u) + annotation (Line(points={{42,6},{50,6},{50,10},{58,10}},color={255,0,255})); + connect(add.y,conPID.u_s) + annotation (Line(points={{142,10},{158,10}},color={0,0,127})); + connect(TRoo.y,conPID.u_m) + annotation (Line(points={{-19,10},{-14,10},{-14,-20},{170,-20},{170,-2}},color={0,0,127})); + connect(occSch.tNexOcc,optStaCoo.tNexOcc) + annotation (Line(points={{-19,-44},{0,-44},{0,2},{18,2}},color={0,0,127})); + connect(conPID.y,QCoo.u) + annotation (Line(points={{182,10},{188,10},{188,-80},{-130,-80},{-130,-50},{-122,-50}},color={0,0,127})); + connect(occSch.occupied,TSetCoo.u) + annotation (Line(points={{-19,-56},{10,-56},{10,-50},{58,-50}},color={255,0,255})); + connect(TSetCoo.y,add.u2) + annotation (Line(points={{82,-50},{110,-50},{110,4},{118,4}},color={0,0,127})); + connect(booToRea.y,add.u1) + annotation (Line(points={{82,10},{86,10},{86,16},{118,16}},color={0,0,127})); + connect(TRoo.y, dT.u2) + annotation (Line(points={{-19,10},{-14,10},{-14,-20},{-166,-20},{-166,4},{-162,4}}, + color={0,0,127})); + connect(TOut.y, dT.u1) + annotation (Line(points={{-172,60},{-166,60},{-166,16},{-162,16}}, color={0,0,127})); + + annotation ( + experiment( + StartTime=-660000, + StopTime=0, + Tolerance=1e-07), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingNegativeStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model is to validate the block + +IBPSA.Controls.OBC.Utilities.OptimalStart for space cooling system with +a negative simulation start time. +

+

+The room is modeled as a simple differential equation with a time constant of +around 5.6 hours. The cooling power is relatively large compared to the heat gain from +the outdoor temperature. The outdoor temperature is repetitive each day; +the optimal start time converges to a small amount of time tOpt after a few days. +

+", + revisions=" +
    +
  • +March 19, 2020, by Michael Wetter:
    +Simplified setpoint implementation.' +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-200,-160},{200,160}}))); +end OptimalStartCoolingNegativeStartTime; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo new file mode 100644 index 0000000000..0b9a9ed6f1 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mo @@ -0,0 +1,152 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model OptimalStartCoolingPositiveStartTime + "Validation model for the block OptimalStart for cooling system with a positive start time" + IBPSA.Controls.OBC.Utilities.OptimalStart optStaCoo( + computeHeating=false, + computeCooling=true) + "Optimal start for cooling system" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + Modelica.Blocks.Continuous.Integrator TRoo( + k=0.0000005, + y_start=24+273.15) + "Room air temperature" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( + k=24+273.15) + "Zone cooling setpoint during occupancy" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOut( + amplitude=5, + freqHz=1/86400, + offset=28+273.15, + startTime( + displayUnit="s")=0) + "Outdoor dry bulb temperature to test cooling system" + annotation (Placement(transformation(extent={{-194,40},{-174,60}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=100) + "Overall heat loss coefficient" + annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dT + "Temperature difference between zone and outdoor" + annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add dTdt + "Temperature derivative" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-2000) + "Heat extraction in the zone" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + realTrue=-6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add + "Reset setpoint from unoccupied to occupied during optimal start period" + annotation (Placement(transformation(extent={{120,0},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=1, + reverseActing=false) + "PI control signal for the cooling power" + annotation (Placement(transformation(extent={{160,0},{180,20}}))); + IBPSA.Controls.SetPoints.OccupancySchedule occSch( + occupancy=3600*{7,19}, + period=24*3600) + "Daily schedule" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetCoo( + realTrue=273.15+24, + realFalse=273.15+30, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for cooling" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + +equation + connect(dT.y,UA.u) + annotation (Line(points={{-138,10},{-122,10}},color={0,0,127})); + connect(dTdt.y,TRoo.u) + annotation (Line(points={{-58,10},{-42,10}},color={0,0,127})); + connect(QCoo.y,dTdt.u2) + annotation (Line(points={{-98,-50},{-88,-50},{-88,4},{-82,4}},color={0,0,127})); + connect(TRoo.y,optStaCoo.TZon) + annotation (Line(points={{-19,10},{-8,10},{-8,6},{18,6}},color={0,0,127})); + connect(TSetCooOcc.y,optStaCoo.TSetZonCoo) + annotation (Line(points={{-18,80},{0,80},{0,14},{18,14}},color={0,0,127})); + connect(UA.y,dTdt.u1) + annotation (Line(points={{-98,10},{-90,10},{-90,16},{-82,16}},color={0,0,127})); + connect(optStaCoo.optOn,booToRea.u) + annotation (Line(points={{42,6},{50,6},{50,10},{58,10}},color={255,0,255})); + connect(add.y,conPID.u_s) + annotation (Line(points={{142,10},{158,10}},color={0,0,127})); + connect(TRoo.y,conPID.u_m) + annotation (Line(points={{-19,10},{-14,10},{-14,-20},{170,-20},{170,-2}},color={0,0,127})); + connect(occSch.tNexOcc,optStaCoo.tNexOcc) + annotation (Line(points={{-19,-44},{0,-44},{0,2},{18,2}},color={0,0,127})); + connect(conPID.y,QCoo.u) + annotation (Line(points={{182,10},{188,10},{188,-80},{-130,-80},{-130,-50},{-122,-50}},color={0,0,127})); + connect(occSch.occupied,TSetCoo.u) + annotation (Line(points={{-19,-56},{10,-56},{10,-50},{58,-50}},color={255,0,255})); + connect(TSetCoo.y,add.u2) + annotation (Line(points={{82,-50},{100,-50},{100,4},{118,4}},color={0,0,127})); + connect(booToRea.y,add.u1) + annotation (Line(points={{82,10},{100,10},{100,16},{118,16}},color={0,0,127})); + connect(TRoo.y, dT.u2) annotation (Line(points={{-19,10},{-14,10},{-14,-20},{-166, + -20},{-166,4},{-162,4}}, color={0,0,127})); + connect(TOut.y, dT.u1) annotation (Line(points={{-172,50},{-166,50},{-166,16}, + {-162,16}}, color={0,0,127})); + + annotation ( + experiment( + StartTime=34000, + StopTime=864000, + Tolerance=1e-07), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartCoolingPositiveStartTime.mos" "Simulate and plot"), + Documentation( + info=" +

+This model is to validate the block + +IBPSA.Controls.OBC.Utilities.OptimalStart for space cooling system +with a positive simulation start time. +

+

+The room is modeled as a simple differential equation with a time constant of +around 5.6 hours. The cooling power is relatively large compared to the heat gain from +the outdoor temperature. The outdoor temperature is repetitive each day; +the optimal start time converges to a small amount of time tOpt after a few days. +

+", + revisions=" +
    +
  • +March 19, 2020, by Michael Wetter:
    +Simplified setpoint implementation.' +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-200,-160},{200,160}}))); +end OptimalStartCoolingPositiveStartTime; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo new file mode 100644 index 0000000000..25a9e4ac57 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeating.mo @@ -0,0 +1,150 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model OptimalStartHeating + "Validation model for the block OptimalStart for heating system" + IBPSA.Controls.OBC.Utilities.OptimalStart optStaHea( + computeHeating=true, + computeCooling=false) + "Optimal start for heating system" + annotation (Placement(transformation(extent={{20,0},{40,20}}))); + Modelica.Blocks.Continuous.Integrator TRoo( + k=0.000005, + y_start=21+273.15) + "Room air temperature" + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOcc( + k=21+273.15) + "Zone heating setpoint during occupancy" + annotation (Placement(transformation(extent={{-40,70},{-20,90}}))); + IBPSA.Controls.SetPoints.OccupancySchedule occSch( + occupancy=3600*{7,19}, + period=24*3600) + "Daily schedule" + annotation (Placement(transformation(extent={{-40,-60},{-20,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=10) + "Overall heat loss coefficient" + annotation (Placement(transformation(extent={{-120,0},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dT + "Temperature difference between zone and outdoor" + annotation (Placement(transformation(extent={{-160,0},{-140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add dTdt + "Temperature derivative" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=500) + "Heat injection in the zone" + annotation (Placement(transformation(extent={{-120,-60},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea( + realTrue=6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{60,0},{80,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOut( + amplitude=10, + freqHz=1/86400, + phase=3.1415926535898, + offset=10+273.15, + startTime( + displayUnit="d")=-172800) + "Outdoor dry bulb temperature to test heating system" + annotation (Placement(transformation(extent={{-194,40},{-174,60}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=1.5) + "PI control for space heating" + annotation (Placement(transformation(extent={{160,0},{180,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add + "Reset temperature from unoccupied to occupied for optimal start period" + annotation (Placement(transformation(extent={{120,0},{140,20}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetHea( + realTrue=273.15+21, + realFalse=273.15+15, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for heating" + annotation (Placement(transformation(extent={{60,-60},{80,-40}}))); + +equation + connect(dT.y,UA.u) + annotation (Line(points={{-138,10},{-122,10}},color={0,0,127})); + connect(dTdt.y,TRoo.u) + annotation (Line(points={{-58,10},{-42,10}},color={0,0,127})); + connect(QHea.y,dTdt.u2) + annotation (Line(points={{-98,-50},{-88,-50},{-88,4},{-82,4}},color={0,0,127})); + connect(TRoo.y,optStaHea.TZon) + annotation (Line(points={{-19,10},{-12,10},{-12,6},{18,6}},color={0,0,127})); + connect(occSch.tNexOcc,optStaHea.tNexOcc) + annotation (Line(points={{-19,-44},{0,-44},{0,2},{18,2}},color={0,0,127})); + connect(TSetHeaOcc.y,optStaHea.TSetZonHea) + annotation (Line(points={{-18,80},{0,80},{0,18},{18,18}},color={0,0,127})); + connect(UA.y,dTdt.u1) + annotation (Line(points={{-98,10},{-90,10},{-90,16},{-82,16}},color={0,0,127})); + connect(add.y,conPID.u_s) + annotation (Line(points={{142,10},{158,10}},color={0,0,127})); + connect(conPID.y,QHea.u) + annotation (Line(points={{182,10},{184,10},{184,-70},{-126,-70},{-126,-50},{-122,-50}},color={0,0,127})); + connect(TRoo.y,conPID.u_m) + annotation (Line(points={{-19,10},{-12,10},{-12,-16},{170,-16},{170,-2}},color={0,0,127})); + connect(optStaHea.optOn,booToRea.u) + annotation (Line(points={{42,6},{50,6},{50,10},{58,10}},color={255,0,255})); + connect(TSetHea.u,occSch.occupied) + annotation (Line(points={{58,-50},{10,-50},{10,-56},{-19,-56}},color={255,0,255})); + connect(TSetHea.y,add.u2) + annotation (Line(points={{82,-50},{104,-50},{104,4},{118,4}},color={0,0,127})); + connect(booToRea.y,add.u1) + annotation (Line(points={{82,10},{104,10},{104,16},{118,16}},color={0,0,127})); + connect(TOut.y, dT.u1) annotation (Line(points={{-172,50},{-166,50},{-166,16}, + {-162,16}}, color={0,0,127})); + connect(TRoo.y, dT.u2) annotation (Line(points={{-19,10},{-12,10},{-12,-16},{-166, + -16},{-166,4},{-162,4}}, color={0,0,127})); + annotation ( + experiment( + StartTime=-172800, + StopTime=604800, + Tolerance=1e-07), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeating.mos" "Simulate and plot"), + Documentation( + info=" +

+This model is to validate the block + +IBPSA.Controls.OBC.Utilities.OptimalStart for space heating system. +

+

+The room is modeled as a simple differential equation with a time constant of +around 5.6 hours. +The outdoor temperature is also repetitive each day; +the optimal start time converges to a small amount of time tOpt after a few days. +

+", + revisions=" +
    +
  • +March 19, 2020, by Michael Wetter:
    +Simplified setpoint implementation.' +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-200,-160},{200,160}}))); +end OptimalStartHeating; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo new file mode 100644 index 0000000000..8cb555570f --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mo @@ -0,0 +1,211 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model OptimalStartHeatingCooling + "Validation model for the block OptimalStart for both heating and cooling system" + IBPSA.Controls.OBC.Utilities.OptimalStart optSta( + computeHeating=true, + computeCooling=true) + "Optimal start for both heating and cooling system" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + Modelica.Blocks.Continuous.Integrator TRoo( + k=0.0000004, + y_start=19+273.15) + "Room air temperature" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetCooOcc( + k=24+273.15) + "Zone cooling setpoint during occupancy" + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOutBase( + amplitude=5, + freqHz=1/86400, + offset=15+273.15, + startTime( + displayUnit="h")=0) + "Outdoor dry bulb temperature, base component" + annotation (Placement(transformation(extent={{-212,70},{-192,90}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=25) + "Overall heat loss coefficient" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dT + "Temperature difference between zone and outdoor" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-4000) + "Heat extraction in the zone" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( + realTrue=-6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add1 + "Reset temperature from unoccupied to occupied for optimal start period" + annotation (Placement(transformation(extent={{140,0},{160,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID1( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=3, + reverseActing=false) + "PI control for space cooling" + annotation (Placement(transformation(extent={{180,0},{200,20}}))); + IBPSA.Controls.SetPoints.OccupancySchedule occSch( + occupancy=3600*{7,19}, + period=24*3600) + "Daily schedule" + annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum( + nin=3) + "Sum heat gains" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetHeaOcc( + k=21+273.15) + "Zone heating setpoint during occupancy" + annotation (Placement(transformation(extent={{-20,100},{0,120}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2( + realTrue=6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add2 + "Reset temperature from unoccupied to occupied for optimal start period" + annotation (Placement(transformation(extent={{140,40},{160,60}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=3) + "PI control for space heating" + annotation (Placement(transformation(extent={{180,40},{200,60}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=2000) + "Heat injection in the zone" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); + IBPSA.Controls.OBC.CDL.Reals.Add TOut + "Outdoor dry bulb temperature" + annotation (Placement(transformation(extent={{-174,50},{-154,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul( + shift( + displayUnit="d")=604800, + amplitude=15, + period( + displayUnit="d")=1209600) + "Range of outdoor dry bulb temperature" + annotation (Placement(transformation(extent={{-214,30},{-194,50}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetHea( + realTrue=273.15+21, + realFalse=273.15+15, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for heating" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetCoo( + realTrue=273.15+24, + realFalse=273.15+30, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for cooling" + annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); + +equation + connect(dT.y,UA.u) + annotation (Line(points={{-118,10},{-102,10}},color={0,0,127})); + connect(TRoo.y,optSta.TZon) + annotation (Line(points={{1,10},{10,10},{10,6},{38,6}},color={0,0,127})); + connect(TSetCooOcc.y,optSta.TSetZonCoo) + annotation (Line(points={{2,70},{10,70},{10,14},{38,14}},color={0,0,127})); + connect(optSta.optOn,booToRea1.u) + annotation (Line(points={{62,6},{70,6},{70,10},{78,10}},color={255,0,255})); + connect(add1.y,conPID1.u_s) + annotation (Line(points={{162,10},{178,10}},color={0,0,127})); + connect(TRoo.y,conPID1.u_m) + annotation (Line(points={{1,10},{6,10},{6,-6},{190,-6},{190,-2}},color={0,0,127})); + connect(occSch.tNexOcc,optSta.tNexOcc) + annotation (Line(points={{1,-44},{10,-44},{10,2},{38,2}},color={0,0,127})); + connect(UA.y,mulSum.u[1]) + annotation (Line(points={{-78,10},{-70,10},{-70,11.3333},{-62,11.3333}},color={0,0,127})); + connect(TRoo.u,mulSum.y) + annotation (Line(points={{-22,10},{-38,10}},color={0,0,127})); + connect(TSetHeaOcc.y,optSta.TSetZonHea) + annotation (Line(points={{2,110},{14,110},{14,18},{38,18}},color={0,0,127})); + connect(optSta.optOn,booToRea2.u) + annotation (Line(points={{62,6},{70,6},{70,50},{78,50}},color={255,0,255})); + connect(add2.y,conPID.u_s) + annotation (Line(points={{162,50},{178,50}},color={0,0,127})); + connect(conPID1.y,QCoo.u) + annotation (Line(points={{202,10},{210,10},{210,-80},{-110,-80},{-110,-30},{-102,-30}},color={0,0,127})); + connect(conPID.y,QHea.u) + annotation (Line(points={{202,50},{212,50},{212,-130},{-108,-130},{-108,-100},{-102,-100}},color={0,0,127})); + connect(QCoo.y,mulSum.u[2]) + annotation (Line(points={{-78,-30},{-70,-30},{-70,10},{-62,10}},color={0,0,127})); + connect(QHea.y,mulSum.u[3]) + annotation (Line(points={{-78,-100},{-68,-100},{-68,8.66667},{-62,8.66667}},color={0,0,127})); + connect(TOutBase.y,TOut.u1) + annotation (Line(points={{-190,80},{-182,80},{-182,66},{-176,66}}, color={0,0,127})); + connect(pul.y,TOut.u2) + annotation (Line(points={{-192,40},{-180,40},{-180,54},{-176,54}}, color={0,0,127})); + connect(TSetCoo.y,add1.u2) + annotation (Line(points={{102,-30},{130,-30},{130,4},{138,4}},color={0,0,127})); + connect(occSch.occupied,TSetCoo.u) + annotation (Line(points={{1,-56},{60,-56},{60,-30},{78,-30}},color={255,0,255})); + connect(TSetHea.u,occSch.occupied) + annotation (Line(points={{78,-60},{60,-60},{60,-56},{1,-56}},color={255,0,255})); + connect(booToRea1.y,add1.u1) + annotation (Line(points={{102,10},{120,10},{120,16},{138,16}},color={0,0,127})); + connect(booToRea2.y,add2.u1) + annotation (Line(points={{102,50},{120,50},{120,56},{138,56}},color={0,0,127})); + connect(TSetHea.y,add2.u2) + annotation (Line(points={{102,-60},{126,-60},{126,44},{138,44}},color={0,0,127})); + connect(TRoo.y, conPID.u_m) annotation (Line(points={{1,10},{6,10},{6,34},{190, + 34},{190,38}}, color={0,0,127})); + connect(TOut.y, dT.u1) annotation (Line(points={{-152,60},{-146,60},{-146,16}, + {-142,16}}, color={0,0,127})); + connect(TRoo.y, dT.u2) annotation (Line(points={{1,10},{6,10},{6,-6},{-146,-6}, + {-146,4},{-142,4}}, color={0,0,127})); + annotation ( + experiment( + StopTime=2419200, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartHeatingCooling.mos" "Simulate and plot"), + Documentation( + info=" +

+This models validates both space heating and cooling for the block + +IBPSA.Controls.OBC.Utilities.OptimalStart. +

+

+The first ten days is to test the heating case with a lower outdoor temperature. +The next ten days has a higher outdoor temprature, which is to test the cooling case. +The zone model has a time constant of 27.8 hours. The optimal start block converges separately +to an optimal start time for heating and cooling. Note that during the three transition +days, the zone temperature is in the deadband, so there is no need to optimally start +the heating or cooling system in advance. +

+", + revisions=" +
    +
  • +March 19, 2020, by Michael Wetter:
    +Simplified setpoint implementation.' +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-220,-160},{220,160}}))); +end OptimalStartHeatingCooling; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo new file mode 100644 index 0000000000..bde745e1b6 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mo @@ -0,0 +1,196 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model OptimalStartNoHeatingNoCooling + "Validation model for the block OptimalStart for the case with no preheating nor precooling" + IBPSA.Controls.OBC.Utilities.OptimalStart optSta( + computeHeating=false, + computeCooling=false) + "Optimal start for both heating and cooling system" + annotation (Placement(transformation(extent={{40,0},{60,20}}))); + Modelica.Blocks.Continuous.Integrator TRoo( + k=0.0000004, + y_start=19+273.15) + "Room air temperature" + annotation (Placement(transformation(extent={{-20,0},{0,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOutBase( + amplitude=5, + freqHz=1/86400, + offset=15+273.15, + startTime( + displayUnit="h")=0) + "Outdoor dry bulb temperature, base component" + annotation (Placement(transformation(extent={{-212,70},{-192,90}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter UA(k=25) + "Overall heat loss coefficient" + annotation (Placement(transformation(extent={{-100,0},{-80,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract dT + "Temperature difference between zone and outdoor" + annotation (Placement(transformation(extent={{-140,0},{-120,20}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QCoo(k=-4000) + "Heat extraction in the zone" + annotation (Placement(transformation(extent={{-100,-40},{-80,-20}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( + realTrue=-6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{80,0},{100,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add1 + "Reset temperature from unoccupied to occupied for optimal start period" + annotation (Placement(transformation(extent={{140,0},{160,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID1( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=3, + reverseActing=false) + "PI control for space cooling" + annotation (Placement(transformation(extent={{180,0},{200,20}}))); + IBPSA.Controls.SetPoints.OccupancySchedule occSch( + occupancy=3600*{7,19}, + period=24*3600) + "Daily schedule" + annotation (Placement(transformation(extent={{-20,-60},{0,-40}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiSum mulSum( + nin=3) + "Sum heat gains" + annotation (Placement(transformation(extent={{-60,0},{-40,20}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2( + realTrue=6) + "Convert Boolean to Real signal" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Add add2 + "Reset temperature from unoccupied to occupied for optimal start period" + annotation (Placement(transformation(extent={{140,40},{160,60}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI, + Ti=3) + "PI control for space heating" + annotation (Placement(transformation(extent={{180,40},{200,60}}))); + IBPSA.Controls.OBC.CDL.Reals.MultiplyByParameter QHea(k=2000) + "Heat injection in the zone" + annotation (Placement(transformation(extent={{-100,-110},{-80,-90}}))); + IBPSA.Controls.OBC.CDL.Reals.Add TOut + "Outdoor dry bulb temperature" + annotation (Placement(transformation(extent={{-174,50},{-154,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pul( + shift( + displayUnit="d")=604800, + amplitude=15, + period( + displayUnit="d")=1209600) + "Range of outdoor dry bulb temperature" + annotation (Placement(transformation(extent={{-214,30},{-194,50}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetHea( + realTrue=273.15+21, + realFalse=273.15+15, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for heating" + annotation (Placement(transformation(extent={{80,-70},{100,-50}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal TSetCoo( + realTrue=273.15+24, + realFalse=273.15+30, + y(final unit="K", + displayUnit="degC")) + "Room temperature set point for cooling" + annotation (Placement(transformation(extent={{80,-40},{100,-20}}))); + +equation + connect(dT.y,UA.u) + annotation (Line(points={{-118,10},{-102,10}},color={0,0,127})); + connect(TRoo.y,optSta.TZon) + annotation (Line(points={{1,10},{10,10},{10,6},{38,6}},color={0,0,127})); + connect(optSta.optOn,booToRea1.u) + annotation (Line(points={{62,6},{70,6},{70,10},{78,10}},color={255,0,255})); + connect(add1.y,conPID1.u_s) + annotation (Line(points={{162,10},{178,10}},color={0,0,127})); + connect(TRoo.y,conPID1.u_m) + annotation (Line(points={{1,10},{6,10},{6,-12},{190,-12},{190,-2}},color={0,0,127})); + connect(occSch.tNexOcc,optSta.tNexOcc) + annotation (Line(points={{1,-44},{10,-44},{10,2},{38,2}},color={0,0,127})); + connect(UA.y,mulSum.u[1]) + annotation (Line(points={{-78,10},{-70,10},{-70,11.3333},{-62,11.3333}},color={0,0,127})); + connect(TRoo.u,mulSum.y) + annotation (Line(points={{-22,10},{-38,10}},color={0,0,127})); + connect(optSta.optOn,booToRea2.u) + annotation (Line(points={{62,6},{70,6},{70,50},{78,50}},color={255,0,255})); + connect(add2.y,conPID.u_s) + annotation (Line(points={{162,50},{178,50}},color={0,0,127})); + connect(conPID1.y,QCoo.u) + annotation (Line(points={{202,10},{210,10},{210,-80},{-110,-80},{-110,-30},{-102,-30}},color={0,0,127})); + connect(conPID.y,QHea.u) + annotation (Line(points={{202,50},{212,50},{212,-120},{-108,-120},{-108,-100},{-102,-100}},color={0,0,127})); + connect(QCoo.y,mulSum.u[2]) + annotation (Line(points={{-78,-30},{-70,-30},{-70,10},{-62,10}},color={0,0,127})); + connect(QHea.y,mulSum.u[3]) + annotation (Line(points={{-78,-100},{-68,-100},{-68,8.66667},{-62,8.66667}},color={0,0,127})); + connect(TOutBase.y,TOut.u1) + annotation (Line(points={{-190,80},{-182,80},{-182,66},{-176,66}}, color={0,0,127})); + connect(pul.y,TOut.u2) + annotation (Line(points={{-192,40},{-180,40},{-180,54},{-176,54}}, color={0,0,127})); + connect(TSetCoo.y,add1.u2) + annotation (Line(points={{102,-30},{130,-30},{130,4},{138,4}},color={0,0,127})); + connect(occSch.occupied,TSetCoo.u) + annotation (Line(points={{1,-56},{60,-56},{60,-30},{78,-30}},color={255,0,255})); + connect(TSetHea.u,occSch.occupied) + annotation (Line(points={{78,-60},{60,-60},{60,-56},{1,-56}},color={255,0,255})); + connect(TSetHea.y,add2.u2) + annotation (Line(points={{102,-60},{126,-60},{126,44},{138,44}},color={0,0,127})); + connect(booToRea2.y,add2.u1) + annotation (Line(points={{102,50},{126,50},{126,56},{138,56}},color={0,0,127})); + connect(booToRea1.y,add1.u1) + annotation (Line(points={{102,10},{120,10},{120,16},{138,16}},color={0,0,127})); + connect(TRoo.y, conPID.u_m) annotation (Line(points={{1,10},{10,10},{10,34},{190, + 34},{190,38}}, color={0,0,127})); + connect(TOut.y, dT.u1) annotation (Line(points={{-152,60},{-146,60},{-146,16}, + {-142,16}}, color={0,0,127})); + connect(TRoo.y, dT.u2) annotation (Line(points={{1,10},{6,10},{6,-12},{-146,-12}, + {-146,4},{-142,4}}, color={0,0,127})); + annotation ( + experiment( + StopTime=2419200, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/OptimalStartNoHeatingNoCooling.mos" "Simulate and plot"), + Documentation( + info=" +

+This models validates the block + +IBPSA.Controls.OBC.Utilities.OptimalStart for the case when the optimal start +is not turned on for preheating or precooling before the scheduled occupancy. +

+

+The results shows that the optimal start time tOpt remains zero and +the optimal start on signal optOn remains false during the simulation. +

+", + revisions=" +
    +
  • +March 19, 2020, by Michael Wetter:
    +Simplified setpoint implementation. +
  • +
  • +December 15, 2019, by Kun Zhang:
    +First implementation. +
  • +
+"), + Icon( + coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram( + coordinateSystem( + preserveAspectRatio=false, + extent={{-220,-160},{220,160}}))); +end OptimalStartNoHeatingNoCooling; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo b/IBPSA/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo new file mode 100644 index 0000000000..ad0f5dd93a --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/PIDWithInputGains.mo @@ -0,0 +1,158 @@ +within IBPSA.Controls.OBC.Utilities.Validation; +model PIDWithInputGains + "Test model for PIDWithInputGains" + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse pulse( + period=0.25) + "Setpoint" + annotation (Placement(transformation(extent={{-30,14},{-10,34}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant const( + k=0.5) + "Measured value" + annotation (Placement(transformation(extent={{-30,-22},{-10,-2}}))); + IBPSA.Controls.OBC.Utilities.PIDWithInputGains PIDWitInpGai( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID) + "PID controller with input gains" + annotation (Placement(transformation(extent={{20,-30},{40,-10}}))); + IBPSA.Controls.OBC.CDL.Reals.PIDWithReset PID( + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PID, + k=1, + Ti=0.5, + Td=0.1) + "PID controller with constant gains" + annotation (Placement(transformation(extent={{20,20},{40,40}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse resSig(period=1) + "Reset signal" + annotation (Placement(transformation(extent={{-80,40},{-60,60}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse k( + amplitude=0.2, + width=0.4, + period=1, + shift=0.6, + offset=1) + "Control gain signal" + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse Ti( + amplitude=0.2, + width=0.4, + period=1, + shift=0.6, + offset=0.5) + "Time constant signal for the integral term" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Pulse Td( + amplitude=0.1, + width=0.4, + period=1, + shift=0.6, + offset=0.1) + "Time constant signal for the derivative term" + annotation (Placement(transformation(extent={{-80,-80},{-60,-60}}))); + IBPSA.Controls.OBC.CDL.Reals.Abs abs1 + "Absolute value of controller output" + annotation (Placement(transformation(extent={{110,-10},{130,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub + "Difference in controller output" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); + IBPSA.Controls.OBC.CDL.Reals.LessThreshold lesThr(t=1E-5, h=1E-4) + "Output true if outputs are bigger than threshold" + annotation (Placement(transformation(extent={{140,-10},{160,10}}))); + IBPSA.Controls.OBC.CDL.Utilities.Assert assMes( + message="Control outputs differ more than expected") + "Make sure outputs are within expected tolerance" + annotation (Placement(transformation(extent={{200,20},{220,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.CivilTime modTim + "Civil time" + annotation (Placement(transformation(extent={{80,40},{100,60}}))); + IBPSA.Controls.OBC.CDL.Reals.GreaterThreshold greThr(t=0.59) + "Output true if model time is below 0.6" + annotation (Placement(transformation(extent={{140,40},{160,60}}))); + IBPSA.Controls.OBC.CDL.Logical.Or or2 + "Output true either if time is bigger than 0.59, or if tolerance is maintained" + annotation (Placement(transformation(extent={{170,20},{190,40}}))); +equation + connect(resSig.y, PID.trigger) annotation (Line(points={{-58,50},{0,50},{0,10}, + {24,10},{24,18}}, color={255,0,255})); + connect(PIDWitInpGai.trigger, PID.trigger) annotation (Line(points={{24, + -32},{24,-60},{0,-60},{0,10},{24,10},{24,18}}, color={255,0,255})); + connect(pulse.y, PID.u_s) annotation (Line(points={{-8,24},{14,24},{14,30},{ + 18,30}}, color={0,0,127})); + connect(PIDWitInpGai.u_s, PID.u_s) annotation (Line(points={{18,-20},{14, + -20},{14,30},{18,30}}, color={0,0,127})); + connect(const.y, PID.u_m) annotation (Line(points={{-8,-12},{8,-12},{8,0},{30, + 0},{30,18}}, color={0,0,127})); + connect(PIDWitInpGai.u_m, PID.u_m) annotation (Line(points={{30,-32},{30, + -40},{8,-40},{8,0},{30,0},{30,18}}, color={0,0,127})); + connect(k.y, PIDWitInpGai.k) annotation (Line(points={{-58,10},{-40,10},{ + -40,4},{12,4},{12,-12},{18,-12}}, color={0,0,127})); + connect(PIDWitInpGai.Ti, Ti.y) annotation (Line(points={{18,-16},{2,-16}, + {2,-30},{-58,-30}}, color={0,0,127})); + connect(PIDWitInpGai.Td, Td.y) annotation (Line(points={{18,-24},{14,-24}, + {14,-70},{-58,-70}}, color={0,0,127})); + connect(PID.y, sub.u1) + annotation (Line(points={{42,30},{50,30},{50,6},{78,6}}, color={0,0,127})); + connect(PIDWitInpGai.y, sub.u2) annotation (Line(points={{42,-20},{50,-20},{50, + -6},{78,-6}}, color={0,0,127})); + connect(sub.y, abs1.u) + annotation (Line(points={{102,0},{108,0}}, color={0,0,127})); + connect(abs1.y, lesThr.u) + annotation (Line(points={{132,0},{138,0}}, color={0,0,127})); + connect(modTim.y, greThr.u) + annotation (Line(points={{102,50},{138,50}}, color={0,0,127})); + connect(greThr.y, or2.u1) annotation (Line(points={{162,50},{166,50},{166,30}, + {168,30}}, color={255,0,255})); + connect(lesThr.y, or2.u2) annotation (Line(points={{162,0},{166,0},{166,22},{168, + 22}}, color={255,0,255})); + connect(or2.y, assMes.u) + annotation (Line(points={{192,30},{198,30}}, color={255,0,255})); + annotation ( + experiment( + StopTime=1.0, + Tolerance=1e-06), + __Dymola_Commands( + file="modelica://IBPSA/Resources/Scripts/Dymola/Controls/OBC/Utilities/Validation/PIDWithInputGains.mos" "Simulate and plot"), + Documentation( + info=" +

+Validation test for the block + +IBPSA.Controls.OBC.Utilities.PIDWithInputGains. +

+

+For t ∈ [0, 0.6] both PID controllers have the same gains. +During this time, they generate the same output. +Afterwards, the gains, and hence also their outputs, differ. + +IBPSA.Controls.OBC.CDL.Reals.PIDWithReset. +

+", + revisions=" +
    +
  • +May 17, 2022, by Sen Huang:
    +First implementation. +
  • +
+"), + Icon(coordinateSystem(extent={{-100,-100},{100,100}}), + graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon( + lineColor={0,0,255}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-36,60},{64,0},{-36,-60},{-36,60}})}), + Diagram(coordinateSystem(extent={{-100,-100},{240,100}}), graphics={ + Rectangle( + extent={{72,80},{228,-20}}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), Text( + extent={{78,78},{168,68}}, + textColor={0,0,0}, + textString="Trigger an assertion if outputs differ more than threshold")})); +end PIDWithInputGains; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/package.mo b/IBPSA/Controls/OBC/Utilities/Validation/package.mo new file mode 100644 index 0000000000..ba55bfe58d --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/package.mo @@ -0,0 +1,31 @@ +within IBPSA.Controls.OBC.Utilities; +package Validation "Collection of validation models" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains validation models for blocks in +IBPSA.Controls.OBC.Utilities. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); +end Validation; diff --git a/IBPSA/Controls/OBC/Utilities/Validation/package.order b/IBPSA/Controls/OBC/Utilities/Validation/package.order new file mode 100644 index 0000000000..8aae0d17d7 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/Validation/package.order @@ -0,0 +1,6 @@ +OptimalStartCoolingNegativeStartTime +OptimalStartCoolingPositiveStartTime +OptimalStartHeating +OptimalStartHeatingCooling +OptimalStartNoHeatingNoCooling +PIDWithInputGains diff --git a/IBPSA/Controls/OBC/Utilities/package.mo b/IBPSA/Controls/OBC/Utilities/package.mo new file mode 100644 index 0000000000..04e39c63be --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/package.mo @@ -0,0 +1,37 @@ +within IBPSA.Controls.OBC; +package Utilities "Package with utility functions" + annotation ( + preferredView="info", + Documentation( + info=" +

+This package contains utility blocks, base classes and validation models for +the OpenBuildingControl (OBC) library. +

+"), + Icon( + graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + extent={{-100.0,-100.0},{100.0,100.0}}, + radius=25.0), + Polygon( + origin={1.3835,-4.1418}, + rotation=45.0, + fillColor={64,64,64}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-15.0,93.333},{-15.0,68.333},{0.0,58.333},{15.0,68.333},{15.0,93.333},{20.0,93.333},{25.0,83.333},{25.0,58.333},{10.0,43.333},{10.0,-41.667},{25.0,-56.667},{25.0,-76.667},{10.0,-91.667},{0.0,-91.667},{0.0,-81.667},{5.0,-81.667},{15.0,-71.667},{15.0,-61.667},{5.0,-51.667},{-5.0,-51.667},{-15.0,-61.667},{-15.0,-71.667},{-5.0,-81.667},{0.0,-81.667},{0.0,-91.667},{-10.0,-91.667},{-25.0,-76.667},{-25.0,-56.667},{-10.0,-41.667},{-10.0,43.333},{-25.0,58.333},{-25.0,83.333},{-20.0,93.333}}), + Polygon( + origin={10.1018,5.218}, + rotation=-45.0, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + points={{-15.0,87.273},{15.0,87.273},{20.0,82.273},{20.0,27.273},{10.0,17.273},{10.0,7.273},{20.0,2.273},{20.0,-2.727},{5.0,-2.727},{5.0,-77.727},{10.0,-87.727},{5.0,-112.727},{-5.0,-112.727},{-10.0,-87.727},{-5.0,-77.727},{-5.0,-2.727},{-20.0,-2.727},{-20.0,2.273},{-10.0,7.273},{-10.0,17.273},{-20.0,27.273},{-20.0,82.273}})})); +end Utilities; diff --git a/IBPSA/Controls/OBC/Utilities/package.order b/IBPSA/Controls/OBC/Utilities/package.order new file mode 100644 index 0000000000..b77eda1478 --- /dev/null +++ b/IBPSA/Controls/OBC/Utilities/package.order @@ -0,0 +1,5 @@ +OptimalStart +PIDWithInputGains +SetPoints +Validation +BaseClasses diff --git a/IBPSA/Controls/OBC/package.mo b/IBPSA/Controls/OBC/package.mo new file mode 100644 index 0000000000..f24a3df951 --- /dev/null +++ b/IBPSA/Controls/OBC/package.mo @@ -0,0 +1,30 @@ +within IBPSA.Controls; +package OBC "Blocks and preconfigured control sequences" + extends Modelica.Icons.Package; + +annotation ( +Documentation(info=" +

+Package that contains a library of elementary control blocks +based on ASHRAE Standard 231P, +and libraries for building control sequences. +

+ +"), +Icon(graphics={Bitmap(extent={{-92,-98},{104,96}}, +fileName="modelica://IBPSA/Resources/Images/Controls/OBC/OBC_logo-only_150dpi.png")})); +end OBC; diff --git a/IBPSA/Controls/OBC/package.order b/IBPSA/Controls/OBC/package.order new file mode 100644 index 0000000000..fd5ea55a12 --- /dev/null +++ b/IBPSA/Controls/OBC/package.order @@ -0,0 +1,8 @@ +UsersGuide +ASHRAE +CDL +OutdoorLights +RadiantSystems +Shade +UnitConversions +Utilities From 1569da698efa05aff6e2b9a1e43c09eab8123fba Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 15:46:30 -0800 Subject: [PATCH 05/21] Updated package.order --- IBPSA/Controls/OBC/package.order | 6 ------ IBPSA/Controls/package.order | 1 + 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/IBPSA/Controls/OBC/package.order b/IBPSA/Controls/OBC/package.order index fd5ea55a12..d59809a8a9 100644 --- a/IBPSA/Controls/OBC/package.order +++ b/IBPSA/Controls/OBC/package.order @@ -1,8 +1,2 @@ -UsersGuide -ASHRAE CDL -OutdoorLights -RadiantSystems -Shade -UnitConversions Utilities diff --git a/IBPSA/Controls/package.order b/IBPSA/Controls/package.order index 39c754ac6a..8b5fdf3505 100644 --- a/IBPSA/Controls/package.order +++ b/IBPSA/Controls/package.order @@ -1,3 +1,4 @@ Continuous Discrete +OBC SetPoints From bb464bb6ed652f3bfab3db2c4541f019d8118000 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 15:50:02 -0800 Subject: [PATCH 06/21] Updated documentation --- IBPSA/Controls/OBC/package.mo | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/IBPSA/Controls/OBC/package.mo b/IBPSA/Controls/OBC/package.mo index f24a3df951..1cd951554e 100644 --- a/IBPSA/Controls/OBC/package.mo +++ b/IBPSA/Controls/OBC/package.mo @@ -9,7 +9,6 @@ Package that contains a library of elementary control blocks based on ASHRAE Standard 231P, and libraries for building control sequences.

- "), Icon(graphics={Bitmap(extent={{-92,-98},{104,96}}, fileName="modelica://IBPSA/Resources/Images/Controls/OBC/OBC_logo-only_150dpi.png")})); From 3b9cb9dcf4324bccf6b97b9461b4f34fe847b1fd Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 15:50:52 -0800 Subject: [PATCH 07/21] Formatted code --- IBPSA/Controls/OBC/CDL/Reals/Ramp.mo | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo b/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo index 4a4b072e84..4476f73cb5 100644 --- a/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo +++ b/IBPSA/Controls/OBC/CDL/Reals/Ramp.mo @@ -48,9 +48,7 @@ equation if thr < fallingSlewRate then fallingSlewRate else - if thr > raisingSlewRate then raisingSlewRate else thr - ) - ); + if thr > raisingSlewRate then raisingSlewRate else thr)); y = if active then y_internal else u; annotation (defaultComponentName="ram", From 92b60933dbc8a84c3c17d010136eb0e189ff1602 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 23:55:46 +0000 Subject: [PATCH 08/21] Added reference results --- ...l_CDL_Controls_Validation_BoilerReturn.txt | 12 ++++++++++ ...CDL_Controls_Validation_EquipmentOnOff.txt | 12 ++++++++++ ...CDL_Controls_Validation_RadiatorSupply.txt | 12 ++++++++++ ...al_CDL_Controls_Validation_SystemOnOff.txt | 13 +++++++++++ .../IBPSA_Examples_Tutorial_CDL_System1.txt | 19 +++++++++++++++ .../IBPSA_Examples_Tutorial_CDL_System2.txt | 19 +++++++++++++++ .../IBPSA_Examples_Tutorial_CDL_System3.txt | 19 +++++++++++++++ .../IBPSA_Examples_Tutorial_CDL_System4.txt | 21 +++++++++++++++++ .../IBPSA_Examples_Tutorial_CDL_System5.txt | 22 ++++++++++++++++++ .../IBPSA_Examples_Tutorial_CDL_System6.txt | 23 +++++++++++++++++++ 10 files changed, 172 insertions(+) create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt new file mode 100644 index 0000000000..21ee36b0a8 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt @@ -0,0 +1,12 @@ +last-generated=2020-02-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +conBoiRet.TSet=[3.331499938964844e+02, 3.331499938964844e+02] +conBoiRet.TRet=[2.931499938964844e+02, 2.936499938964844e+02, 2.941499938964844e+02, 2.946499938964844e+02, 2.951499938964844e+02, 2.956499938964844e+02, 2.961499938964844e+02, 2.966499938964844e+02, 2.971499938964844e+02, 2.976499938964844e+02, 2.981499938964844e+02, 2.986499938964844e+02, 2.991499938964844e+02, 2.996499938964844e+02, 3.001499938964844e+02, 3.006499938964844e+02, 3.011499938964844e+02, 3.016499938964844e+02, 3.021499938964844e+02, 3.026499938964844e+02, 3.031499938964844e+02, 3.036499938964844e+02, 3.041499938964844e+02, 3.046499938964844e+02, 3.051499938964844e+02, 3.056499938964844e+02, 3.061499938964844e+02, 3.066499938964844e+02, 3.071499938964844e+02, 3.076499938964844e+02, 3.081499938964844e+02, 3.086499938964844e+02, 3.091499938964844e+02, 3.096499938964844e+02, 3.101499938964844e+02, 3.106499938964844e+02, 3.111499938964844e+02, 3.116499938964844e+02, 3.121499938964844e+02, 3.126499938964844e+02, 3.131499938964844e+02, 3.136499938964844e+02, 3.141499938964844e+02, 3.146499938964844e+02, 3.151499938964844e+02, 3.156499938964844e+02, 3.161499938964844e+02, 3.166499938964844e+02, 3.171499938964844e+02, 3.176499938964844e+02, 3.181499938964844e+02, 3.186499938964844e+02, 3.191499938964844e+02, 3.196499938964844e+02, 3.201499938964844e+02, 3.206499938964844e+02, 3.211499938964844e+02, 3.216499938964844e+02, 3.221499938964844e+02, 3.226499938964844e+02, 3.231499938964844e+02, 3.236499938964844e+02, 3.241499938964844e+02, 3.246499938964844e+02, 3.251499938964844e+02, 3.256499938964844e+02, 3.261499938964844e+02, 3.266499938964844e+02, 3.271499938964844e+02, 3.276499938964844e+02, 3.281499938964844e+02, 3.286499938964844e+02, 3.291499938964844e+02, 3.296499938964844e+02, 3.301499938964844e+02, 3.306499938964844e+02, 3.311499938964844e+02, 3.316499938964844e+02, 3.321499938964844e+02, 3.326499938964844e+02, 3.331499938964844e+02, 3.336499938964844e+02, 3.341499938964844e+02, 3.346499938964844e+02, 3.351499938964844e+02, 3.356499938964844e+02, 3.361499938964844e+02, 3.366499938964844e+02, 3.371499938964844e+02, 3.376499938964844e+02, 3.381499938964844e+02, 3.386499938964844e+02, 3.391499938964844e+02, 3.396499938964844e+02, 3.401499938964844e+02, 3.406499938964844e+02, 3.411499938964844e+02, 3.416499938964844e+02, 3.421499938964844e+02, 3.426499938964844e+02, 3.431499938964844e+02] +conBoiRet.yVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.583335362374783e-02, 7.333334535360336e-02, 1.458333432674408e-01, 2.333333343267441e-01, 3.35833340883255e-01, 4.5333331823349e-01, 5.858333110809326e-01, 7.333333492279053e-01, 8.958333134651184e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt new file mode 100644 index 0000000000..14cf98e3cc --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt @@ -0,0 +1,12 @@ +last-generated=2020-02-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +conEquSta.TBoi=[3.331499938964844e+02, 3.335499877929688e+02, 3.339500122070312e+02, 3.343500061035156e+02, 3.3475e+02, 3.351499938964844e+02, 3.355499877929688e+02, 3.359500122070312e+02, 3.363500061035156e+02, 3.3675e+02, 3.371499938964844e+02, 3.375499877929688e+02, 3.379500122070312e+02, 3.383500061035156e+02, 3.3875e+02, 3.391499938964844e+02, 3.395499877929688e+02, 3.399500122070312e+02, 3.403500061035156e+02, 3.4075e+02, 3.411499938964844e+02, 3.415499877929688e+02, 3.419500122070312e+02, 3.423500061035156e+02, 3.4275e+02, 3.431499938964844e+02, 3.435499877929688e+02, 3.439500122070312e+02, 3.443500061035156e+02, 3.4475e+02, 3.451499938964844e+02, 3.455499877929688e+02, 3.459500122070312e+02, 3.463500061035156e+02, 3.4675e+02, 3.471499938964844e+02, 3.475499877929688e+02, 3.479500122070312e+02, 3.483500061035156e+02, 3.4875e+02, 3.491499938964844e+02, 3.495499877929688e+02, 3.499500122070312e+02, 3.503500061035156e+02, 3.5075e+02, 3.511499938964844e+02, 3.515499877929688e+02, 3.519500122070312e+02, 3.523500061035156e+02, 3.5275e+02, 3.531499938964844e+02, 3.535499877929688e+02, 3.539500122070312e+02, 3.543500061035156e+02, 3.5475e+02, 3.551499938964844e+02, 3.555499877929688e+02, 3.559500122070312e+02, 3.563500061035156e+02, 3.5675e+02, 3.571499938964844e+02, 3.575499877929688e+02, 3.579500122070312e+02, 3.583500061035156e+02, 3.5875e+02, 3.591499938964844e+02, 3.595499877929688e+02, 3.599500122070312e+02, 3.603500061035156e+02, 3.6075e+02, 3.611499938964844e+02, 3.615499877929688e+02, 3.619500122070312e+02, 3.623500061035156e+02, 3.6275e+02, 3.631499938964844e+02, 3.635499877929688e+02, 3.639500122070312e+02, 3.643500061035156e+02, 3.6475e+02, 3.651499938964844e+02, 3.655499877929688e+02, 3.659500122070312e+02, 3.663500061035156e+02, 3.6675e+02, 3.671499938964844e+02, 3.675499877929688e+02, 3.679500122070312e+02, 3.683500061035156e+02, 3.6875e+02, 3.691499938964844e+02, 3.695499877929688e+02, 3.699500122070312e+02, 3.703500061035156e+02, 3.7075e+02, 3.711499938964844e+02, 3.715499877929688e+02, 3.719500122070312e+02, 3.723500061035156e+02, 3.7275e+02, 3.731499938964844e+02] +conEquSta.onSys=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conEquSta.onPum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] +conEquSta.onBoi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt new file mode 100644 index 0000000000..15489622af --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt @@ -0,0 +1,12 @@ +last-generated=2020-02-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "number of continuous time states": "1", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +conRadSup.TRoo=[2.971499938964844e+02, 2.971099853515625e+02, 2.970700073242188e+02, 2.970299987792969e+02, 2.96989990234375e+02, 2.969500122070312e+02, 2.969100036621094e+02, 2.968699951171875e+02, 2.968299865722656e+02, 2.967900085449219e+02, 2.9675e+02, 2.967099914550781e+02, 2.966700134277344e+02, 2.966300048828125e+02, 2.965899963378906e+02, 2.965499877929688e+02, 2.96510009765625e+02, 2.964700012207031e+02, 2.964299926757812e+02, 2.963900146484375e+02, 2.963500061035156e+02, 2.963099975585938e+02, 2.962699890136719e+02, 2.962300109863281e+02, 2.961900024414062e+02, 2.961499938964844e+02, 2.961099853515625e+02, 2.960700073242188e+02, 2.960299987792969e+02, 2.95989990234375e+02, 2.959500122070312e+02, 2.959100036621094e+02, 2.958699951171875e+02, 2.958299865722656e+02, 2.957900085449219e+02, 2.9575e+02, 2.957099914550781e+02, 2.956700134277344e+02, 2.956300048828125e+02, 2.955899963378906e+02, 2.955499877929688e+02, 2.95510009765625e+02, 2.954700012207031e+02, 2.954299926757812e+02, 2.953900146484375e+02, 2.953500061035156e+02, 2.953099975585938e+02, 2.952699890136719e+02, 2.952300109863281e+02, 2.951900024414062e+02, 2.951499938964844e+02, 2.951099853515625e+02, 2.950700073242188e+02, 2.950299987792969e+02, 2.94989990234375e+02, 2.949500122070312e+02, 2.949100036621094e+02, 2.948699951171875e+02, 2.948299865722656e+02, 2.947900085449219e+02, 2.9475e+02, 2.947099914550781e+02, 2.946700134277344e+02, 2.946300048828125e+02, 2.945899963378906e+02, 2.945499877929688e+02, 2.94510009765625e+02, 2.944700012207031e+02, 2.944299926757812e+02, 2.943900146484375e+02, 2.943500061035156e+02, 2.943099975585938e+02, 2.942699890136719e+02, 2.942300109863281e+02, 2.941900024414062e+02, 2.941499938964844e+02, 2.941099853515625e+02, 2.940700073242188e+02, 2.940299987792969e+02, 2.93989990234375e+02, 2.939500122070312e+02, 2.939100036621094e+02, 2.938699951171875e+02, 2.938299865722656e+02, 2.937900085449219e+02, 2.9375e+02, 2.937099914550781e+02, 2.936700134277344e+02, 2.936300048828125e+02, 2.935899963378906e+02, 2.935499877929688e+02, 2.93510009765625e+02, 2.934700012207031e+02, 2.934299926757812e+02, 2.933900146484375e+02, 2.933500061035156e+02, 2.933099975585938e+02, 2.932699890136719e+02, 2.932300109863281e+02, 2.931900024414062e+02, 2.931499938964844e+02] +conRadSup.TSup=[3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02] +conRadSup.yVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.343824088573456e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.219262838363647e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.495950937271118e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.245810151100159e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.496521949768066e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.245894193649292e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.496550559997559e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 7.886499166488647e-01, 1.303928345441818e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.211419925093651e-01, 8.903452754020691e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt new file mode 100644 index 0000000000..305e965fa7 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt @@ -0,0 +1,13 @@ +last-generated=2020-02-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[0e+00, 3.6e+03] +conSysSta.TRoo=[2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02] +conSysSta.TRooSet=[2.936499938964844e+02, 2.936499938964844e+02] +conSysSta.TOut=[2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02] +conSysSta.TOutLow=[2.891499938964844e+02, 2.891499938964844e+02] +conSysSta.onSys=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt new file mode 100644 index 0000000000..1cfe0ca8dc --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt @@ -0,0 +1,19 @@ +last-generated=2024-09-13 +statistics-initialization= +{ + "nonlinear": "5, 9, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "25", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.235456848144531e+02, 3.302677612304688e+02, 3.345385437011719e+02, 3.377018737792969e+02, 3.400711059570312e+02, 3.418246154785156e+02, 3.43099365234375e+02, 3.440057983398438e+02, 3.446341552734375e+02, 3.450574645996094e+02, 3.453338317871094e+02, 3.455127258300781e+02, 3.456378784179688e+02, 3.457569580078125e+02, 3.459273376464844e+02, 3.461693115234375e+02, 3.46459716796875e+02, 3.467494812011719e+02, 3.47017333984375e+02, 3.472599487304688e+02, 3.474747619628906e+02, 3.476561889648438e+02, 3.477958068847656e+02, 3.4789404296875e+02, 3.479646301269531e+02, 3.480312805175781e+02, 3.481113891601562e+02, 3.482064514160156e+02, 3.483145141601562e+02, 3.48431396484375e+02, 3.485502319335938e+02, 3.486645812988281e+02, 3.487763671875e+02, 3.491953735351562e+02, 3.505382385253906e+02, 3.518658447265625e+02, 3.530768737792969e+02, 3.541841125488281e+02, 3.551770629882812e+02, 3.560694580078125e+02, 3.568801879882812e+02, 3.576192016601562e+02, 3.582900085449219e+02, 3.589009094238281e+02, 3.594639587402344e+02, 3.599889831542969e+02, 3.604840698242188e+02, 3.609529724121094e+02, 3.613988342285156e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580688476562e+02, 3.690074768066406e+02, 3.689551086425781e+02, 3.687868041992188e+02, 3.68546142578125e+02, 3.683146667480469e+02, 3.681323852539062e+02, 3.679927062988281e+02, 3.678861999511719e+02, 3.6713037109375e+02, 3.658734130859375e+02, 3.648491821289062e+02, 3.640643005371094e+02, 3.634662780761719e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.62445556640625e+02, 3.623630065917969e+02, 3.622667236328125e+02, 3.621480407714844e+02, 3.620196533203125e+02, 3.619066772460938e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.6172265625e+02, 3.616731872558594e+02, 3.616102905273438e+02, 3.615349426269531e+02, 3.614475708007812e+02, 3.613488464355469e+02, 3.612393798828125e+02, 3.611209106445312e+02, 3.609960327148438e+02] +temSup.T=[2.931499938964844e+02, 3.056086120605469e+02, 3.113561401367188e+02, 3.153233642578125e+02, 3.182890625e+02, 3.205071105957031e+02, 3.221427001953125e+02, 3.233262023925781e+02, 3.241630859375e+02, 3.247395629882812e+02, 3.251250915527344e+02, 3.253751831054688e+02, 3.255378723144531e+02, 3.256560668945312e+02, 3.257808227539062e+02, 3.259664001464844e+02, 3.26222900390625e+02, 3.265184020996094e+02, 3.268041381835938e+02, 3.27066650390625e+02, 3.273036499023438e+02, 3.275118713378906e+02, 3.276850280761719e+02, 3.278150329589844e+02, 3.279053344726562e+02, 3.279723510742188e+02, 3.280408325195312e+02, 3.28124267578125e+02, 3.282225036621094e+02, 3.283329772949219e+02, 3.284511413574219e+02, 3.285694274902344e+02, 3.286827087402344e+02, 3.287948303222656e+02, 3.29435546875e+02, 3.308346557617188e+02, 3.321353454589844e+02, 3.33323486328125e+02, 3.344068298339844e+02, 3.353753967285156e+02, 3.362482604980469e+02, 3.370426330566406e+02, 3.377664184570312e+02, 3.384229431152344e+02, 3.39022216796875e+02, 3.395759582519531e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428024291992188e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947082519531e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696350097656e+02, 3.490020751953125e+02, 3.489236145019531e+02, 3.487330322265625e+02, 3.484853210449219e+02, 3.482633972167969e+02, 3.480914001464844e+02, 3.479599609375e+02, 3.478597412109375e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475646972656e+02, 3.429397583007812e+02, 3.426728210449219e+02, 3.425152282714844e+02, 3.42420654296875e+02, 3.423378601074219e+02, 3.422367553710938e+02, 3.421138916015625e+02, 3.419861755371094e+02, 3.4187890625e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.417067260742188e+02, 3.416545104980469e+02, 3.415888366699219e+02, 3.415107727050781e+02, 3.414208984375e+02, 3.413197021484375e+02, 3.412080688476562e+02, 3.41087890625e+02, 3.409619750976562e+02] +temRet.T=[2.931499938964844e+02, 3.142822570800781e+02, 3.206342468261719e+02, 3.24792236328125e+02, 3.278826293945312e+02, 3.301961059570312e+02, 3.319061584472656e+02, 3.331472473144531e+02, 3.340280151367188e+02, 3.3463720703125e+02, 3.350465698242188e+02, 3.35313232421875e+02, 3.354861145019531e+02, 3.35608642578125e+02, 3.35729736328125e+02, 3.359056396484375e+02, 3.361529846191406e+02, 3.364453430175781e+02, 3.36733642578125e+02, 3.369995422363281e+02, 3.372401123046875e+02, 3.374525146484375e+02, 3.376309204101562e+02, 3.377670288085938e+02, 3.378623046875e+02, 3.379315490722656e+02, 3.379988403320312e+02, 3.380801696777344e+02, 3.381763916015625e+02, 3.382853698730469e+02, 3.384027099609375e+02, 3.385213623046875e+02, 3.386353149414062e+02, 3.387472229003906e+02, 3.392459716796875e+02, 3.406112365722656e+02, 3.419290161132812e+02, 3.431316223144531e+02, 3.442301330566406e+02, 3.452140808105469e+02, 3.460992736816406e+02, 3.469039916992188e+02, 3.476374206542969e+02, 3.48302978515625e+02, 3.489095764160156e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787170410156e+02, 3.543737487792969e+02, 3.549752807617188e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264526367188e+02, 3.589697265625e+02, 3.589078063964844e+02, 3.587312622070312e+02, 3.584878845214844e+02, 3.582598571777344e+02, 3.580813598632812e+02, 3.579447326660156e+02, 3.578405151367188e+02, 3.569900512695312e+02, 3.557423400878906e+02, 3.547391357421875e+02, 3.539712219238281e+02, 3.533865661621094e+02, 3.52957763671875e+02, 3.526724243164062e+02, 3.5250146484375e+02, 3.524004821777344e+02, 3.523179016113281e+02, 3.522198486328125e+02, 3.52099609375e+02, 3.519714050292969e+02, 3.518605346679688e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.51680908203125e+02, 3.516304321289062e+02, 3.515664978027344e+02, 3.514901733398438e+02, 3.514018859863281e+02, 3.5130224609375e+02, 3.511919860839844e+02, 3.510728759765625e+02, 3.509476013183594e+02] +temRoo.T=[2.931499938964844e+02, 2.848866271972656e+02, 2.869789123535156e+02, 2.894321899414062e+02, 2.913446044921875e+02, 2.927545776367188e+02, 2.937647399902344e+02, 2.944679260253906e+02, 2.9494140625e+02, 2.952493896484375e+02, 2.954407958984375e+02, 2.955587463378906e+02, 2.956434936523438e+02, 2.957352294921875e+02, 2.959083862304688e+02, 2.961827697753906e+02, 2.965125427246094e+02, 2.968211364746094e+02, 2.970805358886719e+02, 2.973132019042969e+02, 2.975180053710938e+02, 2.976884765625e+02, 2.978131103515625e+02, 2.978904724121094e+02, 2.979407348632812e+02, 2.979949951171875e+02, 2.980780029296875e+02, 2.981799926757812e+02, 2.982949523925781e+02, 2.984177551269531e+02, 2.98541015625e+02, 2.986544494628906e+02, 2.987626342773438e+02, 2.988789978027344e+02, 3.010147094726562e+02, 3.024350280761719e+02, 3.035816650390625e+02, 3.046459045410156e+02, 3.05590576171875e+02, 3.064289855957031e+02, 3.071981811523438e+02, 3.079039916992188e+02, 3.085435791015625e+02, 3.091235961914062e+02, 3.09661376953125e+02, 3.101661682128906e+02, 3.106457824707031e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605529785156e+02, 3.1576318359375e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.17378662109375e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.190003662109375e+02, 3.189236145019531e+02, 3.1869873046875e+02, 3.183977355957031e+02, 3.181357727050781e+02, 3.179747009277344e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051086425781e+02, 3.142509155273438e+02, 3.135875244140625e+02, 3.130862426757812e+02, 3.127158203125e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.122685546875e+02, 3.121752624511719e+02, 3.120455322265625e+02, 3.11903564453125e+02, 3.117870483398438e+02, 3.117142028808594e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.1159716796875e+02, 3.115286254882812e+02, 3.114475708007812e+02, 3.113548889160156e+02, 3.112511596679688e+02, 3.111366882324219e+02, 3.110134887695312e+02, 3.108846435546875e+02, 3.107538452148438e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt new file mode 100644 index 0000000000..1cfe0ca8dc --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt @@ -0,0 +1,19 @@ +last-generated=2024-09-13 +statistics-initialization= +{ + "nonlinear": "5, 9, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "25", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.235456848144531e+02, 3.302677612304688e+02, 3.345385437011719e+02, 3.377018737792969e+02, 3.400711059570312e+02, 3.418246154785156e+02, 3.43099365234375e+02, 3.440057983398438e+02, 3.446341552734375e+02, 3.450574645996094e+02, 3.453338317871094e+02, 3.455127258300781e+02, 3.456378784179688e+02, 3.457569580078125e+02, 3.459273376464844e+02, 3.461693115234375e+02, 3.46459716796875e+02, 3.467494812011719e+02, 3.47017333984375e+02, 3.472599487304688e+02, 3.474747619628906e+02, 3.476561889648438e+02, 3.477958068847656e+02, 3.4789404296875e+02, 3.479646301269531e+02, 3.480312805175781e+02, 3.481113891601562e+02, 3.482064514160156e+02, 3.483145141601562e+02, 3.48431396484375e+02, 3.485502319335938e+02, 3.486645812988281e+02, 3.487763671875e+02, 3.491953735351562e+02, 3.505382385253906e+02, 3.518658447265625e+02, 3.530768737792969e+02, 3.541841125488281e+02, 3.551770629882812e+02, 3.560694580078125e+02, 3.568801879882812e+02, 3.576192016601562e+02, 3.582900085449219e+02, 3.589009094238281e+02, 3.594639587402344e+02, 3.599889831542969e+02, 3.604840698242188e+02, 3.609529724121094e+02, 3.613988342285156e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580688476562e+02, 3.690074768066406e+02, 3.689551086425781e+02, 3.687868041992188e+02, 3.68546142578125e+02, 3.683146667480469e+02, 3.681323852539062e+02, 3.679927062988281e+02, 3.678861999511719e+02, 3.6713037109375e+02, 3.658734130859375e+02, 3.648491821289062e+02, 3.640643005371094e+02, 3.634662780761719e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.62445556640625e+02, 3.623630065917969e+02, 3.622667236328125e+02, 3.621480407714844e+02, 3.620196533203125e+02, 3.619066772460938e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.6172265625e+02, 3.616731872558594e+02, 3.616102905273438e+02, 3.615349426269531e+02, 3.614475708007812e+02, 3.613488464355469e+02, 3.612393798828125e+02, 3.611209106445312e+02, 3.609960327148438e+02] +temSup.T=[2.931499938964844e+02, 3.056086120605469e+02, 3.113561401367188e+02, 3.153233642578125e+02, 3.182890625e+02, 3.205071105957031e+02, 3.221427001953125e+02, 3.233262023925781e+02, 3.241630859375e+02, 3.247395629882812e+02, 3.251250915527344e+02, 3.253751831054688e+02, 3.255378723144531e+02, 3.256560668945312e+02, 3.257808227539062e+02, 3.259664001464844e+02, 3.26222900390625e+02, 3.265184020996094e+02, 3.268041381835938e+02, 3.27066650390625e+02, 3.273036499023438e+02, 3.275118713378906e+02, 3.276850280761719e+02, 3.278150329589844e+02, 3.279053344726562e+02, 3.279723510742188e+02, 3.280408325195312e+02, 3.28124267578125e+02, 3.282225036621094e+02, 3.283329772949219e+02, 3.284511413574219e+02, 3.285694274902344e+02, 3.286827087402344e+02, 3.287948303222656e+02, 3.29435546875e+02, 3.308346557617188e+02, 3.321353454589844e+02, 3.33323486328125e+02, 3.344068298339844e+02, 3.353753967285156e+02, 3.362482604980469e+02, 3.370426330566406e+02, 3.377664184570312e+02, 3.384229431152344e+02, 3.39022216796875e+02, 3.395759582519531e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428024291992188e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947082519531e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696350097656e+02, 3.490020751953125e+02, 3.489236145019531e+02, 3.487330322265625e+02, 3.484853210449219e+02, 3.482633972167969e+02, 3.480914001464844e+02, 3.479599609375e+02, 3.478597412109375e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475646972656e+02, 3.429397583007812e+02, 3.426728210449219e+02, 3.425152282714844e+02, 3.42420654296875e+02, 3.423378601074219e+02, 3.422367553710938e+02, 3.421138916015625e+02, 3.419861755371094e+02, 3.4187890625e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.417067260742188e+02, 3.416545104980469e+02, 3.415888366699219e+02, 3.415107727050781e+02, 3.414208984375e+02, 3.413197021484375e+02, 3.412080688476562e+02, 3.41087890625e+02, 3.409619750976562e+02] +temRet.T=[2.931499938964844e+02, 3.142822570800781e+02, 3.206342468261719e+02, 3.24792236328125e+02, 3.278826293945312e+02, 3.301961059570312e+02, 3.319061584472656e+02, 3.331472473144531e+02, 3.340280151367188e+02, 3.3463720703125e+02, 3.350465698242188e+02, 3.35313232421875e+02, 3.354861145019531e+02, 3.35608642578125e+02, 3.35729736328125e+02, 3.359056396484375e+02, 3.361529846191406e+02, 3.364453430175781e+02, 3.36733642578125e+02, 3.369995422363281e+02, 3.372401123046875e+02, 3.374525146484375e+02, 3.376309204101562e+02, 3.377670288085938e+02, 3.378623046875e+02, 3.379315490722656e+02, 3.379988403320312e+02, 3.380801696777344e+02, 3.381763916015625e+02, 3.382853698730469e+02, 3.384027099609375e+02, 3.385213623046875e+02, 3.386353149414062e+02, 3.387472229003906e+02, 3.392459716796875e+02, 3.406112365722656e+02, 3.419290161132812e+02, 3.431316223144531e+02, 3.442301330566406e+02, 3.452140808105469e+02, 3.460992736816406e+02, 3.469039916992188e+02, 3.476374206542969e+02, 3.48302978515625e+02, 3.489095764160156e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787170410156e+02, 3.543737487792969e+02, 3.549752807617188e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264526367188e+02, 3.589697265625e+02, 3.589078063964844e+02, 3.587312622070312e+02, 3.584878845214844e+02, 3.582598571777344e+02, 3.580813598632812e+02, 3.579447326660156e+02, 3.578405151367188e+02, 3.569900512695312e+02, 3.557423400878906e+02, 3.547391357421875e+02, 3.539712219238281e+02, 3.533865661621094e+02, 3.52957763671875e+02, 3.526724243164062e+02, 3.5250146484375e+02, 3.524004821777344e+02, 3.523179016113281e+02, 3.522198486328125e+02, 3.52099609375e+02, 3.519714050292969e+02, 3.518605346679688e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.51680908203125e+02, 3.516304321289062e+02, 3.515664978027344e+02, 3.514901733398438e+02, 3.514018859863281e+02, 3.5130224609375e+02, 3.511919860839844e+02, 3.510728759765625e+02, 3.509476013183594e+02] +temRoo.T=[2.931499938964844e+02, 2.848866271972656e+02, 2.869789123535156e+02, 2.894321899414062e+02, 2.913446044921875e+02, 2.927545776367188e+02, 2.937647399902344e+02, 2.944679260253906e+02, 2.9494140625e+02, 2.952493896484375e+02, 2.954407958984375e+02, 2.955587463378906e+02, 2.956434936523438e+02, 2.957352294921875e+02, 2.959083862304688e+02, 2.961827697753906e+02, 2.965125427246094e+02, 2.968211364746094e+02, 2.970805358886719e+02, 2.973132019042969e+02, 2.975180053710938e+02, 2.976884765625e+02, 2.978131103515625e+02, 2.978904724121094e+02, 2.979407348632812e+02, 2.979949951171875e+02, 2.980780029296875e+02, 2.981799926757812e+02, 2.982949523925781e+02, 2.984177551269531e+02, 2.98541015625e+02, 2.986544494628906e+02, 2.987626342773438e+02, 2.988789978027344e+02, 3.010147094726562e+02, 3.024350280761719e+02, 3.035816650390625e+02, 3.046459045410156e+02, 3.05590576171875e+02, 3.064289855957031e+02, 3.071981811523438e+02, 3.079039916992188e+02, 3.085435791015625e+02, 3.091235961914062e+02, 3.09661376953125e+02, 3.101661682128906e+02, 3.106457824707031e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605529785156e+02, 3.1576318359375e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.17378662109375e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.190003662109375e+02, 3.189236145019531e+02, 3.1869873046875e+02, 3.183977355957031e+02, 3.181357727050781e+02, 3.179747009277344e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051086425781e+02, 3.142509155273438e+02, 3.135875244140625e+02, 3.130862426757812e+02, 3.127158203125e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.122685546875e+02, 3.121752624511719e+02, 3.120455322265625e+02, 3.11903564453125e+02, 3.117870483398438e+02, 3.117142028808594e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.1159716796875e+02, 3.115286254882812e+02, 3.114475708007812e+02, 3.113548889160156e+02, 3.112511596679688e+02, 3.111366882324219e+02, 3.110134887695312e+02, 3.108846435546875e+02, 3.107538452148438e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt new file mode 100644 index 0000000000..76334f3afa --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt @@ -0,0 +1,19 @@ +last-generated=2024-09-13 +statistics-initialization= +{ + "nonlinear": "5, 9, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "26", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.43205078125e+02, 3.434713439941406e+02, 3.442933044433594e+02, 3.448924865722656e+02, 3.452561645507812e+02, 3.454854736328125e+02, 3.456283569335938e+02, 3.457260131835938e+02, 3.458241577148438e+02, 3.45978515625e+02, 3.462084350585938e+02, 3.464895935058594e+02, 3.467725524902344e+02, 3.470345764160156e+02, 3.47273193359375e+02, 3.474848937988281e+02, 3.476638488769531e+02, 3.478019714355469e+02, 3.47898681640625e+02, 3.479682006835938e+02, 3.480339050292969e+02, 3.481134948730469e+02, 3.482081298828125e+02, 3.483157653808594e+02, 3.48432373046875e+02, 3.485509338378906e+02, 3.486650695800781e+02, 3.487767944335938e+02, 3.491956481933594e+02, 3.505384216308594e+02, 3.518659973144531e+02, 3.530770263671875e+02, 3.541842346191406e+02, 3.551771545410156e+02, 3.560695190429688e+02, 3.568802490234375e+02, 3.576192321777344e+02, 3.582900390625e+02, 3.589009094238281e+02, 3.594639892578125e+02, 3.59989013671875e+02, 3.604840698242188e+02, 3.609530029296875e+02, 3.613988647460938e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580383300781e+02, 3.690074157714844e+02, 3.689550476074219e+02, 3.687867736816406e+02, 3.685461120605469e+02, 3.683146667480469e+02, 3.681323547363281e+02, 3.679927062988281e+02, 3.6788623046875e+02, 3.671304016113281e+02, 3.658734436035156e+02, 3.648491821289062e+02, 3.640643310546875e+02, 3.6346630859375e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.624454956054688e+02, 3.623629150390625e+02, 3.622666320800781e+02, 3.6214794921875e+02, 3.620196533203125e+02, 3.619066467285156e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.617226867675781e+02, 3.616732788085938e+02, 3.616103515625e+02, 3.615350036621094e+02, 3.614476318359375e+02, 3.61348876953125e+02, 3.612394714355469e+02, 3.611210632324219e+02, 3.609961853027344e+02] +temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.110102233886719e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.230311279296875e+02, 3.238466491699219e+02, 3.244719848632812e+02, 3.249839172363281e+02, 3.253121337890625e+02, 3.255178833007812e+02, 3.256466979980469e+02, 3.257389831542969e+02, 3.258440551757812e+02, 3.260146179199219e+02, 3.262597045898438e+02, 3.265465393066406e+02, 3.268257751464844e+02, 3.270829467773438e+02, 3.273160705566406e+02, 3.275213928222656e+02, 3.276922607421875e+02, 3.278208312988281e+02, 3.279096984863281e+02, 3.279757080078125e+02, 3.280433044433594e+02, 3.281263122558594e+02, 3.282240600585938e+02, 3.283341674804688e+02, 3.284520568847656e+02, 3.28570068359375e+02, 3.286831665039062e+02, 3.287952270507812e+02, 3.294358215332031e+02, 3.308348693847656e+02, 3.32135498046875e+02, 3.333235778808594e+02, 3.344069213867188e+02, 3.353754577636719e+02, 3.362483215332031e+02, 3.370426940917969e+02, 3.377664489746094e+02, 3.384229736328125e+02, 3.390222473144531e+02, 3.395759887695312e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428023986816406e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947387695312e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696044921875e+02, 3.490020446777344e+02, 3.48923583984375e+02, 3.487329711914062e+02, 3.484852905273438e+02, 3.482633972167969e+02, 3.480913696289062e+02, 3.479599609375e+02, 3.478597717285156e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475952148438e+02, 3.429397277832031e+02, 3.426727905273438e+02, 3.425152282714844e+02, 3.424205627441406e+02, 3.423377380371094e+02, 3.422366333007812e+02, 3.421138305664062e+02, 3.419862060546875e+02, 3.418788757324219e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.41706787109375e+02, 3.416546020507812e+02, 3.415888977050781e+02, 3.415108337402344e+02, 3.414209289550781e+02, 3.413197631835938e+02, 3.412081604003906e+02, 3.410880126953125e+02, 3.409621276855469e+02] +temRet.T=[2.931499938964844e+02, 3.333218688964844e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.331664428710938e+02, 3.334713745117188e+02, 3.343245849609375e+02, 3.348904418945312e+02, 3.35240966796875e+02, 3.354615783691406e+02, 3.355992431640625e+02, 3.356948547363281e+02, 3.357954406738281e+02, 3.359557189941406e+02, 3.361912536621094e+02, 3.364745788574219e+02, 3.367561950683594e+02, 3.370164489746094e+02, 3.372530517578125e+02, 3.3746240234375e+02, 3.37638427734375e+02, 3.377730407714844e+02, 3.378668212890625e+02, 3.379350280761719e+02, 3.380014038085938e+02, 3.380822448730469e+02, 3.381780395507812e+02, 3.382865600585938e+02, 3.384036560058594e+02, 3.385220336914062e+02, 3.386358032226562e+02, 3.387476196289062e+02, 3.392462463378906e+02, 3.406114501953125e+02, 3.419291687011719e+02, 3.431317443847656e+02, 3.44230224609375e+02, 3.452141723632812e+02, 3.460993347167969e+02, 3.46904052734375e+02, 3.47637451171875e+02, 3.483030090332031e+02, 3.489096069335938e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787475585938e+02, 3.543737487792969e+02, 3.549753112792969e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264221191406e+02, 3.589696960449219e+02, 3.589077453613281e+02, 3.587312316894531e+02, 3.584878540039062e+02, 3.582598571777344e+02, 3.580813293457031e+02, 3.579447021484375e+02, 3.57840576171875e+02, 3.569900512695312e+02, 3.557423706054688e+02, 3.547391357421875e+02, 3.539712524414062e+02, 3.533865966796875e+02, 3.52957763671875e+02, 3.526723937988281e+02, 3.5250146484375e+02, 3.52400390625e+02, 3.523177795410156e+02, 3.522197265625e+02, 3.520995178222656e+02, 3.51971435546875e+02, 3.518605041503906e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.516809387207031e+02, 3.516305236816406e+02, 3.515665893554688e+02, 3.51490234375e+02, 3.514019165039062e+02, 3.513022766113281e+02, 3.511920776367188e+02, 3.510730285644531e+02, 3.5094775390625e+02] +temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301635742188e+02, 2.892975769042969e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.9422509765625e+02, 2.948786010742188e+02, 2.951877136230469e+02, 2.954170532226562e+02, 2.955670776367188e+02, 2.956549987792969e+02, 2.957168884277344e+02, 2.957911682128906e+02, 2.959510803222656e+02, 2.962154846191406e+02, 2.965373840332031e+02, 2.968403015136719e+02, 2.970947265625e+02, 2.973243408203125e+02, 2.975263977050781e+02, 2.976948547363281e+02, 2.978182067871094e+02, 2.978943176269531e+02, 2.979436950683594e+02, 2.979971923828125e+02, 2.980797424316406e+02, 2.98181396484375e+02, 2.982959594726562e+02, 2.984185791015625e+02, 2.985416259765625e+02, 2.986548767089844e+02, 2.987629699707031e+02, 2.988792419433594e+02, 3.01014892578125e+02, 3.024351501464844e+02, 3.035817565917969e+02, 3.046459655761719e+02, 3.055906372070312e+02, 3.064290466308594e+02, 3.071982421875e+02, 3.079040222167969e+02, 3.085436096191406e+02, 3.091235961914062e+02, 3.096614074707031e+02, 3.101661682128906e+02, 3.106458129882812e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605834960938e+02, 3.157632141113281e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.173786926269531e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.19000244140625e+02, 3.189235534667969e+02, 3.186986999511719e+02, 3.18397705078125e+02, 3.181358337402344e+02, 3.179746704101562e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051391601562e+02, 3.142509155273438e+02, 3.135875549316406e+02, 3.130862121582031e+02, 3.127157592773438e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.12268310546875e+02, 3.121751708984375e+02, 3.120454406738281e+02, 3.119035339355469e+02, 3.117870788574219e+02, 3.117142333984375e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.115973205566406e+02, 3.115286865234375e+02, 3.114476318359375e+02, 3.113549194335938e+02, 3.112511901855469e+02, 3.111367492675781e+02, 3.110135498046875e+02, 3.108847351074219e+02, 3.107539367675781e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt new file mode 100644 index 0000000000..1288ad2fd5 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt @@ -0,0 +1,21 @@ +last-generated=2024-09-13 +statistics-initialization= +{ + "nonlinear": "5, 9, 0, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "26", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.43205078125e+02, 3.434713439941406e+02, 3.442933044433594e+02, 3.448924865722656e+02, 3.452561645507812e+02, 3.454854736328125e+02, 3.456283569335938e+02, 3.457260131835938e+02, 3.458241577148438e+02, 3.45978515625e+02, 3.462084350585938e+02, 3.464895935058594e+02, 3.467725524902344e+02, 3.470345764160156e+02, 3.47273193359375e+02, 3.474848937988281e+02, 3.476638488769531e+02, 3.478019714355469e+02, 3.47898681640625e+02, 3.479682006835938e+02, 3.480339050292969e+02, 3.481134948730469e+02, 3.482081298828125e+02, 3.483157653808594e+02, 3.48432373046875e+02, 3.485509338378906e+02, 3.486650695800781e+02, 3.487767944335938e+02, 3.491956481933594e+02, 3.505384216308594e+02, 3.518659973144531e+02, 3.530770263671875e+02, 3.541842346191406e+02, 3.551771545410156e+02, 3.560695190429688e+02, 3.568802490234375e+02, 3.576192321777344e+02, 3.582900390625e+02, 3.589009094238281e+02, 3.594639892578125e+02, 3.59989013671875e+02, 3.604840698242188e+02, 3.609530029296875e+02, 3.613988647460938e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.541706848144531e+02, 3.586401672363281e+02, 3.6102783203125e+02, 3.624544982910156e+02, 3.473058776855469e+02, 3.603316040039062e+02, 3.624865417480469e+02, 3.529296875e+02, 3.610571899414062e+02, 3.631178894042969e+02, 3.585865783691406e+02, 3.62072265625e+02, 3.468697204589844e+02, 3.607023010253906e+02, 3.629743957519531e+02, 3.579193725585938e+02, 3.617729797363281e+02, 3.509577026367188e+02, 3.593564453125e+02, 3.618064575195312e+02, 3.591344604492188e+02, 3.586734008789062e+02, 3.615327758789062e+02, 3.623335266113281e+02, 3.622222595214844e+02, 3.620665588378906e+02, 3.619429931640625e+02, 3.618490905761719e+02, 3.617927551269531e+02, 3.617894287109375e+02, 3.618338317871094e+02, 3.61899169921875e+02, 3.619463195800781e+02, 3.619490356445312e+02, 3.619058532714844e+02, 3.618348999023438e+02, 3.617657775878906e+02, 3.617156677246094e+02, 3.61684326171875e+02, 3.616601257324219e+02, 3.616254577636719e+02, 3.615739440917969e+02, 3.615072326660156e+02, 3.614264526367188e+02, 3.613327026367188e+02, 3.612271423339844e+02, 3.611116333007812e+02, 3.60989013671875e+02] +temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.110102233886719e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.230311279296875e+02, 3.238466491699219e+02, 3.244719848632812e+02, 3.249839172363281e+02, 3.253121337890625e+02, 3.255178833007812e+02, 3.256466979980469e+02, 3.257389831542969e+02, 3.258440551757812e+02, 3.260146179199219e+02, 3.262597045898438e+02, 3.265465393066406e+02, 3.268257751464844e+02, 3.270829467773438e+02, 3.273160705566406e+02, 3.275213928222656e+02, 3.276922607421875e+02, 3.278208312988281e+02, 3.279096984863281e+02, 3.279757080078125e+02, 3.280433044433594e+02, 3.281263122558594e+02, 3.282240600585938e+02, 3.283341674804688e+02, 3.284520568847656e+02, 3.28570068359375e+02, 3.286831665039062e+02, 3.287952270507812e+02, 3.294358215332031e+02, 3.308348693847656e+02, 3.32135498046875e+02, 3.333235778808594e+02, 3.344069213867188e+02, 3.353754577636719e+02, 3.362483215332031e+02, 3.370426940917969e+02, 3.377664489746094e+02, 3.384229736328125e+02, 3.390222473144531e+02, 3.395759887695312e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428023986816406e+02, 3.412862548828125e+02, 3.395494689941406e+02, 3.413731079101562e+02, 3.427290954589844e+02, 3.3701904296875e+02, 3.409632263183594e+02, 3.428541259765625e+02, 3.385643920898438e+02, 3.416318054199219e+02, 3.434749145507812e+02, 3.400550842285156e+02, 3.425283813476562e+02, 3.370928955078125e+02, 3.413815307617188e+02, 3.433495178222656e+02, 3.397550354003906e+02, 3.422109985351562e+02, 3.4031494140625e+02, 3.402499389648438e+02, 3.421600952148438e+02, 3.431968078613281e+02, 3.398429565429688e+02, 3.419109802246094e+02, 3.423342590332031e+02, 3.421798706054688e+02, 3.4202978515625e+02, 3.419132080078125e+02, 3.418257446289062e+02, 3.417798767089844e+02, 3.417883911132812e+02, 3.418408813476562e+02, 3.419064331054688e+02, 3.419457397460938e+02, 3.419378051757812e+02, 3.41885986328125e+02, 3.418122863769531e+02, 3.417462768554688e+02, 3.417007446289062e+02, 3.416725769042969e+02, 3.416478576660156e+02, 3.41609619140625e+02, 3.415546264648438e+02, 3.414846801757812e+02, 3.414009704589844e+02, 3.413045043945312e+02, 3.41196533203125e+02, 3.410791625976562e+02, 3.409553527832031e+02] +temRet.T=[2.931499938964844e+02, 3.333218688964844e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.331664428710938e+02, 3.334713745117188e+02, 3.343245849609375e+02, 3.348904418945312e+02, 3.35240966796875e+02, 3.354615783691406e+02, 3.355992431640625e+02, 3.356948547363281e+02, 3.357954406738281e+02, 3.359557189941406e+02, 3.361912536621094e+02, 3.364745788574219e+02, 3.367561950683594e+02, 3.370164489746094e+02, 3.372530517578125e+02, 3.3746240234375e+02, 3.37638427734375e+02, 3.377730407714844e+02, 3.378668212890625e+02, 3.379350280761719e+02, 3.380014038085938e+02, 3.380822448730469e+02, 3.381780395507812e+02, 3.382865600585938e+02, 3.384036560058594e+02, 3.385220336914062e+02, 3.386358032226562e+02, 3.387476196289062e+02, 3.392462463378906e+02, 3.406114501953125e+02, 3.419291687011719e+02, 3.431317443847656e+02, 3.44230224609375e+02, 3.452141723632812e+02, 3.460993347167969e+02, 3.46904052734375e+02, 3.47637451171875e+02, 3.483030090332031e+02, 3.489096069335938e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.491664733886719e+02, 3.489520568847656e+02, 3.511195068359375e+02, 3.525196533203125e+02, 3.410640869140625e+02, 3.505323486328125e+02, 3.525862731933594e+02, 3.451190185546875e+02, 3.512355041503906e+02, 3.532137756347656e+02, 3.491168823242188e+02, 3.522052917480469e+02, 3.408605041503906e+02, 3.509209594726562e+02, 3.530771179199219e+02, 3.48597900390625e+02, 3.518997802734375e+02, 3.468207702636719e+02, 3.4966064453125e+02, 3.519014282226562e+02, 3.527380065917969e+02, 3.490868225097656e+02, 3.51636962890625e+02, 3.522988586425781e+02, 3.521707763671875e+02, 3.5201708984375e+02, 3.518960876464844e+02, 3.518045349121094e+02, 3.517520141601562e+02, 3.517530517578125e+02, 3.518004760742188e+02, 3.518659362792969e+02, 3.519102478027344e+02, 3.519090576171875e+02, 3.518626708984375e+02, 3.517906799316406e+02, 3.5172265625e+02, 3.516742248535156e+02, 3.516440734863281e+02, 3.516197204589844e+02, 3.51583740234375e+02, 3.515309448242188e+02, 3.514630432128906e+02, 3.513811950683594e+02, 3.512864379882812e+02, 3.511799926757812e+02, 3.510637817382812e+02, 3.509407348632812e+02] +temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301635742188e+02, 2.892975769042969e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.9422509765625e+02, 2.948786010742188e+02, 2.951877136230469e+02, 2.954170532226562e+02, 2.955670776367188e+02, 2.956549987792969e+02, 2.957168884277344e+02, 2.957911682128906e+02, 2.959510803222656e+02, 2.962154846191406e+02, 2.965373840332031e+02, 2.968403015136719e+02, 2.970947265625e+02, 2.973243408203125e+02, 2.975263977050781e+02, 2.976948547363281e+02, 2.978182067871094e+02, 2.978943176269531e+02, 2.979436950683594e+02, 2.979971923828125e+02, 2.980797424316406e+02, 2.98181396484375e+02, 2.982959594726562e+02, 2.984185791015625e+02, 2.985416259765625e+02, 2.986548767089844e+02, 2.987629699707031e+02, 2.988792419433594e+02, 3.01014892578125e+02, 3.024351501464844e+02, 3.035817565917969e+02, 3.046459655761719e+02, 3.055906372070312e+02, 3.064290466308594e+02, 3.071982421875e+02, 3.079040222167969e+02, 3.085436096191406e+02, 3.091235961914062e+02, 3.096614074707031e+02, 3.101661682128906e+02, 3.106458129882812e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139214172363281e+02, 3.124472351074219e+02, 3.131286315917969e+02, 3.141797180175781e+02, 3.145890502929688e+02, 3.13705322265625e+02, 3.147475891113281e+02, 3.146864929199219e+02, 3.142790222167969e+02, 3.153054809570312e+02, 3.142137451171875e+02, 3.14788330078125e+02, 3.15270751953125e+02, 3.143161010742188e+02, 3.152500305175781e+02, 3.141626281738281e+02, 3.143001403808594e+02, 3.149447021484375e+02, 3.133312683105469e+02, 3.139218139648438e+02, 3.147353210449219e+02, 3.1331591796875e+02, 3.137755737304688e+02, 3.121613159179688e+02, 3.11927001953125e+02, 3.118166198730469e+02, 3.11737060546875e+02, 3.116876220703125e+02, 3.117040405273438e+02, 3.117762145996094e+02, 3.118657836914062e+02, 3.119212951660156e+02, 3.119105834960938e+02, 3.118436889648438e+02, 3.117496948242188e+02, 3.116694641113281e+02, 3.116246643066406e+02, 3.116041870117188e+02, 3.115902099609375e+02, 3.115573425292969e+02, 3.114983520507812e+02, 3.114244689941406e+02, 3.113372802734375e+02, 3.112377014160156e+02, 3.1112646484375e+02, 3.110057067871094e+02, 3.108787536621094e+02, 3.107493591308594e+02] +conBoiRet.yVal=[0e+00, 4.212583005428314e-01, 4.565468430519104e-01, 4.838085770606995e-01, 5.058921575546265e-01, 5.233334898948669e-01, 5.365664958953857e-01, 6.597625017166138e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conEquSta.onBoi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt new file mode 100644 index 0000000000..aceb6ad53b --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt @@ -0,0 +1,22 @@ +last-generated=2024-09-19 +statistics-initialization= +{ + "nonlinear": "5, 10, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "26", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.434832763671875e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.412689514160156e+02, 3.432171936035156e+02, 3.432071838378906e+02, 3.4320166015625e+02, 3.431986999511719e+02, 3.432062072753906e+02, 3.432010498046875e+02, 3.413011169433594e+02, 3.432116394042969e+02, 3.432052917480469e+02, 3.4327685546875e+02, 3.432153625488281e+02, 3.413323059082031e+02, 3.432182922363281e+02, 3.432119750976562e+02, 3.431321105957031e+02, 3.432158813476562e+02, 3.412737731933594e+02, 3.432198791503906e+02, 3.432103576660156e+02, 3.432146606445312e+02, 3.432135925292969e+02, 3.4314208984375e+02, 3.432171325683594e+02, 3.432020874023438e+02, 3.432201843261719e+02, 3.42871826171875e+02, 3.432225952148438e+02, 3.412811889648438e+02, 3.432481384277344e+02, 3.431516418457031e+02, 3.413154296875e+02, 3.415331420898438e+02, 3.431570129394531e+02, 3.413214416503906e+02, 3.413232421875e+02, 3.4316650390625e+02, 3.413245239257812e+02, 3.413251647949219e+02, 3.433076782226562e+02, 3.413253479003906e+02, 3.432435913085938e+02, 3.413251953125e+02, 3.413246459960938e+02, 3.431742858886719e+02, 3.413232727050781e+02, 3.432348022460938e+02, 3.413182373046875e+02, 3.413131103515625e+02, 3.413131103515625e+02, 3.432421264648438e+02, 3.413114013671875e+02, 3.434130249023438e+02, 3.413118896484375e+02, 3.413118896484375e+02, 3.41317626953125e+02, 3.41317626953125e+02, 3.41317626953125e+02, 3.413144836425781e+02, 3.413144836425781e+02, 3.432393798828125e+02, 3.413183288574219e+02, 3.413183288574219e+02, 3.413230895996094e+02, 3.413230895996094e+02, 3.413209228515625e+02, 3.413209228515625e+02, 3.418636779785156e+02, 3.413165283203125e+02, 3.432117919921875e+02, 3.413403625488281e+02, 3.413269653320312e+02, 3.43216552734375e+02, 3.413267822265625e+02, 3.432596435546875e+02, 3.434873657226562e+02, 3.413261413574219e+02, 3.432266845703125e+02, 3.413264465332031e+02, 3.413274230957031e+02, 3.431798400878906e+02, 3.413275756835938e+02, 3.413270568847656e+02, 3.431701354980469e+02, 3.413266906738281e+02, 3.413622131347656e+02, 3.432836608886719e+02, 3.413270568847656e+02, 3.432550964355469e+02, 3.434814453125e+02, 3.413267517089844e+02, 3.432408752441406e+02, 3.413265075683594e+02, 3.413261413574219e+02, 3.432283325195312e+02] +temSup.T=[2.931499938964844e+02, 3.036293029785156e+02, 3.1101025390625e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.229210205078125e+02, 3.197828063964844e+02, 3.218347473144531e+02, 3.231505737304688e+02, 3.194843444824219e+02, 3.215145263671875e+02, 3.227781982421875e+02, 3.233633117675781e+02, 3.205654602050781e+02, 3.22278564453125e+02, 3.185347595214844e+02, 3.207666625976562e+02, 3.226780090332031e+02, 3.193686828613281e+02, 3.218971862792969e+02, 3.175887756347656e+02, 3.210928344726562e+02, 3.225085754394531e+02, 3.201983032226562e+02, 3.224572448730469e+02, 3.190616760253906e+02, 3.217935180664062e+02, 3.176122741699219e+02, 3.211933898925781e+02, 3.173088073730469e+02, 3.207025756835938e+02, 3.223034973144531e+02, 3.20312255859375e+02, 3.214923706054688e+02, 3.181777648925781e+02, 3.136198120117188e+02, 3.179538879394531e+02, 3.173634643554688e+02, 3.125412902832031e+02, 3.168973693847656e+02, 3.164294128417969e+02, 3.114633178710938e+02, 3.160238952636719e+02, 3.156395874023438e+02, 3.111219482421875e+02, 3.15251220703125e+02, 3.137964477539062e+02, 3.148606567382812e+02, 3.144755554199219e+02, 3.098387451171875e+02, 3.140381774902344e+02, 3.124127807617188e+02, 3.133011169433594e+02, 3.123234252929688e+02, 3.123234252929688e+02, 3.111024780273438e+02, 3.113951416015625e+02, 3.075806579589844e+02, 3.105326843261719e+02, 3.105326843261719e+02, 3.101451416015625e+02, 3.101451416015625e+02, 3.101451416015625e+02, 3.100009155273438e+02, 3.100009155273438e+02, 3.067701416015625e+02, 3.100101318359375e+02, 3.100101318359375e+02, 3.1067626953125e+02, 3.1067626953125e+02, 3.113613586425781e+02, 3.113613586425781e+02, 3.112803649902344e+02, 3.113517150878906e+02, 3.091761779785156e+02, 3.147893676757812e+02, 3.154362182617188e+02, 3.107131958007812e+02, 3.154381713867188e+02, 3.14986083984375e+02, 3.130552673339844e+02, 3.1522998046875e+02, 3.132066040039062e+02, 3.15069091796875e+02, 3.151340637207031e+02, 3.116830139160156e+02, 3.153270568847656e+02, 3.154429626464844e+02, 3.108334045410156e+02, 3.15427001953125e+02, 3.153990173339844e+02, 3.109686889648438e+02, 3.15482177734375e+02, 3.147348937988281e+02, 3.129483337402344e+02, 3.157128601074219e+02, 3.142114868164062e+02, 3.158470458984375e+02, 3.159845886230469e+02, 3.1395166015625e+02] +temRet.T=[2.931499938964844e+02, 3.333218383789062e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.330797729492188e+02, 3.331796875e+02, 3.331683654785156e+02, 3.331630554199219e+02, 3.331756286621094e+02, 3.331673278808594e+02, 3.331625061035156e+02, 3.331213684082031e+02, 3.331729431152344e+02, 3.331667785644531e+02, 3.330426635742188e+02, 3.331762390136719e+02, 3.330877075195312e+02, 3.331846313476562e+02, 3.331731567382812e+02, 3.331069641113281e+02, 3.331767272949219e+02, 3.330840148925781e+02, 3.331806335449219e+02, 3.33171630859375e+02, 3.331859436035156e+02, 3.331747131347656e+02, 3.331281127929688e+02, 3.331780395507812e+02, 3.330380554199219e+02, 3.331809692382812e+02, 3.331681518554688e+02, 3.33183349609375e+02, 3.330904541015625e+02, 3.332095336914062e+02, 3.331208801269531e+02, 3.331210327148438e+02, 3.331462097167969e+02, 3.331207885742188e+02, 3.33127685546875e+02, 3.3313037109375e+02, 3.330989685058594e+02, 3.331325378417969e+02, 3.331344299316406e+02, 3.330813293457031e+02, 3.331361694335938e+02, 3.332266845703125e+02, 3.331374206542969e+02, 3.331385803222656e+02, 3.331060180664062e+02, 3.33139404296875e+02, 3.332242126464844e+02, 3.331390686035156e+02, 3.331380615234375e+02, 3.331380615234375e+02, 3.332298583984375e+02, 3.331373596191406e+02, 3.332115478515625e+02, 3.331369018554688e+02, 3.331369018554688e+02, 3.331404724121094e+02, 3.331404724121094e+02, 3.331404724121094e+02, 3.331390075683594e+02, 3.331390075683594e+02, 3.331656494140625e+02, 3.331409912109375e+02, 3.331409912109375e+02, 3.331437683105469e+02, 3.331437683105469e+02, 3.331425476074219e+02, 3.331425476074219e+02, 3.331925354003906e+02, 3.331404418945312e+02, 3.331940002441406e+02, 3.331416931152344e+02, 3.331355895996094e+02, 3.330783996582031e+02, 3.331355895996094e+02, 3.332304992675781e+02, 3.332329711914062e+02, 3.331363220214844e+02, 3.332164001464844e+02, 3.331370544433594e+02, 3.331370544433594e+02, 3.331669616699219e+02, 3.331362609863281e+02, 3.331356201171875e+02, 3.331059265136719e+02, 3.331356201171875e+02, 3.331392822265625e+02, 3.330787048339844e+02, 3.331354675292969e+02, 3.332292175292969e+02, 3.332362060546875e+02, 3.331343383789062e+02, 3.332232360839844e+02, 3.331337585449219e+02, 3.331330261230469e+02, 3.332156677246094e+02] +temRoo.T=[2.931499938964844e+02, 2.834371948242188e+02, 2.862301330566406e+02, 2.892975463867188e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.941587219238281e+02, 2.922658386230469e+02, 2.932417602539062e+02, 2.94072265625e+02, 2.921136779785156e+02, 2.928497619628906e+02, 2.936820373535156e+02, 2.934452514648438e+02, 2.924263916015625e+02, 2.93575927734375e+02, 2.927049255371094e+02, 2.928812866210938e+02, 2.941804809570312e+02, 2.924045104980469e+02, 2.937210083007812e+02, 2.923773803710938e+02, 2.93244140625e+02, 2.93449462890625e+02, 2.92740478515625e+02, 2.941199035644531e+02, 2.923981018066406e+02, 2.937544860839844e+02, 2.923780517578125e+02, 2.934642639160156e+02, 2.926152038574219e+02, 2.932439575195312e+02, 2.930661010742188e+02, 2.930980224609375e+02, 2.939833679199219e+02, 2.939597473144531e+02, 2.928506774902344e+02, 2.939415893554688e+02, 2.942293701171875e+02, 2.929274597167969e+02, 2.939508056640625e+02, 2.943716430664062e+02, 2.929440612792969e+02, 2.940947265625e+02, 2.942908325195312e+02, 2.929515380859375e+02, 2.943915710449219e+02, 2.938172302246094e+02, 2.934654235839844e+02, 2.946894226074219e+02, 2.930814208984375e+02, 2.9433154296875e+02, 2.939205017089844e+02, 2.940247802734375e+02, 2.944462280273438e+02, 2.940744323730469e+02, 2.941338195800781e+02, 2.944700317382812e+02, 2.931013793945312e+02, 2.950010375976562e+02, 2.937785339355469e+02, 2.944610595703125e+02, 2.945914001464844e+02, 2.932905883789062e+02, 2.950827941894531e+02, 2.941322937011719e+02, 2.933622131347656e+02, 2.948946533203125e+02, 2.934913024902344e+02, 2.949083251953125e+02, 2.937841186523438e+02, 2.946959838867188e+02, 2.940284118652344e+02, 2.942195129394531e+02, 2.94270751953125e+02, 2.936306762695312e+02, 2.9396240234375e+02, 2.943980102539062e+02, 2.929287414550781e+02, 2.942446899414062e+02, 2.940342407226562e+02, 2.930511169433594e+02, 2.944958190917969e+02, 2.935714111328125e+02, 2.934937438964844e+02, 2.946109924316406e+02, 2.931596984863281e+02, 2.938140563964844e+02, 2.945286254882812e+02, 2.929768981933594e+02, 2.941008911132812e+02, 2.942635498046875e+02, 2.929299926757812e+02, 2.943206176757812e+02, 2.938662109375e+02, 2.930386352539062e+02, 2.944496154785156e+02, 2.935947875976562e+02, 2.931981201171875e+02, 2.94506103515625e+02, 2.934295959472656e+02] +conBoiRet.yVal=[0e+00, 4.212594628334045e-01, 4.565480053424835e-01, 4.838098287582397e-01, 5.058930516242981e-01, 5.233339667320251e-01, 5.236923694610596e-01, 5.114201307296753e-01, 5.269390344619751e-01, 5.375866889953613e-01, 5.091941952705383e-01, 5.244570374488831e-01, 5.345306396484375e-01, 5.361558794975281e-01, 5.172062516212463e-01, 5.304576754570007e-01, 5.046308040618896e-01, 5.186852812767029e-01, 5.250994563102722e-01, 5.083945989608765e-01, 5.273821353912354e-01, 4.959457218647003e-01, 5.211418867111206e-01, 5.086243152618408e-01, 5.144302845001221e-01, 5.318449735641479e-01, 5.061728954315186e-01, 5.265560150146484e-01, 4.959854781627655e-01, 5.218941569328308e-01, 4.948271512985229e-01, 5.181629657745361e-01, 5.102766156196594e-01, 5.152435302734375e-01, 4.907311797142029e-01, 4.999020397663116e-01, 4.709380865097046e-01, 4.793302714824677e-01, 4.872170388698578e-01, 4.647347331047058e-01, 4.73406046628952e-01, 4.782120883464813e-01, 4.590348303318024e-01, 4.694218337535858e-01, 4.735685586929321e-01, 4.590467512607574e-01, 4.665768444538116e-01, 4.718035161495209e-01, 4.60739940404892e-01, 4.640884697437286e-01, 4.502870142459869e-01, 4.588809907436371e-01, 4.636670053005219e-01, 4.519980549812317e-01, 4.530890583992004e-01, 4.444915950298309e-01, 4.563360810279846e-01, 4.393826425075531e-01, 4.436482787132263e-01, 4.376770555973053e-01, 4.282426834106445e-01, 4.411533176898956e-01, 4.342884719371796e-01, 4.274236261844635e-01, 4.373604655265808e-01, 4.294531941413879e-01, 4.348052740097046e-01, 4.357894957065582e-01, 4.293039739131927e-01, 4.430703222751617e-01, 4.38592940568924e-01, 4.473768174648285e-01, 4.420123100280762e-01, 4.530364871025085e-01, 4.41187858581543e-01, 4.460897147655487e-01, 4.652161002159119e-01, 4.719216823577881e-01, 4.554951786994934e-01, 4.672927558422089e-01, 4.791069328784943e-01, 4.731855690479279e-01, 4.67265248298645e-01, 4.682562649250031e-01, 4.624899327754974e-01, 4.683427810668945e-01, 4.59576815366745e-01, 4.651550352573395e-01, 4.713089168071747e-01, 4.555608928203583e-01, 4.665520191192627e-01, 4.725323021411896e-01, 4.576119780540466e-01, 4.680196344852448e-01, 4.775474965572357e-01, 4.748954772949219e-01, 4.701705276966095e-01, 4.743029177188873e-01, 4.654714167118073e-01, 4.724253416061401e-01, 4.726920425891876e-01] +conEquSta.onBoi=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00] +conSysSta.onSys=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt new file mode 100644 index 0000000000..f28e82de20 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt @@ -0,0 +1,23 @@ +last-generated=2024-09-13 +statistics-initialization= +{ + "nonlinear": "5, 10, 0, 0", + "numerical Jacobians": "0" +} +statistics-simulation= +{ + "linear": "0, 0, 0, 0, 0, 0, 0", + "nonlinear": "1, 10, 0", + "number of continuous time states": "27", + "numerical Jacobians": "0" +} +time=[1.296e+06, 1.3824e+06] +senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] +boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.528956604003906e+02, 3.576978759765625e+02, 3.526015930175781e+02, 3.602760009765625e+02, 3.509493713378906e+02, 3.608724975585938e+02, 3.475165710449219e+02, 3.572972106933594e+02, 3.452764892578125e+02, 3.555399169921875e+02, 3.449403991699219e+02, 3.5786083984375e+02, 3.474909973144531e+02, 3.617934265136719e+02, 3.517604370117188e+02, 3.456141967773438e+02, 3.582394714355469e+02, 3.485054321289062e+02, 3.604246520996094e+02, 3.540896301269531e+02, 3.455384216308594e+02, 3.605604858398438e+02, 3.511347351074219e+02, 3.440261840820312e+02, 3.601527709960938e+02, 3.515797119140625e+02, 3.449183349609375e+02, 3.620229797363281e+02, 3.54238037109375e+02, 3.535430297851562e+02, 3.526867980957031e+02, 3.512720031738281e+02, 3.514784240722656e+02, 3.523876037597656e+02, 3.536019592285156e+02, 3.549525756835938e+02, 3.563995971679688e+02, 3.579619445800781e+02, 3.596748352050781e+02, 3.617506408691406e+02, 3.60470458984375e+02, 3.559532775878906e+02, 3.508215637207031e+02, 3.44654296875e+02, 3.469327392578125e+02, 3.512892456054688e+02, 3.554247436523438e+02, 3.594942016601562e+02, 3.558909912109375e+02, 3.466330871582031e+02, 3.546285400390625e+02, 3.61640380859375e+02, 3.472928466796875e+02, 3.571298522949219e+02, 3.440164184570312e+02, 3.547879028320312e+02, 3.50660888671875e+02, 3.528243408203125e+02, 3.604035949707031e+02, 3.512106018066406e+02, 3.614145812988281e+02, 3.494896545410156e+02, 3.59525634765625e+02, 3.456096496582031e+02, 3.542845764160156e+02, 3.612555541992188e+02, 3.444588012695312e+02, 3.529975280761719e+02, 3.599310607910156e+02, 3.433215026855469e+02, 3.517929382324219e+02, 3.618186340332031e+02, 3.601310119628906e+02, 3.603203125e+02, 3.617422485351562e+02, 3.611863098144531e+02, 3.574175415039062e+02, 3.532514038085938e+02, 3.489363098144531e+02, 3.44717529296875e+02, 3.452042236328125e+02, 3.477545776367188e+02, 3.501216125488281e+02, 3.523743286132812e+02, 3.544904174804688e+02, 3.565160217285156e+02, 3.58537841796875e+02, 3.606431579589844e+02, 3.6238623046875e+02, 3.589515991210938e+02, 3.558465270996094e+02, 3.530482177734375e+02, 3.505100708007812e+02, 3.4816259765625e+02, 3.459473266601562e+02, 3.432810974121094e+02] +temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.1101025390625e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.181846313476562e+02, 3.185993957519531e+02, 3.186600036621094e+02, 3.189481201171875e+02, 3.189635925292969e+02, 3.192712707519531e+02, 3.194983520507812e+02, 3.193892211914062e+02, 3.19415771484375e+02, 3.19120849609375e+02, 3.185459899902344e+02, 3.183751525878906e+02, 3.185407409667969e+02, 3.180388793945312e+02, 3.17714111328125e+02, 3.173306274414062e+02, 3.176727905273438e+02, 3.180802001953125e+02, 3.177732849121094e+02, 3.1754443359375e+02, 3.1768505859375e+02, 3.176912536621094e+02, 3.175335998535156e+02, 3.1697998046875e+02, 3.172467651367188e+02, 3.172243041992188e+02, 3.168643493652344e+02, 3.170609436035156e+02, 3.167634582519531e+02, 3.124078369140625e+02, 3.115540161132812e+02, 3.104700927734375e+02, 3.09622802734375e+02, 3.090401306152344e+02, 3.084966735839844e+02, 3.080016174316406e+02, 3.075909729003906e+02, 3.073069152832031e+02, 3.071300659179688e+02, 3.070762329101562e+02, 3.0696240234375e+02, 3.068350830078125e+02, 3.065877990722656e+02, 3.060327758789062e+02, 3.05546142578125e+02, 3.04848876953125e+02, 3.040871276855469e+02, 3.036488342285156e+02, 3.034918823242188e+02, 3.028552856445312e+02, 3.018724060058594e+02, 3.015412902832031e+02, 3.011158752441406e+02, 3.004388427734375e+02, 3.002837829589844e+02, 2.999995422363281e+02, 3.00043701171875e+02, 2.999257507324219e+02, 3.000049133300781e+02, 2.998818969726562e+02, 2.999306335449219e+02, 2.9996142578125e+02, 2.999478454589844e+02, 3.005303039550781e+02, 3.008473205566406e+02, 3.015175476074219e+02, 3.016997375488281e+02, 3.014815673828125e+02, 3.01451904296875e+02, 3.016185607910156e+02, 3.015406188964844e+02, 3.041492309570312e+02, 3.055158386230469e+02, 3.062835388183594e+02, 3.067785949707031e+02, 3.0699365234375e+02, 3.070588684082031e+02, 3.070314331054688e+02, 3.069041442871094e+02, 3.067091979980469e+02, 3.067263793945312e+02, 3.067084350585938e+02, 3.066339721679688e+02, 3.064884033203125e+02, 3.063646240234375e+02, 3.063402099609375e+02, 3.064747619628906e+02, 3.068072814941406e+02, 3.071504516601562e+02, 3.074424133300781e+02, 3.077146606445312e+02, 3.07935302734375e+02, 3.080780029296875e+02, 3.081256103515625e+02, 3.080643005371094e+02, 3.080347290039062e+02] +temRet.T=[2.931499938964844e+02, 3.333218994140625e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.439313049316406e+02, 3.521710815429688e+02, 3.435746459960938e+02, 3.540379943847656e+02, 3.419050598144531e+02, 3.516350402832031e+02, 3.381692199707031e+02, 3.480570373535156e+02, 3.359356079101562e+02, 3.463271789550781e+02, 3.358786010742188e+02, 3.488461608886719e+02, 3.382138671875e+02, 3.528662414550781e+02, 3.430753173828125e+02, 3.406753540039062e+02, 3.494378662109375e+02, 3.393665466308594e+02, 3.544672241210938e+02, 3.454693603515625e+02, 3.366733703613281e+02, 3.516876525878906e+02, 3.423803405761719e+02, 3.391623840332031e+02, 3.514603271484375e+02, 3.428921813964844e+02, 3.364239501953125e+02, 3.533380126953125e+02, 3.458009033203125e+02, 3.485299377441406e+02, 3.486251525878906e+02, 3.479062805175781e+02, 3.484880981445312e+02, 3.496084899902344e+02, 3.510238037109375e+02, 3.525453491210938e+02, 3.541170349121094e+02, 3.557326965332031e+02, 3.574421081542969e+02, 3.583822631835938e+02, 3.54431396484375e+02, 3.497737121582031e+02, 3.4457080078125e+02, 3.400477905273438e+02, 3.445541381835938e+02, 3.492832641601562e+02, 3.538783874511719e+02, 3.580769958496094e+02, 3.506819458007812e+02, 3.449400329589844e+02, 3.533544921875e+02, 3.604164428710938e+02, 3.460746459960938e+02, 3.561886291503906e+02, 3.43033935546875e+02, 3.53843994140625e+02, 3.461331176757812e+02, 3.518097534179688e+02, 3.558353271484375e+02, 3.501661682128906e+02, 3.604344177246094e+02, 3.484012756347656e+02, 3.585531311035156e+02, 3.44355224609375e+02, 3.53044189453125e+02, 3.599440002441406e+02, 3.430190734863281e+02, 3.516394958496094e+02, 3.587284851074219e+02, 3.419649047851562e+02, 3.503922729492188e+02, 3.612626953125e+02, 3.587860717773438e+02, 3.584432373046875e+02, 3.585357666015625e+02, 3.551532897949219e+02, 3.512120056152344e+02, 3.469041137695312e+02, 3.425299377441406e+02, 3.397169799804688e+02, 3.424599914550781e+02, 3.451210632324219e+02, 3.476570739746094e+02, 3.501051940917969e+02, 3.523716735839844e+02, 3.544588317871094e+02, 3.564186096191406e+02, 3.583626403808594e+02, 3.563072509765625e+02, 3.5266748046875e+02, 3.493633422851562e+02, 3.464041137695312e+02, 3.437685852050781e+02, 3.413943481445312e+02, 3.393263549804688e+02, 3.402254333496094e+02] +temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301330566406e+02, 2.892975769042969e+02, 2.91556884765625e+02, 2.924832458496094e+02, 2.924545288085938e+02, 2.924683837890625e+02, 2.924432373046875e+02, 2.924492492675781e+02, 2.924227600097656e+02, 2.924105529785156e+02, 2.924169616699219e+02, 2.923835754394531e+02, 2.924335021972656e+02, 2.92436279296875e+02, 2.924851379394531e+02, 2.92466064453125e+02, 2.92510986328125e+02, 2.925418090820312e+02, 2.925221252441406e+02, 2.925343627929688e+02, 2.925024719238281e+02, 2.925279846191406e+02, 2.925511169433594e+02, 2.925020446777344e+02, 2.925323486328125e+02, 2.925522766113281e+02, 2.925442810058594e+02, 2.925641479492188e+02, 2.925733642578125e+02, 2.925527038574219e+02, 2.925766296386719e+02, 2.926077575683594e+02, 2.926939697265625e+02, 2.928887329101562e+02, 2.929942016601562e+02, 2.930628662109375e+02, 2.931092224121094e+02, 2.931529235839844e+02, 2.931947021484375e+02, 2.932321166992188e+02, 2.932615661621094e+02, 2.932836303710938e+02, 2.932965393066406e+02, 2.933004455566406e+02, 2.932983093261719e+02, 2.9329638671875e+02, 2.933058471679688e+02, 2.933336181640625e+02, 2.933860168457031e+02, 2.934620361328125e+02, 2.9352392578125e+02, 2.935338439941406e+02, 2.935364685058594e+02, 2.936015930175781e+02, 2.936659240722656e+02, 2.936662292480469e+02, 2.937183837890625e+02, 2.93729248046875e+02, 2.937367858886719e+02, 2.93751220703125e+02, 2.937371520996094e+02, 2.937605590820312e+02, 2.9374072265625e+02, 2.9376611328125e+02, 2.937378234863281e+02, 2.937599182128906e+02, 2.937034606933594e+02, 2.936749572753906e+02, 2.936654968261719e+02, 2.936250610351562e+02, 2.936240539550781e+02, 2.936634216308594e+02, 2.936337585449219e+02, 2.936203308105469e+02, 2.934090576171875e+02, 2.933837890625e+02, 2.933442687988281e+02, 2.933167724609375e+02, 2.93299072265625e+02, 2.932864074707031e+02, 2.932745056152344e+02, 2.932637939453125e+02, 2.932545471191406e+02, 2.932497253417969e+02, 2.93251953125e+02, 2.932626342773438e+02, 2.932821960449219e+02, 2.933033752441406e+02, 2.933187866210938e+02, 2.933218994140625e+02, 2.933094177246094e+02, 2.932885131835938e+02, 2.932628479003906e+02, 2.932356872558594e+02, 2.932101135253906e+02, 2.931886291503906e+02, 2.931727905273438e+02, 2.931629943847656e+02, 2.931585388183594e+02] +conBoiRet.yVal=[0e+00, 4.212586879730225e-01, 4.565469026565552e-01, 4.838089942932129e-01, 5.058921575546265e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] +conRadSup.yVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.280595541000366e-01, 7.872971296310425e-01, 8.308314681053162e-01, 7.737717032432556e-01, 8.45884382724762e-01, 7.899181246757507e-01, 8.887307047843933e-01, 8.119707107543945e-01, 9.11929726600647e-01, 8.20879340171814e-01, 8.946013450622559e-01, 7.933893203735352e-01, 8.787143230438232e-01, 7.640860676765442e-01, 8.136985301971436e-01, 8.346748352050781e-01, 7.783265709877014e-01, 8.606112599372864e-01, 7.530050873756409e-01, 7.947607636451721e-01, 8.739627599716187e-01, 7.674879431724548e-01, 8.19435715675354e-01, 8.412542939186096e-01, 7.598286271095276e-01, 8.11187207698822e-01, 8.60146701335907e-01, 7.479205131530762e-01, 7.793366312980652e-01, 7.707185745239258e-01, 7.100793719291687e-01, 6.651185154914856e-01, 6.312261819839478e-01, 6.057806611061096e-01, 5.786939859390259e-01, 5.525615811347961e-01, 5.297839641571045e-01, 5.137857794761658e-01, 5.052066445350647e-01, 5.072216391563416e-01, 5.342182517051697e-01, 5.682747364044189e-01, 6.019164323806763e-01, 6.211527585983276e-01, 5.796337723731995e-01, 5.148346424102783e-01, 4.289049804210663e-01, 3.828279078006744e-01, 4.464203715324402e-01, 4.837310612201691e-01, 3.770953714847565e-01, 3.231187760829926e-01, 3.936016857624054e-01, 2.861414849758148e-01, 3.561140298843384e-01, 2.963634729385376e-01, 3.350069522857666e-01, 3.215218186378479e-01, 3.020563423633575e-01, 3.348166346549988e-01, 2.826885282993317e-01, 3.521836698055267e-01, 2.805283963680267e-01, 4.067943096160889e-01, 3.671534657478333e-01, 3.562982380390167e-01, 4.50657069683075e-01, 3.975051045417786e-01, 3.344292342662811e-01, 4.426386952400208e-01, 4.100818932056427e-01, 1.92404180765152e-01, 3.860281109809875e-01, 4.618188738822937e-01, 4.974184334278107e-01, 5.309092998504639e-01, 5.643199682235718e-01, 5.983712077140808e-01, 6.284129619598389e-01, 6.471862196922302e-01, 6.299030184745789e-01, 6.065564751625061e-01, 5.782372355461121e-01, 5.462060570716858e-01, 5.177878141403198e-01, 4.990358650684357e-01, 4.948543012142181e-01, 5.048975348472595e-01, 5.306417942047119e-01, 5.654724836349487e-01, 5.986533761024475e-01, 6.277169585227966e-01, 6.511507034301758e-01, 6.683641076087952e-01, 6.80217981338501e-01, 6.74770712852478e-01] +conEquSta.onBoi=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] +conSysSta.onSys=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] From de224a41f87b8a634dd3c3ebbcc66662a502def6 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 23:56:52 +0000 Subject: [PATCH 09/21] Added tutorial --- .../Tutorial/CDL/Controls/Validation/BoilerReturn.mos | 5 +++++ .../Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos | 3 +++ .../Tutorial/CDL/Controls/Validation/RadiatorSupply.mos | 3 +++ .../Tutorial/CDL/Controls/Validation/SystemOnOff.mos | 3 +++ .../Scripts/Dymola/Examples/Tutorial/CDL/System1.mos | 2 ++ .../Scripts/Dymola/Examples/Tutorial/CDL/System2.mos | 2 ++ .../Scripts/Dymola/Examples/Tutorial/CDL/System3.mos | 2 ++ .../Scripts/Dymola/Examples/Tutorial/CDL/System4.mos | 4 ++++ .../Scripts/Dymola/Examples/Tutorial/CDL/System5.mos | 5 +++++ .../Scripts/Dymola/Examples/Tutorial/CDL/System6.mos | 5 +++++ 10 files changed, 34 insertions(+) create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos create mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos new file mode 100644 index 0000000000..82ae145a12 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos @@ -0,0 +1,5 @@ +// Script generated by Dymola Wed Feb 19 14:48:31 2020 +// Plot commands +simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.BoilerReturn", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="BoilerReturn"); +createPlot(id=2, position={15, 15, 542, 503}, y={"conBoiRet.TSet", "conBoiRet.TRet"}, range={0.0, 4000.0, 0.0, 80.0}, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); +createPlot(id=2, position={15, 15, 542, 249}, y={"conBoiRet.yVal"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos new file mode 100644 index 0000000000..4aac1295ad --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.EquipmentOnOff", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="EquipmentOnOff"); +createPlot(id=2, position={15, 15, 793, 722}, y={"conEquSta.TBoi"}, range={0.0, 4000.0, 50.0, 110.0}, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); +createPlot(id=2, position={15, 15, 793, 359}, y={"conEquSta.onSys", "conEquSta.onPum", "conEquSta.onBoi"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos new file mode 100644 index 0000000000..4695d891e4 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.RadiatorSupply", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="RadiatorSupply"); +createPlot(id=2, position={15, 15, 542, 517}, y={"conRadSup.TRoo", "conRadSup.TSup"}, range={0.0, 4000.0, 0.0, 60.0}, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); +createPlot(id=2, position={15, 15, 542, 256}, y={"conRadSup.yVal"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos new file mode 100644 index 0000000000..4b448c5ebd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos @@ -0,0 +1,3 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.SystemOnOff", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="SystemOnOff"); +createPlot(id=3, position={75, 75, 758, 583}, y={"conSysSta.TRoo", "conSysSta.TRooSet", "conSysSta.TOut", "conSysSta.TOutLow"}, range={0.0, 4000.0, 10.0, 25.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, displayUnits={"degC", "degC", "degC", "degC"}); +createPlot(id=3, position={75, 75, 758, 289}, y={"conSysSta.onSys"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos new file mode 100644 index 0000000000..17ad1282fb --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System1", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem1"); +createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos new file mode 100644 index 0000000000..d083bd6b4d --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System2", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem2"); +createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos new file mode 100644 index 0000000000..f0c4423da1 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System3", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem3"); +createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos new file mode 100644 index 0000000000..fb738b6520 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos @@ -0,0 +1,4 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System4", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem4"); +createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={15.0, 16.0, -50.0, 100.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); +createPlot(id=2, position={35, 35, 1209, 303}, y={"conBoiRet.yVal"}, range={15.0, 16.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="h"); +createPlot(id=2, position={35, 35, 1209, 302}, y={"conEquSta.onBoi"}, range={15.0, 16.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="h"); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos new file mode 100644 index 0000000000..f91eb5d105 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System5", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem5"); +createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, autoscale=true, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, range2={0.20000000000000004, 0.9000000000000001}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); +createPlot(id=2, position={35, 35, 1209, 216}, y={"conBoiRet.yVal"}, range={360.0, 384.0, -0.5, 1.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="h"); +createPlot(id=2, position={35, 35, 1209, 281}, y={"conEquSta.onBoi", "conSysSta.onSys"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}, timeUnit="h"); + diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos new file mode 100644 index 0000000000..b44644b3dd --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos @@ -0,0 +1,5 @@ +simulateModel("IBPSA.Examples.Tutorial.CDL.System6", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem6"); +createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={15.0, 16.0, -50.0, 100.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); +createPlot(id=2, position={35, 35, 1209, 303}, y={"conBoiRet.yVal", "conRadSup.yVal"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, timeUnit="h"); +createPlot(id=2, position={35, 35, 1209, 302}, y={"conEquSta.onBoi", "conSysSta.onSys"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}, timeUnit="h"); + From d72353eb5b39956d5cd06450a0c433f39703763e Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Sat, 14 Dec 2024 00:04:09 +0000 Subject: [PATCH 10/21] Added Tutorial --- .../CDL/BaseClasses/PartialOpenLoop.mo | 373 +++ .../Tutorial/CDL/BaseClasses/package.mo | 12 + .../Tutorial/CDL/BaseClasses/package.order | 1 + .../Tutorial/CDL/Controls/BoilerReturn.mo | 87 + .../Tutorial/CDL/Controls/EquipmentOnOff.mo | 99 + .../CDL/Controls/OpenLoopBoilerReturn.mo | 69 + .../CDL/Controls/OpenLoopEquipmentOnOff.mo | 77 + .../CDL/Controls/OpenLoopRadiatorSupply.mo | 96 + .../CDL/Controls/OpenLoopSystemOnOff.mo | 67 + .../Tutorial/CDL/Controls/RadiatorSupply.mo | 158 ++ .../Tutorial/CDL/Controls/SystemOnOff.mo | 129 + .../CDL/Controls/Validation/BoilerReturn.mo | 38 + .../CDL/Controls/Validation/EquipmentOnOff.mo | 46 + .../CDL/Controls/Validation/RadiatorSupply.mo | 45 + .../CDL/Controls/Validation/SystemOnOff.mo | 48 + .../CDL/Controls/Validation/package.mo | 14 + .../CDL/Controls/Validation/package.order | 4 + .../Examples/Tutorial/CDL/Controls/package.mo | 4 + .../Tutorial/CDL/Controls/package.order | 9 + IBPSA/Examples/Tutorial/CDL/System1.mo | 83 + IBPSA/Examples/Tutorial/CDL/System2.mo | 224 ++ IBPSA/Examples/Tutorial/CDL/System3.mo | 189 ++ IBPSA/Examples/Tutorial/CDL/System4.mo | 160 ++ IBPSA/Examples/Tutorial/CDL/System5.mo | 154 ++ IBPSA/Examples/Tutorial/CDL/System6.mo | 160 ++ IBPSA/Examples/Tutorial/CDL/package.mo | 106 + IBPSA/Examples/Tutorial/CDL/package.order | 8 + .../CDL/System1/OpenLoopTemperatures.png | Bin 0 -> 24721 bytes .../CDL/System3/TemperaturesValve.png | Bin 0 -> 25693 bytes .../CDL/System4/TemperaturesControl.png | Bin 0 -> 35011 bytes .../CDL/System5/TemperaturesControl.png | Bin 0 -> 51185 bytes .../CDL/System6/TemperaturesControl.png | Bin 0 -> 49164 bytes .../Examples/Tutorial/CDL/schematics.pdf | Bin 0 -> 18394 bytes .../Examples/Tutorial/CDL/schematics.png | Bin 0 -> 145276 bytes .../Examples/Tutorial/CDL/schematics.svg | 2178 +++++++++++++++++ 35 files changed, 4638 insertions(+) create mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/package.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/package.order create mode 100644 IBPSA/Examples/Tutorial/CDL/System1.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/System2.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/System3.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/System4.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/System5.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/System6.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/package.mo create mode 100644 IBPSA/Examples/Tutorial/CDL/package.order create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System3/TemperaturesValve.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System5/TemperaturesControl.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.png create mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.svg diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo b/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo new file mode 100644 index 0000000000..3596e9c1bc --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo @@ -0,0 +1,373 @@ +within IBPSA.Examples.Tutorial.CDL.BaseClasses; +partial model PartialOpenLoop "Partial model with open loop system" + extends Modelica.Icons.Example; + replaceable package MediumA = IBPSA.Media.Air "Medium model for air"; + replaceable package MediumW = IBPSA.Media.Water "Medium model for water"; + + parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal=20000 + "Nominal heat flow rate of radiator"; + parameter Modelica.Units.SI.Temperature TRadSup_nominal=273.15 + 50 + "Radiator nominal supply water temperature"; + parameter Modelica.Units.SI.Temperature TRadRet_nominal=273.15 + 40 + "Radiator nominal return water temperature"; + parameter Modelica.Units.SI.MassFlowRate mRad_flow_nominal=Q_flow_nominal/ + 4200/(TRadSup_nominal - TRadRet_nominal) + "Radiator nominal mass flow rate"; + + parameter Modelica.Units.SI.Temperature TBoiSup_nominal=273.15 + 70 + "Boiler nominal supply water temperature"; + parameter Modelica.Units.SI.Temperature TBoiRet_min=273.15 + 60 + "Boiler minimum return water temperature"; + parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal=Q_flow_nominal/ + 4200/(TBoiSup_nominal - TBoiRet_min) "Boiler nominal mass flow rate"; + + parameter Modelica.Units.SI.MassFlowRate mRadVal_flow_nominal=Q_flow_nominal/ + 4200/(TBoiSup_nominal - TRadRet_nominal) + "Radiator nominal mass flow rate"; + + IBPSA.Fluid.MixingVolumes.MixingVolume vol( + redeclare package Medium = MediumA, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mA_flow_nominal, + V=V) + "Room air volume" + annotation (Placement(transformation(extent={{60,20},{80,40}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalConductor theCon(G=20000/30) + "Thermal conductance with the ambient" + annotation (Placement(transformation(extent={{20,40},{40,60}}))); + parameter Modelica.Units.SI.Volume V=6*10*3 "Room volume"; + parameter Modelica.Units.SI.MassFlowRate mA_flow_nominal=V*1.2*6/3600 + "Nominal mass flow rate"; + parameter Modelica.Units.SI.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}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( + extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.Periodic, + smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, + table=[-6, 0; + 8, QRooInt_flow; + 18, 0], + timeScale=3600) "Time table for internal heat gain" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + IBPSA.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) "Radiator" + annotation (Placement(transformation(extent={{0,-20},{20,0}}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort temSup(redeclare package Medium = MediumW, + m_flow_nominal=mRad_flow_nominal) "Supply water temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-40}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temRoo( + T(displayUnit="degC")) + "Room temperature" annotation (Placement(transformation( + extent={{10,-10},{-10,10}}, + origin={-40,30}))); + IBPSA.Fluid.Movers.FlowControlled_m_flow pumRad( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mRad_flow_nominal, + nominalValuesDefineDefaultPressureCurve=true) + "Pump for radiator" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-70}))); + + IBPSA.Fluid.FixedResistances.Junction mix( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal={mRadVal_flow_nominal,-mRad_flow_nominal,mRad_flow_nominal + - mRadVal_flow_nominal}, + dp_nominal={100,-8000,6750}) "Mixer between valve and radiators" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-110}))); + IBPSA.Fluid.FixedResistances.Junction spl( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal={mBoi_flow_nominal,-mRadVal_flow_nominal,-mBoi_flow_nominal}, + dp_nominal={200,-200,-50}) "Splitter of boiler loop bypass" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-190}))); + + IBPSA.Fluid.FixedResistances.Junction spl2( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal={0,0,0}, + m_flow_nominal={mRad_flow_nominal,-mRadVal_flow_nominal,-mRad_flow_nominal + + mRadVal_flow_nominal}) "Flow splitter in return from radiator" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={60,-110}))); + IBPSA.Fluid.FixedResistances.Junction mix2( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + dp_nominal={0,-200,0}, + m_flow_nominal={mRadVal_flow_nominal,-mBoi_flow_nominal,mBoi_flow_nominal}) + "Mixer" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={60,-190}))); + IBPSA.Fluid.FixedResistances.Junction spl4( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mRadVal_flow_nominal*{1,-1,-1}, + dp_nominal=200*{1,-1,-1}) "Splitter for radiator loop valve bypass" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={60,-150}))); + + IBPSA.Fluid.Movers.FlowControlled_m_flow pumBoi( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mBoi_flow_nominal, + nominalValuesDefineDefaultPressureCurve=true) + "Pump for boiler" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-280}))); + + + IBPSA.Fluid.Boilers.BoilerPolynomial boi( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mBoi_flow_nominal, + dp_nominal=2000, + Q_flow_nominal=Q_flow_nominal, + fue=IBPSA.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()) "Boiler" + annotation (Placement(transformation(extent={{20,-320},{0,-300}}))); + + IBPSA.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear valRad( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mRadVal_flow_nominal, + l={0.01,0.01}, + dpValve_nominal=6000) "Three-way valve for radiator loop" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-150}))); + + IBPSA.Fluid.Sources.Boundary_pT preSou(redeclare package Medium = MediumW, + nPorts=1) + "Source for pressure and to account for thermal expansion of water" + annotation (Placement(transformation(extent={{92,-320},{72,-300}}))); + IBPSA.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear valBoi( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mBoi_flow_nominal, + l={0.01,0.01}, + dpValve_nominal=6000) "Three-way valve for boiler" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={60,-230}))); + IBPSA.Fluid.Sensors.TemperatureTwoPort temRet( + redeclare package Medium = MediumW, + m_flow_nominal=mBoi_flow_nominal) "Return water temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={60,-280}))); + IBPSA.Fluid.FixedResistances.Junction spl1( + redeclare package Medium = MediumW, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal={mBoi_flow_nominal,-mBoi_flow_nominal,-mBoi_flow_nominal}, + dp_nominal={0,0,-200}) "Splitter" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={-50,-230}))); + + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTOut + "Outdoor temperature sensor" + annotation (Placement(transformation(extent={{-318,20},{-298,40}}))); + + BoundaryConditions.WeatherData.ReaderTMY3 weaDat( + filNam=Modelica.Utilities.Files.loadResource("modelica://IBPSA/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data reader" + annotation (Placement(transformation(extent={{-380,60},{-360,80}}))); + BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-320,60},{-300,80}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut + "Outside temperature" + annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); + +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={{2,80},{20,80}}, + color={0,0,127}, + smooth=Smooth.None)); + connect(temSup.port_b, rad.port_a) annotation (Line( + points={{-50,-30},{-50,-10},{-5.55112e-16,-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(pumRad.port_b, temSup.port_a) annotation (Line( + points={{-50,-60},{-50,-50}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(boi.port_b, pumBoi.port_a) annotation (Line( + points={{-5.55112e-16,-310},{-50,-310},{-50,-290}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(pumBoi.port_b, spl1.port_1) annotation (Line( + points={{-50,-270},{-50,-240}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl1.port_2, spl.port_1) annotation (Line( + points={{-50,-220},{-50,-200}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl.port_2, valRad.port_1) + annotation (Line( + points={{-50,-180},{-50,-160}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(valRad.port_2, mix.port_1) + annotation (Line( + points={{-50,-140},{-50,-120}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl1.port_3, valBoi.port_3) + annotation (Line( + points={{-40,-230},{50,-230}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(valBoi.port_2, temRet.port_a) + annotation (Line( + points={{60,-240},{60,-270}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(temRet.port_b, boi.port_a) annotation (Line( + points={{60,-290},{60,-310},{20,-310}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(boi.port_a, preSou.ports[1]) annotation (Line( + points={{20,-310},{72,-310}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(mix2.port_2, valBoi.port_1) + annotation (Line( + points={{60,-200},{60,-220}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl4.port_2, mix2.port_1) annotation (Line( + points={{60,-160},{60,-180}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl2.port_2, spl4.port_1) annotation (Line( + points={{60,-120},{60,-140}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(valRad.port_3, spl4.port_3) + annotation (Line( + points={{-40,-150},{50,-150}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(spl.port_3, mix2.port_3) annotation (Line( + points={{-40,-190},{50,-190}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(mix.port_3, spl2.port_3) annotation (Line( + points={{-40,-110},{50,-110}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(mix.port_2, pumRad.port_a) annotation (Line( + points={{-50,-100},{-50,-80}}, + color={0,127,255}, + smooth=Smooth.None)); + connect(rad.port_b, spl2.port_1) annotation (Line( + points={{20,-10},{60,-10},{60,-100}}, + color={0,127,255}, + smooth=Smooth.None)); + + connect(weaDat.weaBus, weaBus) annotation (Line( + points={{-360,70},{-310,70}}, + color={255,204,51}, + thickness=0.5, + smooth=Smooth.None), Text( + textString="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaBus.TDryBul, TOut.T) annotation (Line( + points={{-310,70},{-262,70}}, + color={255,204,51}, + thickness=0.5, + smooth=Smooth.None), Text( + textString="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(TOut.port, theCon.port_a) annotation (Line( + points={{-240,70},{-220,70},{-220,50},{20,50}}, + color={191,0,0}, + smooth=Smooth.None)); + connect(TOut.port, senTOut.port) annotation (Line( + points={{-240,70},{-220,70},{-220,50},{-340,50},{-340,30},{-318,30}}, + color={191,0,0}, + smooth=Smooth.None)); + annotation (Documentation(info=" +

+This partial model implements the HVAC system model and a simple room, which is here modeled +as a first order response. (More detailed room models are available in +IBPSA.ThermalZones, +but for this tutorial it suffices to use this room model.) +The control inputs are not connected as these will be connected in the +tutorials that extend this model. +

+

+For instructions of how to build this model, see + +IBPSA.Examples.Tutorial.Boiler +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), +Diagram( + coordinateSystem( + preserveAspectRatio=false,extent={{-400,-360},{240, 100}}))); +end PartialOpenLoop; diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo new file mode 100644 index 0000000000..9ace9f4d96 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo @@ -0,0 +1,12 @@ +within IBPSA.Examples.Tutorial.CDL; +package BaseClasses "Package that contains the model of the HVAC system and the building load" + extends Modelica.Icons.BasesPackage; + +annotation (preferredView="info", Documentation(info=" +

+This package contains base classes that are used to construct the models in + +IBPSA.Examples.Tutorial.CDL. +

+")); +end BaseClasses; diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order new file mode 100644 index 0000000000..672535aee2 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order @@ -0,0 +1 @@ +PartialOpenLoop diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo new file mode 100644 index 0000000000..6abd85c60f --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo @@ -0,0 +1,87 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block BoilerReturn "Control for boiler return" + parameter Real TSet( + final unit="K", + displayUnit="degC") = 333.15 + "Set point for boiler temperature"; + parameter Real k=0.1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti=120 "Time constant of integrator block"; + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRet( + final unit="K", + displayUnit="degC") + "Return water temperature to boiler" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( + final unit="1") + "Valve control signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant T( + final k=TSet) + "Set point temperature" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPID( + final k=k, + final Ti=Ti, + reverseActing=false) "Controller for valve in boiler loop" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(conPID.y, yVal) + annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); + connect(conPID.u_s, T.y) + annotation (Line(points={{-12,0},{-38,0}}, color={0,0,127})); + connect(TRet, conPID.u_m) annotation (Line(points={{-120,0},{-80,0},{-80,-50}, + {0,-50},{0,-12}}, color={0,0,127})); + annotation ( + defaultComponentName="conBoiRet", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-32,-30},{34,-86}}, + lineColor={255,255,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Text( + extent={{-88,22},{-40,-18}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRet"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="yVal"), + Polygon( + points={{0,-62},{-12,-80},{14,-80},{0,-62}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Text( + textColor={0,0,255}, + extent={{-154,104},{146,144}}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Controller that takes as an input the boiler return water temperature TRet +and outputs the valve control signal yVal. +The valve control signal is computed using a PI-controller that tracks a constant +set point of TSet. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end BoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo new file mode 100644 index 0000000000..d6efa70e6e --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo @@ -0,0 +1,99 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block EquipmentOnOff "Controller for equipment on/off control" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TBoi( + final unit="K", + displayUnit="degC") + "Boiler temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput onSys + "System on command" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onPum + "Pump on command" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onBoi + "Boiler on command" + annotation (Placement(transformation(extent={{100,40},{140,80}}))); + IBPSA.Controls.OBC.CDL.Logical.And and1 + "And operator to switch boiler on based on temperature and system on command" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Not not1 + "Negation of output signal, because boiler should be off if temperature exceed uHigh" + annotation (Placement(transformation(extent={{-20,50},{0,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis hys( + uHigh=273.15 + 90, + uLow=273.15 + 70) "Hysteresis for on/off of boiler" + annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); +equation + + connect(TBoi, hys.u) + annotation (Line(points={{-120,60},{-62,60}}, color={0,0,127})); + connect(hys.y, not1.u) + annotation (Line(points={{-38,60},{-22,60}}, color={255,0,255})); + connect(onSys, onPum) + annotation (Line(points={{-120,-60},{120,-60}}, color={255,0,255})); + connect(and1.u1, not1.y) annotation (Line(points={{18,0},{10,0},{10,60},{2,60}}, + color={255,0,255})); + connect(and1.u2, onSys) annotation (Line(points={{18,-8},{10,-8},{10,-60},{ + -120,-60}}, color={255,0,255})); + connect(and1.y, onBoi) annotation (Line(points={{42,0},{60,0},{60,60},{120,60}}, + color={255,0,255})); + annotation ( + defaultComponentName="conEquSta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,82},{-42,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TBoi"), + Text( + extent={{38,-38},{86,-78}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onPum"), + Text( + extent={{-92,-40},{-44,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onSys"), + Text( + textColor={0,0,255}, + extent={{-148,104},{152,144}}, + textString="%name"), + Text( + extent={{44,82},{92,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onBoi")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Controller that takes as an input the boiler water temperature TBoi +and the system on command onSys, and outputs +the on command for the pumps onPum and the boiler onBoi. +

+

+The pump on command is the same as the system on command. +The boiler is switched on if the boiler temperature TBoi falls below +70°C and if onSys=true, and it switches off +if either TBoi exceeds 90°C or if onSys=false. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end EquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo new file mode 100644 index 0000000000..ab54c74b09 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo @@ -0,0 +1,69 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block OpenLoopBoilerReturn "Open loop controller for boiler return" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRet( + final unit="K", + displayUnit="degC") + "Return water temperature to boiler" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( + final unit="1") + "Valve control signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con(k=1) + "Constant valve control signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(con.y, yVal) + annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); + annotation ( + defaultComponentName="conBoiRet", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-32,-30},{34,-86}}, + lineColor={255,255,255}, + pattern=LinePattern.None, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Text( + extent={{-88,22},{-40,-18}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRet"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="yVal"), + Polygon( + points={{0,-62},{-12,-80},{14,-80},{0,-62}}, + pattern=LinePattern.None, + smooth=Smooth.None, + fillColor={255,255,0}, + fillPattern=FillPattern.Solid, + lineColor={0,0,0}), + Text( + textColor={0,0,255}, + extent={{-154,104},{146,144}}, + textString="%name")}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Open loop controller that outputs a constant control signal for the valve +of the boiler return. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end OpenLoopBoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo new file mode 100644 index 0000000000..c317465090 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo @@ -0,0 +1,77 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block OpenLoopEquipmentOnOff + "Open loop controller for equipment on/off control" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TBoi( + final unit="K", + displayUnit="degC") + "Boiler temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput onSys + "System on command" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onPum + "Pump on command" + annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onBoi + "Boiler on command" + annotation (Placement(transformation(extent={{100,40},{140,80}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con(k=true) + "Constant control signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + + connect(con.y, onBoi) annotation (Line(points={{12,0},{60,0},{60,60},{120,60}}, + color={255,0,255})); + connect(con.y, onPum) annotation (Line(points={{12,0},{60,0},{60,-60},{120, + -60}}, color={255,0,255})); + annotation ( + defaultComponentName="conEquSta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + textColor={0,0,255}, + extent={{-148,104},{152,144}}, + textString="%name"), + Text( + extent={{-94,-40},{-46,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onSys"), + Text( + extent={{36,-38},{84,-78}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onPum"), + Text( + extent={{42,82},{90,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onBoi"), + Text( + extent={{-92,82},{-44,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TBoi")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Open loop controller that outputs a constant control signal for the system on command. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end OpenLoopEquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo new file mode 100644 index 0000000000..4b3cc6119b --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo @@ -0,0 +1,96 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block OpenLoopRadiatorSupply + "Open loop controller for mixing valve in radiator loop" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( + final unit="K", + displayUnit="degC") + "Room air temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSup( + final unit="K", + displayUnit="degC") + "Measured supply water temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( + final unit="1") + "Valve control signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con(k=1) + "Constant valve control signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(con.y, yVal) + annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); + annotation ( + defaultComponentName="conRadSup", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,82},{-42,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRoo"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="yVal"), + Text( + extent={{-92,-40},{-44,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TOut"), + Text( + textColor={0,0,255}, + extent={{-154,104},{146,144}}, + textString="%name"), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={-30,2}, + rotation=360), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={8,-36}, + rotation=90), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={8,40}, + rotation=270)}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Open loop controller that outputs a constant control signal for the mixing valve of the radiator loop. +

+", revisions=" +
    +
  • +March 5, 2020, by Michael Wetter:
    +Corrected typo in comments.
    +This is for +Buildings, issue 1810. +
  • +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end OpenLoopRadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo new file mode 100644 index 0000000000..956bfad989 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo @@ -0,0 +1,67 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block OpenLoopSystemOnOff + "Open loop controller for system on/off" + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TOut( + final unit="K", + displayUnit="degC") + "Outdoor air temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( + final unit="K", + displayUnit="degC") + "Room air temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onSys + "System on command" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con(k=true) + "Constant control signal" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); +equation + connect(con.y, onSys) + annotation (Line(points={{12,0},{120,0}}, color={255,0,255})); + annotation ( + defaultComponentName="conSysSta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,82},{-42,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TOut"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onSys"), + Text( + extent={{-92,-40},{-44,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRoo"), + Text( + textColor={0,0,255}, + extent={{-152,104},{148,144}}, + textString="%name")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Open loop controller that outputs a constant control signal for the system on command. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end OpenLoopSystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo new file mode 100644 index 0000000000..828ef5c59a --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo @@ -0,0 +1,158 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block RadiatorSupply "Controller for mixing valve in radiator loop" + + parameter Real TSupMin( + final unit="K", + displayUnit="degC") = 294.15 + "Minimum supply water temperature"; + parameter Real TSupMax( + final unit="K", + displayUnit="degC") = 323.15 + "Maximum supply water temperature"; + parameter Real TRooMin( + final unit="K", + displayUnit="degC") = 292.15 + "Room air temperature at which supply water temperature is at TSupMax"; + + parameter Real k=0.1 "Gain of controller"; + parameter Modelica.Units.SI.Time Ti=120 "Time constant of integrator block"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( + final unit="K", + displayUnit="degC") + "Room air temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}), + iconTransformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSup( + final unit="K", + displayUnit="degC") + "Measured supply water temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), + iconTransformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( + final unit="1") + "Valve control signal" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.PID conPIDRad( + final k=k, + final Ti=Ti, + final yMax=1, + final yMin=0, + controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI) + "Controller for valve in radiator loop" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Line TSetSup + "Setpoint for supply water temperature" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMinSup( + final k=TSupMin) + "Minimum heating supply temperature" + annotation (Placement(transformation(extent={{-50,-40},{-30,-20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMaxSup( + final k=TSupMax) + "Maximum heating supply temperature" + annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMinRoo( + final k=TRooMin) + "Minimum room air temperature" + annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); +equation + connect(TMinSup.y,TSetSup. x2) annotation (Line(points={{-28,-30},{-20,-30},{ + -20,-4},{-12,-4}}, color={0,0,127})); + connect(TMinSup.y,TSetSup. f2) annotation (Line(points={{-28,-30},{-20,-30},{ + -20,-8},{-12,-8}}, color={0,0,127})); + connect(TMaxSup.y,TSetSup. f1) annotation (Line(points={{-28,30},{-24,30},{ + -24,4},{-12,4}}, color={0,0,127})); + connect(TSetSup.x1,TMinRoo. y) annotation (Line(points={{-12,8},{-20,8},{-20, + 70},{-28,70}}, color={0,0,127})); + connect(conPIDRad.u_s,TSetSup. y) annotation (Line(points={{38,0},{12,0}}, + color={0,0,127})); + connect(TSetSup.u, TRoo) annotation (Line(points={{-12,0},{-70,0},{-70,60},{-120, + 60}}, color={0,0,127})); + connect(TSup, conPIDRad.u_m) + annotation (Line(points={{-120,-60},{50,-60},{50,-12}}, color={0,0,127})); + connect(conPIDRad.y, yVal) + annotation (Line(points={{62,0},{120,0},{120,0}}, color={0,0,127})); + annotation ( + defaultComponentName="conRadSup", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,82},{-42,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRoo"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="yVal"), + Text( + extent={{-92,-40},{-44,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TSup"), + Text( + textColor={0,0,255}, + extent={{-154,104},{146,144}}, + textString="%name"), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={-30,2}, + rotation=360), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={8,-36}, + rotation=90), + Polygon( + points={{38,0},{-24,36},{-24,-32},{38,0}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + origin={8,40}, + rotation=270)}), Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Controller that takes as an input the room air temperature TRoo and +the supply water temperature TSup, +and outputs the commanded mixing valve position yVal. +

+

+Based on the room air temperature TRoo, and the user adjustable parameters +for the minimum supply water temperature TSupMin, +the maximum supply water temperature TSupMax +and the room air temperature TRooMin +at which the supply water temperature is at TSupMax, +the controller computes a set point for the supply water temperature. +This set point is then used with the measured supply water temperature TSup +as an input to a PI-controller that computes the commanded valve position yVal. +

+", revisions=" +
    +
  • +March 5, 2020, by Michael Wetter:
    +Corrected typo in comments.
    +This is for +Buildings, issue 1810. +
  • +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end RadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo new file mode 100644 index 0000000000..5d59323465 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo @@ -0,0 +1,129 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +block SystemOnOff "Controller for system on/off" + parameter Real TRooSet( + final unit="K", + displayUnit="degC") = 293.65 + "Room air temperature set point"; + parameter Real dTRoo( + min=0.5, + final unit="K") = 1 + "Room air temperature dead band"; + parameter Real TOutLow( + final unit="K", + displayUnit="degC") = 289.15 + "Outdoor temperature below which system is allowed to switch on"; + + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TOut( + final unit="K", + displayUnit="degC") + "Outdoor air temperature" + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( + final unit="K", + displayUnit="degC") + "Room air temperature" + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onSys + "System on command" + annotation (Placement(transformation(extent={{100,-20},{140,20}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetOut(k=TOutLow + 0.5) + "Set point for outdoor air temperature plus half the dead band" + annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetRoo(k=TRooSet) + "Set point for room air temperature" + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + IBPSA.Controls.OBC.CDL.Logical.And and1 + "And operator to switch boiler on based on temperature and system on command" + annotation (Placement(transformation(extent={{60,-10},{80,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub "Inputs different" + annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis onTOut( + final uLow=-0.5, + final uHigh=0.5) "On/off control based on outside air temperature" + annotation (Placement(transformation(extent={{0,50},{20,70}}))); + IBPSA.Controls.OBC.CDL.Reals.Subtract sub1 "Inputs different" + annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); + IBPSA.Controls.OBC.CDL.Reals.Hysteresis onTRoo( + final uLow=-0.5, + final uHigh=0.5) "On/off control based on room air temperature" + annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); +equation + connect(and1.y, onSys) + annotation (Line(points={{82,0},{120,0}}, color={255,0,255})); + connect(TSetOut.y, sub.u1) annotation (Line(points={{-58,80},{-50,80},{-50,66}, + {-42,66}}, color={0,0,127})); + connect(TOut, sub.u2) annotation (Line(points={{-120,60},{-60,60},{-60,54},{-42, + 54}}, color={0,0,127})); + connect(sub.y, onTOut.u) + annotation (Line(points={{-18,60},{-2,60}}, color={0,0,127})); + connect(onTOut.y, and1.u1) annotation (Line(points={{22,60},{40,60},{40,0},{58, + 0}}, color={255,0,255})); + connect(TSetRoo.y, sub1.u1) annotation (Line(points={{-58,-30},{-50,-30},{-50, + -54},{-42,-54}}, color={0,0,127})); + connect(TRoo, sub1.u2) annotation (Line(points={{-120,-60},{-60,-60},{-60,-66}, + {-42,-66}}, color={0,0,127})); + connect(sub1.y, onTRoo.u) + annotation (Line(points={{-18,-60},{-2,-60}}, color={0,0,127})); + connect(onTRoo.y, and1.u2) annotation (Line(points={{22,-60},{40,-60},{40,-8}, + {58,-8}}, color={255,0,255})); + annotation ( + defaultComponentName="conSysSta", + Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-90,82},{-42,42}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TOut"), + Text( + extent={{40,24},{88,-16}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="onSys"), + Text( + extent={{-92,-40},{-44,-80}}, + textColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.None, + textString="TRoo"), + Text( + textColor={0,0,255}, + extent={{-152,104},{148,144}}, + textString="%name")}), + Diagram( + coordinateSystem(preserveAspectRatio=false)), + Documentation(info=" +

+Controller that takes as an input the outside air temperature TOut and +the room air temperature TRoo, +and outputs the system on command onSys. +

+

+The system on command is true if both conditions are satisfied: +The outside air temperature is below a limit of TOutLow(=16°C, adjustable) +and the room air temperature is below TRooSet-dTRoo/2, +where TRooSet is the room air temperature setpoint (=20.5°C, adjustable) +and dTRoo is the deadband (=1 Kelvin, adjustable). +Otherwise, the system on command is false. +

+", revisions=" +
    +
  • +December 11, 2023, by Jianjun Hu:
    +Reimplemented on-off control to avoid using the obsolete OnOffController. +This is for +#3595. +
  • +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end SystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo new file mode 100644 index 0000000000..394fc0261c --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo @@ -0,0 +1,38 @@ +within IBPSA.Examples.Tutorial.CDL.Controls.Validation; +model BoilerReturn + "Validation model for the return temperature controller of the boiler" + extends Modelica.Icons.Example; + + IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TRet( + height=50, + duration=3600, + offset=293.15) "Return water temperature" + annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); +equation + connect(TRet.y, conBoiRet.TRet) + annotation (Line(points={{-38,0},{-12,0}}, color={0,0,127})); + annotation ( + Documentation(info=" +

+Validation model for the boiler return water temperature controller. +The input to the controller is a ramp signal of increasing measured return water temperature. +The validation shows that as the temperature crosses the set point, the valve opens. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), +__Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos" + "Simulate and plot"), + experiment( + StopTime=3600, + Tolerance=1e-06)); +end BoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo new file mode 100644 index 0000000000..c7fd1f55ee --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo @@ -0,0 +1,46 @@ +within IBPSA.Examples.Tutorial.CDL.Controls.Validation; +model EquipmentOnOff + "Validation model for the equipment on/off controller" + extends Modelica.Icons.Example; + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TBoi( + height=40, + duration=3600, + offset=333.15) "Boiler temperature" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Examples.Tutorial.CDL.Controls.EquipmentOnOff + conEquSta "Controller for equipment on/off" + annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); + IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse onSys( + period=600) + "System on signal" + annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); +equation + connect(TBoi.y, conEquSta.TBoi) annotation (Line(points={{-38,30},{-24,30},{-24, + 6},{-10,6}}, color={0,0,127})); + connect(onSys.y, conEquSta.onSys) annotation (Line(points={{-38,-10},{-24,-10}, + {-24,-6},{-10,-6}}, color={255,0,255})); + annotation ( + Documentation(info=" +

+Validation model for the equipment on/off controller. +The input to the controller is a ramp signal of increasing measured boiler water temperature, +and a on/off signal for the overall system. +The validation shows that the pumps are on/off based on the overall system, and the boiler is +also on/off based on this system unless the return water temperature exceeds 90°C. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), +__Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos" + "Simulate and plot"), + experiment( + StopTime=3600, + Tolerance=1e-06)); +end EquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo new file mode 100644 index 0000000000..10680995d0 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo @@ -0,0 +1,45 @@ +within IBPSA.Examples.Tutorial.CDL.Controls.Validation; +model RadiatorSupply + "Validation model for the valve of the radiator supply" + extends Modelica.Icons.Example; + + IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TRoo( + height=-4, + duration=3600, + offset=297.15) "Room air temperature" + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply + conRadSup "Controller for radiator supply water temperature" + annotation (Placement(transformation(extent={{10,-10},{30,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TSup( + amplitude=20, + freqHz=1/720, + offset=303.15) "Measured supply water temperature" + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); +equation + connect(TRoo.y, conRadSup.TRoo) annotation (Line(points={{-38,30},{-20,30},{-20, + 6},{8,6}}, color={0,0,127})); + connect(conRadSup.TSup, TSup.y) annotation (Line(points={{8,-6},{-16,-6},{-16, + -30},{-38,-30}}, color={0,0,127})); + annotation ( + Documentation(info=" +

+Validation model for the boiler return water temperature controller. +The input to the controller is a ramp signal of increasing measured return water temperature. +The validation shows that as the temperature crosses the set point, the valve opens. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), +__Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos" + "Simulate and plot"), + experiment( + StopTime=3600, + Tolerance=1e-06)); +end RadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo new file mode 100644 index 0000000000..c7fdf61d7e --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo @@ -0,0 +1,48 @@ +within IBPSA.Examples.Tutorial.CDL.Controls.Validation; +model SystemOnOff + "Validation model for the system on/off controller" + extends Modelica.Icons.Example; + + IBPSA.Examples.Tutorial.CDL.Controls.SystemOnOff + conSysSta "Controller for system on/off" + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOut( + amplitude=5, + freqHz=1/720, + offset=290.15) "Outside air temperature" + annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TRoo( + amplitude=4, + freqHz=1/720, + phase=1.5707963267949, + offset=293.15) "Room air temperature" + annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); +equation + connect(TOut.y, conSysSta.TOut) annotation (Line(points={{-38,20},{-20,20},{-20, + 6},{-2,6}}, color={0,0,127})); + connect(TRoo.y, conSysSta.TRoo) annotation (Line(points={{-38,-20},{-20,-20},{ + -20,-6},{-2,-6}}, color={0,0,127})); + annotation ( + Documentation(info=" +

+Validation model for the system on/off controller. +The input to the controller are time varying signals for the outdoor air temperature +and the room air temperature. +The validation shows that the system is commanded on (onSys=true) if +the outdoor air temperature and the room air temperature are both low. +

+", revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), +__Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos" + "Simulate and plot"), + experiment( + StopTime=3600, + Tolerance=1e-06)); +end SystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo new file mode 100644 index 0000000000..fd914ccf61 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo @@ -0,0 +1,14 @@ +within IBPSA.Examples.Tutorial.CDL.Controls; +package Validation + extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

+This package contains models that validate the controls models. +The examples plot various outputs, which have been verified against +analytical solutions or by inspecting their change due to parametric changes. +These model outputs are stored as reference data to +allow continuous validation whenever models in the library change. +

+")); +end Validation; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order new file mode 100644 index 0000000000..4042fc5c1a --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order @@ -0,0 +1,4 @@ +BoilerReturn +EquipmentOnOff +RadiatorSupply +SystemOnOff diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/package.mo b/IBPSA/Examples/Tutorial/CDL/Controls/package.mo new file mode 100644 index 0000000000..b3782b7d8a --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/package.mo @@ -0,0 +1,4 @@ +within IBPSA.Examples.Tutorial.CDL; +package Controls "Package with the controllers used in the tutorial" +extends Modelica.Icons.VariantsPackage; +end Controls; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/package.order b/IBPSA/Examples/Tutorial/CDL/Controls/package.order new file mode 100644 index 0000000000..7af42a30da --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/Controls/package.order @@ -0,0 +1,9 @@ +BoilerReturn +EquipmentOnOff +OpenLoopBoilerReturn +OpenLoopEquipmentOnOff +OpenLoopRadiatorSupply +OpenLoopSystemOnOff +RadiatorSupply +SystemOnOff +Validation diff --git a/IBPSA/Examples/Tutorial/CDL/System1.mo b/IBPSA/Examples/Tutorial/CDL/System1.mo new file mode 100644 index 0000000000..01b6831d82 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System1.mo @@ -0,0 +1,83 @@ +within IBPSA.Examples.Tutorial.CDL; +model System1 "Open loop model" + extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y1(k=mRad_flow_nominal) + "Control signal of 1" + annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y2(k=1) + "Control signal of 1" + annotation (Placement(transformation(extent={{100,-210},{120,-190}}))); + + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y3(k=1) + "Constant control signal of 1" + annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y4(k=1) + "Control signal of 1" + annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); + IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y5(k=mBoi_flow_nominal) + "Control signal of 1" + annotation (Placement(transformation(extent={{-120,-290},{-100,-270}}))); +equation + connect(y1.y, pumRad.m_flow_in) + annotation (Line(points={{-98,-70},{-62,-70}}, color={0,0,127})); + connect(y3.y, boi.y) annotation (Line(points={{-98,-250},{32,-250},{32,-302},{ + 22,-302}}, color={0,0,127})); + connect(y2.y, valBoi.y) annotation (Line(points={{122,-200},{130,-200},{130,-230}, + {72,-230}}, color={0,0,127})); + connect(y4.y, valRad.y) + annotation (Line(points={{-98,-150},{-62,-150}}, color={0,0,127})); + connect(y5.y, pumBoi.m_flow_in) annotation (Line(points={{-98,-280},{-80,-280}, + {-80,-280},{-62,-280}}, color={0,0,127})); + annotation (Documentation(info=" +

+This model extends from the open loop partial model + +IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop, +which implements the HVAC system model and a simple room. +In this partial model, the room is modeled +as a first order response. +

+

Implementation

+

+To set control inputs, we instantiated + +IBPSA.Controls.OBC.CDL.Reals.Sources.Constant +and connected them to the pumps, the boiler and the valves. +

+

Exercise

+

+Create a model, such as this model, that extends from + +IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop +and adds constant input signals for the valves, pumps and the boiler. +Valves should be fully open (y=1), the boiler should be operating (y=1) +and the mass flow rates of the pumps should be set to the parameter value of +mRad_flow_nominal and mBoi_flow_nominal. +

+

+Simulate the model for January 15 to 16 and plot the open loop temperatures +as shown below, which corresponds to a start time of 15*24*3600=1296000 seconds and a +stop time of 1382400 seconds. +

+

+\"Open +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System1; diff --git a/IBPSA/Examples/Tutorial/CDL/System2.mo b/IBPSA/Examples/Tutorial/CDL/System2.mo new file mode 100644 index 0000000000..02bf449ef4 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System2.mo @@ -0,0 +1,224 @@ +within IBPSA.Examples.Tutorial.CDL; +model System2 "Open loop model with control architecture implemented" + extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + Controls.OpenLoopBoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); + Controls.OpenLoopSystemOnOff conSysSta + "Controller that switches the system on and off" + annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); + Controls.OpenLoopRadiatorSupply conRadSup + "Controller for the mixing valve for the radiator supply water" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + Controls.OpenLoopEquipmentOnOff conEquSta + "Controller that switches the equipment on and off" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( + realTrue=mRad_flow_nominal) + "Type conversion for radiator pump signal" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( + realTrue=mBoi_flow_nominal) + "Type conversion for boiler pump signal" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( + realTrue=1) + "Type conversion for boiler signal" + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); +equation + connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, + {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); + connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, + -216},{-120,-280},{-102,-280}}, color={255,0,255})); + connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, + -70},{-120,-216},{-178,-216}}, color={255,0,255})); + connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, + -250},{-108,-204},{-178,-204}}, color={255,0,255})); + connect(radPumCon.y, pumRad.m_flow_in) + annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); + connect(boiPumCon.y, pumBoi.m_flow_in) + annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); + connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, + -302},{22,-302}}, color={0,0,127})); + connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, + -150}}, color={0,0,127})); + connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240, + -204},{-240,-302},{-1,-302}}, color={0,0,127})); + connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280, + -44},{-280,30},{-298,30}}, color={0,0,127})); + connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, + -144},{-268,30},{-50,30}}, color={0,0,127})); + connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268, + -56},{-268,30},{-50,30}}, color={0,0,127})); + connect(temRet.T, conBoiRet.TRet) + annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); + connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140, + -280},{140,-230},{72,-230}}, color={0,0,127})); + connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, + -40},{-210,-156},{-202,-156}}, color={0,0,127})); + annotation (Documentation(info=" +

+In this step, we added the control architecture. +How the control is partitioned into various subcontrollers depends usually on +the need to avoid communication over the network and on how control is distributed to +different field controllers. Here, we +used the four controllers indicated by the shaded background in the figure of + +IBPSA.Examples.Tutorial.CDL. +One controller switches the overall system on and off, +one switches the boiler on and off, +one tracks the supply water temperature to the room and +one tracks the return water temperature that is fed to the boiler. +

+

Implementation

+

+This model was built as follows: +

+
    +
  1. +

    +First, we determined what functionality should be implemented in which controller, and what the inputs and outputs of the controllers are. +In this example, we used these controllers: +

    +
      +
    • +

      +Boiler return water controller, with input being the return water temperature TRet and output being the valve control signal yVal. +

      +
    • +
    • +

      +Radiator loop temperature controller, with input being the measured supply water temperature TSup, +the measured room air temperature TRoo and output being the valve control signal yVal. +

      +
    • +
    • +

      +System on/off controller, with inputs being the outdoor temperature TOut and the +room air temperature TRoo, and output being the system on/off signal onSys. +Note that how inputs and outputs are named can simplify usability. For example, we called the output onSys +so that a value of true is clearly understood as the system being on. If we had called it +y, then it would not have been clear what a value of true means. +

      +
    • +
    • +

      +Equipment controller, with inputs being the system on/off command and the boiler temperature, +and outputs being +the pump on/off signal onPum and the boiler on/off signal onBoi. +

      +
    • +
    +
  2. +
  3. +

    +To organize our code, we created package that we called Controls. +

    +
  4. +
  5. +

    +Next, we added the open loop controller for the boiler return water temperature. +This controller is implemented in + +IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopBoilerReturn. +To implement it, we created a Modelica block, and added an input, using a + +IBPSA.Controls.OBC.CDL.Interfaces.RealInput, called it TRet +for the measured return water temperature, and a + +IBPSA.Controls.OBC.CDL.Interfaces.RealOutput +for the valve control signal, which we called yVal. +

    +

    +To output the valve control signal, which we set for now to a constant value of 1, +we used an instance of + +IBPSA.Controls.OBC.CDL.Reals.Sources.Constant, +set its parameter to 1, and connected it to the output. +

    +

    +At this stage, because the control is open loop, we leave the input of the controller unconnected. +

    +

    +Looking at the Modelica file shows that we also added documentation in an info section, +a defaultComponentName, as well as graphical elements so that it is easily distinguishable +in a schematic diagram. +We also added the unit and displayUnit attributes. +

    +

    +In the next step of this tutorial, we will provide an actual implementation of the controller. +To better distinguish the open loop controller from the closed loop controller, we +color the icon of open loop controllers grey, and will change this color to white when we implement the actual control logic. +

    +
  6. +
  7. +

    +We did a similar process to add the other three open loop controllers. As before, we added all +inputs and outputs, and set the outputs to a constant. +

    +
  8. +
  9. +

    +Lastly, we instantiated these four controllers in the system model. +Because the pumps and the boiler take as a control input a real-valued signal, we used + +IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal to convert between the boolean-valued signal +and the real-valued inputs of these components. Whether this conversion is part of the +controller or done outside the controller is an individual design decision. +

    +
  10. +
+

Exercise

+

+Create a model, such as this model. +To do so, +

+
    +
  1. +

    +Copy + +IBPSA.Examples.Tutorial.CDL.System1. +

    +
  2. +
  3. +

    +Implement all four open loop controllers. +

    +
  4. +
  5. +

    +Delete the constant control inputs, instantiate the open loop controllers, +convert the signal as needed from Boolean to Real, +and connect the control inputs and outputs. +

    +
  6. +
+

+Simulate the system to verify that you get the response shown below. +As we have not changed any of the control logic, simulating the system should give the same +response as for + +IBPSA.Examples.Tutorial.CDL.System1. +

+

+\"Open +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System2; diff --git a/IBPSA/Examples/Tutorial/CDL/System3.mo b/IBPSA/Examples/Tutorial/CDL/System3.mo new file mode 100644 index 0000000000..099ba9315e --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System3.mo @@ -0,0 +1,189 @@ +within IBPSA.Examples.Tutorial.CDL; +model System3 "Open loop model with boiler return temperature control" + extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + Controls.BoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); + Controls.OpenLoopSystemOnOff conSysSta + "Controller that switches the system on and off" + annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); + Controls.OpenLoopRadiatorSupply conRadSup + "Controller for the mixing valve for the radiator supply water" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + Controls.OpenLoopEquipmentOnOff conEquSta + "Controller that switches the equipment on and off" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( + realTrue=mRad_flow_nominal) + "Type conversion for radiator pump signal" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( + realTrue=mBoi_flow_nominal) + "Type conversion for boiler pump signal" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( + realTrue=1) + "Type conversion for boiler signal" + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); +equation + connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, + {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); + connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, + -216},{-120,-280},{-102,-280}}, color={255,0,255})); + connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, + -70},{-120,-216},{-178,-216}}, color={255,0,255})); + connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, + -250},{-108,-204},{-178,-204}}, color={255,0,255})); + connect(radPumCon.y, pumRad.m_flow_in) + annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); + connect(boiPumCon.y, pumBoi.m_flow_in) + annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); + connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, + -302},{22,-302}}, color={0,0,127})); + connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, + -150}}, color={0,0,127})); + connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, + {-240,-302},{-1,-302}}, color={0,0,127})); + connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, + {-280,30},{-298,30}}, color={0,0,127})); + connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, + -144},{-268,30},{-50,30}}, + color={0,0,127})); + connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, + {-268,30},{-50,30}}, color={0,0,127})); + connect(temRet.T, conBoiRet.TRet) + annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); + connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, + {140,-230},{72,-230}}, color={0,0,127})); + + connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, + -40},{-210,-156},{-202,-156}}, color={0,0,127})); + annotation (Documentation(info=" +

+In this step, we added the controller for the boiler return water temperature. +

+

Implementation

+

+This model was built as follows: +

+
    +
  1. +

    +First, we copied the controller + +IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopBoilerReturn +to create the block + +IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn. +

    +
  2. +
  3. +

    +In this new block, we used a constant output signal + +IBPSA.Controls.OBC.CDL.Reals.Sources.Constant +and a PID controller + +IBPSA.Controls.OBC.CDL.Reals.PID, +which we configured as a PI-controller. +

    +

    +We set the controller logic to reverse action. That is because the tracking +error is conventionally computed as the difference between the set point value +and the sensed value. In our example, if the return temperature is lower than the set point, +i.e., if the tracking error is positive, the valve control signal must tend toward zero, +i.e., the valve bypass port must open. +That means that the unbounded control signal must tend toward negative values so +that the bounded output signal tends toward its minimum value. Binding a positive +tracking error to a negative unbounded control signal or to the minimum value +of the output signal requires a reverse action logic. +

    +

    +Additionally we set the proportional gain to 0.1 as then, in absence of the integral action, +a control error of 10 Kelvin changes the control output by 1. +We set the time constant to 120 seconds, which is about the time it takes to open +and close a valve. +These values give typically good closed loop performance. +

    +

    +As the control error is in Kelvin, which is typically of the order of 1 +to 10, there is no need to normalize the control input. (If pressure were used, it would make sense +to divide the measured signal and the set point so that the control error is usually of the order of one, +which makes tuning easier.) +

    +
  4. +
  5. +

    +To allow this controller to be tuned, we exposed at the top-level the parameters +for the set point temperature and the control gains. +

    +
  6. +
  7. +

    +While the controller + +IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn +is very simple, for demonstration purposes we also implemented a validation model for this controller. +This is done in + +IBPSA.Examples.Tutorial.CDL.Controls.Validation.BoilerReturn. +Such validation models help detect implementation errors which may be difficult to diagnose once the controller +is used as part of a larger system model. In our experience, implementing small scale validation tests leads to better +code and overall faster development as errors are detected early on when they can be corrected quickly. +For more information about how to implement a validation model, see the +Modelica Buildings Library User Guide. +

    +
  8. +
+

Exercise

+

+Create a model, such as this model. +To do so, +

+
    +
  1. +

    +Copy + +IBPSA.Examples.Tutorial.CDL.System2. +

    +
  2. +
  3. +

    +Implement the controller for the boiler return water temperature. +

    +

    +Make a small unit test to verify that the controller is implemented correctly. +

    +
  4. +
  5. +

    +Use this new controller instead of the open loop controller conBoiRet. +

    +
  6. +
+

+Simulate the system to verify that the valve is controlled to maintain a return water temperature +of at least 60°C as shown below. +

+

+\"Open +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System3; diff --git a/IBPSA/Examples/Tutorial/CDL/System4.mo b/IBPSA/Examples/Tutorial/CDL/System4.mo new file mode 100644 index 0000000000..8d09d69375 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System4.mo @@ -0,0 +1,160 @@ +within IBPSA.Examples.Tutorial.CDL; +model System4 "Open loop model with equipment on/off control" + extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + Controls.BoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); + Controls.OpenLoopSystemOnOff conSysSta + "Controller that switches the system on and off" + annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); + Controls.OpenLoopRadiatorSupply conRadSup + "Controller for the mixing valve for the radiator supply water" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + Controls.EquipmentOnOff conEquSta + "Controller that switches the equipment on and off" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( + realTrue=mRad_flow_nominal) + "Type conversion for radiator pump signal" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( + realTrue=mBoi_flow_nominal) + "Type conversion for boiler pump signal" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( + realTrue=1) + "Type conversion for boiler signal" + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); +equation + connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, + {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); + connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, + -216},{-120,-280},{-102,-280}}, color={255,0,255})); + connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, + -70},{-120,-216},{-178,-216}}, color={255,0,255})); + connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, + -250},{-108,-204},{-178,-204}}, color={255,0,255})); + connect(radPumCon.y, pumRad.m_flow_in) + annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); + connect(boiPumCon.y, pumBoi.m_flow_in) + annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); + connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, + -302},{22,-302}}, color={0,0,127})); + connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, + -150}}, color={0,0,127})); + connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, + {-240,-302},{-1,-302}}, color={0,0,127})); + connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, + {-280,30},{-298,30}}, color={0,0,127})); + connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, + -144},{-268,30},{-50,30}}, + color={0,0,127})); + connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, + {-268,30},{-50,30}}, color={0,0,127})); + connect(temRet.T, conBoiRet.TRet) + annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); + connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, + {140,-230},{72,-230}}, color={0,0,127})); + + connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, + -40},{-210,-156},{-202,-156}}, color={0,0,127})); + annotation (Documentation(info=" +

+In this step, we added the controller for the boiler on/off control. +

+

Implementation

+

+This model was built as follows: +

+
    +
  1. +

    +First, we copied the controller + +IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopEquipmentOnOff +to create the block + +IBPSA.Examples.Tutorial.CDL.Controls.EquipmentOnOff. +

    +
  2. +
  3. +

    +In this new block, we used a hysteresis block + +IBPSA.Controls.OBC.CDL.Reals.Hysteresis to switch the boiler, +and negated its output because the boiler needs to be off if the temperature exceeds the +value uHigh of this hysteresis. +We also used an instance of + +IBPSA.Controls.OBC.CDL.Logical.And +to switch the boiler on only if the system control signal is on. +Otherwise, the boiler would be kept warm in summer. +(Note that in the simulations, the boiler has no heat loss to the ambient and, hence, if +the boiler and its circulation pump are switched off, its temperature remains constant. +To model heat losses to the ambient, the heat port boi.heatPort +would need to be connected to a model that simulates heat conduction to ambient conditions.) +

    +
  4. +
  5. +

    +We also implemented the open loop validation + +IBPSA.Examples.Tutorial.CDL.Controls.Validation.EquipmentOnOff +to ensure that the controller is implemented correctly. +

    +
  6. +
+

Exercise

+

+Create a model, such as this model. +To do so, +

+
    +
  1. +

    +Copy + +IBPSA.Examples.Tutorial.CDL.System3. +

    +
  2. +
  3. +

    +Implement the controller for the equipment on/off control. +

    +

    +Make a small unit test to verify that the controller is implemented correctly. +

    +
  4. +
  5. +

    +Use this new controller instead of the open loop controller conEquSta. +

    +
  6. +
+

+Simulate the system to verify that the valve is controlled to maintain a return water temperature +of at least 60°C, and that the boiler is switched off when the temperature exceeds 90°C +and switched on again if it reaches 70°C as shown below. +

+

+\"Temperatures +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System4; diff --git a/IBPSA/Examples/Tutorial/CDL/System5.mo b/IBPSA/Examples/Tutorial/CDL/System5.mo new file mode 100644 index 0000000000..263d55c062 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System5.mo @@ -0,0 +1,154 @@ +within IBPSA.Examples.Tutorial.CDL; +model System5 "Open loop model with system on/off control" + extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + Controls.BoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); + Controls.SystemOnOff conSysSta + "Controller that switches the system on and off" + annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); + Controls.OpenLoopRadiatorSupply conRadSup + "Controller for the mixing valve for the radiator supply water" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + Controls.EquipmentOnOff conEquSta + "Controller that switches the equipment on and off" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( + realTrue=mRad_flow_nominal) + "Type conversion for radiator pump signal" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( + realTrue=mBoi_flow_nominal) + "Type conversion for boiler pump signal" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( + realTrue=1) + "Type conversion for boiler signal" + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); +equation + connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, + {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); + connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, + -216},{-120,-280},{-102,-280}}, color={255,0,255})); + connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, + -70},{-120,-216},{-178,-216}}, color={255,0,255})); + connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, + -250},{-108,-204},{-178,-204}}, color={255,0,255})); + connect(radPumCon.y, pumRad.m_flow_in) + annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); + connect(boiPumCon.y, pumBoi.m_flow_in) + annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); + connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, + -302},{22,-302}}, color={0,0,127})); + connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62,-150}}, + color={0,0,127})); + connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, + {-240,-302},{-1,-302}}, color={0,0,127})); + connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, + {-280,30},{-297,30}}, color={0,0,127})); + connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268,-144}, + {-268,30},{-51,30}}, color={0,0,127})); + connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, + {-268,30},{-51,30}}, color={0,0,127})); + connect(temRet.T, conBoiRet.TRet) + annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); + connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, + {140,-230},{72,-230}}, color={0,0,127})); + + connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210,-40}, + {-210,-156},{-202,-156}}, color={0,0,127})); + annotation (Documentation(info=" +

+In this step, we added the controller for the system on/off control. +

+

Implementation

+

+This model was built as follows: +

+
    +
  1. +

    +First, we copied the controller + +IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopSystemOnOff +to create the block + +IBPSA.Examples.Tutorial.CDL.Controls.SystemOnOff. +

    +
  2. +
  3. +

    +In this new block, we implemented the on/off control by using both + +IBPSA.Controls.OBC.CDL.Reals.Subtract +and + +IBPSA.Controls.OBC.CDL.Reals.Hysteresis to determine +whether the system should be on, which is the case if both, the outside air temperature and +the room air temperature are below a limit. If either is above this limit, plus a deadband, +the system is off. +

    +
  4. +
  5. +

    +We also implemented the open loop validation + +IBPSA.Examples.Tutorial.CDL.Controls.Validation.SystemOnOff +to ensure that the controller is implemented correctly. +

    +
  6. +
+

Exercise

+

+Create a model, such as this model. +To do so, +

+
    +
  1. +

    +Copy + +IBPSA.Examples.Tutorial.CDL.System4. +

    +
  2. +
  3. +

    +Implement the controller for the system on/off control. +

    +

    +Make a small unit test to verify that the controller is implemented correctly. +

    +
  4. +
  5. +

    +Use this new controller instead of the open loop controller conSysSta. +

    +
  6. +
+

+Simulate the system to verify that the system is switched off if the room +temperature exceeeds its set point plus half the dead band. +This should yield a plot similar to the one below. +

+

+\"Temperatures +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System5; diff --git a/IBPSA/Examples/Tutorial/CDL/System6.mo b/IBPSA/Examples/Tutorial/CDL/System6.mo new file mode 100644 index 0000000000..4a03f9aeb3 --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/System6.mo @@ -0,0 +1,160 @@ +within IBPSA.Examples.Tutorial.CDL; +model System6 "Closed loop model with all controls implemented" + extends + IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; + + Controls.BoilerReturn conBoiRet + "Controller for boiler return water temperature" + annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); + Controls.SystemOnOff conSysSta + "Controller that switches the system on and off" + annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); + Controls.RadiatorSupply conRadSup + "Controller for the mixing valve for the radiator supply water" + annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); + Controls.EquipmentOnOff conEquSta + "Controller that switches the equipment on and off" + annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( + realTrue=mRad_flow_nominal) + "Type conversion for radiator pump signal" + annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( + realTrue=mBoi_flow_nominal) + "Type conversion for boiler pump signal" + annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); + IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( + realTrue=1) + "Type conversion for boiler signal" + annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); +equation + connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, + {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); + connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, + -216},{-120,-280},{-102,-280}}, color={255,0,255})); + connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, + -70},{-120,-216},{-178,-216}}, color={255,0,255})); + connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, + -250},{-108,-204},{-178,-204}}, color={255,0,255})); + connect(radPumCon.y, pumRad.m_flow_in) + annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); + connect(boiPumCon.y, pumBoi.m_flow_in) + annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); + connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, + -302},{22,-302}}, color={0,0,127})); + connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62,-150}}, + color={0,0,127})); + connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, + {-240,-302},{-1,-302}}, color={0,0,127})); + connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, + {-280,30},{-298,30}}, color={0,0,127})); + connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268,-144}, + {-268,30},{-50,30}}, color={0,0,127})); + connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, + {-268,30},{-50,30}}, color={0,0,127})); + connect(temRet.T, conBoiRet.TRet) + annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); + connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, + {140,-230},{72,-230}}, color={0,0,127})); + + connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210,-40}, + {-210,-156},{-202,-156}}, color={0,0,127})); + annotation (Documentation(info=" +

+In this step, we added the last controller, which is controlling the mixing valve for the +radiator supply water temperature. +

+

Implementation

+

+This model was built as follows: +

+
    +
  1. +

    +First, we copied the controller + +IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopRadiatorSupply +to create the block + +IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply. +

    +
  2. +
  3. +

    +In this new block, we used + +IBPSA.Controls.OBC.CDL.Reals.Line to compute the set point for the supply water temperature +based on the room air temperature. This set point is then used in a PI controller + +IBPSA.Controls.OBC.CDL.Reals.PID to modulate the mixing valve position +in order to track the supply water temperature set point. +

    +
  4. +
  5. +

    +To allow configuring the temperatures and the control gains, we exposed the main parameters of the controller, +see +IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply. +

    +
  6. +
  7. +

    +We also implemented the open loop validation + +IBPSA.Examples.Tutorial.CDL.Controls.Validation.RadiatorSupply +to ensure that the controller is implemented correctly. +

    +
  8. +
+

Exercise

+

+Create a model, such as this model. +To do so, +

+
    +
  1. +

    +Copy + +IBPSA.Examples.Tutorial.CDL.System5. +

    +
  2. +
  3. +

    +Implement the controller for the radiator supply water temperature control. +

    +

    +Make a small unit test to verify that the controller is implemented correctly. +

    +
  4. +
  5. +

    +Use this new controller instead of the open loop controller conRadSup. +

    +
  6. +
+

+Simulate the system to verify that the mixing valve conRadSup is modulated and +the room air temperature temRoo.T is well tracked. +

+

+\"Temperatures +

+", +revisions=" +
    +
  • +February 18, 2020, by Michael Wetter:
    +First implementation. +
  • +
+"), + Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos" + "Simulate and plot"), + experiment( + StartTime=1296000, + StopTime=1382400, + Tolerance=1e-06)); +end System6; diff --git a/IBPSA/Examples/Tutorial/CDL/package.mo b/IBPSA/Examples/Tutorial/CDL/package.mo new file mode 100644 index 0000000000..833f66b57e --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/package.mo @@ -0,0 +1,106 @@ +within IBPSA.Examples.Tutorial; +package CDL "Package with examples for how to implement a control sequence using CDL" + extends Modelica.Icons.ExamplesPackage; + +annotation (preferredView="info", Documentation(info=" +

+This package contains examples with step-by-step instructions for how to +implement control sequences using the Control Description Language (CDL). +The CDL is described at +obc.lbl.gov and elementary building blocks are +available at + +IBPSA.Controls.OBC.CDL. +

+

+The example starts with an open-loop model of a boiler, a simple room and a radiator. +In subsequent steps, controllers are added, starting with open loop control and then closed loop control. +The tutorial also demonstrates how to add open loop validation tests for the controllers. +At the end, you should be able to implement, document and test your own controllers. +

+

+The figure below shows the system architecture and the control charts. +

+

+\"image\" +

+

+The controls intent is as follows: +

+
    +
  1. +

    +The overall system shall be switched on if the outdoor temperature is below +16°C and, in addition, the room temperature is below +20°C. +It shall be switched off if either the outdoor temperature is above +17°C or the room temperature is above +21°C. +

    +
  2. +
  3. +

    +The boiler shall have on/off control that regulates its temperature +between 70°C and 90°C. +

    +
  4. +
  5. +

    +The three-way valve at the boiler return shall be modulated with a PI controller +to track a return water temperature of 60°C. +

    +
  6. +
  7. +

    +The heating water supply temperature to the room shall be regulated with a PI controller +to be 50°C if the room temperature is 19°C, +and 21°C if the room temperature is 21°C. +

    +
  8. +
+

+To explain the implementation of the controllers for this model, the model has been created in +the stages described below. +

+
    +
  1. +In + +IBPSA.Examples.Tutorial.CDL.System1 +we connected constant control signals to the open loop model that is the starting point for this tutorial. +
  2. +
  3. +In + +IBPSA.Examples.Tutorial.CDL.System2 +we implemented four distinct controllers, which are all open loop but have the correct control input and output connectors. +These controllers will be refined in the next steps. +This determines the control architecture. +
  4. +
  5. +In + +IBPSA.Examples.Tutorial.CDL.System3 +we implemented the controller that regulates the return water temperature to its setpoint. +
  6. +
  7. +In + +IBPSA.Examples.Tutorial.CDL.System4 +we implemented the controller that switches the boiler on and off. +
  8. +
  9. +In + +IBPSA.Examples.Tutorial.CDL.System5 +we implemented the controller that switches the whole system on and off. +
  10. +
  11. +In + +IBPSA.Examples.Tutorial.CDL.System6 +we implemented the controller that tracks the room temperature set point. +
  12. +
+")); +end CDL; diff --git a/IBPSA/Examples/Tutorial/CDL/package.order b/IBPSA/Examples/Tutorial/CDL/package.order new file mode 100644 index 0000000000..b0e50dfcff --- /dev/null +++ b/IBPSA/Examples/Tutorial/CDL/package.order @@ -0,0 +1,8 @@ +System1 +System2 +System3 +System4 +System5 +System6 +Controls +BaseClasses diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png new file mode 100644 index 0000000000000000000000000000000000000000..77f0bb5a067a3c4f9231722a5bd8b561439cb4fc GIT binary patch literal 24721 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 literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png new file mode 100644 index 0000000000000000000000000000000000000000..a68058ca4d34cd1e6624401d5133c202e78208c3 GIT binary patch literal 35011 zcmdqJ2{e}PyEgnZD3MYTp-h=cB9bXWMIrMLN*OYi44M6k1{#zhAyejgmbpa8Q05^+ z2_;j8$ow96zyE)Kdw=iV`~AMP_FC_LUu%W%+|PYq*Et;LaUSP&Urpr{6$JwYiA170 zb6Q@VMA}?LB5m>~--w?GpM95uFWau2*1JI>?WiLDZ3yPu!AK&pkj}`R`gQcBmR#BGpB zd0l$Nf4=c#=EkwU%y^dRHS%FN?O{erbTAyJNwH{)qVHx-{%ds9P3C|I{M0U z)pb8##^+mU9jnU=IvE!hn6gx{(I9q&^jcm?znIi@Fjy)7O5N_px81qs&v-P<2CMG3ynV`{ zOu?$IuAXrA`OMp$G7eMyQrz6%-`w81JU_8K5^g7V^5nOs7Y60-F1Mep&D0B8g+xAi zB4pDeA|oTi%*=dMY1c8nKn=3Mg+w0zo|w{B(ZU@_1Ny_otw>&XTZXUvudBcr3;$r@Y}Jl);ho}QjZ ztvY)1t)7_;;uYn~lM<{|ULcpMrE00yy65ajtpF9ZfWWMTf=%qP7^&G zoSb*=-Zdzu9<%@X`OOw8hCIu5CE<9JYQIfecSw4!{7yG0E)WaxVaTxZ8gK% zh}rfABn-T|ellKtVxYnc4wNP4Y`)I)lSQLunU^X3`7$e|(I2J2%>DH&CAL!pq8fX=bR- z=2O8$^UE4KWB2O|lZID|^BVE)7BNpB1}~J=+f6B{sAwl^mN-ut6+2vgd_c_Js?Zt9*!*`jmHd_RC#nJWJidv7Mw72QIw5=#u}A zN%(xdSozhLtA`~d+^X*Fnx39!SA1~o+O>Orem{Eh$EGUQjWUhO!o}>I#yT3`yt#zk zx6F5isXck}Bs)8sia{j6NW!Wk&9<-D_wHSDGqXqgggLRv$B*mBtCw9XQjL@pzxMg{ z$C#7K&kns<=sxcFwZ8i9 zA>+b$_bj$0JV~;>^Z=)&o)nMva?E%c-?b@<9Xle0&6_%ny;f&G$ZXxZRnV|_?uB#z zbGXrSVe^d}H}dLa@Ef+$?%th)r%5;${^)>I@u|lL@BwdzYs9T}n*18;wEO+@3k-94 zd8$HY<>y;OIj>*sIuy2dmHQ=VtR&8Z=|M~T?jO$JA#a;DN>kp>eEc542 zQrfoTjkj*uvW1N7A+yZdkM`8Jcc>&BzJEmQniwC4b-^M60|RRw?9<4&P=siL_)t?_ z&Exp+5Q$W*>#&)>L5X3$$bML9^b51siV$83H%e;%aeoh20p6UQ{iN%UrWX?D!bDsa z`kdR>FHqCd(}#wK^GTIhcOPMux3o-2FzwD4YDwoI!sH4sOy%mw=)d&SA3b(w!8Lqm&NA4c>Dy7}h%gaku^+Q@3|0qv#<_T9N z{bXc|?-spxGIZLqo%>2%G{}jV-l!o*jz7I>?lwQJ_fqj8g8$LRwYBA`OP4N%WrTJb zx!F|v(T3R^bDgu8SUoH(tU;cQjPgq++-juZd6>ELRKI}Fu^S@~9_43^_?Mr}_KoKo zn+bzgwkE2!TmE``cc($VN&daR{LDV3I8XK_>*bETy8czf z;3zMz5_vYFX}*5h&1ngY@pf7iw!ykBTUeH^(c}H5M+n(0w`n zZt9HG<;8~@TB+^G2M-y=w9V4f`r$T5#XM}fb4;iD%izq6OiXb8k<5xU{hm;{dv~Z9 zcN~!X{VmEXQsnB>VLz=%X}4!)=GPn?Xyk6Xx++N+)IH@eyl^2>(k0gAQYyk%z9mf6 zxVolh9jiIknaM0}e??QX4Hv@A>s%BvEOuyK>4VR)Rw2jq_Vv-~s@9)(qV)F~$ex}4 zS|cPR1V5hW%#3>WOh-9=a!?xX@PLPv> zJbE>Xv>$7&?10CXTpA`=8h<`fn(A9t`geYzG=A>zf0bA@Ci67>UF z0qqpc0GVX4ll&b?40_pgOu<$bh15QVJ%hrfV3$};S@1F?{;HD8U z0eCE%JVk5=$~}hP2LnV@{LHt^?{PTU#2;%v{Jv)=*2HsVx+X7AgjGJ6S1T_n1zG6I zmADBb`2{%`0ME54-t)0O^A6o7&*HsRGyOIj>(U!0krpFeZvjIR*~-^;eW9p48kDv$|BzTDfz9wu@X4`VARC^)Lf z|F!1vv$BIyQhlG7(gPO@Q)rHH;6_t*GW*+8b$qES*4Nx{@A=_R*W%;iNJ-HYRnye1Vs2_O37cS=Ze6gkS@*`P>7J5yau#&B3ykuPGPVeosd7^G`Oa^N5;`ZeixkQm%6g174jeTFT_jIi||pVhrj>obBz8ly4`I9N78xvf~DI zk~Qz{WX@2Fxs{msEmY`ovBT(04YOAej|S(lW5?iq#ZfWTYytx5NY*f$qc`^7>%aj{V2)d3mzx7fY&=Uq@KQYxb4j(H>o2n_5SZ zjH^(MIF^m5JK0wvas2qw;-Z40qO|*OHCJ9(HXB70uI}HzU%-cZqZqkR^*5aahtU>1 z*+T!{VVZf^J#uY-f4>9oMp8rc>0cL56e75n6c?+69%f}>dEMMRJyaJ6 zk5a#T;^xhpi7GEvR#t!la&vPFZ9auWMjqI`+vH~sY*!~;|LCPkp8}gtJ7Bg7{(B!Y z%Sa;=V86IjB7WC#MV-z)YS({(e7gA*GZ`6Ka{CWoN;=W2E%L3k%7SGFeY##_H zatQzQ&!6<-_HpCG$;ruZZL_cM9*WuYT)96(6}Q^YlkeOZB{T5pQ_1<4iU1#;x3^H) z+uM7tuP#J+E?s>e#A8=FeTO<0Tj;-6fI-am0?Rd;)9oo*g?0n|2wzBu4KE}XuZej6Ojx&HMX&_QR?`OAPMryenlB5ho_&ZsaHqx_4hL~XO8w}(e_NePf|+}s?8a!A#?cgR7%UjMZT&@ZGZe06nIC)3CSca6N-U*c>BThK^2o2-%eD8U!o znUC$OeCeW)Ptj~i2yGjqGWVZwhL#qY3~=Y__(&Zti_Ae=;4T{ zfgmiXmm}Ykx}S;3b8Ye46ZTW@s;b;^MfhsXqy2%!Ouja@S4iGe=V>2K%Nc`8MFMD`+0Bp8pT{@{i!FMF6r}E=FZ88!K)dN|Dm|y@) z&()=njE&U*h_p0C!Q?Y<_llAg@RFh}E^g=jn_v)1BEFKumyinZVShz|_~Ol^w~P47 za!PwM@wJx76!`d$e?8pqI+hMJTgz!wWN-STE!oJ(2;S`f=uwB~57d~ucI`qzXFX89 zni%EjI@Tc|y!Q_Y!YQl0@(k6#U0<=5=rlklg8MO-nW3ypZvh-SVI_bMmXR-{J(gg6 z1hAl{&bnOl2x$oU;nPSu194w8+AS?)y8Z|}FlIZrlS`C-wn;TYOCC4|E-tQoeZyq+ zc$A*C0|OQ6@k-AGjU(Z+Ii~e;a&kV@a8b*T(QiTo41fq5%eN5MjHX|rT~CCC^p!ZT zPkF8Lg%iYpc~ive*C%jARv)GKAD;@R@P=NizjRou5G;JCarXgcPS>yRlf3zJu-d=f zGG8xsD{(c2=FHzRh&j9EE|k0L?WK#~5TB8e5yq2m)wx&hAP2`b*4=ydOiWBzwI#*4 z6d*YuG%rjIWa?(eiYUaZKQDFtbCoA#ZZWlfWT#bC>Etw%)MSOL`}>W^pFDla=JU#F zLLW#XuQeJK9yJ?qcOWgLyE97I_W6^XTwHL7z80-g`uu%&dbVH8_uXbGO!MdalQws< zdwS9e4$Ioy$rk$8`x0T2U56)aG_nE$0+N!F5Iib=br{eI8byfO^uTd}uo_*@8b@7OZ+5KWhu~)+@EzfeO7&^ipX=#_r-u~3K zYESk_Cu>*rzFF3zN3Al>RlUSc(Z+ngS07x7bKj z#6_+ZXKovM@NtPYevfmil8M!U>;e7Po$%vlO^g_{Y)S_RW zE~t2zrJAfANom-vzpW}uWTrA-*wgSzBSY)Ozi9V5RnLlA3@wFOFz(Hw;pq1u?UmQw z?9DdjE0bvZL`jWhB5+)J(BYEtWO1Q+%wE<964yTnhK&fE{6L-Rwu?+O{LAF@F;T^Z z&~K%|7GhSf-|=YrE`4l{zBKh>kaq8H`#w{?d>X5ZukW^5TPKNntX+STg9WByHH#qrLCTdE>JLJu87Uw>E(x`8K+b`2ThQUG7P4Si6y1%ia4TUBeWavQVOhfby$ zQX~nkD4tCARVrGTmhn*Y%k;lQHPX4q!rdh&!p?6&B{|6Ajx)3OnJ2V=#VR^i<(wXG z4onjr+on83q0!2<)n5PVakFDqUYEoYc=o28&h2UEHAoB|(iJYeT7Z`g*7|wtJ&(ye zi&u_xU2e>ObJ*2s3(Qj1Ou|Y`ffTr<)$#yCcUl6MTJjcC8Xnb>$4$Ry@^tiEozLdU zgdXzTbeJcH&076V$z7^nkFVxNmLEB>tGJcL+^0h^M2z3QBcn~u^w}pV^5Zry44sx% zB2UHW3mYa0zg;__wwW;FkSo`?!VzvddbgT3=5O#-zgQCuqYgf__5I=5>euQg(w~Z+ zqsdKDv(}N6vEKZ8B!D(OXyk-#NuSzMgn!p$&jy7DYclDN*xo9t_G-<#p7u)OsR%%85PN za-hSm+d!5805kn$JzUngWa)7u#PxADAA0F0wl57$jC(cI~=)VJJ0Q`g{J)GAYLgE=__>qqZMw zDUQzRO>bmuJER)*G2Yx44`90`gT^(@-t*y@kq^w%)1Ne#sQFBKGopfZALV7%=N}~> zNWS#=vhCq$d0gudl}6mHjeCp5w4Ez?G?!ZDE54`Z>iLT#l?@6qFRTFe$=v{NFaABP&qYpc*Ik|#aZ)q z?!ys|unbX!utq^;Mm_U>Y1K`;(>}g8bcs5WCVT!PC_J(7XMu+dTSG-i^}_9pAhYOTGHB z$0SkS%_F$yf!HRUFpJ<>Hja&=chksej*`6-xbZHsGN&n2KI1Ui>K+#JkoPT*PMUox zNH9p^96G&VaXv-Xv^6cOyeqk}P2#r8EpCzq3!gq+_c^umL80k2XPtZDDQ~a6kBxiH zU90z!?7291*rk{sXR;~QHl3Gj)VHxou znjWXm`)|`7>g`j!v4ccoa7DrDAX!Z8et`$$R|0MM%<~gtIxa9qa~!*Ec zmQlVSoc>qcUj?s>PCU`!`zhS-X1nmD?lLZr#e1dt7MPEdeHh_D{r zO~9m=0ayXlVs38BAOR=4bHO_tM-z!r)LIwhtS>b>h+xBxTDE;`=mlw6TU)!lFr_R^ zv&YxZ%i$FP3OiKewNnKQZ)?@p)g^;WFf%i=u&}5P5y&(wDY*FN7SJIokuv;dZEX#> zSPGn%*%}_l_s$)n0fRSeq479QZ`WVS<8zbRq1auXa!>j_Hp?_h&o6V~fAKY5*oL=J z8){EF|Mr&4L(l4sk{(MAsP%DIAjrdmmX145f)^|G>k0P4*l%YO4e-A zeXl&2mrs>)Rz;8^G=hsE$^wd6*Uwn2FNUe2UOwKg+)OX2PL``%ev<@Qu=&foVw z%qo{Z$7BOAt(Zv_`2-KDV~1ifII;x^n))AeQ)vpsn5;HwgXsZ!DyA0JnGc1U2=QxR1VxK9lYjiVLG zH~&WH2Bo^wzKa2FdBlsW_W;?W3kf>a2#hnT|2Q6y+-Np9l{iiKP@_BZrw_4Z^Ja3Q zgsnHqMD4B)#mqxF@RabtD_<^?$AMXU0NMuz2E57QwVn?b7bdn0*9*O(!R5TAQ4oboy4a)m>Bul- z1cQpQj=0$7%|ZN&73ajj6``?MRaJ#L%WW(;>g<>R|M}P|0?bn}n)Sz00C5rzkX7rau#X48uxe-_wYo)+maiqK%9~k4 z*x>fcF;UVi3*X*zaq=W@@zF4TQ2 zSq+Ek$b#JY7f74G8=3k zFn*1Aq_6=u&EHfT%5^@q-DTP3Y)aO*$%NF+H)A$RoZqlIt#I-ZPY5ka+~?upsp~6P zH*jidmZJrSP%I#qzNS2LpA=0qyD+-puy?hLmD!qHqFT~9vGC>CH-l~^CVJE1cI8DL z%LQw*ZZ0lQXdlLfb>7B9x$JWiy*Pamjrur;0q^$>)m@t<$UgbqzkhzL=D1gS|E-pk z2K&BGxoU!}+#9($HGOqHU;2&?oC}w}tHK6S)*-)Nd}vTQ)CEN=^NKtn~MQ0|x$lk?iF zKvJs9bPI?>GPy!Crh^#13gQQha^A%^8z*E>fr4KBe0%33Ch@0FpYGnZE2eGGZzsx< zO*92=A6tGw8It-^SG%{u%L}~>=n&>B&EdjK3=FQne_o2;t8KE9&hf2h54X!2e~&^N6h>BUcp*j^u$&;P4#<#V*$l4=sph;M#5?Q zdw*Gpy8kBcSl%fXb!8pggdcl#&LDbrkuqMOiD%Fqt&3bjXS3!Zqcb`U-rgkKd0ule zxo*)$uS=EmLnm={DjLSy`UpcP=CQhBS6i-pe*G7^^jayJbqx)rpuUN=_I_Ye^s$algTa6c^3R z$nDMQuT~vE4ETQXOBy%N`B-_ZT#8nzncurh25B)R4L5zM?1zN#2VKXjCvDh$YTv(K zg608&5eQK1AwD59I3#UtLQ2`-JbKu7#Z$Y9hQF+iNLn{Ea*VH|ArHp&vA@5>&7Ysa zv%(jXFMd@BHMk%s^ntC8`ugm_4IhDtK zm%tePbTfVq;_oDR#JA*w7z4Ygk=l-2YT5fL`P5sSe(M&~U@ zKmO(ZcX-4u{+OEbLdz6XTYH+GhO=5*Lt0y`KM6T%+)jB&?3L!5KSU#UWf0SChW-0J zMq4;MM%;gX{_9q~uPD!r-ITQ^>IJLHE^Zt*R&ejj_kDTZt^6{}$7ARgxM zeiR~4?ODE1lSuJx3^y8L>nkpek5ycKd3rx7S|%s<7aP+?lHb9=YEeU%hFf}k;^IY6 zCn$=VbSbi5+IV;iL8{O4oW*TG!zV}^F)v1 z-1lafWv;_{!mfVyM^?#@ypOW*F<61l5;kif-?`Hc!Vh`*D!54O%a<=+ybv&?BSl}- zrvLdgFp%~tLKQpWw>_xseZpq^1_k^F56Y7_qmhVA3K+;CBGT3pzv09#bBBf!*6(jN zkyyO0D7^d!+B>y#H0J+}_WVP(khB|r?~uA|a-gtu6Dj%xZ@#|GD1&tu+W1hQEPZ~n z>D-YBcrJQQ!otFQ+G*V9nz=*{9J}_~L1Cl!==OficUg3b^KP-$Fl-tr^Z;@$8oe}b z=EjqNHhtp607yhFcjd|ziyV``rZSY`UB5mQJF62Xl(v}a{0C6IMy;jPX?DUm>fzd6 z=6{#{^iQ)0TCu;VqVniD-v&}2GRlQgtcFOfpJK8>;bghTGK3QeRzm1#kbeQW*<4Jb zVMitZbkhdXiI@P|hw4Db4Gj%#ZJLdCyue9s+S|2+NwlQxFW0ZB$+5un$Z}%OqtoC+ zy>;gSH1DYijYArUR5S>joSZ@qQE@BMtlTeM={vm2wpJ#&x|^k<8nyj3_6Y`uUAg!xcTbfUT~@tBuO6Q4YVqk5U9?>%5<^br7_j=-zMMxiqlhA5A80%Uy&|~UQy8XW|O-5Cj!29 zct!Sy4%P@Rbg1Mo^7 zIWmLn-?CkfJXlHVGuzyAST9PKJ1AYy4`V;|=!%&cN;n4yFJZ!zJ9j>Q^r*kw!wn)N zG+{cD&a+R%aT&ITK6w&T=SMa#gjzFo;%=PiTea{@X$7LG0%z62W0D#V|0%N`w0D^O zX@&#^cbdJ452RfmhODMyWyXKx5|9uyP$M6rj8R*l?{LOW3tCZV=)~Xy(1fncr$j_B z32OmBkVu>-(8&VOaC39BI>34GU|XiK7ldy;v$)UZH*dalWnYFoDDz)p2Vvn<7~QCaJ2Z*tW!- zQCDxdMMin+)-9ww4xej|jxR)Q^mTQ+&G-DnDtj$d)DQ;RE+3bT^k#1gV1QvljjY}l?!_&)ZKMw`?rPei6T4kQH$QsKv zz5T@U{ZCPbp8QYWD&VCt0R#Sj^fHNO`gdBLnq2^~`*-h-l_Hd9DUyeb%U3F&VH1h& zH;fy;wmAREE=t-XWpx~?4#kHI?Xe2}+xBoqNPG17q;8=926YJJI1+C2Y4cUAC-2ls zlS9ep`K2CRw%FKM^!a;HR1-oO&!tgVVT;C2X6c6Izx@3Cjx6$S*djC%t@gRUNp?d) zW$5in=K+sr3%8@6Kfk@vTDkxBE$Tsd4a5sGv$Iy{vjROLjn29iEe6V+QPBTuXzAD3 zfX9O2-5vY$xDw*x$XPj6Bga2~j()BiBj;Nx2#v)W_!&W?(qkxT(9J&^E;@l49r{NP zM1CJ?0_MX2)YQ~ahTut1STHa$jtvi+4mxh6m_U=4P%VO*y3&e%`Q*ezAMk4g>ftOS_NpCZ)}jNEwCqT>qUO{ofO3jPCF>F zXcZ68^!D~b>liP^!NFlVJy?yTw};H*EGc!S^0pkvoom;AR{PW4zIE%!kt49<8)!eH z6&=K@r8I9}e~|2G5H%yCg!}Jna81@KC?4{omatLr&V{cPMeX|eeU5pqyqdd)h$nXs zt!0Q)@bnP8K#eVfE@-;8%*~(C;NswpB5zVick1824};tkl^Ex$n>f^fBgv5WY-0^M zWT=0U{cj2OOdVGk53bniF0zAJI&D>GLs}r)Rdc>rF+)y1Xpg@jJewmc}O zU0q#61dYpIE27&AS`UgSzR{S%!ou6P-@^BOsqq++H%88`udPBJ!{fuPlhKQ1#|?V@ z`l039x%sdP;=@)dh9GBm1;{WzPL=fIoyl2?ou@LMxBL<7#VbGap+==AcMo+AkIs>3 zN!QowZ<2P|_> ztF!R&0+sdCqf`F9`Q_|^HOM9G?CfNqvBDN(XUCwkX?p+u{U>R8ZpVT{Q$zxbEE z>VdV3;RcaPEu1`IliL>e)2M4`sJ=K(csSl`3aSj`B2qdvYJH!OJ447_snt;zu7>SYFL_V;N(#yvXot2fA63TY1RPE*j{{1ND`G~zLv{q5(KtXYp&?>^Y_wCyk#)B#Xe%n#5Rcz);gnKW_ zVOSqFE@X0pz(ai%C8ZWgKB|wMD}iKby>K!6A8kAnJT1eWpuig?X8%t8$PP?&bl=9t z_!@b9ULiRkrCl-K4F=5>`R?c}spBl}d9v&U(vM-x4oJ`eKcK}b#b^R#24VLJD~nq# z0tFDpWBNYGWjI)8#;C^jZ@>6=p-R2PYyj)Y`Kf_*WZE-35kH|NY~1E8TWm4m0kKz05PlaQ7YC_5=TyVqGZgNlCi?i37ZxDu zUVP(z?g3?VsDLLHglK&u3~GvF=cicZK7M9}(sW-3IFFFF9>fykdVf6#^sHd>@& zPQnkBLWiyVLe1tZPYiJZD1!3ev}HR13ltUK!EP`tfM$$f+Cd)r^*s+ij*O4n?#@GyzB#-8AjJ|S~ih|xlbxO;aCdOXJq71eF$l0;{HW2qMV^b zSU9q+TfryBAyH!uOkG`z_jPXPX8M0n#ycjOHcLlP#Bdlm?u{EaW<`OtL=R5M%BE{a zNjMX@I5IL4l&?|Fl{!R%xY3RP8qFW>w&CC&0pAPg8>onH{zj3$==p_faS9Nx7utfF z)c4^5spIG$*3{Ir_<~Y6MvOvI_&=L4Wu&s^Bm>X}A>NHVo7P%2uRK^b_YU4C1LkgZ>yErlqHUh1L!#lkh9mAV{_m zoL*}Wb{GKxp*(!gGbI1SP~%M(mviuBSWtqo0O`c8nqQD5h4$i=V2h+!t0bmMg)!@fpj}`$ zVB`vTGlDKJFswC7P%tiFkY&P-T5c9pnFTDhYle-6pSK67Xnat*MbAJ3ewFw3Sh~XRz zA0Z3@Gr6MuOh@+&HvowF!vfLP4Y2IZn>XreK@7~&?yu^gF;%Iiwou>JYrHqN;&4IhJC6Lmduilx^b6 zc?feLt0*iv1?fm?ZGRqCiyq@bcuLp#adF^ND0~lKn+T;o2BP#Zbk`>sarjatU?cRi z=+fAln-^k!>C~y3xjBc~ASx1f3LzWQ^~J8*q7j6(L)a*T6co@D+jLz}Fmt2v_rXE? z?;m5}IBDoA1B)U*Cu8aieJkUeS_eraSM}s}OXW^frb5Bt;ckf56hNpcnrGH^UP!rh zynTBahC~cWTpNKF8M1qfm6V~jzC%Yr;`aQGCdz9QL{1TzM5qb0E;*pi7flA3;0@*# z5I9#O2`J>~=y=rN49Ppz$5R0u@maL2kOVkZ2@Yrf4MjyoCAx4C+ukmw;0+`{>I|YU z10Mg6pZymU#D8Dye<=PwC2+Sck2dJ+U#av(Pk{E0Pf?}f5 zrwOKHMK!O<+YVDOZAEPl*BzOhjKmn-fYqKod!Pr0?VZ#7Lz(Jv2pE$5ZUJSWd2K*G zjZ14|71SNs{qEG)Wn z;s;HU?8oHpVf+@e5mu_iv;tJ?xDlP4gUsl4kZ3d_C{AvG;(7sdHfxc`t`8CuF7QT- z)Kr`a!E~Ab?M49u0U}HES>T?jUF}s*chSU6%!Mas?Si5e_t|H zj#<7O=w?$8GQ&pyR>L=n4YcJF)J*jEOWS#A64a9sKiPdwLjWvg4j746Bc#4bmm^V^ zVJ0Wy*mb$O-TA*47q_vZY7uLs$=6?PRh4nMd9!rsM=Ga2H!gK?wbrk?323I@W1$Z? z3R6;tMMbsKwUt}n>c?RgG==+TLJ8NmDa z4M_;Xm}7P%((Fta0u`!4N1F@8LMC0@o-*8yZk4>i!0&{I*6(3iD7@w|bB9uY5%{UR zyd3!g^I_{z|M?)RvS7qfD{U+UBthVbFyFZc+Sr>iH&nZJyUjkDT;jD--|jbg~U zCodU@TJ9buEP+^uhK6A4L3}!gjvq&y?ZAl8(gm;3;9%N)`*?ilg-m=zOwq~Q!+ADT zetW}_-7cs0Qm_+*D*0MfRe;uArc_52JiVY>E|C|u}GpP zADVo{R-hOGAa7`F#0VtFhAAkD?%u5doen1kutqA66OYfRfSaVW|3LqYk`?7T#oB(D2volFlcm> zu`+AFUy8iNq>~Rd`om!B{rkJ*F1)(NI^}1FSuFDFsK4^{UxbH$0s_Fy zl$EwQlCs=AAQk1EaLv)t(M611V^;KU@scDlSf<24!AM7!sGSPK_n`)>uUO85r}lO< z*={LB%(}%TCN7M&p8ByfFE`f!(-0sxT3cHQf*tyFq@vR|04A}gdAf2(TAoT(~CFfm?1(NjAG413jQcd&T3kTavO97=uZpnL?9J{sk;+n1Qr0? zI?O7fbTvDkfkqAk1C|Mzf6tzRU)UuFP@v#8 z0*^r6v$TK0skk=@(Fonn-_teBa4^gPO#vvD!D@PhH8U>gkv|CuL4^{rFr2d-?TVuU zZ2OkrLa1pluTL$9ss2;*Pf*o}OM94_JKQP)w=P$<-cT zLfcis@kiX^U$W-}BZ!exW8BX8xHYRhLU7>Ir+HE5h@lTiyGC1sXg zzU*O1jJx=ea!iESR>^%F45O}qjsZP)6JgEk;=69n(q zuk1eGTjFth264(%zSP(xC7Kv#PbQJNvb8lA^LfmkzrVm*G4IPJFh}@9XU4DT=}{0( zLDum0^veXHf8u;4eVa)f(%(M@_8@wMU&9p3S7z$(-Me?h^!?c==`zqsXpce%;szcF zr-5MnZln3j0Q9?ZWDtf z2!KW_2XYwafUIvLCnu0OWxQ9G0G+Oy{dMpluLFb`^o?iBc$ zmaZO5{!w8?zf}67<7J6r-s7>rGI-zz$)uqnDMJeeFm8O1PZ1bBMp$b!7Wi|Z)3%jHTI+@O)nQrz!dsV zFb0Hb*ByIk0{j`ew=UvGs~Ie-20^h)T+jUdH*99kmBpgx-*w$Zy}Q_M9W{7^#tk<%kbYbS=&1jYs5z=%pTO zu&L5~B&YCWdwPoF)+UxC-`eju6wm)>+ z?7au4cWA&cXNvv4Y8Z4R2~f`1T#~iXi!Vq!PyE+v#>Qr`AS=2c?fr-R;fZ8UD>azi zJ&4r*FZz7rEcP5+TX$*3Mj*bewSMB4fnI=SEsb>WpaH@Z!;Txs`q>{#=73ehArS(Z zggmKMsEN<4Q`K`O5R}JC)cUN~Ofe9)H`5;fny)T~Z%01^y%Hn5utvAJ@4H-h_xgKG zjX=8B@S=DodCAKts*?k8tbBg0mI5C7;cclIm1V|qf0Ql%Ui4vllX*t&5|qQEPVGw{ zm&exiWtP7VDcXoD*ysh?S=AT%lI5EQ_v9$r=)EjRt1HYO{#1FZCx=(2Go&yLBW5HP zCGDZ0_sM~%Wlv=M+dUI^dC_mv%-eBn9U%l|@*q=Aq_-BX|H$%MDKR+LIUd)0a)5!nZix$;x z#7H1_G$DB+#s2fNy+2tJq-@vf@FXPpI=>+bE?8jniNHU0$Qz`wsSiXa!Cfq_K{kw2 zHq2DYjxYKVPpXhhE8y>hf!&2NK~C6H)xL0o<8=X+cCR;rx4t{uq4uC5y5~#^B0c=LO=KgegYO5osJ;iw?SckoVN`|Zl0=)F%P+;I_5k$01 z?tQJQGYv5s_h4U3crAJj>AxxYnY7_H z!sw0aveR_abh9If1L3?&hZS)V!hZg1KQAi#%1&jjTdn?yAIDn%E3V(|I8^(DM}s)* zfdkF0inXx{!ca>yu&yj6SE|R0zeT!%k-bjTxs$yv9cg-ic>}-)Ms)D}00AQQ-D=S(j>SjFQaYTqok#DWZb{5)HbUbGYB>=I zl^|jU@@*W8h2iBWXg6dquYNxzMzn&&1|m9r@zWuCW@1SAU&7+L?#)e*`TzV(`Gx>2_W$!Q z{`DXIhu;g`m0J4#5+{Q+_U3@*>JpL$iSgC89AybMKR!M_A7{*=LjXBv!^*gUU72IO zKw(>omKE?eWURH-ect1X=sROHd>XCDE4HQ6?-<$be9(Gka-PM(CeRh2bzcT{9z~-E zTpF^Uh?|!9QB8S_SwrZPv69VtPhXt*;`Z1na3h(56Q?ig`;{&+xt!cHf884HI>YLd z1z$XMz-8zTqb(RVkMA*eL3S@1hDR;Msd1lDWW5C3jl(!@VkkgZ46L@e&ta1)qH)c| z2yuwZ_z0?FR71=H0h2{j;s(4#RdTxOvFF@N>Pi$68K}m?ZHtppLxaz@LInUt z1r&nM>X$dmbRn-1#*dX!=s~Fv77_w6-peZlVft925(S7|$wUE={bPEeLDWr?C?3(g zRD673zkfB(3S*EXL=q!5kS+#LE^p`#Zanj)>Qo7ykS#n=4sq$g&Ch=|2!IXp9M7%+ zxjoWCv?0D(UH)giHwp#Wgdv>9Vwze4i)pxySzmAcM>0oC)#a-< z2N=+-G8!q|Hl!+kgeT&&g&2<-%TR3`_4T>$&FDns+YNZ4CvY8mT(ynU7bj)l*rGpe z;K45-CQgzQ?cVI$Lub^pwj4F5fo-As-6=JvHpo(Ijra`p3d)<@3g-aO$)cDEKwW$P zE<`D~-AM5pX5^Qk@C34iX6G_AUvlIq(uoS5Qm~YG=#ih1C+08Q{Nf8!k#O>;MqyuB zx0<UM&a8Rl!su zag-6ZlTJWiB$S4mrQAyW80a#jl@3(Z#OXKsC_d45c|Y{FVdfwYQ1{m`tBg?yX|M#3 zU#x*V`-&qpb~1{N=hPpv>MQ>B^09O=eD3lo9MAS0twktDR(1J9EX485Sm_c}=hT(h z(39jc>x&-(SNGI>gpS~avfE}oHMDH27+G($D4$L%F~IN|_CyDRCI+@erqH+4>?b%# ztV|jlI>!_ZpD!|A6bGA#BPo)xF`#Ok`(3`_6qjJ-l1+Lct7ljve*Sa!0=jV+i3B(` zkUoMgKf`IbsqwHxK@5EsICEHbu|;z%C>O{E(xIDyJNQ2c&^aTk-C&4}2W#~F_QDy8 zEiu%y@IMR!UYhkiJRvpzfVoBAN0z#?M)5^jI}_Xqox-5g2>qm-B|*Vh&*Zg?=W za2@pY7tqaO5fHF}>k=()^ec^^xwz~WiCf29;^_ku$XX+ym<{qQp6Cv&qh)uOT02b_ zGK50B#fMO#m*`^M*LW1L{$eGLTIFUQ9_71=r+Te5jz>c7#}P(1a;oD_{8a!Cr>;bj zJXA8Cg9R_NXdaC9Kg0mdgXDq7a}B9+pL;}$#z5Yop$M6zI|N0$*SCNUKd-Nkil!B` zvda-AXj`f_Q zpmER(r2*8phaXDMcU^ui0n_}r`4e;kLWjA$0FB?w(pR}-oikIABMmYo@^AYMRt5==&J>B4JqApPgfqn&pMh6u<3ZVr3-#mXTFDWF0kSXYm^(}9Qb76!h_PDh5*@@B_8h+9!UtdWe_r{!WX2T?rN00L})gHQtRtyf*#VD`I@pVt1V?1()=n9g(q6CufB?zyd@RTJ;2M3w%gC zP}Q`1llZrT27Y@5T+v@fyyWNdq1Az#a{S#ay;;R+{l92U_sm#+uCXZ9ho4-q$rrlOIX z1cx~`-E6BK9WAkVhLsg90V%06RHV-t3Hu|MI2?Zp?Whx&cX{G`V6-UEb?~zOCV7Tp zZS-jg=C2$e+re4NSAc;Li$39er$L`HFwT?Y;Ipm*YT&2FuA~2>y>kz%IbZ+&+Jmv2 zMx=5`2P4NErp6(aSdNJ@LP~{{2l$+BTXgYHq6 zX~MEXJy++)<*8V~h>u!wCJS{$F@+tGlm>}EZ4~N(T9S6;#iLrW{M=HuJp#rc^md4X z(fc~1I_#yYJGJ`KRhg9Cw;d^KtZ#Y9#rU6H;4HO+;W-01$x-vx^G3=oN1^waZ)&=s z;8G!v8sUyDse+jK>Y@GZzFQj)%J?P=w|~Tv`R^@C=3N2lM0Gc4DDK*rzCw30X@NEH z;eqfRgwrA?Tzn}06mAhIYu@sB{yOmU{*pCKEIeH45>CN*Fg86HizvNU#F>z|{%ZSN zse%%lMDl+hXJUtVkl>4xTM5E7y}lm+VC;t$N*7JcnIOr{Z`aN!81AZeyzTk}GChDl zz2bl&(tBZkSnPUpGg~G*P9vcHw$dHib>$7MJ`WpsB4%3yX^aw`?Rb5tpM9{n)Z=k( zc`x^5zdqwue)`3k88ahJm}+Z;;Z^vPNbDqLa@LhyMAR7vP7L6+M2Z4Z@KDl(;l5sUg};*;V#Ktq3TId@Fx*N!Svt%=UaW7?(~|Fkyea-(XrxgeA@2WM>sXb zSB8QnBUb2MCm@Pw{CG3Vn{1~diHnl?*+Jb*WGZtIA-}v@;7axal8la56M~}FCnMC< z^nZ5+7CM!x^_iWIUF~-bL5e!XkB}CH&avBfPDi@+f_+V|*(0I1#M}xVNIvn8Vany@ z)k0N0WJ)}N3~7p~w=ek-ymvG*@@A+H5!k2Z+OwD&7Ca2*VDfFpb=i^s-K2Ap@Vg&d z>e5LAq58!?53J8rTLoZQN8*HV zuX}nvpZ52`AxxgFMzMoJiJ)G`KrXEB! z5`L4P-STKwUnDadiQp(Zw&eft5Td4t6139+0Hux+Ny-ZFKLvNpUSz&Giu7A z@d*&|DDMLifK(xY*p&!(MLI?QImYsb90HHUqC!b@Jd9?R8nH)M$qOSqI&Fe^US?%? z4W!R{Z?F57LT4NM{a%=+A}Re-4eUu9D_{>`=aFi*SVlW)F;X)1#8iY{-Ez9A*-nH%$#}-;ZSJuRq&TTz%|Vb_ z%-&xlQ}?&BTC^n!zW=ubseeb{`!~JjvQY`WvcH8 zfuh9RYH#Hp;PPPbHK&;@&FONWFRHWU;51C3f8`)L2R*;k_WS9uVeQXB+TE#{#X!Zy zNLZ{LjeeQ>GGrZ~%%K}Dv4bb?5p=^%_8u9I%*h#^3S40q0P(leQ4V^4TGPq1UbmVy ztc#0FXUGB`wZW6MBDKglJ|%&JH}bd3e7)fMz)fS8o^x9;hVFvgY`M{wU-Q+V2nc7< z2mM1%0C|zJ_@u%(T$Iw(Mf?j#MlX0V{qT+P$?K?w4cecK6y$+`%bLX4pNO@Plr>bV zAyaghoS9F|vpY=FZ|9_Qj)e#*6Zu!sB;Dm8JxNf|4rb54wzK<&Z7tQNI4kq_pN_pa z^<(PGoxMELAqKPR95Vx)fhU}@EeHvUh#%w%4n+gCksv9o(m(!6rP#um3WTf+Y3BXk zceujqBj@}C*1bSJW1uML(a86_$*p9%PjC6A4+%k^Di2zSL!ugr3c!ShK(uGBFw#$S zF3%5xabfb$tH4@27+^DWs+(5fN#qONzfiwXb6q4~)zHi*`T0VW6PhVZO=PWta&5hD zLi_bHVGo1<3aYX6i)WyZ#M>9q{{lA8fES2G{kEk9E)Ck~y!;E)ROGdEC@7QGm%EhT zy-IgFb+hl+#miMb?Y%gh+~+q77135tu1n?E>3g zk+VRWx0IoVQ1omERGI+nm4{5PztsiMG{nH85@^O?5tlh!fE&??3czEvo+vigz8ZpR z6gIGIh5RQ^kfD(85)K_Y1lWtWx%Sp^0hfKOBkO3w^#DejvG?6OHeR?e&|>c__eL$d z@D#-vl~o=^dmjxWECLdNuv?zRzp!>b@hd*LA~vIg1(~h@jKVPw8DyXlCTiuN%7}S$ z52zPnIYUJoclN9?077_OZuJFIfN(qk!e0#j`gi6xNc2LSOd31x+suByPokGesn~(d z0o^cB$9Jbc$p*}q-=d-nl$bK;Tcz!%3sgu}4 zVnRHf1a)JifzZQFdXkM9@*}vA(ZWuYA9B9}VxR-6IKAUTg0B%~()F_)7H(<>tPGf7 zZxno)1f8L>2wVT#j^{%j)7Xjjy}_$cyfR0l_0?)zE5svUaU2y;EjUGd-SFYg?q1>u zK)YnzB~yQ^#3S{3H>L80PiY@*dCis}^bsIc_B5ZO1WtV9y%f$1`ho@?-@S?k&d9eS z)ej82FUI{UYTt0H3ipC^)D3Ne{L4P?GyBwax#?!>@GZSUFaAqxvx4KTDr%gZV7=>D zm=M~D2M3NT4_Lim!7r8;#vjOen|c25abm}EQlfru3tc4_f-o$a=Xw;w5Dd>7HsWU| zN5|o@0)JgGX{TmlQg$KwFY)b-v$m<(ZGD^_>xctP<(8oKVrC^a@6{U1FL~ou|YEP>>$}%aR_64%3B&vXboeN<;ZOXA==(I2X`UpWayL z`=qh19EQDS>2*+6**4WoyhFFw9os1QA`(bRAGfq7UQnZ&w88WN#rf6frBKuumZ&Y(KJ@do- zB}IIV&j(7id5zVe%F8HHc<*^7C&>kbNCky8??|n%Im$T(tLYgO*V73fKyb)p<OxPo|kPYgJ%RSnAkL2lRbc^M5IVx zh-0?jg^4;kXW=!dy;^DAhY||K7Yc&eqlp4Q)Rzc(P#La)!-D#`O8=X66IBg#UdVL9 z-zuaZ>~;jBzElc=aG73 z5Gn+IL9e5nnG0y#V&vhbbjHAF8$LtswCYQEZ=}-UL<3So*M?0oiFPzf zkukwSNC^(p(X-c89iqQ(A-ozTfKa>|PnzTf&gWqpWS=;p=d?f%Z-nJFlynb?ci*kp ze(WLFCcVt*XIMLIhWXhQx_g3piX>C;qalDLRAubp-48V>#ZgSYD^9`@TENJh0G*=& zI^V1`(kP|k0mFRxtRs76o1*>jvt{b5{=|`;uyTJ<;)v3M!&`dwa(Qq;ZoBfp$laP5 zewq1;DJjN7KBmN%51?hYJp40;=sh&Cw8{1qH_50iz>3Tbh2a7v}8+%Y#1e5D=z6yP1$Ksv*Gzy6=1_a5c|;yHJJOd0R`%V3N{a9bO4@ zz_|7WP>E)-3H{At-`jPEmkxX%=-tv)l9p#ur*J9{HB+=E?CjWUFx?~fi=$?*UcF2D z>MO2;GxU7pJN3i;A<^q1x137x_`x}|&LdOBDtciOBq_UNGrhlTo%57}0wQxfghFs_ zyJk!6s4FYp(ffF4eoa!JIxHw5cBjcqk2)34fXe8h6RjRRIKO4Bt7hN04&N>w(U*J! z?i-Kwy@c=idXA~^vHpp+m=jI%0S_I{pQm1AJZnx?*6+lA7nip*_B?N{rs-NzkwV@Aqy)eu zAiV~%uBki^#$y9fV>GL!x6Xkm5VOf_h6!z(fc>Id1jZ9+4j_zbBv(JrNFNikDI@6u z_x!pFhNFz;1k&!7Ki1^$0q0cVHh(IhqM&Dt9k2b6uYx;+O@#_d-17(DiUz~T z`z~;uW|X+nPY}8^IiTDkEkv^V7eeJ$v%xiN^N#kBMUpl8DO*8+-$@ z!nH-!K{&=A;0EEI7$&ZNqV*G%BpOi=*u*VT`I~CnBn8b{@#?8VJm0osv7DT_LSUrf1|1JDoSxU5Egy4%j>2_k1aWt2Ghff z9YQ8WIUj(lM(#KFj|TNUYJnF3A7BoUZd}7AvTgx&KiX8KJDMH!d(`ZG*MQ`COPB-~ z5f{O{Dza8MA;Ad1c2f3|PRxk=RB(MK(8N`eF~2=7sU(pB6Htr_CcVSW_GUKLS*!sc z6EbuEYdS2`vYcrN0~@Z!e%gf8Ks%V^E3Vfg?=!u?)hCW;iiKd7UW#s;totQMCj0Rd*4AsnRG`-vyPO&;$D)S@(-VLt8jRR?JqFyc6)QIxaXk`a6O zuy=vA^U&g|II;nK=?f!Mub`L9A_WbD)w>M{xa3@k3M4Gq;rq7g;dIY5(Df0VjldW{d zjT;xZkD@EK$WD-crp{ZJ+cIVlHOJZBsOKZG3l#0ta1pNLL~2R_)d9M!jWJ1u z4=T!G?co0{xxW8ra&@2Z1D}5J;^@a47Ym+E=}s(HkFh65gqxk;`(=vv!)zQy!a%As zh~Xvyu_0q9SuD78ucU@#eH`A5OKyzGqkA;At!LetucDJ;DLn~Z73x;b3RRETfLC*; zZG@XB^}361){dRS6uB}9-v2Umb%T^@XP&FP;M?Y~0n0Q;31X+P74`cFlsuS%=$#uzj< zE!$SMw9$UY%l#5XS*k=kp;Y>RO0NZ(?xa1H7yRa5|KT6{Z1F|^@tp8Og%$0n(cGvdruy{__Dg;=wKxrWjl*4x4V4+;Lu`^fXL|^n=E4o^n8^yYB=tQ zwbXb*$ME_dRpK6{x%&owL#5^@O2x1j0rZscpjdTvoxpos%jHG`h035YWMoY12dAt&kU9_kc*y3ZR( z^xvHHVlsUnQ~&`G1!08?1XAA%(z(?ncrtrrthN&zL79$w$g6 zGoxrOJC>HgA5QlUN8|w0ybowDQuE0@8Vl6BM&TKEohUC_OD$jMdA)rK(te6FNW(;K z=mW|VFnengz(heo*3xAbOL}s4NPixJAMs3lX!YNevtkgkU8cCaADMzveK4#-p)3Id7}1=3OH&VGrXJiSI(kPCL*!~iYxgF_z1y>kfLe7I??$J zeE)bJXU^-LR0w^L&Ik@UG_(IWKC?F~&CR;XGH$_JD=iap>BOM&fgjNYcy0*O>a_q4 z)b~qA^KCssynL8POl___8Ro>Xe6y#=Bh66qSIx74z@+ynJW?0`BWh_R8 z=*Q{j$>~daZ1B-~koc!$NIX3~p%2>AXNWhIk51n}KI|PnEGiRI3yTEY4A|L1!AIv0 zCJMXz)6~cj{Te&9Lu0@EaxJ@26l-v!xYyaDMxkVam*GICM#Qj2MUag+7U@kP_%x&W z{6b-UVAZMFA(fUPvua8e9X|1OT`JK^UFp_K6)PTb!z6bfZ{jj860ygoJUXliuus{i zKasnHN{B?>zq*}qf+nRqpgL&W0)9Ax9+J&S_h0%orXP$QaHmJ7Q1%5Xqo_sng&EI7 zA!>eIsJ(F5(2yNvgw*MXT>&SEy<#RsQ z_Gb<$ywm->PsEoz?;%__iUdq1ea6PYKDiK`TgKbd{9eGZ5QaryW{X!SROH|PLs>b# z*TFk1V=d?KzJ|Z9XLp{KO?hM-saA|?^Qvq=6AmxToY22+D!I{+y)V4j^tNAS$ubt5 zW*XuLBfqp(HUrluzQ>PS^NlsM8If;_M?~i{zGST*9NxOYX}UKfndCSr%F zizjD)#@SwnGw1W;s`L(_tbm73#2WDI{D@&u6TXYt)R`yzPr{aMA<%|woH26wIQ~w% zZIi=a0~?R%R(cZWydn5sAI`X+0K?|Jsfs*SvNeAZmsI=0#B%_mejg-zPV9thS7|dl zMIaXJ^Fi&=yD0Ugb4+K?T)JJ$1dZ387 zLbS(TBUb4jcT_ZVNWKtTcGw-nIg)h5%mF8MWI_HOCH5u3e;L#}QE}oEPhKot@u?2~ zb*_;3Tb5=Yx|lo((drR$^Yw)sTZ9Y@As>n?Pa4$i);}eBs0@cArsmfa?yL4ZjUqcf zpskUX>~fzSk+7a&HPItYZ=2Y8SOMQ_A$Q>|g?|7C0}MGodg2B?r*sYF z5AQ^@{J{1DWa~L){1uI#;`AT|++PV?3|TI@eD7G96jfp}RFRlgB&tG(F~_eEL=6et zLq)k#{M_Rl0lr;OK~PQLQEt2Rfu(Xj;k8`4hMj0Z=%;1r{_8R;5c$O5deP(^JZVgm zls94?(DN({0^v`2$%J`S!cA`CYPLz=Tk?CHb5&^cl& zdf*KEs2llCY*<>p^D%G1%v;>q8A}HM6~}do2uOTGx0f?spA^n~L_B-?uzz^qWR8A5 zH0xMKje~xvH(gGMv?`wx_jxRdkQEkhPGZZ9XnVS=@AQE(+M(YVX(-|i0wKIYI%!iP zHJ29@km{%~H)F9gpmvaaVqx?E^8g{*8wGUBsA!;&6Rl?gI{C}k+l^Jox^hs)Ymu%D z=uPraXi%GhN1?iF&w@xmMH)}RLtuK%~#yj4+j^GNuGG~+K`wrB0vcz$=L z^yHx)HX%nd1`QuLH~9Unnc?Bx&h|SLIiinC`S+%~&dm&$h3hyDi0m?2#muFAhOE2l zAcuk9_8T^{tIdYOq0ynX&7W5JKYDXAHgA2+Lz|6?g8BzG)yV9$7IqFM{uh7WQRm4S z%u+xW^soDj8`sxOpMud<`cT>s14Cy2mL9}~ChFDR1b<(vZnxB%5=zm^$(^`ZrTXn# zhZ?l+1qB7mmoJZBnKZt69T5|hG%Zl>yK-eQ+-SMgJ@x{|am?5|zsZ08e5#(_lI6=) z)Ab}rFH-WfPRBNsUst^S{rxv@-u%rsq6@Na+EygTrtmtbV0wRss3tR zZ^OgGzVQ7NB}?t>jHgW-ynk+SQBm47#iK`$$bB{|SDGzYaO&~zNCV7cj0P#3{xb1? zG6E%cD@)6RhYzcEooQ;C&8!8g^XMZ-)ciNOx@u@>FbM9-7=()pUXbp%BPw+z^iHEe z@8{=UKc0K8iPLdq!W+YR!82GK-kNb(1lyIf& z4;FG#>dJ*VGnJ5(ibhC9MFscN@C(r|T@NPVXU&>*HOI)npzzTnH%Oxui}x+Ex3L+V zbXGEP)pM(^J8ty)G~%sE$86y=_OZPkT%x|s1Ph7>IaDGi80GJ=_bZ~3iOpz~qV7+bfS5di}#f&|HuML-(_$w(FvkgVhkDu^P2AUS8rIY$K%B}&do zKr%=UO~c&}{QrN>y>sf!ojG%>Zq0OkRbL~`+wc2?z1LoQt>>ML^t}^==LsZ6}h+_k5vW5VfjE-4w$cM8<6;;PO5 z%+5B=H#Kl}adtISMEczGndR(SEiTRoF%n#kY_|GP&q{n3ZVz6rC!SOd?7zj3(z?m+ zzs)+KO}hWi`0lyG`|tWri67W|_l4{KKOb{XTAD9is2evY+Z^(sb)L*0Xo}$DeDPZ} z-*iBg)3E&)wM~DFL0jTfmzGO@d;|rH=1OV=yf44Hs>XEXO7(b=`6HMZh0oH|v>ELBO_Oa8g%sNorB-{5G7Wx3-w7;ytz#77jNeMutq+W>Y>pI2 zwVLTP_&fYnwbHpA*3rKs)tWwY-PzTX-Pv)nF(QXYgS4EF zrwp3(6>OGE#fg9L;xg$yq~Iez*I(TB@##&?vTjQicq~pBW&{59ehcSxt@c|!qGzu? zV4daHaM{_MctdxEle5FfPFmV~abwhn%Fk<{)TXbKhTA*cE{xlZi;gl^zqx6>8%E*7 z=_}&r{Jfad3JxilM&rA4^?fe=+`tX((#Qx%lQY$_k;X3O!=@H_U%w(_9KmlVcjLwl z_~sBz+mXWoELwvzi@o_qM&G?Cc`YYDUXuzXO;m~%drw~XKmU&Uaa^H$M!PydR! z8_H{y0z(-*9TiRvoJO4w;IV(PRBr#a+lFEDtsigI zk8(;pOhlgKvb!U3|3112;dR@sKVfEh&Ukx)#cyXB)C$s?t>77w{rySHx0mX9ZU06W z824Nbs!vc%RkBN8pH9t$J#&MPPmQJQ@2e8)IR;^2x8$#Ga1sn>tR;J?6<8AyM>CMu9-BkcH(LVO`)9TObQRop2TjSsDY;{#m ze|vXUHT#J>jqUJ(j&wC;SZpg>UsOvh4X~}>KTugM{uaw*3*$0Lfn{v_Dy4A9S&cb} zamXmsY^Y+ouP~Etp=&nGtRmTAzW83cT4CqV&KfthfIWws17nWcXgB#de5W6?hSG$R zf&=07y%%S0)Gkf7#D#Jg_?1}ABZYJvWDPEGC+!VmxSCJJZ!xf88ZXRxdVJEqWdU z>m_=3dqOBhB{vZ+``MeCF9m)z-IW;yJ3sukg@0gRBJ8_l>$%>@rAVhW6|329Sy+9% z*0aIlUgu)qF$@=f*O(Wpixn(RM7adg)zsEflxT{GyrMH$7%XQ{Oi}P1Uz=>X>$d{C zU?#$5Q1;1_C%%1dRlbKDrhlex7lsiz8pA#}94srgUzv=l_8^&oXY1VFTwdLrh)NZ4 zC+yA9ecxMPl6vIC`Db5T5Aa(2@zQGujv*1;5N1?L`@3~Y_j(tRMwMLVVt0;XeWb(u zZCFB5u)R7fckyN&NwRlgWV&1r5Ugan;3Z)<%hh^Q?@ccD(>0jBG_#MvW~_BC7eTerV89VpAL-dcTX}#;%Zhe6uO`F<|V%v`*FIN zw-Ub=CYz}#paU`YjrR6}<`ua5cZgd8GYN@_=l#40j-Ip)B(om!tlS=Ffw;%cp8LzX zbRjC&cJaw*=|aV_${=HA*^~Qhu)O{#n!TvhSIE_C^ct=8aR@Z)&ieZC>4QlA9#-P& z$&S>Z78u4We0+VmO|T%#J73T)tPi;iWtPM(YF@Ql5L^Cwlon#;LItiVcNW&j_vkyX zy{0=-sjfea2JFUv4^3Lg`ngsq>J3(d{%9)lB{%q(-mLQO>5m5kIPP( zenh#$`uXha?C-EOwtGn~s4draIz`32+L?j8;TsS@_S~UJ-+$R>JkOww82jC27pK*n z^XdA-^DsATuw)F?i=Kbom@6FeN>NNb4=a(4S-ogj#cZU?{SDn{ZnNOBk(TJF5g7*K zM$R7hI4m`@LbXfNA$`zcK|nECPVD&c<0VsxVI2BR7qCGUFQZWKTAK@7aOQyDNJvVy z!T0jl!@8VUZQLMJR=+gWT3EG{B$wbBFB!z7?l6~sIKu`e6)WdXNVd&DvCIDW3nr72 z1(uD{`usq?`MAW1^Bnhy$Z!6tXQ`aMZS7}SeS$kltI~OE?9;=QZXF-@xE}99NSqz1 z$`4`4+aWOV*Bf=DB=qF!GhVrJmwUkS6Wvsxn(1O_iw%CYD;4rk$#hC8fBo;@zb&WR zZ;X$P*>y!O~FJZ~ldh7N6 zeH#Rh3lU87Zm z{2D_!QCO_(J%qu?kTP$3q??vZU26=#Enm5_m0Gd+hiVmqJRl*TNV`9j&BHdW@mMzE z>Is)(0{UE9bt*37Bv_U+Fqrx;x%C8|54&nQE{d(r52(F(@#1jc_(`SV#xCccVvEnJ z`G(`0m=(Y(<7(I0+2u`o^AG2svnnARaJdic~Pa% zRAaz)^h0mCgH6o%Y=1HP5Zn6Efqv`R?ig60XGHNXN;G}3Me580=JiZlTQixE#T=k*Z-*wMVs+eP}NX=yh(%?8yW^gq4d zClAn4DwG2|H8o|wHTBu*_qXGjwXpG0TjK5+?e5@1d0xaqdgLGZ@lXgqrm}zlN7mz) z&Ai04+$BuXgSMk5boKQeb_M~apbdkv6zmFR9~uG3)PFedUW6?Oxn6OiDWbY%?CtYD zlR|^>x`3?_4_f|uz)k+);c0fDD=mBNUw3f7{~En1kR=jS>ZFUQ5=F!Dmlavza_`wk5B}o)=#Cb9WdT z7YLl|&2IzfS;qWY$ZFcZwY9Y!AfjU0BU!8I_LlrE%~W?H3VXcYA4oKG8YSVU0F{#l zTVwhlWGgH#E}m!C^MZhux-?!t14yX__QnbnPZEA|a&qm7QhRF*k`L^^aKWv~D{v$C zVN+i+lZP=32n|hvVVsHc5tQ>dNv)7?s0gcFiq>hx7vTP9h$X22{s3R4bU})disV;; zL6V2T2?z`fG&|yhbEbi5;k92$3gtG-pwM!Zg(TJLMaj-jI~F&PS-Fz}xg*79VUX8+ z>}{fSL<+!Xh8s7qejM6WhtTww+po3?toO&YeSSC-psWcvCzi%}Lpw^BhUd93fWcA# z3aOjR6Ma1qS(}x+I3aB7QCi37Z{I{$r`ql<|7nyjG#%hDAG@z%Hy(h}HJWZFjS`MY ztx^jrj%Od0GBwjn=Sw63h$zCcQvl%E%wmZU8330+I?iXmg#A`(g?41|xb-0IbM}ih z6pERe<&NW~gJnI-jy&*ai4Q_zAxcc|;1+_uW#V1B&j(Vq zpUza4PEVzaOF}|IGVF~=tv0p1XTA_1;{zC#8LnLuSJraMM~DXMvZ?ND9R$N+y~LqF zbRO;$))6CiYkRqw({bbZ32I)2E8<>Rd9*Owyr;##as@Cbw!$__Q_0nv!mkf?EsoZ9 zq^Yo{Kgt$?1@y^s%2`CqX*B?WJQUd>%}+yqg<4M$#`t4lvgo@r64KI2sY>a2Pk){< z=`WH+Pz`=uX_tRE1psidm>I~0`-AVHnyx6MNJ=;qBnR$`NZ5=BTx`MHwXR#1c)!J>o8c_$uK z{BNjCf4w?Pv;qOi2<=ixH_NpmV?Da^nR_59)eIA5)(m3d$N9raw|}%hmD?JC^LO=;k_aj#FsZ3|OJi zXTLT}xwIt9n(D(eTb&Kbr^PKq_U-wrl7TCZXNkYKBuEA+IXXHPg&iPzZX9>C_6!Ci zde-#u$$t<+&qHYT-x*go(C@$Ne#43gGI$kS@;bQp#?|B)@MP%qn5ydk?Z>FnVCL_> zA(q8&t#;(3F2NuX0YIaNECL^oyeQ!Zu!0$jf?~X6?q|AWScs8U zu-g-0;~M~MyUYSp0}Pb>?TVtiN&@+;BAKjr#T1G z2I86+lrzHV3?SwsMqt_f!F;XHh1G?kLQo9Q zw}YLy2cV&RMw4vVo)iOl2xcwwTPwAaVv@|)wSxV*eDpFzmK^X)VZ7wJa~$2;NB1zmmAEgJx9>@3oSoA1!TdoWY=xPId^D`)5(d59S z<>ch709Z`{>~25&@+ch^rDh@LGDOiqeV*#LxfIH-?|tUX86c7}S=aY>(M8K+aW~hX zPDqiB6Wx(1*iqkw=0q!vX;)f|u{03+P;N%Zg}}SjqyCH6dA1&67rTnf46ZCLxr zOYk`>!-bq`g;9MJO5zu_=-p$zWCG85q2&z&aLxckX{$!De1 z-)Ns3F+G$vYF_NWeu{!j^tOtgUSf(uvfP-x^@)Rclh>JB_&Ld>J~4ZO0H-X6T~Ud?yZDmhwT}nijl8G6q}GxeqDnA}ry${yV|SR>e;(w(|fKC~h4k~K$CFyFrrp|>6}VB)h< zf*%l+n`tUd&s4wIe=IIm{l$s6%XjuSB5Xm}l_X9tGM?@2%~&C6^8a`Xhf|8bAh6h* zGtB>@sGjuX&wY_tSPZxO8}~01VIQ za2t|q0!PE!cOR?t9OYZ{QM3}>az4( znB^Uk=&Y>mwVUu%BVU89+F>niQxa{Jv+nPH(vzvdEOVfJSE!kJ_%kLhCT&Hgu@ z@85qKjin`!Wm>o-*njcsM)rUoYyS5#fR%^yBhGGx7oPaKc9qoGxbWMuRuX9kZK}^p zYNzZR5~aYodAO(UVy%V>(^(#h4KmlwoAd~gm2Da~x4RmB@64G1tHxYUtsW+?bVAMjWqoE| z&rS5dT|GY3PA|0B%g%SV$DfEvyjDZw!WFXTxXZwk7_(?9@MzKI~jI#lYMJz_u8i{=HA6iQmm_+ zDQ$IIuMO_X_Nfj8%5)gqn^b;89YffjMmTf1cn3EQfguoxGZF zzHXvZq59PW#Fb=RxbM@vckv^Aw#FgqESAS733ATr3-+iK23VpiIf)*2T3Uhmkz>KF)$97THvGrkkhD9Vh3C`!((Q{vw*}EOKqqDuxR&4|s%( z|CD2`i^g`MX*2Mrr|qjx=eVbAS5=kVe^#k6E+N-ncIPx_J^CAAXLuOVPR?cqXWhc* z+|^euu*dX=vr*mXpEdnNeIPjE64iL0T1M%t6E^p*oOeWw?qCVgXuJhVb&tuQA;WMX zmn3{?r0K@okH&efp3`SkR6GJ=5hRY4@EyTF zCI}OvPuJg`TjKcg(>C2Umv=Vjb;lk59+UTkIcdaS=^~fmGc~8R{TmTMIpDBR4v9So zAmh9WDgesyYkfdIbs_i`bNA>8Dy|1mKAzMuYP|CHpiKB}fwwv44#|_z$yH8$DX5LVGsIql-t&$B&!+gytP!@INB8LnOxV^YmS$U6T?4Iz_e*(0ds@`@Aw zyilQW{mrZ{bZYp}2yu?5eOeOl_CP`O+<}X7Ap*NS`Q@3k>^GVwOiR~FLms=8ESnkq zA>w1#p}T&`E9WOL`W%*%GQj2C9Ma*lp8W-!3!)ML#$sDhYZe~Ks3lhH@R3K-qQ?$L z7ZI)T2Xo8h7%BN@US#ysf4W&(p7}D=p|6ZPXx#=^6^Ii#cjU{BgSXeot#|V59T=yX zjf+{NiMR;WG!>}z)=D$yi0pUs;^u`5*7f@u8XnX%QjrFhyeEQZRxh)ab-~YQDJDLk z#Lt{dsO)XVkHv$^DJyT0aDvV1CmHhSNIr)uWhuzU#)fh)V_t+ZY z54yLc`{8AvZ1+);+}F#(e=APFFZDm_0XEoKO5%AE<#5F-=PS^BsR)*%)-05cz6*<9 zUc^vKGB7hY8QB4LM~xpK=x6E}GxJi5@4PFZIHLIcSyAPE)@oz?i{&F^^%nYcLi$zs@b}jM(f0w%>G$c= z>RO)}BOqD*bNLSIrii}V)DwdBA?;@g40R?e!!H#%2r!zvB>6>luk%<83UtRObd?3H z-zHYvZ|R77HvOJd10TauF((7UiF^(u_l)Pb!dFv`VfQZ;Ke8_QpGQ(j<=WZYIBuRS5x~%!Atg4rd-L z+%ZYmv9D72)~|k;uY8@{*HuX{C7CtXtns;L?!BtgBNuZPZd_z!;mO<~b&7VqCW0n1 zDf~Mak)5cc+q!Gp{#D$&6LZ`)5O={!5*FBw4b9lQ*_fY}%U=xe= zs|vOK855zIxBO;aObo1fz;l?DuLf3ZO*3A-dKDG)zI2G%@XLGFav2eLz+FWByZS}t zVNXwwUpyfhL$G1(et4D&@Kr8aFgS=gmVUqNp#pvHh2*xmyD#3w2UJ#_n>N3@SugBs zTXuj^bZJ~-q=bW4VWP2LC|Fw$_qgCwL&VW5b44Co!H4AwaYNP}Mu~!aA%t;=OV%i} zy)`+vP_`_6_1d*igI948f=;S_z?1!O^!Y%^{{5^ta7XgcMQD3Ta8#k#T(_AQY9M(> z$Fk9R3bJGZ8;oo282(R_=}1}gr?aL?QDHq!z7APtVyDKNGdVZa$R8)j2-GfByb+N# zP0|dK-gv&y?yz#Zc>cNbOPw_V7Sh@Qkw)J|oa}e4%S3scY(iR$@?OWCpXwL7^;ILTqYQ?Qea2x`19l92~Wv z<0Bx7yP$97|M6qAX1Tq4shwZZO%lv0Cy~WS^7-`|8AsOR;}lX#&7Oo;8Chg+&MwI0 zJX!Oqv{L!nbt`-NOk=Efr4akyU;}+=o=UG{%9Or46=ySKu8~&Zoj+_pa7V0T7pPB6 za0M;Ts@#qvf&nJSUXbZjZ-)g6>LPogC00iWQD_%{fS30DNu= zbOm68DGnFZV1e3zxU$T|A{*;=zpYJdNWI2{xz6gu9(&j0q`}H$OUk3{Sm&Kh{mfbHZBr*#dd)edDu2m|XJYNl!mRPicmrbBmdZ&BIItIK~t5~zl(ErQ|!p<3z>BcTBz z10<>Xo?;>)m{Y_sf=H49Ic>mxCfz+l85$-hDA`1jghig(_zctQ6QHwto~3g^*Je^T z=suAR2J`h6nK;rEm5jWh+E!gJnaOCY+*xH|@A!J8g(nF>>sxW_4?VLqRA=rV5ME&? z6Gu&VAUu|g1|XL}*S-3IRo1yXNTlVc?R5-u?5eyr#HEPUmV2}}P>XmKxU3`~@{*uo zp_j5>*bBSCg%BMM92)36a-26tjz-OF1Cel^)6l=bY$yY`u+Zd_AJ8U{-*p9%8!?5CPfAFU~IYIN;L^aBFj+w=EK%=;-7_FzZN`zpgO1&%_BIVj~mB z%E5r<+b!z>+dWl05!nXGab|S`LOH0j=;tZMA2)dJGaS~psNvJlIz_P_KSJUngSuq! z6hM=rP8$Od7W65?A5U`Mmr=Upb5?X8+Vi>7d6_f9q6FS54SEqCIgema;3axoo|`o& z9_S?e)I%4!2wp1=&>A2~22+ou}KX}^`Nmp9Ml#_oOGb>M-AEKB){Uqe(#MyWTlS}M4IR6x-^z$;O#s^^oqF0SaGAp1& z&E7J*+_}E}>t19Fsd!)p6nigpjK1_m@Vuxp?%4nMTh_$tr1ti9nY{h0V`^NJSq(u1 zk;pKiH?cPQXB-GPY2Xf*&8k^1sOZfvE#<^EDs^bvXt;Oi+|y8^34_|!y-YndGBw6| z2jfZ&(F&2zihLMR%Js)TQx5objH@yE_0eKY3S-lmgCyT*AJQlYAvyEaIqTN)%cN+M zupR%?brqolTp#B~fBze)9~uv3``m%e=_|sWtt%m%kx$ZO+3}}tu;5(aQW8+UOKGoSwe!}^!i8ssOYIGr z3Aem>eAz_E37ZH78#=H0Wj3b}np4a%7jAl#Xr}fJlRs0V!&Nw0b;-A195RLyjVf)M zyf}-SigDd1EX2$v-Pj>%y*QxxQyhAkYPXEmK&M&3zij|4iQqi>1+XJ*>`Kd`< z6rCBdy~cWKxqS_C3pGgOu;&-Zbh*Gs1B8f938rfJxcyYwa$MP zBdHg-?FyUgQ*J3GO>_0Vd0w&LmNPFyvo1WeJeN@#eakPxYJxf}YoiDqsByBXquGLs*Cj8)!Tr0wKdK8Je)W4%9Q>YT50rdW}(VznY| zr(o0{J#g|AW&2wv3RLs2lIBqr^cSc7H}vwsxRyryC!>Y;&YEKtv_;Y^|Dl;?a9qTcKTL zL2ZvzfnYqCj=y22)a<&y=bOZ#7#00JfZvOg!jsS&lyj5W+w>Q?tCF64!M}fEeMICR|MZ2T zir$U%(tg~hC)QTDrM)^!FS6gS83ukLSmfCLHyyllPSMNF-1?s%K6XT#^x!{#*>KT| zLGM)v_4vu?{=WTya_Bv4%DE-(k59<=FMf;@zC0yM*z**s+A)|%?(lnyqjD92`=5XG z5(wfew(t;H()p)n-ai_pQ0vvE#ceIu3x)M4QD83S?KPBK)jdys+*W?{*zX_hh_sC7 zxurrcX|7i>VxFJeYc+{-ioBmB{qZ7&>xt8;OQS6O6qiNm37+B(bBBGLxOSO(k21RK zS4k_p`Rk2v6v4cTrZ2Vm7@1U%oBjG#IjvDWy|cXQ#gygE?9HvmoGNbb>!L4ISCTvm z61@2LB}VCe;KU;ijWg$^oNiUWYi@kT%jLdWQ+(&Kv$SJm(P<=^{$d^zT0<&DYmLG9 z*8V*3P_sik&BoZ_cpNKu22H`iW2d_nRU3I)lA`6Zv5r{O#sd08?|v z;x7D#uB$!ZjQ~KgAjV1pD2B8)kTWmLCmz7aq;cT-SQw^r3aUkfF@%Z-hV9m;by zg>(j$+{qLTY5$NAN>1*85C8W9`X$lWncKPRD!;pV&f*d4j_PVuQnqx^ZvBR!f=X@q z)8e;HXGR%53$g2F}St>R}AVmkz%?(v*0UB!qR0F#1 zvrT^vU~c|yp1me=9sU4Oc}M?yMGeOFA{iOiX%4hXd0@KVg6cd8h7S=@gXIn#h=`&U zR0rya*rpA0G3Ai?U9((5qA*C=CPwH1hUsAHWMf5-pSZvy1JXuf8+lmo)^BcC;GdWp z>0N;fW3|wkh-9=aIiwuZL$^IqSi`z`O;LRn~MN?+?hJ z0!wDYn0$Bda^4BfRl)ZkTV3=i_;RIp3x$)5Ij6-hJ)J$~Mz|$oqS$@sM}XD{u6KQw zYV8XA7V`y|VA-!JS=C!Tnj<0Ox`|qc^L=`_(XTKr;CFD(Vmp`P5U6b0ps*KI-C#cs zvmO#dzju8`eik(Td#~t?i~p5w_x?rx7j;?oL-v2CXA|Z(Vv1?7C{|CT+2_Qwh_n?* zS&8Gm)T%Qp$N1a}-R}=U@AiM7Wpw+Fd;QA(!~75Q`v39t-*rXX7RW9~J;PxoFfT{> zF{EZdZ9k{McyeElBnYP5&p!WgOLF~RqyL|OZZF=$_x;bfT5flPYBLSCy<$&mi45 z^v(^J#(sjZ{E@FN?>=El}n{{h&JTU<}oSUpx@DNTaUlqw%7K>~NqR zhzC|@x*iJcY{VhCRm5!zaUd?c{xpVh>U<|gZDc>B60%wt)BuJ;8H!3l{E9rHB#>wb z3UZNdNzCEm=OeEM?Pr*v2CJJG1+_*#Xbm$#;$_d|UqtiWK@z^T07TGMxi1T0>rkUH|4jxhVry8v)#G?q=Wu zggKBOAywtoO_vPJR(*r zZmJbD*#7-`^aEsCDaYyA!nV-%~8+4hZyFyRLQ?su^47~W^2qXf6g zn(73U!*A$xK-mD7*KekQ%Y)X+j_DzYUwOIHG)lRKiVwOvrClJ}Sl*lQpa7i%TFjbd z&-k|{xS5cdg~Tsryow?<&PGn}Ej+ zaEO5OA@=8|>x^7nofEv2l$5|f`Z8B;FS*u9OG?VWCug#(XDYM}M5`L)Q*B6@iQRLV zKrxS`rB@|2LwRg^bc3d#Khc3WZ+OtdUAHjKAfubHgbo7*5B2(&mjr$XclDOwPWKpSJfG2#K72vhSCe6!l#CvL8PAt( zQ0b6SQKf?HUI9w&-1(x>lgJZO*VM$E)ekb=Y1r0CGCyWs%nxt3&G%%ii?y^@vA}J7 zq65-nz{p|!(E5d(UX1hgT+N`*8j$rT6w`Y7rg_*vP-t#jaF8O-vS z)ykx-08A~CtaceiW@AoiihVc?lHq7ruqp6hXgdhvX4#pvD%8O*gnU52(>Vst#H+iq zGE_m7nnVN^Km{ZV|8U{9+`D)0BtY#0rT$1sXlBC-zo=wl&%?v zjub^C!vXo|Y%#eLa8Z8o&`Ozt;a7$Qn*V%61iT*I><)y&8;AJFKW;lXu|ue0>CP6` zM50=dErB?7CO#zh3LgRG%NtF*aWX(i7JS#o5B7iIuL>7% zP?Ar4Agit(4#8~_%MR>xDtH@akn-_0iQu{C#h)KW1;!tY$}&<3 z2tr}sU&XdUT<`~%4^oKD^%b%#wMGC$eg^s;B=WR^VKIUj1oTs0yyVcge&F~@aPy@C zZL6QamlBUXi^ngxbb+eS)a2*^(z=F6U!u@Ne%TbcMa}~lEz)_*00siqf!AS-zQyj7 zK@eKyK@dUf3~AcHIFbzGI`f^%tQ|4}>aGKL;DUJXwP@tV3w*Coh4#_otESz=F%J z18U*SbY-p=4}b_Z85#r|+aa}}f(G_p!f&GS=0c`*IL`}_)`UD#VOwCQ_Xj@y3mx>>K{^MMXRV zpn*qjCh%42OVwgFu6Ad;jt$L(!8AGQeLrX_8F;e=w2=V)JRE&)!HhQIB}+!Xe?W>+ z1!%PeuxM$5m&@PM;JZJIblu@&ahDrlm&G;eK?9szIoqPg~pM)X&yp84zL6%n5Kk^1~RaDHzR` zD?a?OFru~s-ydO~3$D+srKDyoscOPAXdrLL;N4biF-BX#?KTLckz)$fv-V88Nbml4 z_zn~}v0qGR!Mx@KhL?RwIO_Kx6*cgAL3_3hq*@NVsq#A{)Mmc_Hj{dhjMLUi3uF?r zJDHe6mqD~;)BnO_Le+GtRiOvS+exr`w15$B!lIPcdE<_c&`uEo7my*hE+hrskQWC5 ztt_-Lo1%mkR3ZZc5?~Tjz%=FgZX})H*yqQ!2X`teD2Xsl6tj=Mn82j;7QKi=?y`kj z-w(PjL+u1^Gb|EugE)6arQ*e?II0mKaWXzv`#g3~wD)u(a#Z{Y(dV#Vc?RJ+1)3YZ zr8b%R1=Y~Ly)@OzIsEU$*U*)*o=wWoC}p^PTLsKrZQ$GB0G}*UOB#aZDPFS8Aquv` zfZard=Z6nSXPpP#W<0ntJ3)b4#(WfWiUw4lEuhnAU_fs+2H(0{IA9$HOPdMo9M~u@hdPcAI^*Ud9qw3yejj>4NZssBE0h5e z`=kdUZ1yWH_e|y(UAJFR6ZtbJ)@AN*R`{t1++0e23J?|?b#V?Em{WpK-1!Ks1tW(h zn3a-1QTI=IIy@s%tNVpV5S=o(7Y#FFxU;?4o2}!4x@yS63#Avd&T{$X^-fg(0%xEV zK&fVHW%U>CaC;_@CZv!V2Slm}bHU&kXbzcL0*r!fBL~DciW&jT8mf%S843WSj2GaJ zk)sp(Ofv<2rfpPaWij9iN`>MJ8GO3D-a<$-1p7(}U@f{EpfUC1(5)jC0IadO(+3qV z9T+a8x4^ZT4!GtYHVNdLtl0QXG*3prBl@php-*Ie^P&bX_f6Hj`%sk1L2PYaLaV5& z=!K3Gj67;uAPM8N*6vmiavGKI?%-fP1IA|6zvz-$g<0-H`ir9f-=T3-C_?@AU$vq? z&bAqHQf3ZH{jn2|=2EV7P_w2L7tz?(9IK<8<1xM7frG&^Atg6N!s~Gcfq}_B7PT$TVBkqK<7vQf>eS zlS}n1>qhvzJdU}6Qe_mTYnb4YzTT{a9JAct|D^@Me0c)e4h7gv0xm4jeE^`>h5TAD z@pkE@dX48%gZ9>~k%%vYkc;vS+P*KW@`3XdN|Q%j7l8=iEP6l!BXtKsBIq4KGP%(& z1;dwh2vtL_uL18qfQ61AJ{{`Nz%q%*vzk$Ysh2=n_%Yvm$fz>|0I(ej7sX0vC)7h4 za$NqPtfJo(-U4=)j?WKiJ2JJjpbyyv-}A~4$x>F3S`|#7U{G!aK%WUsq~LiL42Ir$ zpR}3>t5^qc5y&%Z0I3IoOG_|sK}M1-ffdE+vf~K-X<4uZDnW@wHwDgu^Q@0u(TW2o z@d&vGpbLpoaKh)$M-^Pe#osvZ;)aZ-S`$jZ!-#%?gx+WilMO)mDC_Nj_%%`2&yn^L z5I+3r24MEj3)t_aV1Q)yflQCGgu!3d2{l0)ICo?gDt9Z8ffIEp{o>)J8nePd5}7Alo2kB6OvGoE0se zafS+|(He9;q<0%o@%t82;jEFFrPYrFApf$tZNu<7cQ^o=M5PzwTXV2mrD*BG${hoC z7#4>+pqw~>*UzAPoLF~5tD+3qd7zY=aF_+?o>&J2N6p!wDKu;`eWs;S5RcknV1`u! zKYfaWmM6j(@W897;b3)11}~%iTz*&C!DN`UX{d1s?Mh(;R`y4Lbh_=c50s9d!8vL$ z_QSUXPDaRw6(K0G7WxI1!%SDHAki+*AmpyMS}&p0>~r& zGrPtPt%D5>wOB~zi|r}b%a_u=M$_MSeK#vfcjwf-k5a<1uF>Ace$f}73R6=aRL*?s z?Ww7+Ak1|-_+nD^wNo-5BYx1x9PJ5UI`!n^p@Z7k>7B3Guxmuvl2rSj>lP;`K2F=u z;1$gj@hdo`YPNsLI*I>D(cJvk!6WtmI(X#&(2qHGf-Fxrx97r+V!A4FX|=-H3g|$D z&$wU#2kQ($W3I5BmCr(G`+@#g9(21zYl+V?G|N)}C8vU$qy&iN$Qd|U;}KVw6x6)T z?Oe59lySg>m*zY`3qkm}LNA0!Jt_!>05fi2OKcZoe~*rmQBo%VgVJAGW>mlC0Jv2# zLtP~%CZ@O8LchZ4KDb0fA#^69Jq<1nPcJXafsR+hYomo5tWQ0dnCLZ+H&ae|D~1z@^hledFAHyMf-ijo2<#6bD2KzJV~ zjC0<_+cZY-Df{~RmVjvT{lGrsDOSTF;Lii&0X=fJJQFcL->}NIeO?& z5*R|DYQ7;Sl+g;lM(|KcpfHf3Ui|wx?CCyBm;^CV(MOtylg30pz2fz19E3`76Oj(m zz?<#aTYwDz!AgvqgTpd9lVsx%F@gvKWK*^TZx(K@)`vEzQLhaqBOj_lRK-BKs0d+C z8k{~!=bg6~?_uRYMle?oHP~mM10TW<^1!dH0`QoGD1CAcY@CASE3K05gI(?I3Y$1w z>XRDJHC-Y6$|p_xsjJ8%3$xhXo-A**vu%fM1>f#$8y-llPYax(gLV_tJ;q#DuV3f8 zNef04lmP$*NjW<^qhk&b>i}vSzBH)K7_f2xF|TSwDe*vf6N932<|w~FLa2v~rWMGkm`Ir&!fc*x)hkhBF( zk?@DM&JFp*J@x_$IR$9+;|dUW2)G3cXdX3|EG_fa<_C-_S#1iy@!FfYXt}whJJ*wY zk6o|fm&?vFEvoQaS6LH*s*rf_Kmk6Fo(Y^^jQsrS$Vd$1RdIO^0R}i0B^Ge>3Zvi0=)Qo_t{WkfwP7m!Kn&A!r2<|-V1S^a*@09 z6*$vTpfU;yK_U_h=j4ECa<(3XW*@+wdJgzKPUz&EfX~A>jMh+SRP4FlP6xo z!^4h7kVs+ku?8m|tp^NG0s|*2D(dDm<`)$e^$(jX(l?`n7hpie%rlqhj_N(1Ut6)|-{v&GM}(Ip5aP9oR= z@%J+-Hg$D%ZvZ?2)}$366YL+^$xt*P7<%HwsjqBsj)XrQgzO&eO(eMHn=gXiFSTDh zzsmp$8%n^t-Tmdyp2gsaun};Qd(L7gWDuthEG@FXo2Q2f3@|}Wf9KAfO;h$vtv2MC zMy^V;O1zS`w)WclU@!@?HJil8$CDZe<$V5YGFYZU!vELxnsj&)Qe891Cwf)e?-`Jt zQZ#`A<^*9K7`iQB5b`q5($Z!^eQF5ILy6^-A38Zl&8$5C{_5U?$ei=?dZn9F9S*R_ zV;n5%sDrzW$6vkCEPEe#O~bx|bcvvyD?*L88B&rC9z3W301TJefY3cUrYmDLhafim ztCTiUQ$glhJB{u6+6mm~1#v^&-7p~+XWxP$=+Pi7i<%R7iX9reF<VzPW z4|pGOIS>g8!EJ=IM%)BCyQl)crUu|z0y%u4cK0l6-n-|105Uh*AZK7v{an2SVJQlA zx4|bCTTA2c0M0pqq7b+fNH>ik?AM#46NV8WlMK~_Uxp7GoVMZ%RHnWb!lZ~U zfq5gmK&JQ+@H)Mqpr#)>UCiCh?HL%0Pgc?t!5zYxIBHO4Sw0K1h$!3G+(ZqNt=Zh> zmBLEA6x_P<{rmSLXCQd00nz^+tsboTu~0~4*Rb|WKd+sSYR^v8||3fMAK7>WHsL#&txl zz-ET>Q#gAKEZ0ytQ{7@C4D|H&M$DBzSl!VfQ9x)SD%$CrG&G=)zZBJ}sA7lDa6JBk z0WQ_1CY0ei7RkZUSxUG{vx-e|;78lx%M{@N3#=SeV(6$CF)^_l%*@h2ZnvOL7}SKw zFNdQ>$RL+_-pA7*(mA85*gGod@_qcg-ho3A6s}8$%K!jDXA<1f`96u- zaZr0fn$CE#Ahfq0xN|7E!-x*qzJq^5hZK}7H}NS#Ic5{2^9}%J3J@RDgXN`y8^Z)P zL3?2Di_|SC62UmjsaAv;O6#+}!Sz5ikqo3IItvXMuuCQPW4R141T2Tht#h3TKn$W|*-jxDTDlpWqUcGA1(Ulyq?lYNZ-ZS31iu}uYuDijxZ{)>1`d6V7 z_;0`6qaomuk16-WLh$ZC{Fp>(DMsrPST@iJQ?SMTDl03|AvH-!^Z@`>zF32d1UYum z89ZAn2I%lWSy@@b?yMNGfW0Tj1pBboxdTbN=QW2utEZ=@9AJ;{-qfkEM)$f45Sk+A zm^Dh`K^poD(jY7>B|xLdAmHxd0agx80EPLs5BEj@)1VE>^|{UIiYKU93G7Ea8{ zV#T(iFq=r*-^ZPR2@RavzeCrMB0Ya1 zvJZ*uj!I8D9Av-vxL^>G9eVF@X9*ZwxUkQ z$S8?ei%Mtw)7+lfdV+%o+hfIufKV11Du5h8NJuCL$p%i%VsdeDNmt25{qR+T1`>^X ze~D4L;$Y=l#R-g=1v-r~>3zSBGk@EhPGwz-n7eQ_as9Di5aL=G9gcff&teu1(KkjdC;%^;e zVq%hlSf9U34GCpq!xqxMBn*EC3^TH_KLdCG#7zL7HBeOW`a%jrtpp5g&9`s#*REX~ zvVve2W~2g?8K+*uIpkAmSla*georGr!=OL<-?9-3ubC1b!4O(=cVLUB*K=`NF-ubb%r*mJ^Gm2b(1sb)U z{kY4bZT|Bj%=93EAza8mc%`$wXH_>0pUwM=spOnNIMn707Bko`23)KgNaLX;z>tEJw5;>P zbuzmMnc~ZNKX%8)ZD00TjUSIxy!23;^cto<^#ddA>)B6rRs2Ui`|fFmmsh^G7`k0L zAXKo>KgpA8*jzp*l&DW?Q_5W`q;8`%ArKHx=U7D0Aalh&wcvaEa~sN`&qcRK94yL68_bE*{?b$f*YVi!8TqBA33)E%GNF*G6FSqg zIG+v^jTXTPuKv{;*%!U~g?;Dc|F8Dm1gz$L{Tp7`w!JeCsmQQd5v2$zDRxM!l+rv2 zO*E<`m1MJJO0h&JWk@uwB#o=_lkYadEWD!|NH;H*Lkk@8C=eF zIqh1l_4|E)-|u~Yru)vD4DIF)vtYS_-rg_54!;YIPt56mZe3QAczoc|^`*h0{YAf; z?OO0KuX3H<(Zxs2(l}FI;r_kokqMml@vspr(ZA?iy~uu6q2yR8&=~rxqFI@<;bP*$ z&eR0W>Y3YJeLpz$*c4wI%rZ)kPkVj7X$7ZR;&*@7o@VRd)Ttc7^UUNAX~h+NN3EWW zv1(0B=?sEXzBXn<<5eq*I*xmK64$}u*U(??>|PePEqqp(gRAgIdAof{TqQ+|K0Bq5 zbw97L^wW0gS@&Lc>W13xKbSEK^8=Ma4EodG=3H`%tm4LXw)J*QaSW>Pmg^i0s&Xv- zQhmekp4>H|M}eMR<|8V%DpU-oHRc_xu?_yZ)k4}eqtD7A%cOH{N3EA@Czsn>b*)d# z$}h14?_@B!1sO9Be)|1FQ>tuI+?2@q6R-*Bc`XjUv~Ij+MIK*K-ju|LgAb0&?cj5e zJ{xm$u%c$^`--Z!CzL-YcYU>KtZ!bH-Cz zvFB**TG-K%5&GrPRQ_l0+6Q-U9kTR0{H4L}Lw3ZaC*S6qS}A>YdvYe#f5g)@uIUkX zM@MyySHT?P>A~EVajA)Er>@IO6-P)e%p1P^ge|owN2hq7lYN$WK}pL?)0?>5;SHX@ zzK>WanqjB!mbaqAU(xlaeb44SYitv^vo5mANFfn6_`CKSUbziSWR!hA*>pUy^F(5K zC!cQhglF=PU$j1b%)j)h<|^<&&RcQ)EC-v zEx#qZY@X>s_u|&fig3kecC8V;1xNmPZ(COpmELLmI+43A)~$Y3IlrfXRY^E^f#eQ& z%>zF9PuF0)RWC@N@L`f`wWm{)Z~D1`$@S;^E?vHJG4JahhMxL@<#~tr+=G+5k~)4} ztZ#38G%mritW|XZvwHd#H?v%$!(PO)++vHZ%=4h_s*h*eoa9U>Y?qwlUcMFHa zr1rGW#v)dOw-rpItF0Ua=VAB1H%)QOF`MMYr*k@1H`Q&mYdxECBbjrayF*2!Pi>-O zqx4zsjc*DK=5?0Rdgt?cv84tm?MhC`c#^7@?8MYAIBN3pa@_Q@?sX~e&oOqm zeDB+<+t=PA8B+Z^ado>>*?ZMr?r4a^$*?>4eQM(Rxj!eb{>AabTt`>mMb4#(zQGSC zTP4*$sESt9I@l(;CH^tk!u~SLEh>XqlGdbKNAZ{k?+ZxxqI{PLI5~S;AIc zJ^43cv>f~jK6{XCXooHaLNUhkh~*YEk9?Rx5J6svO+{`4g3yw>JJA==x2v;rA2ky_1yj?Sp-Kx6JHQiJcjVWu4J3a*?4Ou6w>Fa~X%j+5{#`3NwyfQ|WSi zuBEOae|O5P^Y=_AJ~c>BG2Pmj>lZ6`c+j)Cy=R;(6x9M#+!>6kg)=#UJ9qZy41Jh5 z$e49mE@r4+d`Ft}g11vpuOas@jJS1xCWN4o*b-iQ0k^qCb?@?MUwbJc&j@veg0mBv z2zw55{ukNu&+|8^bF#nGxm9~Tt1lRg4()AkrpDyPMz39f)Joy<<>%+W3mTiEsEMfc zU#6uEOeN5MG1?D+55=ILyFn-$Xsj*w9?QtI4nCOI6Ka@eS?ZGWHFK)oTeqJw1Ewn_ zze1z)=wS0sbkJ&OPS~NulpxcTJjPG5vK&&*gSpsASVP6#u8D38#$j27`?II^38^eM z{rdVBhuR4aoOvt9q3;oumWD$Rs6OIlXAsFYaGwq6m0>ahf6J3x<(6^bNPt}@E+3pN)u+0Bd-sc!uK&Js zE4wW_?D%e=?@z;txdPVm!;UV*EoctD`!?imyrNFQ{^iG?O%G2wyy$OzouSh-rDSE; zNoNTPlE2Y75d=ph@(A4$O68(8P4Zq%B*W00ei1!NV

0k6?r%Yc!A6yLDtVVy?=uddy!s!Eh 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 D^{%Ns literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5569b2b0b74b9c44cfb3d3a290799ba7c082e7 GIT binary patch literal 49164 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 literal 0 HcmV?d00001 diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf b/IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0a9ca939762cb97207ad30ee72087f2ec6b7d653 GIT binary patch literal 18394 zcmd6P1yEhf)@Fd18GGPW}T!SV6IIXOFm3~k`tKi27J#}G6*`0{t; z5{W|@IyOF4kTvHZPJ#Y&8)_M#&x!hTJ z5c&>L_;J^PtzAp?)%nPj>lufDY&g^H(NBzaGGBIyFP_ro^0ysRRm8qAqs1$IN*Inm zN3NC&>_we!nwxY_f-tdTgo?lLCx@ArRuqjT_D&ChPUW1%G~TJMu2O=1iq@*x>k~jY z%VSo;i^%Ehi{g}|HVoF7uXeJ^2_)e$6JMBm(fIXe*vq0M}ZEdn2#b}4% zcjpn~?!JjJCA>^10xF1E7}4`e5RI`dty?f(OSM+WqMUQKk^wadncJ7Fqm+y+*aD*M z(t3^SHhmh>Tpt;)i$xs7T8Ib3{7NXq3?m*)txp>=8}Cu;8=wbwn)g>u*$PT4_Ti=C zMDm^V6P>FniuWJO8HOEf-+&qdKj0#RG6R)8M(!;H%h?w+&AUkmvHF@|1QysAGOkeV@2GV(SnxM0IBNDZH;rX*b$X zwYzE$(G{kQXe_?^PCW`UdqaynATiC&f`78PT*GU(tfjLoV{l^Y)76^$Qc4$AEco~H zo#tbu=(mLLU0Ptkup=?IsVI399Sd9cWey4Ndx%M#l!i6a!W=(9jxBYQ%zH9x+F&MZ z%1l0L6+&r2N&E8_cxEOt)&$|`SzF9c?wY=dryF=37$K-3Y~F;F7*@GerzA0W z3;3U2yP_Y}eOI*3+^KTH&duYi;`%WWMGOVyW~7gvcr{uQ!fL>kDuLaL9H`PiFZ$Wc zz)|tC+`b4RaZrcW7M&EbfoxYP->`4um3M(_=esnZGhQyEn_!@>*r|tx>{ZUYOyBDU zVa2BwwQ&Kz~$55@C00fT_3l*Q=Zg4=I5OB zJ^r}2KEFSqtlu2LDuWG=Hq(+7{<`FZea6-lpf(`ZK`V@HSH7myO=mg~KGOwf zmT;K4@*I3%O@#IMEg)i0aVuW@vSR%l?JkRfk2X2Ze{q!!GMIo3Gn{|l9MBmJ6(PE}ZO$OScS^1T%>ic} znSrz`bT$hf-9Ae6t=0N&|xLER8Kl>XN1RGrD3 zyf0+b5ydOE#$wof;WY2wR{E!7G~JuMS3vF8u^nE~4|?xRDTmG76`hdq;6>Iulf{%b zTGmh<{oht_M2|f|h(66WYY$MkSie%J54!ewzhO#@Oiw-tKAQ^aLQjNb!ViHBDSb_ zcm&>+Fvb(IGbWUDlu@p#ezTV>-x{L&UZ;~tNYIoSYoU(8z7SWuXf^~8RGLH{@EjQ` ziIscfqKI)KKEe8SSFJ?S+oLno3Z=w2^m1WAav8?+LRUviSq{hi@Dk*Yi}MaM9q;ol zq_p@eN--^IXl#T$8s!XQbxQO=d-skW3s6}T76QW@Z3x8-WTk$0oF)X%(2^Dg468_v zy91p|RH!6p*YGzDP-ux&xlt(xuT7LoORq%oG4V%DF{s`5P_$bl=#Irpi2=S z40+C8Pc#7tI<6o`t&ccjp(&QcpygW2Mk6K9kQb$CtVy*Y5HEAQOvA>2+ew~P2Q7>8Y z-F7+geT(&UF%)}AVZwgmr5OCx_~p($*e<#bvQ`o@4%mi zn&i~_7-*&A8Yi`i%TbawtrF)yl`g8z7YOdz zD{lGdx_&fsaNn3gJmS{EQc&)oW(ba1S2E2O)WdMC(kG%AYKVF8q?}ZZM^odNF@bG5 z1Sj9p`AWVvyG5nWWYXSs(Ypburi#aMLF7*0ft&+8v@~A> z0huG38|sIt4O?LatnF{HX{G1S5^UWdA{x7f-Hj|zU8}?BFms#`a{IUIP$9C zxtp0%hOHO!kroi>$Gy>+=DMzfAyPsJww*6KFHAf%oCFhOpdR)q?5ljcRLaI$3sk)y z^n#yJ5Sy)rSYXxY!JgrPpVM*q?xKMvE|4&B+xk`~Knkeu%{f*I&*Ns6B<)*#A7yWf z7m{wjvn1PGLOrSnWS8cvhr#~Sg}qSE{GTq}5I6fD8b575`GNIJ0X&>w^9ThY?MC}RjS z%~;lGU5ucC+gi&Zu=d>vg!zgPA9)v{fXTYch(Mcb8a#+lyF49r;;|^#)TonY-Q{EJ z9%gg#>~ew!ufdH$5&M={rzjO|mPkgZ(a5!_cR8{qt7aB4PCaV*+QR<&QMPu&JQSJe zYnU((TbPJ_K-r*8kym}^&nV+Ds6;L(8G^cht+X7+xlB1ngl-;A9Cn>i*08V@Uu!?@ zNcdLH;7O$wo=tgStzuJLJ^Fp~rZ~Y`Q`_3?p-#t{8qOvOLv}#a-v$o1;&-K+m_xN!iU7r)tZh=2ek{?fIO-Y}H zcDT*i0Tn2@_tfXE1}a=$L3luUOc;6e^T4m5o9#}SE^p4mU?E2ov{`I<7qSb4s?m3U zFpUH=a_k`8bEj@*tGS}TtwR~ZvJ-7Eb<$uBZdZ9M+*6}>!rDt(zBIp9`LSNmu4~2b z(T3K$i_y(OGwsORec0GSzWuse+86dLPIsflMD2`zp1gUJ%>eoYu7hx~j<6kZfv#7~ zydiB)I$O8M8)G3A4cNFr2m9%AKrU7Y=_o*Noy*k!s&Z@>vg9+qmjZ{&g-eQUQ_cJR znS)Dknc1*q>)LO}mWR|b$u1CPk?(La?yqM&;P-dbqGxN=l3NbqLr=fUbElePWzk6J z5i(4rsOjj%X^8DcrAvy30Wl+ZK&9=gRzItE(bXfv30*v#n4?NQ&_`L?dLC3MOG0vI zB=>pu46P0XCf+UTm&PWW45iY;Yb5K$i8agI>gts;`soth8pv%g56T$kH(3gVoza8Z zESluXUw^F|Y~YE6Su}&T+CBk*Z=aRr)@dG&`ogfJ-CEjp&3|sEbX8JxNu`gzm(Tp>1c}j~`gfcYY`9>A@wlfElh5 zU7Fp(5{8*=cinhvHn=Nwe|jlms-9DdUx&v1N^0k(pv>RCJy}K+qF9YL;0D%4y-Atk zG*VhRnwq+qo{|%4ZjqKlhw+W0B)W}iUNPb+tFu$9MMf!`C!2jJZ(U8bV6s_bvHKOs zB{&X8?k4ccaHLheFd#=89)>houi%zZgVxC??p&p(_yV!f!F+q6zenbspy8M7>e%AJ z#flk8Yr*dp=!wix)eah?!e5s-oM<+>^tN3x+`C7}0$1Inw82@nM7!nm9C;AHAnb=^ z6DXXIi8loQ;Mb@FvJ}$;l*g%t19_)&E>)d^ZHWRe0ioHY=w^1nLTwoX5X*RJ@ zL4D|UOAG(gYX2#}x37!csjuf_Sh*pjt^Ht$u;!nY@gG?UeuFI)+*V`{y3mcvd>LZ#i_@J^~1P;!kZg51E zP1)4FrRq+8)~v+mHaX;NMAblBaBnZnlN|dEz1U3hru?;D3?&B!8su6LiPu(UYmPVt zFLp>a|;nhx3pVA=#7lO}en#bFsHUVQbPl?r&!vEzd&` z$%}-=@X0F`htsm!1Ukw-Wo((%FYJxipR~`z+pa*s2&KcYy~}G)H}x(5^19INs9>pW zHS=@A?0l3kO%mbG?4mtNioyb+-LB)RJ~y!T;@-JM)f}R9G#PDg)kfZF!Ka??)Y}Mm z$89l+nSW`=AZ2BxV<~en;C@y{3y|AUCHw6_zu2ssA;fwd5yV;fK#HDb{fNt*8RJ!AX#>{@BR7h5zsok6w)X~4!^x&TBFF3OOVBR@$pvWJ!JQJe*3 zz>xVl)9HpA!{2gZwz<5H*_P=&MpPV^@e2Dkrx?u%%4SK_mfA zFf(uX;r%3e4z?jWtVcn@qVqbIjNpqzYT|^78rfcjY;!tPqPI0@2m3uY;O>(cQ;Z(` zS=*coeGXpV5Bp>KS3?+LCVU-wb)Qix_Wnbof9`fzjhMWjYN1Jl8pp)BYLmoUj(%!{-IEycYL)<+%dkEvYWE z>B$1p!O| z24lnL-{-*VbH?vq1~EHZ=f9OUrDLRH1hD-XxP7VMMZ^SP|5Nm=_x$%q`y79@4`5L7 zum=Gc6b#KkzxtwJ=m>hQn(0qH23e4ag`tq0J3#wc^xOs`8$A<{nURG9z{12y&&tNi z`h2SUOIP^0Q_spyfR~{1?+CKEqn(TW-#YrcwO`UdEmeN*gQKCXll@D}#vXr)B>~Qk zF2DNpVvX=~DG`vXg)vA;TdZ}>%YmAUx}9pq30a17Gq*Hl5FHbffW{)#06X?; zlnHZxWE4^G0bE9~&>)yMR^TMkA_8yTqu|H@NF+i;4KDFI?NYjsG|>r2nZM_b1#Ru{ zsuCcZwWsd>c>I~!@Rmc>#qOK#*pG}=&RvQiR3UUFDgW0LGC1naOtum6v2)%+K~-p` zZPXGNpkEUShFS7dU54J)^*RpBA^3EO4TUO$C zk{Yu%sA_Zd16JovxLNTOvK|g&k8I^_w@dHG@v^eG4DoZ!X3B09|od=Uxq=Hq^>0i8^f4u3CO;)Oki4S@|Jnvydf|74Wm8Mpb|Fw0Z_$|dz zu!r>n>jql{eO&={UV&u9PgyIO?=yqmaIFA8*W>%@1K%VC+Q9!x4sy7hwQnA zWqeAKm_6IZW2fEa-3wbxxTs&eH%^-QIe2hU{f)c)@yBWI%2SwW zX%R&m9Hr0E__{Gx2v^vFhZ0s&Ma0@%@KriV<7$<3GD8sq)2Q;k_e|WYORz2GR(&qs zfe!;F_5<{=i6%J`!fWKjrb^?wR!ycO+@u+Z#j0Y_kFS#Py1Qh*OuIIQ&b0NXD7( zIVHQA;o7Y>ubE=P|9J8^NmZ@gj99*GsbrTQihAb}E?K2QlAIznLM|0nFsEfiQ~(>!k4pHzs3ja$UPNdiehO{&DDWIth=mM*t_b{sufwz5^C>~Q#Aaqm^qRd7ft zulMxx%efu<1zKyEUw_P$HLjp;E%fAWBlIp1cNbewCtrO4-W1&RZQ^1b2+qd-o2HFv z{4lc&;|DNXpXzy89I67VS!P={c8jr3N0&az%c0BQqY)F#b!Yi!6imZ%XlQZ!na$6> zUoHRab+();E;k{+2WBXK*hr_1XoD7Rr+!NR(H_k;S5Lz2yRm71=&65nvFDvQYJGr~sr8RNj0gCUq{X zuTtAK9i~jMD1`i^u6AVK-CNSaW~uu^-}%agdb%^qHvhDL8y$3}(#_c673d!0+(I@l zj&c=t?u_8G7bTm%vW8GQwV?WW#xVk*XGfo*-;}Z1y8N@wzWVC>MZqv8d~oaO^!`-1 zE52`o(PtWa%ZD)joc8GK&K)WGo=k4yaHO!)IH-4u@e)ue3L=INwR?R<#;mg+V}PQY zQ?i1?&Xk13J;Ea$x^zwLlb|OjKiJcF7jRM0Je%NSY7^zf(c<^ZCQ6NHM*@xydHaa% z(#YKOsM6s=l3!#;L51Wa5161UHBZLo6-_hUohTQ0iiWT^C?BIA^&rlo(pb3P{Iohi z;IUio48K&c>}bqwJZO~PwC$_%%_lmhymY#W0A*~mDyKEoFel0sC`J)l(}6#xm2Wd z6xo9tix8bMZ`jdp$P?$pazmGh=A_XjNY>47CASLPPv>UhDIHFvM&ruNVynr8bX5wA zMH0pf+;Dah!+9)kvL#`ROw+xa>bh6uIydHO1ZhVBjSZGNcfPZQv@wWeB-W&prICG@ z%n_MC%>jK;F0;n^EGe4bp{0w_L`&t>c8p^jl*OBi73O4FUBkDSk3sSpZU%>k z&`9m=SN`pVd5ma3*V1UoLS74{IZrQ3L~E({ruB1W`BzO=9rRM@njg@$=0C;plIA(* zB{+{YcBBh9>bnzj+yocL1ev-VEY!7^dg~LUbFtlgpjIaI$Twg2(QT0#|8aG9H#Cfh zEbPXzP+pCWKP%iEY-C-rcte$l>yvSWLX)RvF>GWK6P4dGjh#Wi&|CEVOAN=?8&0E# zDlVfX-Nhep^_# z=S7)(-1dNFp{$(vy`<164;wK8EI{GLz;oD!No;0lx-rFaUbReZF37TaqF!cYC*nd0 z(kCldimwh*S8r>8xUT$zJYY=a(#?2*spuf32PkOMnp4p!(20=95kicd6JL(#vf;Xa zAj@>QQf~Ca>8w`Gjc~asmEzp#{;num4%h3pse%9T_ISM_MucHdog4qYPycbq59YPp za&o)hX5WM4Ae7j!!z0ZbAF&T2m+9Z+lx%bh?qn-^p!M92_12y8Spp0 zMy0c_j~B`|6sJBp-?2Z1rD@Xh_sAP_3bUNIW|^wtRleP2*>mJd9?Khc!BNZ6MeO5r zAKXz0r=-BlZNo(i>q|+=YcDUWQ*BWT%hv*wkSO%x6$GFc^^=`^Xr{_)B$b{3gthj8-op&S5i5$;tdCC4o3Hfq@2de5r+=X znxp+1r=1ME2R4^0zwREpZ`0Ewg`Yj;G&#&&RmTF0PKR%Q=213a^`6@y5M=9{d?LRb z)Vr{y8n%uT{J@I*&LS6vGfrX&&`dL0F108WF+esk!6CMgx^ezqi$8gzF5Dp`%X)e_ zAJa9V&E>13>EW&}iUHG12gjE1F3wOYmLQH{0xar4E}l=g^!p$xCW!!6Dl*~l1X{}U zxKS{Djs;n40ce=`IT;6vbb=}oEs~1lnPFdaxU0!e??v{cuCSFOkoHb)Y;R$QiKtGz zcDh3YlgFBFnRo>yhlk5Byj?)smN~?Z+tS{sbj7%6=2_5$rMg(Ze zi{;%8mk88bo}U^<-_FsI-t$E&n1F&-Plpw0`S`~gBh}uQGrNg8w^7VMAJ&2hyu*8m zXyV0l=nc^7pD!H&k0OE9z*t zdd8B*X7qOSq!^?bK9dW8vr6t|J6AeKN;nlXaf`X0xttY2DQ(6p4J9y3r`C<^Os5JW zlZjUQV^|wNLw{O(hy5P10^3YZQu;Xgr?aJ`rNzO}^ucs`@g!BB1(YC8(0-BI`wKHt zdEuDQ+OSN-B*aC|`dp*?1>dMezn`0PdE;1wcn#+BUvzVH4?Avs*7>SdGZ6{IqTe8d zH@JD%8Erm(`68^TX&izyh`<&17RzSkm=tOU@l0`pJ)t5z;q>WT{=4 z#Uk@6+PQSY>=GU#IHq`3gr8;9hHMJz+1QJO>`^gI>*na9sSYqz6hVsN!yDCobH@18 zWU!Oy$Pl#Orn~S};%Fsj(6z;<*Ln-V(ANO2&FirIjoSh>v+|oaU+anLHBq9lmc487K9Z8Xpm zp;J(gFJ!rFS@jljUUNpnU4(m7fvW1d)eI}_TP@3LRkS$fIDqw<^_p(;Zk(2N^0m@h z>Fg+iLr3P@nxAHT6HL=A3M)cSEIY;Lv&v9EmM7!`!Ee@8I^yfagDF2LAUnkBz&2w3ogN<^vaJK{+ zx*eryO(JRcj6QR;;jF?FBMSg)Vb`CL^R3dkOQ!_9lrn|so! z6^Hj>Wc9b$I}^E7sP;7^!Jsk^5TL_tFE%#~KER3~NjIr6Wgg@Vr&XF1;WH7s%P@#5 zb(8s;(_*jsRDjb*y=?qZX|5==j0J(E{F9$?N{9E%u~QpKxK!kxT3jOEhR=}k#^!~2 zfkLY2ZdlD0R^s*s$+oIPM5CNuS*eQaM8g-iFUJ>nQgs`u0wyD+8b+O?OFP)oZ^>%1 zoASsF4kc@HxLfp3Ovmc;7ooad&8+gwp;ku`=j~w|zTt^x=YX=YP4I{$pJo5X9-1_# zmuI!D>zuA*b@#<}aK=e01y-IflwnRkGA)1X=E3qL=A~awK9NVt?=Pafl!omM_9phDLJmhF z-|E}`>G;s}Zs~R@Xel8#q1R!%-O{ z`W6EmdT;VisfU7hUvKxkZ0eAXea#?*-E7ZqLR3F==Sa6;$@$c^mzV4J#4Q(T*(tA& zy8O5km*Zi*?y!YR4es4E)0s==s&z4xU2i1S<_8|pYA)1S$x2B{d)ZQBVtdgo3uR`x zX&sazz+uRkq|j%9^|7a&EPVCUZ)q8fJAD*cHJJ=dtt7hR97Kn|lucT`y5c+?<#Cjm zoB5ev=`p+`yr?zIH2P8FtnH-1UT4`(a?6#fHyc7Q4}6LNAn}@%R45-GYyy)E3cMGn zj)>Qt@xVs#!_)e6IyloB5k|D>Q^mmShsX4H-6lC2R47A1N`{G*2vP9R%z^Xo_l*Ez zG8BWX7)rhV)bMRm@_W>U=}@s?&d6_2p)21h4X{dyGe)8~$p+`g^1+XXk5@`6wOdel ze83cD67%_<-)q8D<_}jDkSM8|A6|~e-s$PUt4(=qVkcEs*i$H7$gZrP@!5G-0PQYF z7u>H}bHok@w#7~z?@{2}jr51luSG7zbD-agg%MLGpngMFcu#@+N>t4B!=+RWRJf$w z05L#aNyFR}n^c-4JSHVIK+{V@q^)8f<&+ofX?d7I6Fjih{~L@y!89?@By>zD$uWo!U=@g`?-uVlBWlmj^1g%;43ZX>o0z8(eSuFVT zSSr>tJfT=DKWdXFL&?J_=`j|s&(PPbZn@;%>jasm1500Ic0#AUPElVew8_lS|u36rug;I@?n#oDAlIl;Qn z@XCoxqwUvx)v;jm5iQBb%csNqc1DJsWpzt)PNo`MBIaA;;z-Kvx5%JpdqSqyerz`` zX}NfFFp;;HK2fX023wMQDrEM2E=S5TUA@S$GtqWD8pFuGy>J5vIPYUi{L0o~j(PQc z_#S<{>)wN*Y$M*Co~Zw;?ReoN_JV7nBKIwq-jM!=DwJ5E;XTL9-1xBoR46L%46vq# zmZW+G>}oK~g&JYUvmcttVUWddH_bP>$+sDth|7-L& z0r3p+Z)wo#Z7XzIeC`&8j$J--#4Pf9-|mR}wJ>;{-mf;) z-uphT9C780hecq?<9E29Yx@TKq3wEAIQ1j(c^h@RFT@{YcI@85vNg9$YDZVj&dHym zI)1>`U1bsgh|dXOhJ)wC&Y0(uKcV6Sa$hUU9sVPUk!Iqf%7Qlr9|~U zmi%z$q$Cn{=Q6vnCnZ}-W)=9^cPtFmi1(Vlx<7G3ux;-BL^B6vv#E8`r~X>~9g%~K z{DF5;Ba5fkp1PRZN(*eIR%hXKY?~}h0Sgo3S_;@PK6-sA=E-qg z=@Nh>noqe+fk9p-Q_}anCtq69M$%Lyr0eX&OY=#8kH79|UGx;cB#Y0fH~Qy(P4eld zic@uNw-x$NDg1|_G|epTK6xi^f=0FV@6HfY&ZQPeJ9p6^upLB}im?Wq>+b6-+ld1P5M=#p@Kb^e2_d5rD) z&q~>*Qv&X5y^})2j)lzGA^tqwPnUCQOjd41a_ZwBn-+?dWtC9rr{ywg%}8L!-#90r z(x3zzx?d4a$2uB6&QpW7o-{M4IrB zLPiT&!7X%P#@<3YDPixQT;DKY`nZhWD1aMD>MRGJyW_N`m5I%VWbTHYmk8FI71GNNPr$6k)% zLF!K^umm#9RY|e%GJu9XiE5;~fkOJUDBrC2Jzsn_@{BUvb$NuFBUrw$7_|cfNi1p< zt)Y{wZ!^|Jh;}GlE>Tkj5j#0zVG%Zjb2D@TSQLcYzbHDt{zyVIz^)YOmggB8r=uu55VhEU*8Q*M{`#>}}%&0^qIAIDG41C(0o5i{J zg-9hvbHhw98Gzi2q=cu0q+gC4w)SJcsC+z%FSe!Nv(M z-_3f z5gTo_;5$DrlnSSUw4;@c6NHP6O;cX4276(WhZV7T2}WR8@{{i7Hho6uRy5*t{k7kx zw%NxYNQTSrC*42u8?w#Z_zjp(L6?C9?{O0J@lqJ6&%%F78I7w?hw-)qaSFPZoH)y< zg%%OC`2l?6->uhRg*-U#{+u$S6FxQ`!8%v8%QuY8Yb`tj<^vw5%tm{TjTa96_>_=y zf;TiBmE2K>l|~TD>)9go<19ubuLVf<$1n|i*g12ts={OfyS83MkR(^piueHjI+LwIZf0P;o?E%?fc9 zKhvVm>b@4L?L9k3P7>3JtZU02Mg`ZXCoVsS%i1VCf6Eu9Uu0a|hYn@zzK>f@c(|oa z73U)n&l^itr4d3RctY_dL|vRUDLv@ZTv2$n(+(PH)f=V&X(u-T88hs#g;4I$tpm?YKF0TbkAY{_q-6kB>_ao zXAq&<_>VL&elv_1I&2e_b}YdKwruId^!<2Q`+Xtuu;H z0{nVzL%dLq`h|HsoXT&A6<7jn?Mk|k+Cb|S6Hq#*b#-^&ERVG@SZlo?sKUb_5U%2F zWoA$FTRiRloFS;hTSX8?sjjh^6?Z2tcd2cNDh*P#D!y9zfH4hH_mGl9uU&w(C}Al~ zSO;vkBjRw9D`*%TQySMlgJmMm9dp5PbFN;lME zL3cdA*Zd&7tBm@<&#-}4%AlQZ%V_Q&X10>%Z9r^}Ew zlqnB`y%0x?=FB}mls6MB56BZj%AW*5y380*VlBeTa}cl|NIGYa*o5gG)KjTnY>geN zU(A@$gKUk{ZFmMqM2PkmbYN$f2!6-zp3>w0c26G?$-!M=uba?1_HGBwcyM;m;|hl z<3x8H0dlPXYN!YzEaLlqmp*P{g;$TJXX~imkjQ2b3{n%r#Pv8vj-7!>gou-n$iZ>p z8^~cqqMn_jUA@EsfoS^njuZA}T8N+EI~8BKBC=bN)i_jcEY3(&+AF9qIx((WQ6N^s z=Yu0xDT=&q1haaV*Pxg>0r?3o2%;ipA>HPhjoxicJ%zth`zifH_ zu>sA&!ov3F1~AjhR_?#;jxzmg&-cG=k3Mg>{`K6CZk()bAR}_{4PS8bK1qOqaS^Ie z$yZs-2gNDES4YI6mTw#fNE#~o8Kes64G6DqOrgBOmmfWd`b05L9UP&xwiuy^_IY%3 zN#~~=-WVxM@;7f^C$64MkLF73^jx)0SP+FsvPRMJecka0Q*ZLTP?kp$lG1Dym3Md} z-t=>UpwhW<T-T4Gk{>^|CZahbv{AD0{^X-*L>aONO=Imt7YM&FxbJEywtx z?@OHFy1+Q|q3Xm@#@c{@r-q{X%FDpJlU#F4v0-M&$-VwkWn|gltMFMX1TjjRkmpoX zS&baA1!EG9F0p(sk0b7w1%9nDLdBroS&~QHAXjkyy6VyKqX-P>QU5iRe+)Y-BjaDA{x9CapZoqVJOUArld+?Py|bO;uU-5X zk({B;GbunrTuDPzlSTw&X{hF+{Jcf~SH75`jfJ%bfa-S^;3bdxcc!(W+4KHC^Is)} zep3hNm>8KE0d%bF%m5}1P8I+YGYj({tN}@9Lu(6TL0dCx5P6wDT!t}!3 z_@BQlEbIXGzx}_I{AcEyX9^1^^RFB>&X>Nt{Qf@sXB+=7Q*4ZkzbEMPrDCUQYw_~%<1;Vhxi^2GLrnkW z`AMc1Gk?=x{@ac8?>rOcXD|JeW};%{tfG#wa^rjR9AOqec@v-T3Rbdbn*bcGn`Jr{ z%EK67A*o^s=!qr41|)^GKs0OAFwC5CUYY30Wa1TEIwKV_4*1h)QY0 z9Y2RuVO^S%toHSjcbA+_ezZTV94<-YqVy^uyc?+oNh|N4Z+#G1fYQX*VYOS|$Qj;2 z6J#VvX)plUkIPsEd~_RVR^@YZ?cB!mOBxtJ;VIRDnU%hV>yn1Nd8^;(EUE)$gW4); zKN1jLJ-^`=w5A)70dH2JVWKjJ3C~9bbeW86iV$1mPsk(YQ{~)8--<<1@gnEub{TfT zbsKb5k5K&V9LStLu1_Si^W$*00_kK!^1FsbW^K0M&D+U`6;;If_k_&uuZz2@w{riz^UeDB_p0O)+vr&=F@G~yL1qXlZllrp-@w%MzUFl`e}Vqvu*v= zWv25Nvz^x68>caZ4v(HwqEhmFesk%Wuc%*n_A~dS#>a*TxvZTN8pI*Nt5t*>txJ*y zccW__+=1SE(>eBp>p%y+VDfe2dAJ79p`WIR$P^JcB>c69#-?y5_HV^1yBn) z$7tvYA+(sL$-XI;`>=*`R&)zoyuyt>&hZN(PIPtIT>u+Y5UjMb;=Z#qO)lw%asJMf z*n$ld&Qv66-C}xuKKadCX(Xw~iiires#UQ>sA5;TXbmF3(uXlG_97>Fu@KACj~o_> zBJ{a!^Xe1dBx(Gv$lyU+FD-)T^-VEb7FX&#Rf<9h|zoDo|l)ZxFSy7PKjt zCd^P(JpJjIr(%_DC06VceanYdCSgQ4X(k~m$VF|{G@6hmW>u#_nJQK=IBl6_ViMlw zUa2nqO$1}0@P}hbuCQ|oGjguy`Lt$*O=B}%5_jaVl2co~UWaViK#?yxtF1)Epg1}S zmuUkvM6(!#@@S>4?3*B`BCMjvYBD>8sZ89$fJ!TnrLnlUVAZ5=|#QfRa_Cv(~Dnp zNJcqdXMxZ9=|CB@XzShG*n2zIEpF?L-7O1GG##Z%#Aq9I)_`0tel`p9*xkqu=Qq}K z7kP8v=vknki?AL}rAPgx<F8JWb}Zkn$*ftb*bud`(}n5l zQc)ZY%`rk#)YpV^bW21Ngbm#>OK@`$6|^78M}!< zUQPWoCC;~Rw`#9cMPW;Zx;b!YaA=k^PQFw>gBuN8LC|Yy5)J$=5;4e4yhuokTQ1{v zO8HTSFPo7UmLq7$CL^HN*q}(x$oV`4+%99e5hL&5bC8&%!^gK_*+4`VwD@TmenJor z$#b+uSP>kKO&PsCcUdzBxA>oZ`cfuVl66iw&FZuEsWtz zaZE;y@=@;%ZW)ykZVWZ*g%Maj9CuEjn>4KvZ7BHmAwxr%aZMXwF%w`XpnQf(9eCd> zzz=oVFzx^9=gs$$N6eodlMOKiKchv7;M?dz4+xNk-|0m<_XVCy#B)uxN+4vLy{1+Y zl6o~re;JE-ZQvY}txXvBnvAI#>dfEy08A_wo1B99-MX=}p}T0;@R>weCQr(@_ehHj*exMsWZrQ{5rtj1j zj$l#PVaf?6@+7Y3al#sDZO+lu+$0Ye+WKI^;mr6B;p@%Ah}pi?(}MCqHb3VA7|X3d zv_lw;b`VODKuME7Jo~9`+p%@rS8$}oIERx#@o)9nb|mzv9KhB_;D#cY|D!=DzIi~; zjf;C^2wMU7m;}yP$zf+s^6rX^CkIPF`B|}BZfI-9>pLfJ8`yQFyB(B4u~2Dd%=w9+ z5?*PS3D06V;wHbJa#1Uf*ySgMjpFaZy|S>%y)STv%17dgY;&QgQNY)oG^q=PzI}&R z7PIgFFJ64{%paJ7nfWg&^RM;jf3BkcwaEQz-TNC;C@Tw#OKAOHU<%g1D*FEjQv6!} z{bN1&ciQp)1S*6jMP7iwOZIQ{@-JZV-`(@9pzPuFjA|rpP3>O%@Inn&0-0GnBl2ey zCiqM$2mQidFKbJAM-!0a3zDFcG%L4uP z`c)mE&G?Ku*q_(J>_8wuSNCrO>p$niOJDvcOJC%_G1>pl#6RHOyQnU z784xfUmpNF8ygE7z!dOX_6$Z@pPlpa0oeW_V`O7ve0J+UWsHn3xb2@ZHdf%j%a~Xh zIiI`wk8(`UaPdFe_=P?HQI3%f$o_nL{)dc-DiU z%KnUM|4qiu&io&`?Cfm+S&ozK8KnQSK6Xxy|L_3^GwXlU_Y9{0QwDs&xqsH@>}dEL znsEH}_8nylPteP_y5GH1;l`g0#d|+a+E5)bClyjq$#}@0TBpAAoLOxgNlNJB1#iQAPKz_ zS|kD@RUx!c1wldy#ZVF;@7_Vq{ha%IzTf-ryMHQ}z1Lo|X0Ewr*38PI8wT3YgZu{} z5C~M~+FwQx2%9nlvR{_%0PsmukQWp1W1rs@9TPU-3S)DA2>hSj=bEJ-1R{AB{L2*d zK{EjO@Pz+W3x8wp+x~%$zAli!z(7eiFAqN_M;{kSZ(rAxMKyj1(wP<{YWBbO=vhULg`MW1#_I*@R`7(Xf=0M`j*NC?z zRnb-Le<4qB-`Hm(!}R^$y?aq2XQK80tSE|xL>*4>r|&3LM!;*ZXe_qID-BIrr%_Z2 z{m8-Tev9jBrt71AU7P7M7XU&3AG;jFteZJ^WpZ%lDy$ItL={G9V6PYN$tgY?OIW<0 z+-XUB#x&mTFKzi~_fE>kezd@=KU85dW2Pguf2F0Esh{~h2C?lkHy!E`)bts63!$%= zW$#@U>^i^ag5Z#+T0!H2*T7*B!06y5t!rpT4 z{PmKMloxvfo3(JG`%Nozy>ds5!rz^?{GNiQnXMNtTGY8B@1|OA-_j~%kNnmhi^uba zByH@FMhWjRQXSGrWkZXl4SA2HH@oYE_927+#Z@4y8C-+8^{G=ZK9%PC?h;zs|H(%K!3V zg0TMe&(O{56bzwK!DfoSNUFqm2qXwZWUGXJRH?~1>1}zND5ihCYE|P)px(5-#l#xt zCtth~UkUTBA|PgieaMsSCyhpaoT`M^kiHjb>* z(^5t@DV+BB?3iYy_drWig5Y#EYx~dg-=;)_E1^TWHAuDD6U=mN9`Oc!_;%KOJg+60 zhd}q#xa?rB!&!qCl`xu_Lv!hqYAXjR+0rAjO-4O_uD^zU3xLxI^TRjMDowiFemI66mc9-U_VgI7*OLMZd>uAr|yvP_*#w&{%B*~4SYh{@LLfqW~ zW^Ip2k9bDIrsflJ1VR!m3WU7!ycF?Dkbx{7+R^GHJ{-5LI8Vl1GJ6 z;-PiQTiZwHA`7T}q!Umr{V*p=6G<5T%AD+e&AF(Xr5M&y0W0`Ex|4i7j>(4iaQg8<}x?%ThB#qYK{*m z0fr>6*N);4*p-Ce{9^$Pyu)|i>0E`$*bQ}ufC)&^i9H8!kXI|fHr;c{coVYq=xSf^ z)_fzAgKWaouF`St7Rg0R*(9l)^oAPh7zZg;rU#5_;DvzC6uGxJ^G}}d2Xq3`Pa)2FJQe!=27ys-bVGi9DfP=i(wI$}-NKu^nh%-gtPqQ& zJ=#*@t1K)iG;rHIDai9??(4);!nW&SUP#Kb-yRI%Z1zNpmPfL4`b{4ds>h;_FcrD| zM~3Bz`!@7x658}33qlLA_fiM~dil3ELLfz_ul;5Y2t;Au|0O^`AOiRHW`;OuJ=;^N zRTTxWSkdx7Hjq$zr&6dAGXLlAr9yaA8iwi|u-Ph@A&px$d!L3{h_^a=g#=QnmaptF zf3jlQ)DnuvFrX?+B_a>PG+IjK_l6t>yj^C)XNx-Lu zn(u@3X;qcrleh6;lZJzD#I3O=0fT<(tA9hHL@e3Y~q=pZe%+$ z+RE8);%Z8CJ-U}^_*^57iNq*ZVmkBdhk)DU{PZ%c;~w;5uq^t%$$nj=#x(=~0b5%m zp$3)zaq~WKv$PajTgMG}W+x_2qw0Um>VEFOXXRRvhgi&1JYndnC{w*m#dZFa0}HjB z^wf!!3F0xnMVd`)p%;b>Uxcj&5d1K%rZG}~)S#&-5)`wf!dNU!#t^o={9ONh&q~h; zCS0bYe5kL*&ve2Ai5=Te9r)J8hLeyv+&?J=f@NukR7T1oJ>KskYEA})w41DgB%j`c z5zN`U;G{{KU3iH5W(BDod0M;^T~Qc*2a>1o&m;adXbyC!sZ_34@hy5{d8T8C; zf*YZe)Q_PVzD%>JE2VCec+p*X!TyX@KKcHLuy`)JNBap!-+f~%>h|5{AV((L8Ybrv#;8);Z@0CoV`^{gOv=rX8fr$T;_Z=V?8ek021r|2~d?}rz zTGCHYssE&iMLGYw41zH_n>jcjeZ89R7!)s=*X$fjor99*^WscC_%yt+YiD=5NoVaNA9n;YgH1xT+s2XHZ zg?^vovDLP4uh5fDo%-gchWt`;h>ljDxQJBU)G)8B!In{LS^+xdgo1vv?LcWH z&55>En!1|hm`UYE)KQ1{m>BFK_$7T{)QPK0KPR5A-#5EOSHn}YKipfFOup4qgYmY0 znLGFp)a%p#(yPb9XVUzd+D>Xp0XkjI${8Y%JaG|R3THcoFvF|YFO};zhOF7Fckm30S z8(TZ|h~`U$eLly#Mzu#=D`s}KHzMkJ1Tp}D$GcA!+`43q$uY@rCr{q@K$oHy-d|-c zVuEGWoCQ{ccsj$1(e$puMYd~@yz&?Ax81b5ShYJ8%3g;CQ;JbD@q=BI_`F4{5mct) z!~1Xx{Mfi8A>Yg~6atxV0AXBAP$oc)T~yJ27%_}!K0sLlVCoEkIGELcpgtu<(W*z+ zkTt{fDlGnDOIeav!RRH*R;QT7j2FS%Oc+&fvh6`>C5aJI&^cz61Mz$n=9)LRZQqHbj7gG@qS6;if^;!vJZpvk(k^Ng2{H^ z{QJdtsfV7Z*%Fd~`O?t38y`K`o=7vI)QJt8q;&!4bf|j#a%fQ6pV;Vx6ae|9g#+pk z{xuPdvC?9dwhuhRv?LIC?%w&)>T83hS6smOFaa8xzwqGkQ6z?tnWYY#;#8-%}_s$4qf#C9Lt0$Dmzept14<4$&%biqaA5jj(OgTzfT6V&Na7ojHi^s+-{i^4Cg zv^iN`7v}9jSvRI=4Ei*NWvVKOT+v&vUDl@!h_1y08O)!CoUGqJBQwQ$=6=kfNxfgs zFcOD>@xC*yj)9a?4Bx7ih_aw{T_}1HE}{PEldwLaChrHila{^)d&MelG{bKEL(zN; z+rH*y9S%e9c#9jq+7@kPatN>1)~ck_-q@Ah^Bh4>6i_S8GcX#a+n$v7(7;i0Tcz16 z6Z<O(;yonBDn%A!PKSOS5F&ZC(GHhn`^CfI19b2sxGOkH&9ne9>x?ebcDmBg^`HMBasdF__9OYf(Fn0C``W? zNjO*$I1Ql4dho#sv%eEqaMYEDW&y)@DMkXx8`H@2>?A9?1i>@Ol1>ze)Aq_6y}3Q- zTqlNpzqUN2N?Z+cM$IBg`=PCTPKi@KO95uDD%Zz0n~|SVDKB~%hAAq@H%-95Lf7OO zwPRjR6(!7Opj*UC>tly}zfTxbYEZ|R5)jC%4LJnPE$`+l&`(FKSy zc~U*VmSfZ>X6shZW*cm>2uWVA=4fv)QLoB$MZPkxIqy4ZcTnlX8Ku4wcs z#)eFQK9cUir*`P~%ZUt2_Mhd$WuKN6zCAfgh|EyinME#_M%-Q5>LJ7{rnW1&l+1Tw z=$6~JS5Lf}krVt`@3XSiMlcp=9(p6-Jy(bxd(&Gz=R8=bAoyu#+C(i!-)`uRMT zDb02yuw=gSd>h@ty)MU$%Tp=JOsn73)o^V#Gtq@!x+%QRZ)Z*?n9AHTnM8% z4_-~2qi` zJQ%O&96@iN+SKMB^2Fxbjda)dc*4!#pQhy9>+=n~H*OlQdQw)9#Q`37FmvZ=CX|=0 z^$~`vqJi{~Z|9|Q7lD_(Lq1uVt)Pw~y?nZo)graEXgjyy4Xq`VZ)TOS9oFxzqH}5= zHo5B~FImpGbi`A(#smzqy2=R@=z{8qS!7RlJqMAbl^C9}S_jpxXu z7d!}9Y&CK%%?r~2yEFE{lhQO@Qm{kbSIM5BXOYJEhXUW15n2<&3pXpM4@f(SE;I7OFMq`twS?Eq-P z08apxwX7=uH1e9DSQco#eGUH2dC%(v3X--~u?o)cr8oqUpz@S>pwK>2-H08t00khZe53SFn2q%mm zhmIXDOtm7%2x!nUl!JHbk!#^*_(xl4y6yI?bHsr2U@3nbccjV9h z_1BXXY$UW51QR2jpW1oL+w?D0htJBu7d0sxLQvkn*M11+oD?2gY6xAO+EkQ_+_D#& zW15VGl1HkY9?}%U3Yc)W*PbB9hG=t7rn#9TvnFaHI*I%dZR&;8PNWlBQPP4wK(d3j zyzovDC#qYzE)I`MRaC~vr6wxpO(>49mj@NH@hWV21%=>)?@^}b_&c|2Z@*TF_uN?@ zyFRzQtdbu{G|dZKF{$fUOyyMxTM5&~dw&yl-;nV6Dnn!%SQ1gj!G>!l&h+>5OPUN9 zY$itgiB83(SSbWbZ+}L{R>`OC8&NTx0V;PRIZ5HSW#~!MQs1_^kTn6*r1s5el#6{z zyRcet2fx8DFYBVw3M99)Ut3&qyRdZmd`IHuuMllHkyGswHNG+pW4$GjZ`vE`Hd#vF zpO2p*h55_adwWub*1RzIp+M`7v;np1&DgJi6*ELvX$BH0s?{4mk@OGzL!?}k3SHr~ zVI_f8bX8j+vW2KCTBvS56Pvi{Zyg>03T0TeQ%Fi&7%>}@E1z#}-TFvqNKvzs@`O*B zq{Zt`_jpn=TeqHfh<>cin_!)`Nt4o_4otBM=*a49d1HvKdQ1IuFMRadH&2RZVoT&u zJ<+`&^drqsf`)0`%9@t?8=!(fL+~w~ty^C^;@6ehDyYNG8rzZO2^Cm38O`ENRW7@J zpEHq;)+282gTrG^*!-Ok8BNq?EV9zQtAhHfH4K|Sy%-nfuNC-BzKoEcO$rN>X_x_Y zlGZN#HSAW)u#k`+ydb5WcgLR4ZRW>Ywo^1gE*>S4R$8}i5`@mjXN)~llQo~=W-K~L zCej&ToRq}yH<;BQtzoE&knyQyF@btbo(e)*PEv>MK9%ALvK78H>Vao@o%+~)KlaOj z{ECU2Ivv8+Qej;6t}+dVa}D_w6|UADws%yEH=|1w%g7aPYQ}>bdrKP9+5;6LqbLuN z+%|sjQB_d;#}hZ-pND%?{aGK5?i3YWovnDIIvwJ?%C6NwSQ^nVpAk#kv;|-iAron# zb>#+>_krd&syhaA{`ZsqtDe9vB%&eAT}HE_jz~JvAsVn1fN!E!tMnUA2c}sCEI98J zO&hM%qbF9q9j)~v?H1D8g?qzRMl#B0mTeZcgXIH{-o@sR%Dg7ScH%x*m)8?XAAy2E z&P0%BH65eO<*uPa>LS+UR{-4DA!H8-J*Gdcnxc6GTa-Vl_Z zo7M>IYnEzL8pURVohUz37U1HF^ha$6lU z8gn@55M}HeVt|=2ZbSaDx2g>M|OlQ{3`0$q& z1|=)gF4pw-uA~rGzqk5IrdyFM#cX226Q>|W^@6Yj{JLI#!*J72;bipsv#VcbB&iJ* zR4yn!AfjlZhW0hKw_*I$w<0pwCE#jB=Gn+ zBn;~aB!mI-2Vr_O{8+SIe&PZIB2Io!D=0ZbPI*&b6^~_|bWIUHFvCgc0!rMa#_?oq zSH8mL|>1%>z`27?^% zQH}T(&V9)!38*Gdx=g?+2qXp(S)d^oaF}(x5`z(qkH2&6M)KMk3EMhJRPeW~OSLx1 zF;tISJp<2vl~#Xk^NOpSW?oYZ24hyl34xg?%G=zbe?X>lr<>K~ZjSOAp&y>%bj%BdUN zXEKt4t^u}BjtheUZQBZUx>{UE{os*~o3@Ucv*7k=@aD+fM3`qiKo1m~r50#k^mai{=mWS$8i4Af> ziduDi5nA{@l2HEElmY~IyNpMNlU!IIoF8yUm{X*6!fYYfX!9J$7xJ*rz2Jhad?>G6 zHc){bd^P~=AN!MnJ2c;*18rmD8@ApeE7CCQ6G?_e4s@VA2b7Xc%@x87B2jfxTlMcY zyOw`Q9yAm^zqNI_xy;Gkx=`)2=hLeRcv3Jd^rWG)}9=mUlV`6va{TcDYu9%0i8Fa5A#(8qjMn^+sTm8eRTK4mo| z&>r1?;_9)=`+-h6RVfds0W;$ObfN@_()-A_T0~!&h~{0-0-Cv{`4i*ci;7v8ZoBK^ zx$fmW0h+bAhe^7=8&fhaVrh1j0W~FOSl>+f%mEv8IPV-YZEDTnwuKT{%ls*H%N`Ic zLYPQYAIy2cd)Gn;pd*F!S*H|Zo)_Ews1llF>C;(`uZA`cl6SmH@}(3~Lr3q3DCecO z$cf~1>Q|~h^jydrC4ARuo-x%HHpzm>mci#C4v8TqTITN!`4~8p^PgNp00KffPuV5y zodvMSkwk0wBjy$h?2NV;-XuX49@*Mr3&pTO-!Qa(Xq&1qyCr79NUYeA2LDea^S@VkUy z(G!150r~=nJO(KN9c)(x2n6Er7wx)l?!*+8Y+^2H92lt8#Zrh_tPGgI>oK6bXceCM zgZr4|n-`JwSp1nE>oASe6Av(a#Ndv|m@N{}QhJxUp6hMh#K-wUB`vz#`}lRvCnW-K^|}7=b8|a8j~hCtqFjz5QVK{TZVOH}ql)dJH3(tD#uFg_0eJ zDa`m(=krGt&`XzI?(bOt>r!RL+(c)n4yQm5*cHmLs%5PxwNi6rgABX{>d7(4d?=a1 z8_)0+AesNhn2v~9FWc(2%s{6PuCQ~;r*cyVNyw`e%T2dwCnAF=sU*@>yHJ(t2`+R^ zhjiTb=~hQ4)e@B&s(UEC(AG3f#mX6X+T(Y57XoP?=;ucURvA-1lRBZci(~JodO)q6 zEO3-}&BdIe$uBty?8V~iYtZXJqoBU*OR-^1CeX1tN6t>W z=}zbtAWpd8>1*P){m-VBzK}K-UibRgz#S>g$f*=DS3wSlv=&#MB>n}oEp zj&R=X`XThm*~p2r)7c|un~E{mw<;AXIqEUNK+A+E?can7Ej;M6yM-#AXrm>A)Bs)z z4|Fl_v$H)~pgD8sQUR~6+B=sA??M&t+Zm-5RX8%Gqybe}B_&~W!3kA1Z~)?Y*jq+3 zB@Aq)xDbK~Ux6BYkq!_;1~(jlK8$@c7>#WS>S+5D0Ja!I>Z(fW9XJu*;RA?JKbz?yMl#-Zxc{5{eDDV2mol?VY9iI>Vb2L*v{skDG9 zW`vOVJK&%AJf;H1QsA2V3?~c{mI+q@I>1N*CNZ!e79l$RY4J#N2%dUMwPIWc?|F*Z{T;7L*;ccEzF_k628GnNZh;L3=7__l=?4g0fzosCi zcTFhcqyUCR`$+c*U7(8q7w*7aTdf5Ae=q9kl?0ad=4GgTBNw1xhv`MTk%;+I-~a{$ z_C-~@tyfJ5mT{Tnn5tshcweO1*qQ-d)Vk)oOmnGwO+E{{q~}ka5HD=Nu#Z{C2f`yL ze#G`aa5E+LYsfjM18w}$Ga~`*#cX1@`sKCZKlQ{=HuN#FNEKAUP||HG{oCAfvslV+aT_W@c-w?#K}0oAfBL^S2O6pKPqs z2A3&8@{>{yJwOyIy=$R$;D_U$I$#GCf zj4qnHPeI&)2du!<)`eW7C;~&;dlyOCL$tRiK)oW$*8yW8Pa~!5f%Ycc551yuw-O&vhmuD1;ca6aXw~;~Gqh!jlQ`yd?xj zrThzFos^Rx!e~0+2y0BJi8nvU%mIoba^YV8kZdx^4M?Q#;s=W)^9}O;XVX}0fdhAX z`XtmzdBl}rz@cY9m%f7rQlx7Q;pQISQ;t%K;AnLgdy1ffKajXBnU!WZ5nh0K;*8s{j+KK z>~p+G4md%QCsmoh;|H8z!7OYKZY`5s`6bmPXCw*hCQ^AjXsW-KcSgTSrM06tSK$tv zRPK$o!`|yJ!0H3sM>s<(s-Zel1oAV|kx+A{)i_uXU2^S&zbTw_=Q)$l=NfY@UM((g zvo#%HqWwf@AFu)3OKPR0yvbdYO_FkUL*HgXR9*=+S_$O29P35(9r zhcx=OE0C%mbL>}}TT7&*EF!ch_U4DX^7KWOYf&m_71(R4wgD+OXY_VKAPnvp8yQy% zc*Sc^W(ban_^mr_04#g}`xYRGx&bihd-Y0DWM6GXrYKU?AW3*o+WAvW3O#k_>A8wa zK%?&w$q>`vNly^8Q$x|xjN3Rdqh{frEBvv_C~W;^x^QP!9X>e<=0UV0-_FKq&DLAIi-S(4j%B1V@s0#zp&|Gw4E~fv zOKJP=_CB$jlmL!OognC*ZwrtUkqSeF(C$$yQ9ws9%w_cvpV%^rh0E`}Bqk!$Q8Q@; zK(|%d$GPyXLnQS)>Pr_=I|=S;O3vtatTWa|n``-g8zhKfW-48c@OPp3u3FUTV7F?8 z0|*x17Nk^$6OdH_M<|+s!z+_5o#5dW-aOWvvR|~xC(Dh@4kv(iTPZdAc)@Bd3LcR6 zc1H*uZ$PrQ+IFP0wywI08$|+z)f_Xvo)F)N)n$9&oDh({@P`P#PWg4dZn>`PboHz* zVUFj8dUl9;sId0vfb^3Up?=_$ALstP1R1C2>GqR%FdB?zVxmM7dI{x0{P)M&eM}Gead(tTrF51H0GVJAFqKY z6k$eOg&G!V0O^2p1Z9l*?P5*oj;5Kq!^*}mGWKEV$^_E+E73&Te9UHh^eDXHE@_#T zl*3~VU%s+Wa)om#f$$KJE&ut#YSSJ;pD z)MzZ-uD@g{}fmKwM?2a18yS=cao5G4bhqW$!aVGsLZ zF`+9g1F1j=Gh4`$1ac)KpdFgfCj^{FvoHpe;n88AqD?F#qJp_u{%&rDW7=#c(MfpOdfqmnIRqua};-HOzv@BTy%;MJXY^+p~ ze~00sSMSl9g^T?@j!QM@24VSkAM{%&hu zk#+oVap}b3q9`LP1HadhE2<#KEurvVx%2q5z`rQw(2N#E1ra5|Co}T&&HBkxmF3CS z=KXpV^m>I+Xx@zCm%=fUO2L}O4#1p+*vX4^ zoKJ4Q4?oiQ_wp|$gEXNPLemKGjEhAJw=@Wb`W`-ppNJ^X=Zg!jA&$}UWHx#{Zhlq zT)V;U9s`0bhAwZXMEfyJI-A%cl~*4qOz}3|cK7NWgn6Os<>Y~kUC`{Kxd1Yys(||C zqE{f0ylcJdQBLfCUHX1P_QzvVuW6XRg)I1O5d{>hg5aMTg&}jm_fASnKRBwD+G8So zrz}A1S&UY9*mu|DVKXNRra#nvpuPgWRgg)|M$K@ghlGWM+U0J=lE&6lztx4;Q|plv zC%uff$4IQ`F>fW-?bpapNTAcC6j4TPMxKlrRFm}Fpp^!zImvW<0W1k+x9jrm$^stg z^lm_f1i*hBnuIv83=BTIyg9`{t_MDJy9q=tkXTf#TNL{B%${xDKlky1#P*JoQ*9B1 z(=xK}TSi-~z9#k{F}U#}8P9@VFI*}wbi4M1kGR><;=la47?G?fnj~xuYs(a61gjD@wLjucPjeCKiJ8XQq)g#dJeT zC}GBIlM?lGp@VQAEezwMPBRYqiJICAT#$tHMLF?fm21F~7*Ib-P6vW1fJTSDxZK6B z($3A{RvB6+ezr38<$!5F=ElwUQQL1tfp}u5_yis>0*sU`|3H0Df)e(hZ2@Zt zxXc+U={}HJ!LIeoizwHYsN_@Iz)?lN3$^$lSB&~7e^EUQW#GxjaRjs(MBxpWNtduH z+ki0W4&a5LkdxPHt5>)%g-?%hU?z_c>O|u;(@)zvTm>?HToln(y)uNhi!w;c=r(#R zEo7%f$9LdoXKqB$%7#9Wavf)6yNZMbfo54|g~Aa6M>8j*&H)*}QOpnr>jZb#>c0u5 zwb*RxkAKqI6ttASeoYHB#&n5*6u4c8sh9B;FLJyFrg4FAI|^7|zU`$A{{)-?2CtOS z4+Kv}EeRO$gp}L*YwEdE6jW>Pm@RPj9VVa(eBYq}HEI!lo8cy=Bk!q=zZU=zJP79d zwV053;El4CAFwof%V=6li)lYiIMOA-Xz1HFp+9s#NT?d!xomCug83VB#ajg1!#{3R znP1&T9lJU~+J7PBre(o(%0(j{%TF9<-p!x!u)fQ5@Ws76o`aqj9wbS=9uppuRTOnQ zual^}n)ZVdrq=1y88(wDOMWeqsMG1HVL!fq{OM;)5uJqHKkn&0rq>1sj#qIG$OatN zdF>AIVl{Xw^w;m(BB+xVQ>R>$7;prCv1(;782j4vPCe6VXBMvxcNJb7np+ zKWxDbPH)7Ow}14yZCA^|cL|nPH|R1r)l2ttofr3K^Hh8C`xuq%oNFBWVIax ztDKDKP-bCVN|FI=rg;ld`-`=%C5TXPBRIssX%nLy(OCBuvDR}dnyj6%saN;bPl&sO`y~lmSMoVHp)~;i2tHrK+|Sg5NIC2J{6+pv z+&G{(orJRb!te!;)X>H1Vy8dum3#Dms|h3zTmtQYGKt`-O~%&mpJ3@fi?BtgBDN91 zKjO_Ic$9%9>Lg^ndD-^kmiCQ(P$;zcEclVp1=~ZzeYf-2li9;g{N%8K2wF_r+yucg zDRJdPZ^^Em2e^ae|ACFX_de-!@Nk796(gRP&7-)uR%%;b;J4qZ%{rNKC=8ODt-SPYgs-p6k0w1HF@DBD z>dK{0Dvio0_p;2h^AZhZ0$fPXqQZDLyBiCSxwK zXWpzgJDrXRL zY(hU*agj$JpLm0iK=`qboC-MLb;dvJ&RkoxBd-0Yup=hytegjaD*I0f9Haks`_zj7ccf439T4~)Yc zXj4>}13bkuj#=YHUIs_l@t_OU^=uorWeyav`uL`7$3Vue_X(f($0qCk@x+3C>!8xJ z8%3p;G9RAt1HdvEl-@n$a(Vt#f(+r%p#$|tR3Gm8xroliN0w!JE!~j$lqYouw~}rs zbz|CJYv}(Jzm(|1>8r3LvLxKP5Xo9U+8L3dBguQ@vEY#3ktMy72%{9D2GcK{zJ@D5 zdA{~(vUPFcK1N>;yiP~7#gj3Eb$iW^S$+*>#=*THFO)t8x@S>j*dG> zZdK}{wEA){1<9nd80f8($wx~cKd93jcPy^|S~B{*gR?t5jCU;tmca^nQ&P`@GN3RY zxVd8{4|10S{`3cqJ?#qtHmQ)?oiq618>Ah6zG(mbtFBK6G z_jPcmEp|SG-Cj^chg7fTn2w48SA*)DKcL2^8jYPIwi-!dz699=(+>I2xUr{njU>Jt z*>NovaJ>G=8Zn3?N0px#9ur0wa${9thJTc8xRciWpI^-|h$Bdqr%S#F%88}raMWD4 z9R4Z^>aLw>Z68lFsJr0tUIrzJz*{4t4HaG*Yp3ar8d7+tx0o#W8KJ=>iVD$Y5{BGn zrbE>d@>sSof35qm0K|W4DR|syd~>SeTy%r7!hwppDWwN-uY<>b^lr4_>;#H5ak^>Q zi>JZ)lx!cE2>arg$7gWC&r3n4CJh`?p|{v5rzMFKU~0SM=9$mp<-9G)8EKGYMC12? zIHFTa5woou{0=9J6s7myId$w(*-ZD;$_1;2mPj@w!5}V2tGLapYntNa>A~yz3{Y?m zbL#B|oQl7h?mNW*;U@2q(Azlq8(VaaImEQg?F%#EAkTW#bJ+-}{v|?&kefMg{xCDz z9x1#P`YP!HYcE`wB?8MtRAh-{j$q&74-$*LakYKF*STXCQ`u6v)LsoMq}-U2KCp4j zCs>sh`68(xu#`9)0QHfaAn(xk#lc+Z9qhIur;c3}A6SYha%9B31QFAkN(57}R&TKu z`|6X58IeZKpf5kJk5|czW&prdQOx+BvGp?RdbtO0W$4L`jqUE3 zm~!5Fg`357;^GsF2cx;p$uVp97_~1mJ6b(0YaHNZdmyaI)VVL|TqQYO&|5mQd$Rqg zM)o@f?Hvu`2~yn+Z>&cmT6F>KqhVb)cMO@81Us5H$fLnoO^ zK0I!6rShRGqMlc3?XSJF0Jw@)g$}?KLv^XSj~Us=ecVqleULN^O6(q$0*#^b@`vAx zOiy=#7)XPdFHzC0!4!7R`fBowIVh`3C{s=O32WA2{hwAoEI(c|JMW(m+-FQOu-`c*;0~$<+uJf>sT=Kr=6^iJ4E6~k~&%0`pq={#+KGVA#=t# zwThd#>}ci~*C>Lm(wfycaPapi-{n6df}SU##J)6x0sm~&2^$I1eG&NCrSqe@pD^{DiugW!3*@@|)X60MYO99|Z@>!Oi}FlXaILaeCw305k7N zM2fn~X{11fyhlX*C&B_$mk*dHA#1UXrJp78Us;k|6Xz*HZUZyx#3Msg-;b#G48Pi) z56ue(8w(b3eaUl#0>LFVpW{pS8QSb^9tj-lIN_RlL=}1Fj+a-Q&}DGQiz5t2-9OB} z=cvsr>x{H3i=zIkTT2c2TkOOL{8>l805k824UFwQ9smUL3IF3p;h$NwSqxh^&+Oeb z;R3;aS6EspfKBIh8%rPr!w3mSA(6~|jAT)%1@tMNIeSV4jsM%Vb_9tuj&&AIC490y@;9mWkHDm3-yrp*sE`o~qN;^N;T%P&#p%EauGQfV*RYMWWK|1I&E; z#94P<3(h&78f$VQB>e3l+}IC4CVe6CVOpfQ+OrBfVmk` zcsTp-NOzXSP`_~p2UiEa36IT-(p*&>7FebhaLrHMAlWS3PK>CccWNs!yGT44ed(cd+NMVn&@o|rq^e9cWy&*~Tr3bAepZmM31T6F65yU(6 z?aQ)D;cv}FTQ+X0(sqvX4YfuGTgm5)u~RB&|<=|_5q&Rs>#;G+z*M&q4=#e zamM+vHZ^Esji!n&EuAU4cjHF!xryzm*ywdfCzXM9$aqKZc0MG6%jWMt#;YFnHF1mO zW}M;CG2+#~g}7^f`S50NA3PIXfnhKWD3HGSiy_201ey)Nyx-n!QC%B5^Fcr%^IXS zxVCnNIK^fxbPTIj=6ZVRhU%n!_6B(-KHGPc_1Bz;7>=vjHu!7`Y!l#`;UYFIHdd>!D%D{NpCm$`;@P%6>rJ>wGEtYs6Eli z?RE3_uq!$7oq1=Dd0sPZJ1BHP!28IMx&%OUM%nXwbd3`G)^kdH-l3+^6Iw<`ZP~Nn z*?J6N*EjxLWsjD0UuTl49NgK)4LEPRk8eUhr;Z^!Jw{|4^h?qSt1H@#n;-n5>Jp2; zM$g_{!Idw}%c@t~uy0Afw=rre23h^DMuF!n0HR-@4m5Uc{)bl3cb=js@>eU}N1zTl z0bUKsOK#ghV$5a+X%O)bQbMIIXeL`p^OyqlL?U~SSv!;D znPVzt@*3rf$A}~AgehNnA1CCxpG0QS#28}zaCYv-ejjaBV%&!xHssnvvO33G&amnv zV5PWH4{n|PXA^jQ;mF(9-7edIHa?nL69m3DV(*+HkBd+EAgh(wW*Tk4G~^?^KhB^p z@)J^j^Q+J*BC)1uq`Q|YcEaWP#RRbKQ5Dfpw zewvv-8Fk;NpZ0P*LQ!AR{KdEhMB|*2S>5298_6;d zi$j8(wcPSIJ!ZuPv~^EkbpUrbUvYX4GyjRBMpu)$^bYVa)gg=#9tg20L*}-qv+O-L zA>v{m!zJ}4X^xqAX)zv=Gyi$nlYL6UC1=Z<90( zKL6Cndh8?$mQh&7SUQ{0*HB6Fkbb7$(Ha#Zey+WGC|v@N@pZnG8K7MAL8OU23eh#s(pN?LH^uIc#C4YyxU_YnGu|ugzHiiD0O!WtU ziH3QSne9l85jjV*wcR=;--w`w^xl=dOi8$C9Jf>&;RsM?)|*SOlMEdMg_U*Bl_qMr z6ej{)p9U~L+EZYt)e%zU@|;+~nywR9o-D2Jg_2|9>P~?36uGeyBaa1fR#ioxxM;~) z^*Cu}hW_$r)sLT3kO?~L16nX=^1#OmV)u%L--+7^GA^Qkn}ysyX^VOCa@UPbM&g(Z zuGR1%fnv_5qPgGBX9AaCF*^Ly&#zwG^Oow!Pwx@M(vrmL5m7aqy`8ZPW+^S*u;r@Y|Do$Upql8~ZV3@09i?}qNN*w#x>D4Df<%xaO%YIf z2c<@(H>E305zzorrMCzO3Id{3X`v&%NRxKYgxB}`?*HGrR#p}eX6DQ}Pub6Y_L-nR zmBs^q>p!`n|2_=zW7d-!B_nDnyt;(7MWL4-(pJ8V96H3N7r!ObYz(DU5T+EMr{AaB z5qq`QbW2&sc-RepUJZfa4Wc2wbtKDV zW)EZ?3S?1nB~RfhlvTq;ZV}FUi3Y%zQ-I?x>~i8JSN^+BdOlwT?X&7Z+cW5J3Ci?EWJa70GrP!kEe>(4ui*+Jo-n zHb9l%*2mo_V91Y(7}v7oDPpZ8uS~ukB$smC#h1HCw}s^o(UJBXkE?6kD>CGX9lj#P zSFf9V@JmqydH@vYEdZuNVY~M}o7yQj4*O)8($SxdS##%uS;-@BZTJMC$@ z$v=^_4nAJ=9!EgKTU#089q=`{VNm~Azr{$l?rdWuE_d>vKo66M21a*sMOl@4U*c6> z(*bVCx@}EXvf=U2YeoMZDN!3v+- zk_mVNa5~Np$^#zB_-~pH97R%+ES0cIvbprzApz;bqfbS@xk~-h3+NGoYBbRkohLE~ z{`UgYje7vOyIqSSPBq?IlWF@4UC#R*)*>d!C`nJv+dn^GaSauNZ?8KP=?S!sW>ajd zro>QiT*~gVSZQ24o+9v`fFZ@7Q_FKf#R*^I!aq4 zTH&vl#%z1Lq*w+L*7iW6WWoP%FL;^S-N+PiTK zsw@@8H9!%UXv4qiQBv=kI>gAA%p0T!C?c|Z^ArBpR`BIN;@X*l8obwhju#tU0}ulk zS@ygK(W-%^&$A)#H*aWHBpjXgtlXaSUajfba&A%|DEgJ6b0Wskc3%|#_{$%fAWt@z zfB4P&%4P@pAjO$ja8?pkN?iS#xQn=p+^S#^^T3ILQ^+()>rZUBV8<F-iFU$Ta-QPM5qE%-8#tN^{X$J7J056okR2%Tw2#KsBF@JO3pE3+;clp($@cwHQ>OW=cJZrUG5#1TmX`1 zBhw0?CLP*?5H2h%$t3v+2NKy3{Wpc3i-10V%_J#Ul>nWlejAo~;u4$<4i9>RE5+sE z9^h)azaNhRI{~px=fF@+hm0XAOkFO|aZh z5d!`o{Fw-U8t-V*^=ou+U9iZ09!d9exV~0tjUT%V(A$4*|20?~bhKMFIaXyVC>Uo< zxD3f3xFI|f{>KSlUjwgzaS3_~9*@X?>0d4u%04syFtON1#}oVX$Pb9tfzy?Y%s1lx zX>R6f{lkQnY#HF^PP5yJSju``jVBB^_ZER(B2&^%u{T05wZRdvWIzs}&?IbBeysNd zyVuSVaS3%7L;sxEI{pu;ex!$c3enoRmSbn>Nt4_j&O6h9b=_2knjH@6;o5VCKB>Kpt;NaPmrwPVwXm@k@I z=heFbqG`yHLtM$4k_+s1h7_tSkL4an;BndHvMR?^l^)fZtA?;5X{ZLSMaE^D5U>Mi zw15+}nZjL2Zx^i9@Yo8?#N$+OBDe~4Kg@~5iTIFWE;A}!_Z}?ZlAAxv?LXVVdV4k=J|DDI;0ievo4-NjS*z@S3d3aZ8Cl)1FT73)LMA~_caw*x6) z8x&7eLtq6bICWYm>WLRmq$QYIob+Q#(P>AOvtd+;j;^)uy)4Dt#?8hr91$PFk(>i^ zEPKkU4IWEXe*|4z&Us0=$gDbAmfl_DvAplbMU)r6mqE;)5yg;^=N@DhSIkAEOPu_M zbEEjl%~b(`ey(e7{_p`YmQ<2q#8;gqZ}L_1#{QFdA<$1r4hsJ=kcjI*9X7ge22Z*A zDOVl3m2`RFad#I3=!t!>!Z{4+WN&iF5->*2c{f|McsDyO+&mQs=WBifGA$~i#*Oit6o_$d>lHXb_^;dRw@2ylR2(#=lj4$|cND8v-DZLu{srhA-AJ-Z`%%$5B zKw(O`|7f-A%t=+lLjKmrtI|HqE|g-bblbEUZzIW6Mfm!Us7+HJehobxFiH{oKxZ9U z4_{1-GSk?3aUfnc)=D!ltl>3`E6>0~!?$h9ZeA#TYUwVU^ezLMQ`ei`x$!soo`jFE2=I&Me=evu^ zUzRFh>hZ<8bTbWgN>%lIRheBdfwNX}XSV~DiyY5+DUADW_kY>!eX_Er+r9qcf$#cG z;6)!Z%&JVL`VOa%Un~@$b9K3LHbbABr8_)K=EDvV>hxzWkM1hC*g_oa52CLp>UF0X z%WSZ1mucuEecw@xSd&-)E7nn0yeZyVW1BAr{s3dr6lZ72h!&Xg~l2~u) zAjefnnA4*U$c>VJ+E}lrcwdc{q0Pwi$GCnO=*78zpr^aw(^;VtJssb!eD6U)K(a&f zXd%M&+fg5s4E^Iwh3w&maQwlC-_%iK?c^GW5KwP`n5PO4^Cr6{Z47be9ohKcP9}a(B(009ayCE8F75wOB0Jb># z#vX9oOO0LV+o^K#?e*AV6>RGbW|4id80F0#T_iSG|)mqX(mK@<7LPxB8)hX;?XzkiN zQYwBSD+`{lBoZhzrM$`Eb2||54OBtGz?Ni3o>cgQ8*#!espy56lGxIL2f7_C8>!C; z0>w_nw8EGMS}y<0*Ne3|;4B7Z?4U}&avkf%^MN;kPbkC&@65u!{fRP02;>igRQV@I z*I;SiKYIO$ZpxgAu?bR8j;a0(u+N{Ty!-hU%!*eKHm7D3z-f}M z1E@|O^Luu60kz^I#sCrKOHm8eYcnp-`3~KVoG%4lrKbD3M$t-Ed4|ej;%_yWy z%)VU5g|??aY?E1$#CY^{0)+c=VMuajHZZ6^#Biv0)LVBJPx^55-ssV}R99$0F>ExW1er#5Gq>7MgVwYMLtM62H=;6m znF(2YVlke*9T1a%e231WNZj$He{gz0^t z#rYqHd;2trQt^D)5c*Ua&{v8&Ve{<|S1~k9ycJFeH}XWbjANJ0g}O+th&_GvG*kWtkn-jz6!n^2lj62|}BJN4*WLza?6iV0T zri$$2oLMB3TmtNbU2LA0f`!9|0g=r~=RUsP@{3Q}cC^a4R-Z#_EG+deJQW_QAS>*W zAf^#m@J^6#vQ(=GQCdYx()*mRswWztPf>4QiF0gABakukCU8lP6oS3ML(QQtEW#JCx%@pB$i8*Z=%O@0ael`&2nQ>_6s{)e-h4316WQA0ZmZ9&rUrBY)93R@CNAU*N^L#p~komhP6PS04%tiNmS+_9f~JTL2c80nG^DGKG?bu?Xr*^GlCkwkPTBzgJ1<%~z54;Y5xhAl6Aj`7kd^Mev{j-;7 zm^zIScts2R^4}hB_E&$(0Wsqvr>~$(V~rJp8ok#}ET71M$pIokNRjGE75s?vZ+CJ2 zJH4en;OWNVi+wS^cSr!vw1=>?{t$p{5nybDiF}UaNJ*1#kTsF`l{G%ui zencnwB&_;cK{BK4pT~;{HB3_=rw7Fze5p|>McV$a7T`bCSKM*+b_p(xNk1+{j+Z>! zgn*aJmPGM&f0q*2LZaFYsQ!3JRmtgdTrZK5(#^biuRp}s?he%=$47(rY#-L3*N}$H z!;-Ox2eg9Yv>b?^>WTr9`dM~$aYSEX!{kKEGd_dx%VZ65j9?v6xm1K&%p31zd56IF z5Sb#sCQd64R(@>U!IBtPvkmc5Jr~Z2y z9zlfA7HC)BAe6+UctJ}CFr>eCzlnp`o?J({(>dRu@{aJzefW31uUhIXa&uIQ8UOtV zL<6&HIPRB*gxjLQBp*BQS=tDy|6K$dOz1VPM3X?Hwo@kv5dL}s)T!mVN65dx z|BOhBpny~)PKH_iKNnfaa_qnV`xU|3#bC=sjG(bEbfW`z58p9xQ2`Hv{Xgf#+5pbA zt;GWKI0*3%BUzJ_LE3if9slE!h@&B))_UDBm;>*O+WJi-GDWY;M zl>DAQTyc{)O3MvMypXFEAEYD+DJGw{oeJoah~mhGkHI)2|8e&n4pXC~|KacR80YVQ zWR&ZaOegjpo|j*KbehXhYe73jO9`l30}$-+-{CA;Xjv%R0ky8S&xR?sUT01mBC^1X z;e1XX(`f}d382^&4)zWbiQBw{r^U14EpS~y{$%M7_)+Lnyg)+x88}gIoh~sGL^Pno z0Rt8{Q3SGeZ%kbfJP07UhT8%NgNnyOqp$dAYA>W@Sl1ZA_!BQ3I}k|j=OTEwFqc~~0Idcow z1~j(E_?@hhE`@X$=q9ok&(l_y=f8A=vM6*v*;++ZlB!-O!&d`G)IN5oNImX(M*-Z3 z<+y?G#Rdeoz&8p1j5Zsf_Tlq7*((bj4Fqtngg5KKvb$IvD>3*`QeyA`7DbIjMMmbN z{4SE^*pxS?r-Qnjaa$d@nlEu(e0u($VW~L<+tCaffTZyc(%VrJ7ph+&iv2{Gq-)&! z@LWjoa5-+iMcAa_Fb1Nm_3s4o*4C?QQ|ApO^W=**iD1pS=6C7Fv8@G55VT7iG>sBIuXvn3gr zy)T>>BaN|bW6(nXBB)Lb@d}n*P;hjjedPy|4Sb3^eAf35p|U*hY{w@XI!R=~q_mc~DH}@Dn?p zT#yRNc{~OKlz=G@5|l;kX}M}>Ya|7daexm(y@Wxuebyy-3}|9xvzEbKSR`c$whwd1 zNI-PU-;)tUHb6+r!OQ~URQ2qCdnSQ}>JlZn*+SiokvKi``k281hvq(n?ncJ$jLX?o z4MK>eq>SOnqT?d*LUhLb?e&6ZiMZTPEmpIgkivO7I;F;ps6j{*J1;{djZwEk{KAP^ zYC=AqIB2Els8c;PEji^7QrT4qKDoU7eAxZReI*9(giNtQ#9mM<9P6A zp>X5(58ajZ0jpRJ*LJZA(dUZZP6b%(uVu|hMnDs!LsXj(XmPk1gNqYeo_@vOMW9%7 zVU?6fVQ69PzCG!X9a_XFZw*Xt4wl*$`tB`NY>;fsbhOj3$u1t5+}>K~mk6AUmYW$e zsqu0=?7QXMp_`$!8-2SeM0sRjz(->d!H+WNgp$e#U}N7*dNAZ_fMki1$x!mDlL0y`D@8a~|gT>+V4ArE51Eev+pve-a&kJbTTpIbtF7Pyl#~wgG zhe8`LpS$~6t|f+}W-6G;{9XleJU6ePZF{~quZcLcaUDbB$K7zRJ1Z-gx;4 zaj@uiQvu?|9c3F-t{Rkd!Q*>EzXRb%;%BHXIR*Z-`HD4yy#?N>Dvrv%2PR-|_>s6)&+9cG$)$`pdEm15YA=DfXCB7+k@+N2J z5=1?UqHcm5k?i{65ZY#ydiJgHFbE1Rxfn^Ajx7iSF&7cCB7^kZ&rdgKRQFfq`U}j4 zoX#|UeJ(BcuJTNsL&=x3yQ$9gRZVK48=Z>I(_mVi5v;sQeyCj8|8);>*}~G~%%>GK z5D<;6U;Jl#C2&GzZ?V*4bG~oVxdP3?p4uwS=kxe&a^=wgRoWI8>|4s z|1-I+3XjwG{C_Nf7m+x;g%DDECC!4tngA*6NYX8*-Ij&IhI;evk3Y-oHw4l>(6JQk z-`l?kWTrV6rtoBT&Gx^)m7FPgyD?71|Bv5?uU!~E12!m;jNE>v{>y0UrPf^l(0apA zPng!RP>@W3RQaB|PQVvqRabHF1qSxoz2%x+-dLrQY-r{){kOg}Z2h!fVpP~)usCX? z;ZoU`v9y%WJc-H$T8aPfvVu5=^xxZ3-h4u*W7Jpv&GJ(O!!AwWPSbOGBz=;URm)VS z&qTNv1xLXCBv&D)ir)@{wVyDM7(jt@o;ngVR)Ii@2aFwi>2HCGUA{(oXaNPiHxB1L z=Duk1QD1gE|Dm~?ujax%v2?R#b!yB;>&XE$XQ&;j^gGt7rF$cCj{ zoEt@B32UeKXKTrK{@2^g!<$1`9xq^SCD1TIsN3gHHZ3uK)zoWfQP<}LoCBJ%?B$}* zuRKKEuJc2#YS*k`dB)`e6v_>#ei%SEkSo{}N)z}8xXMmL)}z@BUvX8NuPG&r$n4}_ zKig zwH7NuFryrOxbPkZW>H|kHq+l{=DBSa$qN~K#!$|Og6&CS@RuN#f^~Fz-O|$1^g0+s zM(CA&E>+{*&13%PA7l+02r_g1g=5c?P2Ik{@KebQoO*V7T|JaKy6@wwrILfKq1nub z^H}gf*I3}u!R{&EOZzGdv+8lVPa&b_*As|g+m;L{Np)iNy zPmDBOnX0OR{bt_Nd)q5qbw#h1Kty@E4^*+~7Ns`V0)Pb;o+4-EM~VH<)e=^O`U}OR zMlVdYa?Ru|#a}&riC#Lf$OVNzBKy94md&YnUANC?LRUf1{uEQ1Avfyt_%V%2ib!E? zoLI&1X-kd8tH-x*_nrW&m;Sfl7R|ss@K!g|d^R&srDm~2dr_35`uBJ3Ut468w^9PE`_>*D}a*hGdKQYo$$wdR$rT%O4H*XjwXYG6zH{P%gfw|h~ov7XD^kqVx zLZM#(Z5N1wzl60~e+lb{1H-chM2`>~$RWLre~V5PDmz zR9{bcMR5G1l{hN(9&>f;-8^iyNG0b>c&e72`t6aR+J);Uc^>gRwS)ykG?oohFpBdC zTUH61XU~-dy*w){Jf}%p$Nf%Fiulp*oGUbFHC_Hx^O^0|SxRXZ8=IlDgU+w@8L_Po zz78rcDVLT?*SM?9ZYcA5f?REa`~F5dx!@W{R!x$)nTb)k!(djA{PFaEfVOP-Il$A% z9WoW5W>XIzql8h>OX~=BMp2_8yWU&_iW{IQ1=;%dYRHtZb?GM@o+~`zD|>E?3&44X zyMK5g!0EeK9Mf~Adf{+yW#t5?Zo2xheJrrXDFpT8WRThr>1Knn%g`QUqiS4=DB^Ir zJhE_L#f*xA)LvbmU^TM=EIt(l#IDNQ1qr~5vltsw9&(H_i zqCv;`-#b_@7H~myw-}-K=7DbcG8h&LEn-ybv&JB8+i9AvaM{qQZu2HE{koxl?_2}` z>}e}?%X392Fl^FVL{LLEK>w$46Q3djH%c=P9Q5Yd&8nv2v=uVJ&bvtT-zkF*M4?w0 zf}S^5E_Tch4d|G~u{tt#7cW#d%bRpJxzBukzTHfxo877R0~lcyuqVTO_1YK zUx{GS*Il_>=%wxkXKxu0Q4$$1tCrW`c z4lli;NoTz6-2CPKIKyN*ddScseujeAz)pRBg*x#Q|@j43k_2#(~ z#VhfT5&^zxIPG)Jlks?^4G4_K($Xw09IFoaB&T2B-!Pf`E|uwy`bqduM=H5i4L=NYh ztRkC^7meVQGJyj{w^yznyu5;rcdsNzp`DSYnv+P=;1|!DKxE;=zOo@o2ZKPT8q+Y- zQ0j7I_eL{IP0ZDS^!+h{K_re*p51%cHS%&S=RtZ;Y$#tD5d;nD05q5c(7*;jgForu zOuGZ5NQMD%Xke@w``ud|&|DnYv95|r%6LA#S#kGE+>!s>tI+z5jO|+6agcK2?jjF< z|46oQ{lp;GnJTw3#Rog~)*fB}5q48frco`X9ee9nMsZW0KOiWt$Abv%(_LcS{%5H& zSPc`etMcH>E{MJx6cV*A$fEKwpfe*REOSDcytPGwFC$EG*Kn1)Zau(fUBm8O%1la! zJCjvh&fQs>>>vk3ir4QL{dpP07aK7Hj?~I1r3gPjQ1PJ z9&IQk`D+Z|R4nJF#H?Cl{Fhr*57*kjHdMxSm!-1)f)TsC_cM;QYb~vB>Ko#E9wn77 z`?S}*1@xxfDQ~(Jw%Bay@1zm2)-a@qD zK5R!mA_@@#f=A9JXJDww%hd}78-+E?)gcUW`x}`@qRAcwUN zLsQwIEm7Aq*%-nga+AKGcD=0;hG3U;UK}Xirr}iD`PSpD6=wqJ^Rq_*sBs0LMjC*c z1E(wVMCjC?^gvkVM2H{);ei3bC1ku+wujxF13)F=g`7^fq2kph^tRR;ASRA;p7T9a z0-$E{Yvu61J6!4N@S*z>k*IOWliiKkjc@8SYq5d*R+|QfW@W1@fk(crPtT|qJUHB) z?Ls)Ae1RehTJ4^b5UA{t^CosjhrXMPasYO1pseJ*Jgf`Le4*&Q++4F#zb6LOioV}o zUaZMCD!%g_1R^NqZWenoN20ohwnvh=2uehD7rF0qFv~Pjd8_2!_8nH zUtwL1L5S;sMEmnAv!#|--iOXNJ=7aH&BlE9xn2IJZ@n9%(&D&acVh$d92W@=ZZkl* zu(&wPb9-JT9Ze);7M+Qvs!z~I(OhlE_mK^S!D24Gxz!lpKhwF7=YE#hgPF_@kU5V1 zVcEl`#HM5p$qHBKeqA{hx$!}*wrsC$HoP`u>U?D{@8kS&gSe3J((DfuE>uOD;0(~6 zfK5waH?1ZN?4>XR<1mH$iFg7EDVtH|1d_ogj5*7J+f#agGKG2=UaRc-Ppq1DI4Mca z{6Zlt8@8f|OCy+M6fEa%h1P;;)?5+MZ~`*&XM0oghMhBBSgWfv6(h&@wU?_8p@OK@ z_!YnuBz7YN{lloUx+`+z2cV71!fL{|qc5Wo_u-#fONi1Ek&*i6pLrf#N=uWCAteSP zp#Yb#Z8bS39xG%?VL-w?^Lqo2%PTBJ(^}p`G^n%uWvyk3QK!4WJY(KF0q>8XC^9)cbnon&F+Qq8(tUZ`$asbzuUJ=3@ z;fe5E8X`w*VLE|Bzul8M!V9PZ5u>oLXB3_;C0ZZ*H9rJ*CNEAjz4j$U#=-Ko-r_^CS{|y=BiU)b@+usR=z91XNz7U~6QybGTRdbhN@LctLRgZn$>kHq632I+ zXr8+uM)4d0a#*!$$FbTHvV_Sjaj-+RkSk+Za%lK$?;Po({f&vLYK5WMc#VqCOAFkG z;{HmCovdIpz8}}NuXA~W*j^=9S?F|vxi^J|R4ia?s#1N%eE2+{%3lBf0TFl@)B646 zDC6omJc@n%;h9)aQy4Y<3VaK37WSCVW?pxNx1}ZEJjiCAo~OAw#dN@AYp2loogR41 zeD;nA-WDf{FQZauxfP@+L=`DTHxMnD<5O_4l>m#eLX;>d+Dy;0noK?hY8DIrmaqbw zQ?6*d8b0EXJQ3`3IFWT-JQyA(ax;_2Nju@9zx0b8d16xv(W@zM(yzhA`3q9&l|WQ^ zKgo&j!0F#X7FQ5?p9&oFgQW~b`Y#iuUBs3SJjU5#^7dG75>^NWj|5E}3~*~UBtUYE z+bnk+=I$t#2IEwN*f0peGB0tWhARoh4eYwZUHVqmV+kBbSsJZ|V|C%*SK150OFxvp z4r|>B>$y1P!q9e&H#F~^jXz#Li}xxl<+6wGoYQvhweSY@NOi>5j`FU_JB*=u*X2XO zuAj}2CWG@aO$P5+Fhr}9H+7*9BLmPoTk z)|{i-MJdx+W&}bnK)Fo_rTEg09}_jumGj zRFd@N`*Lu3rMtdiYLQ|Xb?^X(4Jz0ni+CESe0#jjMjbkB2r z=bj0s-J;$vjr0s9E^MF4BsQOGIjkURf%BFYUfyUccaylgmuF*W$z>^R$=^NUd$#Ch zr<8^6hp7NopO~GR-yVW+c3J(O%o?4ZKa&)uDbNF@%JsZRpRdkY=9_lt(GIxaqo&( z{;o_+sbZ1UV1GQArM)BWfJ@gOI?OBU_VEUsrB&^3YyDN$Jh{rgR?4oCwjb#4#pQJ3 z@Op6vw`J_&VKhn7>8=G;+wD>Y58_yx3V=WQ=~n7m;T9y+yrTl0utPPE*`IQ^wlCp- z;2aOQZX8?l(mc@wU;hU}BA{KXIRp@SK1IWnWgvf9fU~LfPf;vgslVvbojNY-g%MNh z!9Brf7CF)#((dJ|>rx{Z==JqC!X46ko5RO{X^d-5s~ldSx6ya^E7zGWV$W==Z-@}Q z@@}@yy7lM#NYBX5+_+LVg^D&W-%|ocx$hg8k-_&~n{{XpK732$Omt{q%@up<6A^9f zuV4+B)~Z#$wXceQsO!kU zVb651+Shi$V67_6iH4!0H`X@K;0nVh9>39$dvdv?aO{%lK_K<2aMqRANlO?BS^{N)=qyFS{pOfGez@{tdx@|FGfl6=0D5$5Xjv9%Y{ ziqfyu_Bo)G0?Rv>S8{NzB3ps-Yd-8x{r$xX_YYQbncr2E^C(C;XiWt?*8k-sH`rG#D2crz5IW&;wy^g5`eZ`2qF-H`ik+uh5Lzy%HJt82uY*PTQEZRV+l>R4L`=6PIR^5s?Y~CCQA8nOnWVJu2M^k2zb-#t_z^DLyxA`f1xl;H_Q! zUrMwEP@*pgl<2iZV$(~e<6>C5+En&}P^x*<7LPbwAW~^Z7$MgJy(tYH2F#TS}tCsKsczju>S6Ze63q z5W8HT%$m-k^GTQy=ZWuO_2LW!Ag0eRZ(J8)j9y%c4ABtGjdod*h>Dwc+zRmG1Yq zy%McydIy&W7rhu(3&r~|hSZqr1*2UjvWOy@oP1dqAkoWZR)5;pJUxQ-A#7y%wDD zhIHv1ob6}qi+48A>mphD3p;YTG;@nV&T= ztyk%`wsPI_Ts!2{*sh`IsV>~8E?&BaPu3V(FUTM3P&#-u>Ms)5xnGIcW7mw*mhkLn z?OR&r+5EJgwxt*)IG~g+7dyRWYIF!dtbFNnEdUJ~!9adC>tx3aK+e#~A~ zegAz9X6XQG6@kXJ6hvt&UEFjn;V(<3o;a~$ff?iPM7Mv`s5!VPl$8%T(9P-tJr&IBP6BKjKVd*ZBKua9fBe5E=&!6g55!eWU11P zuvc5@am5(h&&6iU%@>PHWC;dRQ+7FV5g(3rSRItIwZ5A+#N7&uw`U^irw!(&5HwTX zW572%+5D2&T)wsIK4Vusc93ISgS>)v_8_`U8`xF*!pC`!Vbyp7JSWgdn{xK|t*p<7 zd=m%bC-LshMU2rtG=yEcSS+}`X)AImr|rG)zE^QSZy;QRyD!xnN3#F?{Hc z5bZkp0$9RW=pS=5aIE>M6IW`_Z|=Ss|r*r|Gw$1^KeWT>$q9( zkGvU}x9uJ*C>eyjUst}k_vw}D)|tQ>+lss(3va7BySBoCrMU^8PqS@13JV_F+c_D& zZ8Nui$=}cwSiR>Zf+};+^f0Lm_ThTKjEtD8Pq_TCzp1&10dZ=@)|tqu?VLkW(;6ZC zXf;AQ&xeHO#Kr|4I76=(+XwMK$9V=_u8iMaV|yGEIE2PrAOS6!%XKu>WARP7#UR`DtIW}k`o_-h*5k#^>qX|%+Z z<#z@X2ba8XJ?w6YB8MuJIa@0&cjr};lM_1n_vF=ndCz)!_F=b8mkU~h!1ojabmVR_ zavskz;e9<$IGQhn@nMS3n8gJT6CVyK4b4%T(}8s98nw<`>h!1#E#F#FNMiyV2f=n) z;EXJaL*skUwq{nUdg&i&7e*;rPq9McWu6Eva@;sWyBtr!6$x5(IeqiGdMOw8!7VvM z`If!5B&Hx5ePi3xu5noxHYc9wCO9^P++#4i-&K;|tK-I=DR%3YwQ<#}=BKPAS$S%h zN_1&qee%)*iPp&3+y`{7Toky>u*{2MsW%QZR<#GW-u4V`{dP#VozIt!_&#|!D%`Hv zo^=s8P_p+upf2VYDJN)FtuG0{?+ywNHF2`KMm9 zzdVm8t*iK(*_*uPh&NdTVxr)tsPvP$lHW>iwiAEhQbOJ?)Eio}M66KJz(Rk!aBbTR zISuwku+joDdknFu0CsQcd&sTT>)GGa^|V+k7NyO^qB<-ITz1vrJbH`@Fa~xvs146h zQ9cd}>=ZvypM=yFyLICz+rf@ET!c-R#7RKsy7DD@Vh8HQleN;fXeRFdPGs2gA=@Ey z4c__KoVe4#uOoSt_%K~ir6zotO5TM|DrPga^gtA`b+)B*G^G-K_(Wl-ki?0kfT&(K z&B%ge5#bjxccqwn$in$Oali?`@bA7Izf~3s=j3p$Vc_eCPm!G2D77vP(k|U?IHg)q zNXJ3TNg6;td@+hbB|?yKKs7ah#B?Oc&)=0!Ps2rI)ofyFKS{&2jjhD9^X#&A6+<)G zpM~(&X~v1euY3^_eY`)Pt!UD_M{#pTj#kF_9O`~Pw;ab|E40=%9^M>Y!WK4rLnd8g z{L4pNAk6v8Ru#{!LwPOLA6&Eza!ui5sVo|&KAp_6|D>PgGRIL@t2!M(m6kjb`Z`?g zdFCl~V~^9ZOEEYMjt%3Co@eGky~kg`4>jA%HSdk0YD?e-fxbzCX?th%=zpKZdpGa3 zhl5B88F{s>)x@JvMDaKCxSkMd?%dv-H`Jgl`8aHB(-~?gQoiv0x+5JlYgF;Q;^&8m z9n1Q@-Z9`70eOyl#I9KfmpuyOn=~de6YTaLK11F&y;cmqrhH;*S6OCj?R18H>y|Q{w~sZ` zQ@8jqwX}kayb6QC@|tvZ?t+l~O~qp7oxtWq)-nZoB8OW73w;a=oa(u9nqoI%p_*)MVjv(MW^!=urr= z3U3U(^ETWaJNArhaq6WfB=G#%^sxCTc?=;g0KUQlBY2_faXLF|s}A*nGp$~a->EhE zA9X&b9`Gy5zZ=`t7DSw*@A$zp3Gcvher{+@wMIfpPg!L544F*LFV<7i^24+-K(0_7YRG`+~*b zZ*;W3Qik=2e7pP$G^}+$!c(Gi>)a?H&{2z9X`FD9~@(6 z0}!Lv=*gnqp5JeiZeAHIYbHyu=|k;*O|1&MimsOxAcw1}QTm@p>^Nt=D^dIuAw(b6 zz!E^^mn3+ocnW!XhrA=*ERIj6^X^1x){;p5(Z#GAzgmNimS(S_r5|#vI%`~RTeBWJ zVt0K8*nG#?=w`ADZ|`EX4(CfvEk}3(Sjse{ zE`IOGvm=JDY%a%_hIdk%Btz9( zoXOV{)lODv=u#TPZc&r>pKnXP8J7$gqiMCbW|SACVU#~l6Um;C+{P11oi+J!GC^g( zAJ#Nrg7#B?JcKAs3|nOTTW3a6=;HMgRbj) z#8rOsAVYLuScfxT+rT1dzBQEoywcVhgY&TLKW3No>h^YfE}rM6L|lRm5zpRu7%MMe z0AM3&SY0^Ji}oPLpyxOzTyYPVPM!h%N*Aj6`ju8%^>x4CojsswC<`44yDfhv+&9V2mU`n9v4QhU@Z%8&ZcNtbJEa_4MZ^1+G$jw5P z6MhX7zGH|2-KUzYb2hL&7!4$f@NVE!;2_$MpQH4+R*kGO*7U>eY2&Znxwtt*ZdvI~2$NbO?asRonY&PWYTl9pgX>rdp8u zRcLN|%dNh3T6C7fJIZVs{+7jW8q}*kRU%XBd%SrW9(r0e_E{Zrl%8F-{6(8i>li=z zJ46-}cp^(CQI`Oa4JdmNb;sG7fKG&)%*hm*G+-uw7L}X3+*FEOCAQa|IqWg9G2}Le zwrvG6tr}Yz>9pDjxQDeaJppj;p`|k3VDSBSw@UKqH=wItY__r1?4k$%#EBa-s+i7i zGC0W&G=3(7p3U~#lVYJ|a;-%`BUj@xMOV{5Hmk={!d+tV1_7SUzz z`#Cn?w7e1=Fg!*wGCbC5zqqm-;h2_|_QKumb4(hbqZ48U!nVd^q|TOAl;Lu4Og9kN zNlW}x&lwZIJ7rGi;Ihn@CtC-%te|o0wrw>iN|EB*(qejb%K11eHfl`t<}vqi(zx4D zx1iVUPTC|#*!ao*?C2kbfSo=QQsAQiwf=gT<4cAH&GHRvg#!d7r5cd)ZyeExr`a}m z7Y4M74g4+Wg9~|cfIV7E8Vl<-zn$>+@VCGzf%QDKI2BB#>s5A#O@v4lQ9z_Zldl6k z-(>US^(<{-+#~V6bVJz&{#8rr2N`eluj&QV%H%8l#+8)pYRZ(~Z$6yao;;lKau1Z~ z9kAH_)UI9JKC6vubSh9xW6rw6JK;Vu>O+1cUSM;wdkwwjD^Ftt7L9MSg)Lkyv;wsF zpgczt*zo+nTIlSWwTBSd2rb8-=RmE1wrAD+Rp$GUX@S$Ad|8prW4~=&xX0I9@6T@9 zbEI~jNvuzX1xbFEtvc;uJh!vR08?eY!$aSHyJ0|OA_)K#3O<_NY!66&*S}^Ck?SLp zwGILInHI!_QY|DxMdwp9i38haoUf$3P856VaW3G-1aXMfFLPK^Y7wsfg<}wJdwo6U zj#ZW@D>p%Uv`wxdG6`BzSStlH!#VA^hdFdU^or9^NnuAd9ZZ$#QM~-FWS3v2A1yrl zhWeY$3|+d5El~~aC+Zc1Y+>=?MV#Cpffv~iNj>W#vdt?)eM)QOp?-oe?fVXKEzsc7 zJ@vjHv>$<!cByHBsPmImi z2kGYi*kVVGDTYt7>w0+XNV=G99Z=&{ zyAk@d&4b9+_D6<6QiH&)t?)xiLd_o+SFKv(Pqo=aRVQ0xcH-+7nP(3tg)O~g{m;54 zVJxLq=_Yte9D{y@IZ@Z-Q1(7i2+w*qahHjCx)Z8oehzuyQ+m$ytmt&)*d4iWq=_k( zThO7FtQotj*Chxhj6%yDNY#v-7^rDcSb*=@ZUpj#*d@}>5Y5sCt1%Lx!lBM#)3`9` zO%bt^m?i*Iqrsypm6p_%Xvh-^Jf8L(Dun0RBtfbx$RK{RS!&7#xk|kx8ONZVDSlQR;%HHBi(th34M7NkgkzsEBz>XZtMsE=wF5o<6#f;a@n+%w?xGA34e)t} zIWZIaovh?AYN}r9$RH8tuAb5_Wpm+Qi+#B3MMHdqq9@ZY6_Hd-1*ABeX=AmRPco4z zk!*g+L6gQOKi84BZCi$E<_6`5y@T6_Y|K|b1pDPW?5XN61}frb6HGK2-?n0ovb;WC z5s{S4j40z)BD-XjmA%R)$+$C8 z2#I9hR%DNi%>TL6^Su1H_7#6y=nPg$Gbi3md2M} z{nU!m`AT1vlg-drpjRUadXimWM0IU}+DG^<|;rJOJH zNhS5oH%V4JH~oBHnMQAT=vucVLL2f!NJTRsh{-f1qPEyz%L6wl?B7G~sAjYiaEl_2 zH-4VH2@E`yUn!;R=&NzU?B~6mx6Tkgg*aGfCEA}l@|bcvMwmHiKEHB=-B8xU>sfM;8~8_eOMx{xo9z6&+t>7ZWysA_cRhJC{o3}jg9i2@x<0SZ z=Ls!x^rti6%BxobyltK}7*=;Vt6k95r{YD|2tq!?w#Q^~yHD;8PP)ftvY$ft+Q18n*l?zurM6-WyT9OKt--ZVS7nj$v|p!;KS)qS@+nr-@dHpcei`!252Ai9x<2H%qv~!Ecs*F#NH!k zeR)3ZIbWJ-)B*JnzFwjeDVS`wB4}D7Y+i&|s-D~AC;pPCn%n&e)5X{?8^4uDpOpN` zlCP*vcrrNRgYIIp&KKu||$K?BInZrtSQDN|}bz z|K|$s!mS)08*7or(a|Dy6`|dXhvQR%i(C8>WI{7`+)yMKKOktT)aXmq>3k{AyJ{w- z6t$JaDE0bo^-Tk>x*7iALK}PwG5dBBK8Er~_QBi%4TZMos?>gV^tp`FeyDZ6?XA!H z=OmmF7#YG`S!eZ`Ba&?-M^WiG^9PmlbT+Hc1!@b*Ts^iusUx4ApWLk~Zm$Zjwa}tv z6(&X(BKiP-uLtvllq}QA`K1UIx`$ZPNWMBJCMQG%+ z<2_7mclcVf)Y1=K!Cyo-vFgBfLS~SXZwj4l^Gy;?f-X|L^8Ybi%SPomftj*?jKJHs z6ZB-PsD^Jh{4}V=e-(xtqJxrFq9u!F*f~!kQHiS+oJ$GzSD#n~-M?V^`};S1df(1* zydNfrwuy`cGrMM$VoTFR$BHlX_aph<5$iy?L%Qj_zIMt#;Q?KBpoOjg+aFqI{^eCZ z5BF(~;Q>WVTZY&BfXiM$XT!3@{@bm(R*SqMq(Yi0mzghNKRoS5XGlrX$S`~2x;}%t z2FUUU()dxZ$6m?zkHHh$%7)Zve_9 zPwfJkMEYm^d)=Vv$5);dpwCD?WE@Ky3Y;)askF!?*AI=nbIC|h4co|QX_1zrdOJxy zm-Xj=zMA`0n#KR6mMcWbU1qKf?b=>?fmm4*RB!B+Z(WEd3kl~<4)#DU(@88zauCKQjbC0_v z4Gp;i7z+9l`W}J-7~Ki}?)+uW)6xPw@N=Nb(T2$)Fi0S8o3Xcc&a%{g?G z9%)f<8^;ulRAsDllCutj)0|=Ej=F?7;DF8;eZ$$}8vdPcKt-4ir0Irzu?q1(GCdec zhT;RJA2JCRPftJ5|Ji{*XJfJLRd)A)w_js~(!@G~A&$6H@^93-cM@L8;q;qa`yfVh zxq#EbcOJ~!2>K^dK>>X6qEn)B2;#2eW{h%FgN8@M4-W`__yxrGH*Fkh-2TXk1Rwo? zOlEk8aelnD$GN18Ftfx-jj`T`H{HgB%7F&kHJvo<-fQk;{@!C=HGH^`Yb_`uBH}Pm zsDY;RLxoqA*|_V~LHY>>QuP^`e|hvb{{|?c)MXZ+C%;P9WERyO;y69N{tc(@&*|T~ z&4!4NMrAnuIaFjVwXa9mK~{iOHIYtmOK53a*+k+j1yGq0^4}eNG!TIQ9g;pS%eztz z$q0WpjIq8(=1tsx1m1Y+Hlk}9$ld%ML+7sogx6=S2aMN)eVIEd^=k2$$goO6N_rXS zE;paSp9A7@i#drX+LJau4w3{Zm1!?5NJ5-fSKRB+mB?I4zOLcypiSX`#9InABFc?WBqV>0_mxOb5N|)+orPb%% zbR$@iwx9C2FaG9F+L;S6ROoi>-Wk;@Hl!XhV^|P1h4Q-sr)uQJzq0p??>~!z?JmB> zG{^b)=;d+b%^oMThb-e9p*S~0F zXny}M0Ed~klaIXl-1OTwJU5;HjQXz`qd(-vUsY9e2opKIumiFb_F*@5^8;T-_nIlo%H*cc#mdKfqrPbZv z;wUna@;mJ8Q^gn6|Ea-dHT@1~TRDrk=-6CpDzU|#LMgp*4ZDty^MB4q`ChLKvw5x} zl6#2E9syO%p>J11u;Hnw{$4)IU1TB!SEo9rLM>jKM@o7wSzZid{IIz^{zBq5Effn= zb6$#g{mwU4n?RSc+1P54;#^NQ2Q`C~Uj`fH{QKNiQ~t8XnI@Di-`ej9!Oh#vINtix zBB#Wggdhj7W$!(VA8&hPboI=cx|BbGxzAT(TEqlp0tP*`ayAB%yIFXOHgQvaqc*? z;S6OftG~4T)bPGHr|>TPSUZJQ z!e|~^KT)NqkRU97CjsrHsZjf9n1{vRaLj6{F<#WA(RQa zGZo8rYKN#$BiwJDJ?~ecVASASRLuCA~CHg|W zhaL1k)Rwx!T_rX6QWz3Kg&#evO9yzXe(aCitd8f|D@AUlWWGTs=au*v{C`H3%d!>D zNO|&^jlt(9E~upsFa#AIIU>CJe;t~ghton2NSx2Z9a{Ar8q@s{bw4upFzH2~o21z9 z#spkw$t3TQ3l>HK9^S@1O?$0zarc55zkiuOQT0&Y(IN&J9pK#PjqC%@#XlI|3$+*H zLwF;&1-kD;Eq+TNbL`%}X|<b!xj}#Ainfq6NWi-#=5fi;ExEQGNxbYzQ74m#RDvlL`l$X=#t#44ku!?)+Y9&!RJjS;9h~T0+9lAe=~1UE8w$9M@sHx`C2*XYjmi zBzPHgXvv|$U@UO9D`gV6a@7Tm3ML}t7YGkVw%Mo^jc3TE-DmVKMzWdPwxVsBocX^# zTwXz34#33>!cJ)loRAE9wd&ORiAf~Jk9;smqzW`scA2G8*LGNEw>_aKC|SWwv>vheoaX+@A4@gn1lQF63&KjwcV8#PUx1OrAe6@AyrT_YxES+aekVOSsK9? zJ{fzgr8~2*giSj;s*yHZua$4_C%>d=bvay(8cl+(;|ZLV;Y?`x!b#4vFs*5f_+wCS zDj`aNVLK7{Xwww&V=3oiVKINM)*n9AZLSFS8`YWL+M0@gZd{Cb{r#~fVzS{%)l5eF zQt!kLACqaz>^?UY==ge{IW4q7)bdQOR&QRmv!Ht-mdBNw35ME#v>~W&$NkbJ61Y%r z>})R2m3`BktJ~iTW0n@VUY{iunv>(l@i#+ahhF6T!nhjMEmU!m99>lswmJBV9Ppa^ zD%c^h6h_mu_unxi1*P6nOOF*NesKkU*mPuHM<2i}@Bgw1qF#3N*`|C6AfwZ5zGVRZ zD?aM470x{bfd`I@TPnA`q+B`fQRtJ7m17&~X-6U6h>o<`{P0%d2>lb6jAR5`eTQH9 z>t`VsESKr>!LmW5&7wQ`fEshm_M6@=bN1RnZPQIlD`Y8+ILKe#muEBd+hlT<5Iy~O zILH(e$A7_X+*n=3Sx%I78$sa^%tw+_2-<-p+!mpmMgQF!_vc=pne#F`2J}AEz7M8c}^y9KK91S1oxE1EboBsi4^G?>2+d zEe^(m3jXgTJSa{udlG~p)oLD9Cc?!Cmd|y&19de!Ydi_|T~j`>i%y}!71OJGrk{i? z$vx)(Jz*;eDXrY~TVGI6$XnUj-+XYM$DfqEQvU4 zdhsVM9saxLGXg(?xM{a1cAB!92_}I*21Se+Pp2xOl*YKGL6CYoOR0!un)$!ok(&w; zqgr@4KJN2X)n9^GKB9sM_^vr>mgBGv|Hhrs56W`7c5a7mVzRMX7okb9ojdWhCvdcX zL;ZN+GKkD5v!-9WHC!#*%=W;(TkNmT!KKoOz=&M~jD)_N3zzd=Tw?PIICiZlnfw)m zwQH%Lt{-(~5mlPuxXnRVNq(#B(ZC{co96I7E#tKY1q&Kqs6IY0tjQ2Ls8NE@2U8#s zw0D!9;TRBQ-{gQjZ&zT`8aoJ@EIQ3ky3OwmF}MfNT3|zQE-mD2ehEBn>IQ`G~7^3hBr*f`91 zQFw85`)N{h+67EOxC}^`$>&p(`bk@0BuIF^FE9I{Z=j*|-t6X&zn{#@3d_M>zCDAg z_r?cZJlM4TWP`-^mxsUGi0wJzCGq5hS~-P+zf+d4Yr>fk;&UF^H*i?G zfwkiQ@|%~wd_7$5@=JbxDH%paU6SVQ<3)nkL&DbFofZCWrydNPB$k;iDV^z_Ce@G6q0KJF^H|%HNB))l%P@^S?vCQWB8ip5en|%bnGXq( zt{>HJpLljznf08&DZ0&3=*CH;k#D)anLd+nUTeS!6JC)gzVN(dvDMOTFSkztwYW3cx&FRZ9{X$n2NyaeY+ z^v0(n3zg$k>%$Kgb2ug4N^#?)k8e<#=vlTz*fWMU8FJGGw~#+v^-san5$&Cy*Wxaw zzHaw!!{4R6+6kH9yvs*LS!51R>wlJ0!9V)E2F;20G`Za}2eJn@ok))|=O3TbS|-v*uC4A5v{zh0)$wSEoA%ig-|-I)=-rMIxT$;Q z;5ay;YW$^P(fBiI15(zu=IjW{uPne|%~ysqOLyhyaPnxx<3Z!$GswC%f^Ab(V2hM9 zy|5-(L@KzCp6)BFC{LrXp3 z#e-8Q&=uyaTi$q=AX)F`<3P&$xRmtUjQdHm$9q?}w`UG1kTpIZ&>~jkNxY%>!uhlp zk26JT>3OdQyl?w1^96d!dhNXTzl5XG_tojWj{g?mNPnc@>Au$8-Lz#-Cd# z@z59L`_8C(E>db!RI60-aiG29I{QZD1N<5cp?hOUBFWC{KojT~C$kf(eR=hG>cFQ{ zWRJ<3xm*oykS?J{r${X&p-qS__WZfd;(!8PCE|8oH!%~PhPDtyY1{5~Gj(ldAP2Dm zi2~IiyGv{fi)K&$4elO26BCoU^4@ERwuPC`T8|lMi4200(9S5e9|2sNP`PUty4gJ` z7|(86=A4tCczS_R;+A$yFT1oO%OcxS5pM8^TNo47*Y5zeE z$)HJ&aH9S}qSqvwJpHD4XSnmpb-8+mUz3t2%&xHWn)Uc%iYnX2v80Rc{TNRFLGpDM zbn5ijc|zgmViml=`QFFubi<)BZ%?JlU--|*U@V|EAon!N@dUk*nHt|j?ydgN z!=x&VV)fmOO1wJ?F)3D@&qXOe7Lqn8nB2-XFv+JTZS5__k9cW;`&} zqRzK1MJYum{o*occXhpWvbevoU>-yFv8(+iLu%)Bt@;>^^2xXWuRDIh<_NKmt0ze^ zV1cAz)59Mdph>z*nl#U0_VwB`by8mM6ZCzMsT}dW>RIUC&c?dZRha0vM=ll#G7xOxOYgF}oP{jM(%KQ)X_0dtNa8kXO`V+?h zYwQcSt+yBHbnLi&hkrosIi*w5itpRTCs`@NPIw#cAL`_MXZE#Nnx;0TJ>a&OfP+}> zR>$AFv>`xRE2>LbfsOansYnpd0Ocpko9&6J*_uh8T3f9_=|-pdx!pIu^LJWibG?&$ zXJnps)~*Q8;SmFv>&T$vb?$8NDSxA=4Qd{@JA8|Y6Z5+DWi$-$q`eZz5)D3#bIZ!b zGA~}1(b>^CG>}Na5?8HsyfQn=I&Onrv^Hc`fQg+hOQbK>mQ2qCRhEAvX?{LkK=Fiz zdx`qHWzEk6A=eUmu~(jNoZ_vX8cDtq;K@7BWMdtx5_qA#7NHw0f^yzt9G_^KSIz2>M3+X-*tC20c3`Q`dZvSZ6N*q!%- zTe1P6$2m0AWyK!%>37_?$a+>yuauM_GOFw9!=)@j0$h8|_Jl$3{JnBC zmbkOTMjaFqv1j2ky%v6F_V+gGUVttfYQDdGJWRZu@az)XXaltp(JR0Gy|UZi0zpyb z{qNwapD*ti7g?e^6jmuvh$0o(VYcVIT0eI;Mo0(%d}ZlnYYw_J$7XM?w4R!RmlW_R zSnsoC7pa;~6F6gZr?+78>m~M~nRhQ0edJuH0)I`_?(Z(Tfu03fghXJZF&72Zoi(H*j+V{$zvTIM2tp*LMt7nX0CMHWe6tM)5*1R5hW}N`i zUWLEk$;}lt$gH-BzrA0uwKm&)j)YY|b82R}nSBbr3~LE`VftC{>L83Gh(wV9geHTC z%nBY$Eqed=tq9ql@oI1N!e4Wj5t%c)KP4ux)i37WA!EnC8T_zYcBq}VZRpR9d1b*K ze{C6Pdt7s1W#^wzoIiI4Kj8f!q^81Nws2!XY8^W0`BE$mk+b=+SJHbv)o!$~62DF! zCN1#E-TQ^Z$l%A~nB-b&3C-ccTU9arccoLGPT9Y5da)ddbN%Dt-$dOqaUYYN0?L;1 zC`Qd&`JDVdHb?fHw|u(KRai@gjhvfdkf_NlE+4 zFTl3wntVhh$ERa#94`ZRi(0cUpu^nchY!<%RG9!Pv%H7BReb$w1G8y8{j_Em*J(Fg=U zoqw%>5S-4blzadWj5f`Nyrz;eTSvBsH)xUf^xfTxi9m2*_}d#Jety4J{7Km2kuNZF z{%|PM`a&RuDl!67*q(ChAaKOZ1_*lBBxoAebWP0^HBbq%GE3U&TeU>4lqJ2a{t?9k9+&nPkX#2J1!G<#A50Mv^+(HDBI_x(0XU^8|?@!q~ zHA(ccTsFJ^E3;?o-W*5y&@)dmZ=2*KFc#zC!HiJ)6%AhDJSO zwcNS2TY*b{*FN{^de z3{3Z7YA0v%3qk8L`8q^!qp;B9U9yXh*_f69<-$C-=XsM`jr`{tF5g)84mu!7ufNJ$BrFaG;F$3LdG6e#^D{mVj}6v zcCNB(BIWE`JIAZf7BO#+6bOBO(qzR&OGe6G9hUcaS6$aylcRju3X(Nzg9UEHlULb1g=ujbSJ<3tLq^Hn`nL z*sg^;jBuJ!C@@c(ye~#E9u~^3{ErJ@!qedrpxJ20aXRgw^?R;Ixx+wgc8c#ykP$82 z-`jSbee<@f*5?6;%>BwqSCzNII?G=dX=mjZs19Em-iVWIbKwvr-aIAB!3j(6GX7EC zXBi>*W_+3_(>MXi8csJWVG9B()i||rW`3@8Zv2XXdA{Atn0Je1;gqfXc=o7`{R>}4 zjC!Rk5-8&l$JP5{PTCIN-{A6=YJAYusF|c|HTRc)CODmjOoig^Z#_^`RbL#gfzxy^ zEux|{K{cMYTyFlTfw;B53O?p+zMcI&dS~KMy9g6`&$(T)Cdx(ZJFrp5VHG8AcLiJw zXPPI7ASnhiQr4AZZnwL9C*3F#jXqb+whoS5v#lhh6}`0=wW zo^hg&8!NJuf*%%sA#MW@TypqiS*So5c#6>>(3iME2SD(a#&MUGm6doUKgD$|iSd@k*JAPVxv^U4U_$L$A>au1 zbI^YX3B$S!J+N7HS$_S>@eyM$9A4LDwe7|Z^xX@caG;S?65I89vE9Qj*V{g8Y{^t~ zc=X{TI)AN`SM-ZZ3cvWAR8PGOF=FOL-g<1v z-(A0_U+2zUEtNof&6Sr%5t|#?a_!cjWC?vp0J8FBTxLTxwg)Iw%S?YcsH?7!gHw`T zSs4#k=H1_4FRjAayvTZ`Klw{QJ4LuZb6(M&6X~H~X(N|?Xo`2FK=(LXXj6%>BeDgf zG4GFPo@7_|OmU@IGG?fF5ZO6N^=e4!dn<>AA6lDv)qv;6X>)64g%^qK5hu;~ikOSS zIzL=jjrOk?x4>6T?3ON9-+MHsQ~~`<#N(DoQn=p%g^CHPGQoR0>xTMo1bN(CpJ3~L ze7s-BW9CryMuh4LoSuE`#gA6SH{pUgDvgjU)M9w>&+%jd8-f@7>-1gO>7Kvc#@IrP zAM<(OBw?{<(9h-?Mm_k6cifb`J|fbXbEeywo0is)QsX{EG-+tu;r z?XcSR`n=cHuk7>)LyI?uj`BJgY_O4B<1KSL^ZH@)18j4gNnte$2lXaSd$8!Ls>=lh zHZ7eS$f=?a61HaNO*s zAE$qi|06-;Q^YJ-1CuIeHRz*C*Gc5tG`p#dZIdFgjnQF=D6TVNKEE_eWX3z$&1)G0b&Z290JqXT`0U( z;|ZFa$0hCPQ+&7hLD@R<-r{ies-}a+=nKOwY^#5*4$19TYH|`1C%r|DhYNpnEvLQ~ z;)v586cvDdb=w7q6;T;-UCG){&Br|IWdj_14D`Ee{Iwg4&_75#!?lH$FA*5d&+aj% z4*c%8^XI{4bZ5`f{KU#*{PyQb{(!U~Te8PT3QA!y}ZQ!47pI z7H@7S1sN1MCQMil33$FPu?l8gCK`3!at{~_l*gTd9!br(OJsUA-smu1`YCUf_=WTG z(A5@Ri7O_gd3<7Wve@zi=B}$N5+@|dxu1l%6WoPMtXcwM44cQC(W4FZv_AgqC_n5^ z?&dLgY7;)*SZF=TQ$h1N&lRDA16?M5KUiC|_(`Y7z7T=@{00%Jo>d}I#@Lk|E5bH@ zE#NjKhuiaMEx!ApF3SAla=bwL#O{k|yGZN^C%u?GhuO5V&~>{%tE7kI!pT^F_>r)v z@!jv#Yze-|jYO4}L`x}fUUVG>KPwjUh(bf)M z3l%u-moiiHu~*-ED9=RpFPs#<-2= zQy=pw61ZuZx}ZMq1)2O8qSrAYVK-`Q1;GI`RC&t}``+jv|&a(fzy0&ceMq z>xoa#+-ARrgQ&U-_*F#^-(F%ZE_lOj##$sb!!dT0;6*UP`v;7)Hlvgx-^y>^7ns3g-ts0)A(Mel+3 zwpw^hfLD>>!OhEnCBfz+hRl5)+;PkPvfJJ(pLr$hx}PAuDAwl(vUe((rR)iFr5z&X zj$p5mP~4J$_qQLe&J10Lq(l>ls^SZM*93>XSHE;Ek3%{+XJRM?V}#DuR?1?0&mi-* zZH0*7L69J9*nB(&DV7Hq*OvM5TlI^Xw*FE!9}9`HdRN3WU-!Q?NF^#4cd|d)$#CmX z5sawu=a&TQ7cXji{v!NpM!qYYnIDN|7@;w@5+U>nFq)J2L_~g$2C@GHr`Q_g z_F4RPmIpzY+HKBQy3~!~*s)T#U$OTCKutJi*rMbHSyNL}W-GVeEo7`$9lq82Y$r|( zoxwGb^0wq#^K`NrYk!%quwA^7Ogo}FykP2B&F7V1;>c3(MtQ_nsa#n6+KO_|PqCN2 zv+_ArM50B+194C2_E>4p0?N&WtfioUfEuzT+>0A5qAa4K+Z8Qa7tzQH{BcSl~M>}^=_$c2M-t^82i^M_dB46+f4ZIXx7aXH#cWbPEM{C*P7hO z1{NS#InB+hZg(9^czLJbI-p{iacA5rPT^v z@{dmIokm&kI@R$>Q(fO8#vS%gJU#A|O<+9b2g7)vgrNd+NDos5Urs^zs(jMrXCNgr zlha_O7?_UPydT$vuO=THILOQ#;J9T(_tAdfWP&ZZf-sht9V`9G=y*CaROte#+1taV zhcAE2l6?2nuldG}8_wN2mkc(4003h$x_KgqrKIPs&{08I)&05&Blk5DHY_pf`8~_+ zmg=}20jEO@T8|8s`MPp0UuR|EoDsQbf~P!tk}a~CHkfF(w~*uqyA1uNiHpm!mbCqk zrv}YUkS#)HS1lFEGDVd=ze@Bv3^6qI0DOD~Tz#p5+7`m~-}3`;Z%2F+pbyAJT>?kU z^TRBRk9OoFsiglNgZT{ZIno5Bk5SqEuuMAX=1<`(Xq!N22-ubp|E0nB>Y6Qy@ zO)n3JQyO~A9emL|QtqZZu3XP>WA`9&VHIH5r}P9?vZuQxM(}fMYdT!>ZSi7{K0G2R zbsjwraf4bGs`Ka_GTtw}7g;m>`wuaKJ4?$@Bh~8Wx=A_W+ab@+h;bw0aeySLj_w>F zoQeJ22VbU|$AFNYz`HSaaST%c5NskEg^Ci+uL%fqDyTSoTVK8vu}4aInk z{~kF5{W>AL%pk)UPxCjsd=aH}3EZGO>%I~j3cxi1oLqt2m6-RYGl=fvLB}~~y2Ue> z?H$uC9TS*(*h-!XY*;Fi_WXKZi$nL(&FE6~5LPe>mc@wGhO=@8k<(@Rf@?p!da%kA zmfTCT$o+2c+M+IbXUCfgLU_m-ogJz5@d9w@xa?i7E3lp9hTCs|ZSqu{;h@xTCFB_k z#Xe~sA264Fr-`X#$f=%h_Y6nEL3-U!Gu zxPaQVGV2}Na>T9}4E;IYSuJpgswgv|0n8LNni%U>@Ui$NSKWQ|ALxN2X9vJja9dlO zv7uostJdG+a}x4pkiv64Rl9jI^r&!%TwoL+sL<)8>j&)ccQbkUo*=Fb&2$c>Uko1u zsFhdz+gpreCzA6)X++4VUnnLK73ynBZDAl@_DqEI8V~L&?h-D|j_n?C=b`DtgB5Vc zM*O$URa&*AGP{kjZHH<@kWg5FCvkHVa>MfZ2)FVA^_jAkSzcN)Exw*K;1-4-gd7+6 z5o#9FRbZiJ;~JP7K%9QUSv!N^eBEC&Sj8~6UdF^2ya|WB`Gb8^O!Ov6L=q|sqlLA_ zzIEy^`_&0+#XYv{Da6@e!ts|ZI1`1$kUK%nV|r0#lt@n$pRM1yD_d|FY{Bi|*XS;q zn3~FVc-Bzpw|hr%Ynl^q?>4|=sqg^WHs)q01B|9;T`I^6d+S6w0K5QqQUMa4Dr{$4hCRfG3Nd@=_p*%abIf_i#=q67*!ZNlcxiu(BPN_^g@#QqOst;6DRKgg= z9kUI*w=@X$tivpU>v642C zgI>DhuOB*>Seqb8)(+VMFKC#6LWmr!a&ABD-ix=(Jc523u@MNi1e3CYBp15%w9rpq zyikRSfi_kO7Jj>usG9q0R$pF9W)92)&Q8H3@x*U$HAP`-Ivs@=d;LkfW$?P51DI0n zwR&r)N)k+u^%CKO$JtyTasLJU!<tj?u|h%+6K#E}p5+TQVt~4u5@lUCH^(Cpw^?>HfG#Z}{r&nScM3|u6p%?Tz9AHW#VRbKZV`x4O__egfU5mAQ`cvGJLEj>S~oN>OHo>&N}7ab^QPdm0Va-eSDCp6Y)Y=WW;7TemTN8GF7OUr5$fTm_WlD zHFFIvbcjRUesw*LyLLbLf1QO-ZDr@KvL=wZkt9dTU1pM}XH0zd>>L<%JBMtr32<|v ze2L3)%31%andP=`-p+|;a;Xo>l1xxAjv~TCip|t?LR(+I5q_uU=;+v(n^6TOXk-cU zY+{g|f*$Nd3vjw2m2<@Xb)da)k&M>>;mrQdDxA)omf1Q;p&6LW8@|#pH2fa%F;5>z z7Yqyx^TcL{2F+$k{@#naYDftaXpO{bFvvr# z!mpwC(!!=0&5!$$TL)5+#n#QIp_5$BIO!HP5{<=urm+nkgpPL|+lxjIVk^cR6g-HW z9Ubnu@PYT-SLtGX^4Vpx!-Lq@IcxvQV)$(iVzGUcIqukB`UqazQWw^?4~}}Rdz2t2 z=c70aU)eO}{^Q7sBKdyUttzaU-^=X#x-cX?(iZ4G`OWfPsr3hfPoIT=!vs5)0`#zX zZ2ne#s_LpCNNXUpU!uG~yo6o~&3Tkj3a#c=!H#|fKOJ@V?%hq;vYwDr;nd99vR|L; zLkun?Xp~u1)b6RkjTt`jKB-iy$>Zw zYT;}6lRJc~YWK)qNsIEpUbllCj`*l|3i|H1{05&W7EGxaT&+){a%6%jP~3YH7W$ooZ{I0#&# z)2C+^9PCOGuxCX&v)ZYIU@Vdf*%)4Ig;_LL&q0=gjd=3sIHdGxN9w8$Hf_?>=`eyxF~nKa7k+XyXZ24pX2BNjRq$$ zWJQl$K1bp!MVVsNLxmE*@I-qET2318*bc(q{Y-JY?w3_1&#CjU+kA8OCS%yed??fH0!* z6HiL#=1%)xm;B*NI;tj$dyIbrH~YK50mQ^@RUB>^RHFSsvMG}$1WZ7L%gw}&;snMj z|D+Xu4ey6Dp|QQK4GCe0x~xBSbl5^;zd`7niLgbqwa-FVpU+>u*g)Ht+wKf?c~jsg z3Q{X>asWvo%ceD{?&vQlk4ewT;hSMxI}dg?E#g&wIa&PGNAp1_hvyqgg`>5|vFfSa z^{;6SPa@xueTcjVqJ+cLjH1TA3y@9V&dg>MrL8<1%5w5+wU;YEqR3Y+48F@8Vnymi z)_N^EpowOyO`Q3~<_OmGh&(w%FwoF}23!PK7Y10Kqw@z|oyWy&1JUm!2+S(^l;(ih zh^E4Lz(vU=NzXmRinzGI(`bO@zI^T+8erEnxVB)dMIQ70Io4`w)W~L91!Dql-Ti7v zxe_(?THy77_&X3tO|j^WQDg{9!Zgl`J_1rEEa-s^e~tqdUYan_Wu@WWy`Y~dO z$)UqXMct;gP0Q_?I#Vxr?XLBvN958YR{h0k8**XOvL|qgzsXsWSx!d7_hs<0q9{lf zu5YVgIiJt&p^Q_;%(zQ%bb^c{3^G*_r{N$2Jr(?Ul4(pel!Nj#`BHl z42iGb?`wO#9S@OHfVNuPf1}*fxbuXWoJY3?Jcitjknur>CbjqSLS~iD`3qF8Q|;k$ zS$1E6IoAy9^AQ#$J>sCeMK`ZnbJL!j;~w+uu7uaN?9xUwPrs?nV~Su01s>Hd55)Vv zXjIQ0cR*L2l*4XcWIb;T!IAcd{kNI*+Mcaoaviwb)_Lw*}{Q%75`CmYk0&yKvyCQ+3jM0yYe(6Lj05STHT+ zNY0spQ4|OHYUtRtC<>4Pv`7_)(z0{2-`}Xem*=8oa5vTW0s2khQo_hiVELUhByXap zFKyPJydNl z?rN#V`tvhJlZ*beJ`eF6Ig2?jw4J)$gkWVZq4y4J9A;``Aiz7p@+uK*pS_BI4vNLMt}&hKm`8~6hSgudW-7demC zcTMIORFUJL?OtJ~HNa?jE6Mav$l40kRbdmpvVANIlB;y zm?AFz`+jP}>nFSwhlnaUWY>=rrBapt=I~Zz$gi(b8r&0rI7C={1{K9MKcPrcOI*v< z_LZtAWa%QUC1;WB9~t`>b-M|tt+@x@h=>~!(Z`ttYVTh2cwg8$7&|1Q^T9*K=Hqw$ zBJn^+yNUcd!1&S)RX^960I>C| zJD2VN%m`w+ONv7Jwt|m_xbAKV04D)tvdtTOK+T&uBV)~&KRL@_CmYN&166*ah8p#N&-$Mf~xwnstZ z{N)|UC;c-T8i_K`Ad?dTp~AQK_ne?fx#-I3>L17grA6@PdaPk%(NLLjaKYHnAE~-q z!9y>D3dB)6->FkBZhr%wxLX^}Q`NVmtd%MPg1FS3Z1`EoDlQNd8(x+~f4q7h`7NBOPShbVDGW^R*DT@tTRB zpzAxb-2v(auoeP^3qbgRlJ=+}){LYMjaTwWr3&))xrw{a-!|bNxqHvq6B;LWA!w>B ze7Lqp`TK_YrJy04wQjOzRJ7Cq7Ek#~ddUv?*jhvF_Co8@XoE?$r`We_t*O_g?N$(# zA-5!!N(KiVh>IZL1}7=+r8}P1(xFlI;JaQkrn+MA5|&W5voB+L444=U_%j2>8f+it#;)gxq@skpLDHRo)y({r!R!Xl71kOWARU}gW zqe|2I=@TEklG`s`xW82a(f{-34~zHG2e{It90wWQ^$#AWUq^vmASuAUq^WAB4B==- zLyq3zijK~UUfgs4g7TM_qoONdjsbYSgt&k(wSNeYsKIxtUaCKQ)%~7v*)5%JvCKfn ze<3L{WTt9ce~hKXk{-d?(u+t|@n$nQi(2)?&1*pOE@(q4ne6@_W#1i7b^rf;hGT|o zWo9HJD`bU~vguG(86i>jtc;@+MG6^}k&-%vP&PRcGD3yOIzp74vd8`U9Cdxazw7?p zf7~9fx^kS)d5_oo^?uFglXH7CWSCsXj(_aWw0L0~3^hP8d}>KZIWmX^A}2Hg!CF$^ zUhEVXnjio!Wt1;s8-E;siWTALObF49--!am7NR!_;wvJs(phPCa4VJ0)$<_ZOHp#) z88~p^362T>YK6s`1Z_tM=P!JBAW&ZVH?M@pk-)cth$+;|L%s8pR3H6+TGRAy0Qk+; zuT%c~XbhNV;))vB-Dm-@P2%s^zFzqunIvP!@4tRhq0oH3jZ}T7#m|OVi^00vMc{WvPt6WeE{K-rz z-%d_G3gtCD;F6a@B{?`t)DR;+c62L43}>zjDP@PhRiV8)SQ@tYsbdF^^OI*tDi28= zk~1Uuzrue)YHIh9;5Af@Lq#js?Surj<6H6sLvhAVcF!%x*=oA4+} zhzgB>_j?*D%E5?Aj%_$C2L}i|AOu1p^}@HiNHiMMX_3qBc1BCYJ)q3(Pa|R?bYD|) zJ>}zFxjaZPMD<8jfm^3Ux&Oow2kupHI0uvwty}7Zj0>#JUA0E*_XcH#+@q?

yl;1BM2GAqX$^zCDbPghMTZ;{U zK8~iG(jSZu0+BxB*EX;$86gYM_qa3Xun>zsm8**)+c>opC4CK(z>w8QyU7q9)7`4| z8mH=`>!YgNiCpj{NT>c&VJKL$q>;jPA!SkULC<#ajMMrVhw|YjlY%EpNLN@!)g}DHz6nKh`|G{*#^oCiCw?3luS2Npddp%uE?eQFuvj5XXowWI3-jG zmYJ=!Ef~GV20gF>JVQYzgPcFq3->J%NPdXi*l$%%>E%n%k!^y(bbf)e( zS2D)7ZsNH3xXEEE^nTOB;SUQZu4;>O-cBl%$z>nc{*H0~9{IJbS=TT;IE>K?=Y4^zvfpvOrsQAuft>k z{ig7Q_0&EcCL2NnVUR8R_|vn|rlR%|vZ7YD-20;RkC%UK*A)LXY9ba~I8 z{uAcC$s0F1S4Ns4XksM4NXKSr!>&rid?2NfoX7+35d4Nab{r9&qUWQwWLKn9Ey61# zyA`ipa?OS?cA6^QoO`qYi>P5d&A#jHr+@#QKEBF;&d#uuQJKG+Z;2lCnhx*{;2mA0@9TLvJqBIY9jG}Gu-;ggTz%-_OgOYf*8D;@Bk4r|u@DA~PNvsjTvYlj%>>9^V- z*IB0(_)<{noLjpB4{@WsQxJOXMFJ4LIeH40zrFjTE0<;lkDi<0aP;lEPGGrZC@bi?~*R4&XS#^®28R9>e{j67 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PI   + + +   +   +   +   + + + + + + + +  Tout + + Boiler   + + + + + + 19°C + 50°C + 21°C + 21°C +  TRoo +  Tsup +  y +  y +  y +  Tsup + + + + + + + + + + + + 20°C  + 21°C  + 1  + 0  + + + + + + +  TRoo + + + + + + + + + + + + + + + + 16°C  + 17°C  + 1  + 0  + + + + + + +  Tout + + + +  TRoo + + + + +  TB + + + + + + + + + 70°C  + 90°C  + 1  + 0  + + + + + + + + + + + + + + + +  TBoi + + + + + + + + + 60°C + + + + + + + + + + + PI   + + + + + + + + + + + + + + + + + + Expansionvessel   + ANDgate + on/off + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Supply temperaturecontroller + System on/offcontroller + Boiler on/offcontroller + Return temperaturecontroller + + + From 3c227ca1ad27c869c4122e82fd6713513b85cef6 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 16:09:27 -0800 Subject: [PATCH 11/21] Updated package.order --- IBPSA/Examples/Tutorial/package.order | 1 + 1 file changed, 1 insertion(+) diff --git a/IBPSA/Examples/Tutorial/package.order b/IBPSA/Examples/Tutorial/package.order index 6e0ff92568..053bc3d015 100644 --- a/IBPSA/Examples/Tutorial/package.order +++ b/IBPSA/Examples/Tutorial/package.order @@ -1 +1,2 @@ +CDL SimpleHouse From fbdd2845f7b467d1635122d8f5a932394d2e9b02 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Sat, 14 Dec 2024 00:12:44 +0000 Subject: [PATCH 12/21] Removed Boiler tutorial as the Boiler in not in IBPSA --- .../CDL/BaseClasses/PartialOpenLoop.mo | 373 --- .../Tutorial/CDL/BaseClasses/package.mo | 12 - .../Tutorial/CDL/BaseClasses/package.order | 1 - .../Tutorial/CDL/Controls/BoilerReturn.mo | 87 - .../Tutorial/CDL/Controls/EquipmentOnOff.mo | 99 - .../CDL/Controls/OpenLoopBoilerReturn.mo | 69 - .../CDL/Controls/OpenLoopEquipmentOnOff.mo | 77 - .../CDL/Controls/OpenLoopRadiatorSupply.mo | 96 - .../CDL/Controls/OpenLoopSystemOnOff.mo | 67 - .../Tutorial/CDL/Controls/RadiatorSupply.mo | 158 -- .../Tutorial/CDL/Controls/SystemOnOff.mo | 129 - .../CDL/Controls/Validation/BoilerReturn.mo | 38 - .../CDL/Controls/Validation/EquipmentOnOff.mo | 46 - .../CDL/Controls/Validation/RadiatorSupply.mo | 45 - .../CDL/Controls/Validation/SystemOnOff.mo | 48 - .../CDL/Controls/Validation/package.mo | 14 - .../CDL/Controls/Validation/package.order | 4 - .../Examples/Tutorial/CDL/Controls/package.mo | 4 - .../Tutorial/CDL/Controls/package.order | 9 - IBPSA/Examples/Tutorial/CDL/System1.mo | 83 - IBPSA/Examples/Tutorial/CDL/System2.mo | 224 -- IBPSA/Examples/Tutorial/CDL/System3.mo | 189 -- IBPSA/Examples/Tutorial/CDL/System4.mo | 160 -- IBPSA/Examples/Tutorial/CDL/System5.mo | 154 -- IBPSA/Examples/Tutorial/CDL/System6.mo | 160 -- IBPSA/Examples/Tutorial/CDL/package.mo | 106 - IBPSA/Examples/Tutorial/CDL/package.order | 8 - IBPSA/Examples/Tutorial/package.order | 1 - .../CDL/System1/OpenLoopTemperatures.png | Bin 24721 -> 0 bytes .../CDL/System3/TemperaturesValve.png | Bin 25693 -> 0 bytes .../CDL/System4/TemperaturesControl.png | Bin 35011 -> 0 bytes .../CDL/System5/TemperaturesControl.png | Bin 51185 -> 0 bytes .../CDL/System6/TemperaturesControl.png | Bin 49164 -> 0 bytes .../Examples/Tutorial/CDL/schematics.pdf | Bin 18394 -> 0 bytes .../Examples/Tutorial/CDL/schematics.png | Bin 145276 -> 0 bytes .../Examples/Tutorial/CDL/schematics.svg | 2178 ----------------- ...l_CDL_Controls_Validation_BoilerReturn.txt | 12 - ...CDL_Controls_Validation_EquipmentOnOff.txt | 12 - ...CDL_Controls_Validation_RadiatorSupply.txt | 12 - ...al_CDL_Controls_Validation_SystemOnOff.txt | 13 - .../IBPSA_Examples_Tutorial_CDL_System1.txt | 19 - .../IBPSA_Examples_Tutorial_CDL_System2.txt | 19 - .../IBPSA_Examples_Tutorial_CDL_System3.txt | 19 - .../IBPSA_Examples_Tutorial_CDL_System4.txt | 21 - .../IBPSA_Examples_Tutorial_CDL_System5.txt | 22 - .../IBPSA_Examples_Tutorial_CDL_System6.txt | 23 - .../CDL/Controls/Validation/BoilerReturn.mos | 5 - .../Controls/Validation/EquipmentOnOff.mos | 3 - .../Controls/Validation/RadiatorSupply.mos | 3 - .../CDL/Controls/Validation/SystemOnOff.mos | 3 - .../Dymola/Examples/Tutorial/CDL/System1.mos | 2 - .../Dymola/Examples/Tutorial/CDL/System2.mos | 2 - .../Dymola/Examples/Tutorial/CDL/System3.mos | 2 - .../Dymola/Examples/Tutorial/CDL/System4.mos | 4 - .../Dymola/Examples/Tutorial/CDL/System5.mos | 5 - .../Dymola/Examples/Tutorial/CDL/System6.mos | 5 - 56 files changed, 4845 deletions(-) delete mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/package.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/Controls/package.order delete mode 100644 IBPSA/Examples/Tutorial/CDL/System1.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/System2.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/System3.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/System4.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/System5.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/System6.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/package.mo delete mode 100644 IBPSA/Examples/Tutorial/CDL/package.order delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System3/TemperaturesValve.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System5/TemperaturesControl.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.png delete mode 100644 IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.svg delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt delete mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos delete mode 100644 IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo b/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo deleted file mode 100644 index 3596e9c1bc..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/BaseClasses/PartialOpenLoop.mo +++ /dev/null @@ -1,373 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.BaseClasses; -partial model PartialOpenLoop "Partial model with open loop system" - extends Modelica.Icons.Example; - replaceable package MediumA = IBPSA.Media.Air "Medium model for air"; - replaceable package MediumW = IBPSA.Media.Water "Medium model for water"; - - parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal=20000 - "Nominal heat flow rate of radiator"; - parameter Modelica.Units.SI.Temperature TRadSup_nominal=273.15 + 50 - "Radiator nominal supply water temperature"; - parameter Modelica.Units.SI.Temperature TRadRet_nominal=273.15 + 40 - "Radiator nominal return water temperature"; - parameter Modelica.Units.SI.MassFlowRate mRad_flow_nominal=Q_flow_nominal/ - 4200/(TRadSup_nominal - TRadRet_nominal) - "Radiator nominal mass flow rate"; - - parameter Modelica.Units.SI.Temperature TBoiSup_nominal=273.15 + 70 - "Boiler nominal supply water temperature"; - parameter Modelica.Units.SI.Temperature TBoiRet_min=273.15 + 60 - "Boiler minimum return water temperature"; - parameter Modelica.Units.SI.MassFlowRate mBoi_flow_nominal=Q_flow_nominal/ - 4200/(TBoiSup_nominal - TBoiRet_min) "Boiler nominal mass flow rate"; - - parameter Modelica.Units.SI.MassFlowRate mRadVal_flow_nominal=Q_flow_nominal/ - 4200/(TBoiSup_nominal - TRadRet_nominal) - "Radiator nominal mass flow rate"; - - IBPSA.Fluid.MixingVolumes.MixingVolume vol( - redeclare package Medium = MediumA, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mA_flow_nominal, - V=V) - "Room air volume" - annotation (Placement(transformation(extent={{60,20},{80,40}}))); - Modelica.Thermal.HeatTransfer.Components.ThermalConductor theCon(G=20000/30) - "Thermal conductance with the ambient" - annotation (Placement(transformation(extent={{20,40},{40,60}}))); - parameter Modelica.Units.SI.Volume V=6*10*3 "Room volume"; - parameter Modelica.Units.SI.MassFlowRate mA_flow_nominal=V*1.2*6/3600 - "Nominal mass flow rate"; - parameter Modelica.Units.SI.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}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.TimeTable timTab( - extrapolation=IBPSA.Controls.OBC.CDL.Types.Extrapolation.Periodic, - smoothness=IBPSA.Controls.OBC.CDL.Types.Smoothness.ConstantSegments, - table=[-6, 0; - 8, QRooInt_flow; - 18, 0], - timeScale=3600) "Time table for internal heat gain" - annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - IBPSA.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) "Radiator" - annotation (Placement(transformation(extent={{0,-20},{20,0}}))); - IBPSA.Fluid.Sensors.TemperatureTwoPort temSup(redeclare package Medium = MediumW, - m_flow_nominal=mRad_flow_nominal) "Supply water temperature" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-40}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temRoo( - T(displayUnit="degC")) - "Room temperature" annotation (Placement(transformation( - extent={{10,-10},{-10,10}}, - origin={-40,30}))); - IBPSA.Fluid.Movers.FlowControlled_m_flow pumRad( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mRad_flow_nominal, - nominalValuesDefineDefaultPressureCurve=true) - "Pump for radiator" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-70}))); - - IBPSA.Fluid.FixedResistances.Junction mix( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal={mRadVal_flow_nominal,-mRad_flow_nominal,mRad_flow_nominal - - mRadVal_flow_nominal}, - dp_nominal={100,-8000,6750}) "Mixer between valve and radiators" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-110}))); - IBPSA.Fluid.FixedResistances.Junction spl( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal={mBoi_flow_nominal,-mRadVal_flow_nominal,-mBoi_flow_nominal}, - dp_nominal={200,-200,-50}) "Splitter of boiler loop bypass" annotation ( - Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-190}))); - - IBPSA.Fluid.FixedResistances.Junction spl2( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - dp_nominal={0,0,0}, - m_flow_nominal={mRad_flow_nominal,-mRadVal_flow_nominal,-mRad_flow_nominal - + mRadVal_flow_nominal}) "Flow splitter in return from radiator" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={60,-110}))); - IBPSA.Fluid.FixedResistances.Junction mix2( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - dp_nominal={0,-200,0}, - m_flow_nominal={mRadVal_flow_nominal,-mBoi_flow_nominal,mBoi_flow_nominal}) - "Mixer" annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={60,-190}))); - IBPSA.Fluid.FixedResistances.Junction spl4( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mRadVal_flow_nominal*{1,-1,-1}, - dp_nominal=200*{1,-1,-1}) "Splitter for radiator loop valve bypass" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={60,-150}))); - - IBPSA.Fluid.Movers.FlowControlled_m_flow pumBoi( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mBoi_flow_nominal, - nominalValuesDefineDefaultPressureCurve=true) - "Pump for boiler" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-280}))); - - - IBPSA.Fluid.Boilers.BoilerPolynomial boi( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mBoi_flow_nominal, - dp_nominal=2000, - Q_flow_nominal=Q_flow_nominal, - fue=IBPSA.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()) "Boiler" - annotation (Placement(transformation(extent={{20,-320},{0,-300}}))); - - IBPSA.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear valRad( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mRadVal_flow_nominal, - l={0.01,0.01}, - dpValve_nominal=6000) "Three-way valve for radiator loop" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-150}))); - - IBPSA.Fluid.Sources.Boundary_pT preSou(redeclare package Medium = MediumW, - nPorts=1) - "Source for pressure and to account for thermal expansion of water" - annotation (Placement(transformation(extent={{92,-320},{72,-300}}))); - IBPSA.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear valBoi( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mBoi_flow_nominal, - l={0.01,0.01}, - dpValve_nominal=6000) "Three-way valve for boiler" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={60,-230}))); - IBPSA.Fluid.Sensors.TemperatureTwoPort temRet( - redeclare package Medium = MediumW, - m_flow_nominal=mBoi_flow_nominal) "Return water temperature" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={60,-280}))); - IBPSA.Fluid.FixedResistances.Junction spl1( - redeclare package Medium = MediumW, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal={mBoi_flow_nominal,-mBoi_flow_nominal,-mBoi_flow_nominal}, - dp_nominal={0,0,-200}) "Splitter" annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=90, - origin={-50,-230}))); - - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTOut - "Outdoor temperature sensor" - annotation (Placement(transformation(extent={{-318,20},{-298,40}}))); - - BoundaryConditions.WeatherData.ReaderTMY3 weaDat( - filNam=Modelica.Utilities.Files.loadResource("modelica://IBPSA/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) - "Weather data reader" - annotation (Placement(transformation(extent={{-380,60},{-360,80}}))); - BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" - annotation (Placement(transformation(extent={{-320,60},{-300,80}}))); - Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut - "Outside temperature" - annotation (Placement(transformation(extent={{-260,60},{-240,80}}))); - -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={{2,80},{20,80}}, - color={0,0,127}, - smooth=Smooth.None)); - connect(temSup.port_b, rad.port_a) annotation (Line( - points={{-50,-30},{-50,-10},{-5.55112e-16,-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(pumRad.port_b, temSup.port_a) annotation (Line( - points={{-50,-60},{-50,-50}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(boi.port_b, pumBoi.port_a) annotation (Line( - points={{-5.55112e-16,-310},{-50,-310},{-50,-290}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(pumBoi.port_b, spl1.port_1) annotation (Line( - points={{-50,-270},{-50,-240}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl1.port_2, spl.port_1) annotation (Line( - points={{-50,-220},{-50,-200}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl.port_2, valRad.port_1) - annotation (Line( - points={{-50,-180},{-50,-160}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(valRad.port_2, mix.port_1) - annotation (Line( - points={{-50,-140},{-50,-120}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl1.port_3, valBoi.port_3) - annotation (Line( - points={{-40,-230},{50,-230}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(valBoi.port_2, temRet.port_a) - annotation (Line( - points={{60,-240},{60,-270}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(temRet.port_b, boi.port_a) annotation (Line( - points={{60,-290},{60,-310},{20,-310}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(boi.port_a, preSou.ports[1]) annotation (Line( - points={{20,-310},{72,-310}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(mix2.port_2, valBoi.port_1) - annotation (Line( - points={{60,-200},{60,-220}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl4.port_2, mix2.port_1) annotation (Line( - points={{60,-160},{60,-180}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl2.port_2, spl4.port_1) annotation (Line( - points={{60,-120},{60,-140}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(valRad.port_3, spl4.port_3) - annotation (Line( - points={{-40,-150},{50,-150}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(spl.port_3, mix2.port_3) annotation (Line( - points={{-40,-190},{50,-190}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(mix.port_3, spl2.port_3) annotation (Line( - points={{-40,-110},{50,-110}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(mix.port_2, pumRad.port_a) annotation (Line( - points={{-50,-100},{-50,-80}}, - color={0,127,255}, - smooth=Smooth.None)); - connect(rad.port_b, spl2.port_1) annotation (Line( - points={{20,-10},{60,-10},{60,-100}}, - color={0,127,255}, - smooth=Smooth.None)); - - connect(weaDat.weaBus, weaBus) annotation (Line( - points={{-360,70},{-310,70}}, - color={255,204,51}, - thickness=0.5, - smooth=Smooth.None), Text( - textString="%second", - index=1, - extent={{6,3},{6,3}})); - connect(weaBus.TDryBul, TOut.T) annotation (Line( - points={{-310,70},{-262,70}}, - color={255,204,51}, - thickness=0.5, - smooth=Smooth.None), Text( - textString="%first", - index=-1, - extent={{-6,3},{-6,3}})); - connect(TOut.port, theCon.port_a) annotation (Line( - points={{-240,70},{-220,70},{-220,50},{20,50}}, - color={191,0,0}, - smooth=Smooth.None)); - connect(TOut.port, senTOut.port) annotation (Line( - points={{-240,70},{-220,70},{-220,50},{-340,50},{-340,30},{-318,30}}, - color={191,0,0}, - smooth=Smooth.None)); - annotation (Documentation(info=" -

-This partial model implements the HVAC system model and a simple room, which is here modeled -as a first order response. (More detailed room models are available in -IBPSA.ThermalZones, -but for this tutorial it suffices to use this room model.) -The control inputs are not connected as these will be connected in the -tutorials that extend this model. -

-

-For instructions of how to build this model, see - -IBPSA.Examples.Tutorial.Boiler -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), -Diagram( - coordinateSystem( - preserveAspectRatio=false,extent={{-400,-360},{240, 100}}))); -end PartialOpenLoop; diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo deleted file mode 100644 index 9ace9f4d96..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.mo +++ /dev/null @@ -1,12 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -package BaseClasses "Package that contains the model of the HVAC system and the building load" - extends Modelica.Icons.BasesPackage; - -annotation (preferredView="info", Documentation(info=" -

-This package contains base classes that are used to construct the models in - -IBPSA.Examples.Tutorial.CDL. -

-")); -end BaseClasses; diff --git a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order b/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order deleted file mode 100644 index 672535aee2..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/BaseClasses/package.order +++ /dev/null @@ -1 +0,0 @@ -PartialOpenLoop diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo deleted file mode 100644 index 6abd85c60f..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/BoilerReturn.mo +++ /dev/null @@ -1,87 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block BoilerReturn "Control for boiler return" - parameter Real TSet( - final unit="K", - displayUnit="degC") = 333.15 - "Set point for boiler temperature"; - parameter Real k=0.1 "Gain of controller"; - parameter Modelica.Units.SI.Time Ti=120 "Time constant of integrator block"; - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRet( - final unit="K", - displayUnit="degC") - "Return water temperature to boiler" - annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( - final unit="1") - "Valve control signal" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant T( - final k=TSet) - "Set point temperature" - annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); - IBPSA.Controls.OBC.CDL.Reals.PID conPID( - final k=k, - final Ti=Ti, - reverseActing=false) "Controller for valve in boiler loop" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); -equation - connect(conPID.y, yVal) - annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); - connect(conPID.u_s, T.y) - annotation (Line(points={{-12,0},{-38,0}}, color={0,0,127})); - connect(TRet, conPID.u_m) annotation (Line(points={{-120,0},{-80,0},{-80,-50}, - {0,-50},{0,-12}}, color={0,0,127})); - annotation ( - defaultComponentName="conBoiRet", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-32,-30},{34,-86}}, - lineColor={255,255,255}, - pattern=LinePattern.None, - fillColor={95,95,95}, - fillPattern=FillPattern.Solid), - Text( - extent={{-88,22},{-40,-18}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRet"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="yVal"), - Polygon( - points={{0,-62},{-12,-80},{14,-80},{0,-62}}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={255,255,0}, - fillPattern=FillPattern.Solid, - lineColor={0,0,0}), - Text( - textColor={0,0,255}, - extent={{-154,104},{146,144}}, - textString="%name")}), Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Controller that takes as an input the boiler return water temperature TRet -and outputs the valve control signal yVal. -The valve control signal is computed using a PI-controller that tracks a constant -set point of TSet. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end BoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo deleted file mode 100644 index d6efa70e6e..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/EquipmentOnOff.mo +++ /dev/null @@ -1,99 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block EquipmentOnOff "Controller for equipment on/off control" - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TBoi( - final unit="K", - displayUnit="degC") - "Boiler temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput onSys - "System on command" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onPum - "Pump on command" - annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onBoi - "Boiler on command" - annotation (Placement(transformation(extent={{100,40},{140,80}}))); - IBPSA.Controls.OBC.CDL.Logical.And and1 - "And operator to switch boiler on based on temperature and system on command" - annotation (Placement(transformation(extent={{20,-10},{40,10}}))); - IBPSA.Controls.OBC.CDL.Logical.Not not1 - "Negation of output signal, because boiler should be off if temperature exceed uHigh" - annotation (Placement(transformation(extent={{-20,50},{0,70}}))); - IBPSA.Controls.OBC.CDL.Reals.Hysteresis hys( - uHigh=273.15 + 90, - uLow=273.15 + 70) "Hysteresis for on/off of boiler" - annotation (Placement(transformation(extent={{-60,50},{-40,70}}))); -equation - - connect(TBoi, hys.u) - annotation (Line(points={{-120,60},{-62,60}}, color={0,0,127})); - connect(hys.y, not1.u) - annotation (Line(points={{-38,60},{-22,60}}, color={255,0,255})); - connect(onSys, onPum) - annotation (Line(points={{-120,-60},{120,-60}}, color={255,0,255})); - connect(and1.u1, not1.y) annotation (Line(points={{18,0},{10,0},{10,60},{2,60}}, - color={255,0,255})); - connect(and1.u2, onSys) annotation (Line(points={{18,-8},{10,-8},{10,-60},{ - -120,-60}}, color={255,0,255})); - connect(and1.y, onBoi) annotation (Line(points={{42,0},{60,0},{60,60},{120,60}}, - color={255,0,255})); - annotation ( - defaultComponentName="conEquSta", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid), - Text( - extent={{-90,82},{-42,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TBoi"), - Text( - extent={{38,-38},{86,-78}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onPum"), - Text( - extent={{-92,-40},{-44,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onSys"), - Text( - textColor={0,0,255}, - extent={{-148,104},{152,144}}, - textString="%name"), - Text( - extent={{44,82},{92,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onBoi")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Controller that takes as an input the boiler water temperature TBoi -and the system on command onSys, and outputs -the on command for the pumps onPum and the boiler onBoi. -

-

-The pump on command is the same as the system on command. -The boiler is switched on if the boiler temperature TBoi falls below -70°C and if onSys=true, and it switches off -if either TBoi exceeds 90°C or if onSys=false. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end EquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo deleted file mode 100644 index ab54c74b09..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopBoilerReturn.mo +++ /dev/null @@ -1,69 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block OpenLoopBoilerReturn "Open loop controller for boiler return" - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRet( - final unit="K", - displayUnit="degC") - "Return water temperature to boiler" - annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( - final unit="1") - "Valve control signal" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con(k=1) - "Constant valve control signal" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); -equation - connect(con.y, yVal) - annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); - annotation ( - defaultComponentName="conBoiRet", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={215,215,215}, - fillPattern=FillPattern.Solid), - Rectangle( - extent={{-32,-30},{34,-86}}, - lineColor={255,255,255}, - pattern=LinePattern.None, - fillColor={95,95,95}, - fillPattern=FillPattern.Solid), - Text( - extent={{-88,22},{-40,-18}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRet"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="yVal"), - Polygon( - points={{0,-62},{-12,-80},{14,-80},{0,-62}}, - pattern=LinePattern.None, - smooth=Smooth.None, - fillColor={255,255,0}, - fillPattern=FillPattern.Solid, - lineColor={0,0,0}), - Text( - textColor={0,0,255}, - extent={{-154,104},{146,144}}, - textString="%name")}), Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Open loop controller that outputs a constant control signal for the valve -of the boiler return. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end OpenLoopBoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo deleted file mode 100644 index c317465090..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopEquipmentOnOff.mo +++ /dev/null @@ -1,77 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block OpenLoopEquipmentOnOff - "Open loop controller for equipment on/off control" - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TBoi( - final unit="K", - displayUnit="degC") - "Boiler temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanInput onSys - "System on command" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onPum - "Pump on command" - annotation (Placement(transformation(extent={{100,-80},{140,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onBoi - "Boiler on command" - annotation (Placement(transformation(extent={{100,40},{140,80}}))); - IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con(k=true) - "Constant control signal" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); -equation - - connect(con.y, onBoi) annotation (Line(points={{12,0},{60,0},{60,60},{120,60}}, - color={255,0,255})); - connect(con.y, onPum) annotation (Line(points={{12,0},{60,0},{60,-60},{120, - -60}}, color={255,0,255})); - annotation ( - defaultComponentName="conEquSta", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={215,215,215}, - fillPattern=FillPattern.Solid), - Text( - textColor={0,0,255}, - extent={{-148,104},{152,144}}, - textString="%name"), - Text( - extent={{-94,-40},{-46,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onSys"), - Text( - extent={{36,-38},{84,-78}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onPum"), - Text( - extent={{42,82},{90,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onBoi"), - Text( - extent={{-92,82},{-44,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TBoi")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Open loop controller that outputs a constant control signal for the system on command. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end OpenLoopEquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo deleted file mode 100644 index 4b3cc6119b..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopRadiatorSupply.mo +++ /dev/null @@ -1,96 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block OpenLoopRadiatorSupply - "Open loop controller for mixing valve in radiator loop" - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( - final unit="K", - displayUnit="degC") - "Room air temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}), - iconTransformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSup( - final unit="K", - displayUnit="degC") - "Measured supply water temperature" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), - iconTransformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( - final unit="1") - "Valve control signal" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant con(k=1) - "Constant valve control signal" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); -equation - connect(con.y, yVal) - annotation (Line(points={{12,0},{120,0}}, color={0,0,127})); - annotation ( - defaultComponentName="conRadSup", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={215,215,215}, - fillPattern=FillPattern.Solid), - Text( - extent={{-90,82},{-42,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRoo"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="yVal"), - Text( - extent={{-92,-40},{-44,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TOut"), - Text( - textColor={0,0,255}, - extent={{-154,104},{146,144}}, - textString="%name"), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - origin={-30,2}, - rotation=360), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - origin={8,-36}, - rotation=90), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - origin={8,40}, - rotation=270)}), Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Open loop controller that outputs a constant control signal for the mixing valve of the radiator loop. -

-", revisions=" -
    -
  • -March 5, 2020, by Michael Wetter:
    -Corrected typo in comments.
    -This is for -Buildings, issue 1810. -
  • -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end OpenLoopRadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo deleted file mode 100644 index 956bfad989..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/OpenLoopSystemOnOff.mo +++ /dev/null @@ -1,67 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block OpenLoopSystemOnOff - "Open loop controller for system on/off" - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TOut( - final unit="K", - displayUnit="degC") - "Outdoor air temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( - final unit="K", - displayUnit="degC") - "Room air temperature" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onSys - "System on command" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Logical.Sources.Constant con(k=true) - "Constant control signal" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); -equation - connect(con.y, onSys) - annotation (Line(points={{12,0},{120,0}}, color={255,0,255})); - annotation ( - defaultComponentName="conSysSta", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={215,215,215}, - fillPattern=FillPattern.Solid), - Text( - extent={{-90,82},{-42,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TOut"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onSys"), - Text( - extent={{-92,-40},{-44,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRoo"), - Text( - textColor={0,0,255}, - extent={{-152,104},{148,144}}, - textString="%name")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Open loop controller that outputs a constant control signal for the system on command. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end OpenLoopSystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo deleted file mode 100644 index 828ef5c59a..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/RadiatorSupply.mo +++ /dev/null @@ -1,158 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block RadiatorSupply "Controller for mixing valve in radiator loop" - - parameter Real TSupMin( - final unit="K", - displayUnit="degC") = 294.15 - "Minimum supply water temperature"; - parameter Real TSupMax( - final unit="K", - displayUnit="degC") = 323.15 - "Maximum supply water temperature"; - parameter Real TRooMin( - final unit="K", - displayUnit="degC") = 292.15 - "Room air temperature at which supply water temperature is at TSupMax"; - - parameter Real k=0.1 "Gain of controller"; - parameter Modelica.Units.SI.Time Ti=120 "Time constant of integrator block"; - - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( - final unit="K", - displayUnit="degC") - "Room air temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}), - iconTransformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TSup( - final unit="K", - displayUnit="degC") - "Measured supply water temperature" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}), - iconTransformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealOutput yVal( - final unit="1") - "Valve control signal" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Reals.PID conPIDRad( - final k=k, - final Ti=Ti, - final yMax=1, - final yMin=0, - controllerType=IBPSA.Controls.OBC.CDL.Types.SimpleController.PI) - "Controller for valve in radiator loop" - annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Line TSetSup - "Setpoint for supply water temperature" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMinSup( - final k=TSupMin) - "Minimum heating supply temperature" - annotation (Placement(transformation(extent={{-50,-40},{-30,-20}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMaxSup( - final k=TSupMax) - "Maximum heating supply temperature" - annotation (Placement(transformation(extent={{-50,20},{-30,40}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TMinRoo( - final k=TRooMin) - "Minimum room air temperature" - annotation (Placement(transformation(extent={{-50,60},{-30,80}}))); -equation - connect(TMinSup.y,TSetSup. x2) annotation (Line(points={{-28,-30},{-20,-30},{ - -20,-4},{-12,-4}}, color={0,0,127})); - connect(TMinSup.y,TSetSup. f2) annotation (Line(points={{-28,-30},{-20,-30},{ - -20,-8},{-12,-8}}, color={0,0,127})); - connect(TMaxSup.y,TSetSup. f1) annotation (Line(points={{-28,30},{-24,30},{ - -24,4},{-12,4}}, color={0,0,127})); - connect(TSetSup.x1,TMinRoo. y) annotation (Line(points={{-12,8},{-20,8},{-20, - 70},{-28,70}}, color={0,0,127})); - connect(conPIDRad.u_s,TSetSup. y) annotation (Line(points={{38,0},{12,0}}, - color={0,0,127})); - connect(TSetSup.u, TRoo) annotation (Line(points={{-12,0},{-70,0},{-70,60},{-120, - 60}}, color={0,0,127})); - connect(TSup, conPIDRad.u_m) - annotation (Line(points={{-120,-60},{50,-60},{50,-12}}, color={0,0,127})); - connect(conPIDRad.y, yVal) - annotation (Line(points={{62,0},{120,0},{120,0}}, color={0,0,127})); - annotation ( - defaultComponentName="conRadSup", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid), - Text( - extent={{-90,82},{-42,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRoo"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="yVal"), - Text( - extent={{-92,-40},{-44,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TSup"), - Text( - textColor={0,0,255}, - extent={{-154,104},{146,144}}, - textString="%name"), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - origin={-30,2}, - rotation=360), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={0,0,0}, - fillPattern=FillPattern.Solid, - origin={8,-36}, - rotation=90), - Polygon( - points={{38,0},{-24,36},{-24,-32},{38,0}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid, - origin={8,40}, - rotation=270)}), Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Controller that takes as an input the room air temperature TRoo and -the supply water temperature TSup, -and outputs the commanded mixing valve position yVal. -

-

-Based on the room air temperature TRoo, and the user adjustable parameters -for the minimum supply water temperature TSupMin, -the maximum supply water temperature TSupMax -and the room air temperature TRooMin -at which the supply water temperature is at TSupMax, -the controller computes a set point for the supply water temperature. -This set point is then used with the measured supply water temperature TSup -as an input to a PI-controller that computes the commanded valve position yVal. -

-", revisions=" -
    -
  • -March 5, 2020, by Michael Wetter:
    -Corrected typo in comments.
    -This is for -Buildings, issue 1810. -
  • -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end RadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo deleted file mode 100644 index 5d59323465..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/SystemOnOff.mo +++ /dev/null @@ -1,129 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -block SystemOnOff "Controller for system on/off" - parameter Real TRooSet( - final unit="K", - displayUnit="degC") = 293.65 - "Room air temperature set point"; - parameter Real dTRoo( - min=0.5, - final unit="K") = 1 - "Room air temperature dead band"; - parameter Real TOutLow( - final unit="K", - displayUnit="degC") = 289.15 - "Outdoor temperature below which system is allowed to switch on"; - - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TOut( - final unit="K", - displayUnit="degC") - "Outdoor air temperature" - annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); - IBPSA.Controls.OBC.CDL.Interfaces.RealInput TRoo( - final unit="K", - displayUnit="degC") - "Room air temperature" - annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); - IBPSA.Controls.OBC.CDL.Interfaces.BooleanOutput onSys - "System on command" - annotation (Placement(transformation(extent={{100,-20},{140,20}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetOut(k=TOutLow + 0.5) - "Set point for outdoor air temperature plus half the dead band" - annotation (Placement(transformation(extent={{-80,70},{-60,90}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant TSetRoo(k=TRooSet) - "Set point for room air temperature" - annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); - IBPSA.Controls.OBC.CDL.Logical.And and1 - "And operator to switch boiler on based on temperature and system on command" - annotation (Placement(transformation(extent={{60,-10},{80,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Subtract sub "Inputs different" - annotation (Placement(transformation(extent={{-40,50},{-20,70}}))); - IBPSA.Controls.OBC.CDL.Reals.Hysteresis onTOut( - final uLow=-0.5, - final uHigh=0.5) "On/off control based on outside air temperature" - annotation (Placement(transformation(extent={{0,50},{20,70}}))); - IBPSA.Controls.OBC.CDL.Reals.Subtract sub1 "Inputs different" - annotation (Placement(transformation(extent={{-40,-70},{-20,-50}}))); - IBPSA.Controls.OBC.CDL.Reals.Hysteresis onTRoo( - final uLow=-0.5, - final uHigh=0.5) "On/off control based on room air temperature" - annotation (Placement(transformation(extent={{0,-70},{20,-50}}))); -equation - connect(and1.y, onSys) - annotation (Line(points={{82,0},{120,0}}, color={255,0,255})); - connect(TSetOut.y, sub.u1) annotation (Line(points={{-58,80},{-50,80},{-50,66}, - {-42,66}}, color={0,0,127})); - connect(TOut, sub.u2) annotation (Line(points={{-120,60},{-60,60},{-60,54},{-42, - 54}}, color={0,0,127})); - connect(sub.y, onTOut.u) - annotation (Line(points={{-18,60},{-2,60}}, color={0,0,127})); - connect(onTOut.y, and1.u1) annotation (Line(points={{22,60},{40,60},{40,0},{58, - 0}}, color={255,0,255})); - connect(TSetRoo.y, sub1.u1) annotation (Line(points={{-58,-30},{-50,-30},{-50, - -54},{-42,-54}}, color={0,0,127})); - connect(TRoo, sub1.u2) annotation (Line(points={{-120,-60},{-60,-60},{-60,-66}, - {-42,-66}}, color={0,0,127})); - connect(sub1.y, onTRoo.u) - annotation (Line(points={{-18,-60},{-2,-60}}, color={0,0,127})); - connect(onTRoo.y, and1.u2) annotation (Line(points={{22,-60},{40,-60},{40,-8}, - {58,-8}}, color={255,0,255})); - annotation ( - defaultComponentName="conSysSta", - Icon(coordinateSystem(preserveAspectRatio=false), graphics={ - Rectangle( - extent={{-100,100},{100,-100}}, - lineColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.Solid), - Text( - extent={{-90,82},{-42,42}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TOut"), - Text( - extent={{40,24},{88,-16}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="onSys"), - Text( - extent={{-92,-40},{-44,-80}}, - textColor={0,0,0}, - fillColor={255,255,255}, - fillPattern=FillPattern.None, - textString="TRoo"), - Text( - textColor={0,0,255}, - extent={{-152,104},{148,144}}, - textString="%name")}), - Diagram( - coordinateSystem(preserveAspectRatio=false)), - Documentation(info=" -

-Controller that takes as an input the outside air temperature TOut and -the room air temperature TRoo, -and outputs the system on command onSys. -

-

-The system on command is true if both conditions are satisfied: -The outside air temperature is below a limit of TOutLow(=16°C, adjustable) -and the room air temperature is below TRooSet-dTRoo/2, -where TRooSet is the room air temperature setpoint (=20.5°C, adjustable) -and dTRoo is the deadband (=1 Kelvin, adjustable). -Otherwise, the system on command is false. -

-", revisions=" -
    -
  • -December 11, 2023, by Jianjun Hu:
    -Reimplemented on-off control to avoid using the obsolete OnOffController. -This is for -#3595. -
  • -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-")); -end SystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo deleted file mode 100644 index 394fc0261c..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mo +++ /dev/null @@ -1,38 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls.Validation; -model BoilerReturn - "Validation model for the return temperature controller of the boiler" - extends Modelica.Icons.Example; - - IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TRet( - height=50, - duration=3600, - offset=293.15) "Return water temperature" - annotation (Placement(transformation(extent={{-60,-10},{-40,10}}))); -equation - connect(TRet.y, conBoiRet.TRet) - annotation (Line(points={{-38,0},{-12,0}}, color={0,0,127})); - annotation ( - Documentation(info=" -

-Validation model for the boiler return water temperature controller. -The input to the controller is a ramp signal of increasing measured return water temperature. -The validation shows that as the temperature crosses the set point, the valve opens. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), -__Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos" - "Simulate and plot"), - experiment( - StopTime=3600, - Tolerance=1e-06)); -end BoilerReturn; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo deleted file mode 100644 index c7fd1f55ee..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mo +++ /dev/null @@ -1,46 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls.Validation; -model EquipmentOnOff - "Validation model for the equipment on/off controller" - extends Modelica.Icons.Example; - - IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TBoi( - height=40, - duration=3600, - offset=333.15) "Boiler temperature" - annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - IBPSA.Examples.Tutorial.CDL.Controls.EquipmentOnOff - conEquSta "Controller for equipment on/off" - annotation (Placement(transformation(extent={{-8,-10},{12,10}}))); - IBPSA.Controls.OBC.CDL.Logical.Sources.Pulse onSys( - period=600) - "System on signal" - annotation (Placement(transformation(extent={{-60,-20},{-40,0}}))); -equation - connect(TBoi.y, conEquSta.TBoi) annotation (Line(points={{-38,30},{-24,30},{-24, - 6},{-10,6}}, color={0,0,127})); - connect(onSys.y, conEquSta.onSys) annotation (Line(points={{-38,-10},{-24,-10}, - {-24,-6},{-10,-6}}, color={255,0,255})); - annotation ( - Documentation(info=" -

-Validation model for the equipment on/off controller. -The input to the controller is a ramp signal of increasing measured boiler water temperature, -and a on/off signal for the overall system. -The validation shows that the pumps are on/off based on the overall system, and the boiler is -also on/off based on this system unless the return water temperature exceeds 90°C. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), -__Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos" - "Simulate and plot"), - experiment( - StopTime=3600, - Tolerance=1e-06)); -end EquipmentOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo deleted file mode 100644 index 10680995d0..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mo +++ /dev/null @@ -1,45 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls.Validation; -model RadiatorSupply - "Validation model for the valve of the radiator supply" - extends Modelica.Icons.Example; - - IBPSA.Controls.OBC.CDL.Reals.Sources.Ramp TRoo( - height=-4, - duration=3600, - offset=297.15) "Room air temperature" - annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); - IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply - conRadSup "Controller for radiator supply water temperature" - annotation (Placement(transformation(extent={{10,-10},{30,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TSup( - amplitude=20, - freqHz=1/720, - offset=303.15) "Measured supply water temperature" - annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); -equation - connect(TRoo.y, conRadSup.TRoo) annotation (Line(points={{-38,30},{-20,30},{-20, - 6},{8,6}}, color={0,0,127})); - connect(conRadSup.TSup, TSup.y) annotation (Line(points={{8,-6},{-16,-6},{-16, - -30},{-38,-30}}, color={0,0,127})); - annotation ( - Documentation(info=" -

-Validation model for the boiler return water temperature controller. -The input to the controller is a ramp signal of increasing measured return water temperature. -The validation shows that as the temperature crosses the set point, the valve opens. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), -__Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos" - "Simulate and plot"), - experiment( - StopTime=3600, - Tolerance=1e-06)); -end RadiatorSupply; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo deleted file mode 100644 index c7fdf61d7e..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mo +++ /dev/null @@ -1,48 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls.Validation; -model SystemOnOff - "Validation model for the system on/off controller" - extends Modelica.Icons.Example; - - IBPSA.Examples.Tutorial.CDL.Controls.SystemOnOff - conSysSta "Controller for system on/off" - annotation (Placement(transformation(extent={{0,-10},{20,10}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TOut( - amplitude=5, - freqHz=1/720, - offset=290.15) "Outside air temperature" - annotation (Placement(transformation(extent={{-60,10},{-40,30}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Sin TRoo( - amplitude=4, - freqHz=1/720, - phase=1.5707963267949, - offset=293.15) "Room air temperature" - annotation (Placement(transformation(extent={{-60,-30},{-40,-10}}))); -equation - connect(TOut.y, conSysSta.TOut) annotation (Line(points={{-38,20},{-20,20},{-20, - 6},{-2,6}}, color={0,0,127})); - connect(TRoo.y, conSysSta.TRoo) annotation (Line(points={{-38,-20},{-20,-20},{ - -20,-6},{-2,-6}}, color={0,0,127})); - annotation ( - Documentation(info=" -

-Validation model for the system on/off controller. -The input to the controller are time varying signals for the outdoor air temperature -and the room air temperature. -The validation shows that the system is commanded on (onSys=true) if -the outdoor air temperature and the room air temperature are both low. -

-", revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), -__Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos" - "Simulate and plot"), - experiment( - StopTime=3600, - Tolerance=1e-06)); -end SystemOnOff; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo deleted file mode 100644 index fd914ccf61..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.mo +++ /dev/null @@ -1,14 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL.Controls; -package Validation - extends Modelica.Icons.ExamplesPackage; - - annotation (Documentation(info=" -

-This package contains models that validate the controls models. -The examples plot various outputs, which have been verified against -analytical solutions or by inspecting their change due to parametric changes. -These model outputs are stored as reference data to -allow continuous validation whenever models in the library change. -

-")); -end Validation; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order b/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order deleted file mode 100644 index 4042fc5c1a..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/Validation/package.order +++ /dev/null @@ -1,4 +0,0 @@ -BoilerReturn -EquipmentOnOff -RadiatorSupply -SystemOnOff diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/package.mo b/IBPSA/Examples/Tutorial/CDL/Controls/package.mo deleted file mode 100644 index b3782b7d8a..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/package.mo +++ /dev/null @@ -1,4 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -package Controls "Package with the controllers used in the tutorial" -extends Modelica.Icons.VariantsPackage; -end Controls; diff --git a/IBPSA/Examples/Tutorial/CDL/Controls/package.order b/IBPSA/Examples/Tutorial/CDL/Controls/package.order deleted file mode 100644 index 7af42a30da..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/Controls/package.order +++ /dev/null @@ -1,9 +0,0 @@ -BoilerReturn -EquipmentOnOff -OpenLoopBoilerReturn -OpenLoopEquipmentOnOff -OpenLoopRadiatorSupply -OpenLoopSystemOnOff -RadiatorSupply -SystemOnOff -Validation diff --git a/IBPSA/Examples/Tutorial/CDL/System1.mo b/IBPSA/Examples/Tutorial/CDL/System1.mo deleted file mode 100644 index 01b6831d82..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System1.mo +++ /dev/null @@ -1,83 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System1 "Open loop model" - extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y1(k=mRad_flow_nominal) - "Control signal of 1" - annotation (Placement(transformation(extent={{-120,-80},{-100,-60}}))); - - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y2(k=1) - "Control signal of 1" - annotation (Placement(transformation(extent={{100,-210},{120,-190}}))); - - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y3(k=1) - "Constant control signal of 1" - annotation (Placement(transformation(extent={{-120,-260},{-100,-240}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y4(k=1) - "Control signal of 1" - annotation (Placement(transformation(extent={{-120,-160},{-100,-140}}))); - IBPSA.Controls.OBC.CDL.Reals.Sources.Constant y5(k=mBoi_flow_nominal) - "Control signal of 1" - annotation (Placement(transformation(extent={{-120,-290},{-100,-270}}))); -equation - connect(y1.y, pumRad.m_flow_in) - annotation (Line(points={{-98,-70},{-62,-70}}, color={0,0,127})); - connect(y3.y, boi.y) annotation (Line(points={{-98,-250},{32,-250},{32,-302},{ - 22,-302}}, color={0,0,127})); - connect(y2.y, valBoi.y) annotation (Line(points={{122,-200},{130,-200},{130,-230}, - {72,-230}}, color={0,0,127})); - connect(y4.y, valRad.y) - annotation (Line(points={{-98,-150},{-62,-150}}, color={0,0,127})); - connect(y5.y, pumBoi.m_flow_in) annotation (Line(points={{-98,-280},{-80,-280}, - {-80,-280},{-62,-280}}, color={0,0,127})); - annotation (Documentation(info=" -

-This model extends from the open loop partial model - -IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop, -which implements the HVAC system model and a simple room. -In this partial model, the room is modeled -as a first order response. -

-

Implementation

-

-To set control inputs, we instantiated - -IBPSA.Controls.OBC.CDL.Reals.Sources.Constant -and connected them to the pumps, the boiler and the valves. -

-

Exercise

-

-Create a model, such as this model, that extends from - -IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop -and adds constant input signals for the valves, pumps and the boiler. -Valves should be fully open (y=1), the boiler should be operating (y=1) -and the mass flow rates of the pumps should be set to the parameter value of -mRad_flow_nominal and mBoi_flow_nominal. -

-

-Simulate the model for January 15 to 16 and plot the open loop temperatures -as shown below, which corresponds to a start time of 15*24*3600=1296000 seconds and a -stop time of 1382400 seconds. -

-

-\"Open -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System1; diff --git a/IBPSA/Examples/Tutorial/CDL/System2.mo b/IBPSA/Examples/Tutorial/CDL/System2.mo deleted file mode 100644 index 02bf449ef4..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System2.mo +++ /dev/null @@ -1,224 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System2 "Open loop model with control architecture implemented" - extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - Controls.OpenLoopBoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); - Controls.OpenLoopSystemOnOff conSysSta - "Controller that switches the system on and off" - annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Controls.OpenLoopRadiatorSupply conRadSup - "Controller for the mixing valve for the radiator supply water" - annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); - Controls.OpenLoopEquipmentOnOff conEquSta - "Controller that switches the equipment on and off" - annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( - realTrue=mRad_flow_nominal) - "Type conversion for radiator pump signal" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( - realTrue=mBoi_flow_nominal) - "Type conversion for boiler pump signal" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( - realTrue=1) - "Type conversion for boiler signal" - annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); -equation - connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, - {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); - connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, - -216},{-120,-280},{-102,-280}}, color={255,0,255})); - connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, - -70},{-120,-216},{-178,-216}}, color={255,0,255})); - connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, - -250},{-108,-204},{-178,-204}}, color={255,0,255})); - connect(radPumCon.y, pumRad.m_flow_in) - annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); - connect(boiPumCon.y, pumBoi.m_flow_in) - annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); - connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, - -302},{22,-302}}, color={0,0,127})); - connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, - -150}}, color={0,0,127})); - connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240, - -204},{-240,-302},{-1,-302}}, color={0,0,127})); - connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280, - -44},{-280,30},{-298,30}}, color={0,0,127})); - connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, - -144},{-268,30},{-50,30}}, color={0,0,127})); - connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268, - -56},{-268,30},{-50,30}}, color={0,0,127})); - connect(temRet.T, conBoiRet.TRet) - annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); - connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140, - -280},{140,-230},{72,-230}}, color={0,0,127})); - connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, - -40},{-210,-156},{-202,-156}}, color={0,0,127})); - annotation (Documentation(info=" -

-In this step, we added the control architecture. -How the control is partitioned into various subcontrollers depends usually on -the need to avoid communication over the network and on how control is distributed to -different field controllers. Here, we -used the four controllers indicated by the shaded background in the figure of - -IBPSA.Examples.Tutorial.CDL. -One controller switches the overall system on and off, -one switches the boiler on and off, -one tracks the supply water temperature to the room and -one tracks the return water temperature that is fed to the boiler. -

-

Implementation

-

-This model was built as follows: -

-
    -
  1. -

    -First, we determined what functionality should be implemented in which controller, and what the inputs and outputs of the controllers are. -In this example, we used these controllers: -

    -
      -
    • -

      -Boiler return water controller, with input being the return water temperature TRet and output being the valve control signal yVal. -

      -
    • -
    • -

      -Radiator loop temperature controller, with input being the measured supply water temperature TSup, -the measured room air temperature TRoo and output being the valve control signal yVal. -

      -
    • -
    • -

      -System on/off controller, with inputs being the outdoor temperature TOut and the -room air temperature TRoo, and output being the system on/off signal onSys. -Note that how inputs and outputs are named can simplify usability. For example, we called the output onSys -so that a value of true is clearly understood as the system being on. If we had called it -y, then it would not have been clear what a value of true means. -

      -
    • -
    • -

      -Equipment controller, with inputs being the system on/off command and the boiler temperature, -and outputs being -the pump on/off signal onPum and the boiler on/off signal onBoi. -

      -
    • -
    -
  2. -
  3. -

    -To organize our code, we created package that we called Controls. -

    -
  4. -
  5. -

    -Next, we added the open loop controller for the boiler return water temperature. -This controller is implemented in - -IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopBoilerReturn. -To implement it, we created a Modelica block, and added an input, using a - -IBPSA.Controls.OBC.CDL.Interfaces.RealInput, called it TRet -for the measured return water temperature, and a - -IBPSA.Controls.OBC.CDL.Interfaces.RealOutput -for the valve control signal, which we called yVal. -

    -

    -To output the valve control signal, which we set for now to a constant value of 1, -we used an instance of - -IBPSA.Controls.OBC.CDL.Reals.Sources.Constant, -set its parameter to 1, and connected it to the output. -

    -

    -At this stage, because the control is open loop, we leave the input of the controller unconnected. -

    -

    -Looking at the Modelica file shows that we also added documentation in an info section, -a defaultComponentName, as well as graphical elements so that it is easily distinguishable -in a schematic diagram. -We also added the unit and displayUnit attributes. -

    -

    -In the next step of this tutorial, we will provide an actual implementation of the controller. -To better distinguish the open loop controller from the closed loop controller, we -color the icon of open loop controllers grey, and will change this color to white when we implement the actual control logic. -

    -
  6. -
  7. -

    -We did a similar process to add the other three open loop controllers. As before, we added all -inputs and outputs, and set the outputs to a constant. -

    -
  8. -
  9. -

    -Lastly, we instantiated these four controllers in the system model. -Because the pumps and the boiler take as a control input a real-valued signal, we used - -IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal to convert between the boolean-valued signal -and the real-valued inputs of these components. Whether this conversion is part of the -controller or done outside the controller is an individual design decision. -

    -
  10. -
-

Exercise

-

-Create a model, such as this model. -To do so, -

-
    -
  1. -

    -Copy - -IBPSA.Examples.Tutorial.CDL.System1. -

    -
  2. -
  3. -

    -Implement all four open loop controllers. -

    -
  4. -
  5. -

    -Delete the constant control inputs, instantiate the open loop controllers, -convert the signal as needed from Boolean to Real, -and connect the control inputs and outputs. -

    -
  6. -
-

-Simulate the system to verify that you get the response shown below. -As we have not changed any of the control logic, simulating the system should give the same -response as for - -IBPSA.Examples.Tutorial.CDL.System1. -

-

-\"Open -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System2; diff --git a/IBPSA/Examples/Tutorial/CDL/System3.mo b/IBPSA/Examples/Tutorial/CDL/System3.mo deleted file mode 100644 index 099ba9315e..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System3.mo +++ /dev/null @@ -1,189 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System3 "Open loop model with boiler return temperature control" - extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - Controls.BoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); - Controls.OpenLoopSystemOnOff conSysSta - "Controller that switches the system on and off" - annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Controls.OpenLoopRadiatorSupply conRadSup - "Controller for the mixing valve for the radiator supply water" - annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); - Controls.OpenLoopEquipmentOnOff conEquSta - "Controller that switches the equipment on and off" - annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( - realTrue=mRad_flow_nominal) - "Type conversion for radiator pump signal" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( - realTrue=mBoi_flow_nominal) - "Type conversion for boiler pump signal" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( - realTrue=1) - "Type conversion for boiler signal" - annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); -equation - connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, - {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); - connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, - -216},{-120,-280},{-102,-280}}, color={255,0,255})); - connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, - -70},{-120,-216},{-178,-216}}, color={255,0,255})); - connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, - -250},{-108,-204},{-178,-204}}, color={255,0,255})); - connect(radPumCon.y, pumRad.m_flow_in) - annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); - connect(boiPumCon.y, pumBoi.m_flow_in) - annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); - connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, - -302},{22,-302}}, color={0,0,127})); - connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, - -150}}, color={0,0,127})); - connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, - {-240,-302},{-1,-302}}, color={0,0,127})); - connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, - {-280,30},{-298,30}}, color={0,0,127})); - connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, - -144},{-268,30},{-50,30}}, - color={0,0,127})); - connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, - {-268,30},{-50,30}}, color={0,0,127})); - connect(temRet.T, conBoiRet.TRet) - annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); - connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, - {140,-230},{72,-230}}, color={0,0,127})); - - connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, - -40},{-210,-156},{-202,-156}}, color={0,0,127})); - annotation (Documentation(info=" -

-In this step, we added the controller for the boiler return water temperature. -

-

Implementation

-

-This model was built as follows: -

-
    -
  1. -

    -First, we copied the controller - -IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopBoilerReturn -to create the block - -IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn. -

    -
  2. -
  3. -

    -In this new block, we used a constant output signal - -IBPSA.Controls.OBC.CDL.Reals.Sources.Constant -and a PID controller - -IBPSA.Controls.OBC.CDL.Reals.PID, -which we configured as a PI-controller. -

    -

    -We set the controller logic to reverse action. That is because the tracking -error is conventionally computed as the difference between the set point value -and the sensed value. In our example, if the return temperature is lower than the set point, -i.e., if the tracking error is positive, the valve control signal must tend toward zero, -i.e., the valve bypass port must open. -That means that the unbounded control signal must tend toward negative values so -that the bounded output signal tends toward its minimum value. Binding a positive -tracking error to a negative unbounded control signal or to the minimum value -of the output signal requires a reverse action logic. -

    -

    -Additionally we set the proportional gain to 0.1 as then, in absence of the integral action, -a control error of 10 Kelvin changes the control output by 1. -We set the time constant to 120 seconds, which is about the time it takes to open -and close a valve. -These values give typically good closed loop performance. -

    -

    -As the control error is in Kelvin, which is typically of the order of 1 -to 10, there is no need to normalize the control input. (If pressure were used, it would make sense -to divide the measured signal and the set point so that the control error is usually of the order of one, -which makes tuning easier.) -

    -
  4. -
  5. -

    -To allow this controller to be tuned, we exposed at the top-level the parameters -for the set point temperature and the control gains. -

    -
  6. -
  7. -

    -While the controller - -IBPSA.Examples.Tutorial.CDL.Controls.BoilerReturn -is very simple, for demonstration purposes we also implemented a validation model for this controller. -This is done in - -IBPSA.Examples.Tutorial.CDL.Controls.Validation.BoilerReturn. -Such validation models help detect implementation errors which may be difficult to diagnose once the controller -is used as part of a larger system model. In our experience, implementing small scale validation tests leads to better -code and overall faster development as errors are detected early on when they can be corrected quickly. -For more information about how to implement a validation model, see the -Modelica Buildings Library User Guide. -

    -
  8. -
-

Exercise

-

-Create a model, such as this model. -To do so, -

-
    -
  1. -

    -Copy - -IBPSA.Examples.Tutorial.CDL.System2. -

    -
  2. -
  3. -

    -Implement the controller for the boiler return water temperature. -

    -

    -Make a small unit test to verify that the controller is implemented correctly. -

    -
  4. -
  5. -

    -Use this new controller instead of the open loop controller conBoiRet. -

    -
  6. -
-

-Simulate the system to verify that the valve is controlled to maintain a return water temperature -of at least 60°C as shown below. -

-

-\"Open -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System3; diff --git a/IBPSA/Examples/Tutorial/CDL/System4.mo b/IBPSA/Examples/Tutorial/CDL/System4.mo deleted file mode 100644 index 8d09d69375..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System4.mo +++ /dev/null @@ -1,160 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System4 "Open loop model with equipment on/off control" - extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - Controls.BoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); - Controls.OpenLoopSystemOnOff conSysSta - "Controller that switches the system on and off" - annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Controls.OpenLoopRadiatorSupply conRadSup - "Controller for the mixing valve for the radiator supply water" - annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); - Controls.EquipmentOnOff conEquSta - "Controller that switches the equipment on and off" - annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( - realTrue=mRad_flow_nominal) - "Type conversion for radiator pump signal" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( - realTrue=mBoi_flow_nominal) - "Type conversion for boiler pump signal" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( - realTrue=1) - "Type conversion for boiler signal" - annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); -equation - connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, - {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); - connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, - -216},{-120,-280},{-102,-280}}, color={255,0,255})); - connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, - -70},{-120,-216},{-178,-216}}, color={255,0,255})); - connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, - -250},{-108,-204},{-178,-204}}, color={255,0,255})); - connect(radPumCon.y, pumRad.m_flow_in) - annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); - connect(boiPumCon.y, pumBoi.m_flow_in) - annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); - connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, - -302},{22,-302}}, color={0,0,127})); - connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62, - -150}}, color={0,0,127})); - connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, - {-240,-302},{-1,-302}}, color={0,0,127})); - connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, - {-280,30},{-298,30}}, color={0,0,127})); - connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268, - -144},{-268,30},{-50,30}}, - color={0,0,127})); - connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, - {-268,30},{-50,30}}, color={0,0,127})); - connect(temRet.T, conBoiRet.TRet) - annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); - connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, - {140,-230},{72,-230}}, color={0,0,127})); - - connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210, - -40},{-210,-156},{-202,-156}}, color={0,0,127})); - annotation (Documentation(info=" -

-In this step, we added the controller for the boiler on/off control. -

-

Implementation

-

-This model was built as follows: -

-
    -
  1. -

    -First, we copied the controller - -IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopEquipmentOnOff -to create the block - -IBPSA.Examples.Tutorial.CDL.Controls.EquipmentOnOff. -

    -
  2. -
  3. -

    -In this new block, we used a hysteresis block - -IBPSA.Controls.OBC.CDL.Reals.Hysteresis to switch the boiler, -and negated its output because the boiler needs to be off if the temperature exceeds the -value uHigh of this hysteresis. -We also used an instance of - -IBPSA.Controls.OBC.CDL.Logical.And -to switch the boiler on only if the system control signal is on. -Otherwise, the boiler would be kept warm in summer. -(Note that in the simulations, the boiler has no heat loss to the ambient and, hence, if -the boiler and its circulation pump are switched off, its temperature remains constant. -To model heat losses to the ambient, the heat port boi.heatPort -would need to be connected to a model that simulates heat conduction to ambient conditions.) -

    -
  4. -
  5. -

    -We also implemented the open loop validation - -IBPSA.Examples.Tutorial.CDL.Controls.Validation.EquipmentOnOff -to ensure that the controller is implemented correctly. -

    -
  6. -
-

Exercise

-

-Create a model, such as this model. -To do so, -

-
    -
  1. -

    -Copy - -IBPSA.Examples.Tutorial.CDL.System3. -

    -
  2. -
  3. -

    -Implement the controller for the equipment on/off control. -

    -

    -Make a small unit test to verify that the controller is implemented correctly. -

    -
  4. -
  5. -

    -Use this new controller instead of the open loop controller conEquSta. -

    -
  6. -
-

-Simulate the system to verify that the valve is controlled to maintain a return water temperature -of at least 60°C, and that the boiler is switched off when the temperature exceeds 90°C -and switched on again if it reaches 70°C as shown below. -

-

-\"Temperatures -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System4; diff --git a/IBPSA/Examples/Tutorial/CDL/System5.mo b/IBPSA/Examples/Tutorial/CDL/System5.mo deleted file mode 100644 index 263d55c062..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System5.mo +++ /dev/null @@ -1,154 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System5 "Open loop model with system on/off control" - extends IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - Controls.BoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); - Controls.SystemOnOff conSysSta - "Controller that switches the system on and off" - annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Controls.OpenLoopRadiatorSupply conRadSup - "Controller for the mixing valve for the radiator supply water" - annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); - Controls.EquipmentOnOff conEquSta - "Controller that switches the equipment on and off" - annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( - realTrue=mRad_flow_nominal) - "Type conversion for radiator pump signal" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( - realTrue=mBoi_flow_nominal) - "Type conversion for boiler pump signal" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( - realTrue=1) - "Type conversion for boiler signal" - annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); -equation - connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, - {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); - connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, - -216},{-120,-280},{-102,-280}}, color={255,0,255})); - connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, - -70},{-120,-216},{-178,-216}}, color={255,0,255})); - connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, - -250},{-108,-204},{-178,-204}}, color={255,0,255})); - connect(radPumCon.y, pumRad.m_flow_in) - annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); - connect(boiPumCon.y, pumBoi.m_flow_in) - annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); - connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, - -302},{22,-302}}, color={0,0,127})); - connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62,-150}}, - color={0,0,127})); - connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, - {-240,-302},{-1,-302}}, color={0,0,127})); - connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, - {-280,30},{-297,30}}, color={0,0,127})); - connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268,-144}, - {-268,30},{-51,30}}, color={0,0,127})); - connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, - {-268,30},{-51,30}}, color={0,0,127})); - connect(temRet.T, conBoiRet.TRet) - annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); - connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, - {140,-230},{72,-230}}, color={0,0,127})); - - connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210,-40}, - {-210,-156},{-202,-156}}, color={0,0,127})); - annotation (Documentation(info=" -

-In this step, we added the controller for the system on/off control. -

-

Implementation

-

-This model was built as follows: -

-
    -
  1. -

    -First, we copied the controller - -IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopSystemOnOff -to create the block - -IBPSA.Examples.Tutorial.CDL.Controls.SystemOnOff. -

    -
  2. -
  3. -

    -In this new block, we implemented the on/off control by using both - -IBPSA.Controls.OBC.CDL.Reals.Subtract -and - -IBPSA.Controls.OBC.CDL.Reals.Hysteresis to determine -whether the system should be on, which is the case if both, the outside air temperature and -the room air temperature are below a limit. If either is above this limit, plus a deadband, -the system is off. -

    -
  4. -
  5. -

    -We also implemented the open loop validation - -IBPSA.Examples.Tutorial.CDL.Controls.Validation.SystemOnOff -to ensure that the controller is implemented correctly. -

    -
  6. -
-

Exercise

-

-Create a model, such as this model. -To do so, -

-
    -
  1. -

    -Copy - -IBPSA.Examples.Tutorial.CDL.System4. -

    -
  2. -
  3. -

    -Implement the controller for the system on/off control. -

    -

    -Make a small unit test to verify that the controller is implemented correctly. -

    -
  4. -
  5. -

    -Use this new controller instead of the open loop controller conSysSta. -

    -
  6. -
-

-Simulate the system to verify that the system is switched off if the room -temperature exceeeds its set point plus half the dead band. -This should yield a plot similar to the one below. -

-

-\"Temperatures -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System5; diff --git a/IBPSA/Examples/Tutorial/CDL/System6.mo b/IBPSA/Examples/Tutorial/CDL/System6.mo deleted file mode 100644 index 4a03f9aeb3..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/System6.mo +++ /dev/null @@ -1,160 +0,0 @@ -within IBPSA.Examples.Tutorial.CDL; -model System6 "Closed loop model with all controls implemented" - extends - IBPSA.Examples.Tutorial.CDL.BaseClasses.PartialOpenLoop; - - Controls.BoilerReturn conBoiRet - "Controller for boiler return water temperature" - annotation (Placement(transformation(extent={{100,-290},{120,-270}}))); - Controls.SystemOnOff conSysSta - "Controller that switches the system on and off" - annotation (Placement(transformation(extent={{-260,-60},{-240,-40}}))); - Controls.RadiatorSupply conRadSup - "Controller for the mixing valve for the radiator supply water" - annotation (Placement(transformation(extent={{-200,-160},{-180,-140}}))); - Controls.EquipmentOnOff conEquSta - "Controller that switches the equipment on and off" - annotation (Placement(transformation(extent={{-200,-220},{-180,-200}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal radPumCon( - realTrue=mRad_flow_nominal) - "Type conversion for radiator pump signal" - annotation (Placement(transformation(extent={{-100,-80},{-80,-60}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiPumCon( - realTrue=mBoi_flow_nominal) - "Type conversion for boiler pump signal" - annotation (Placement(transformation(extent={{-100,-290},{-80,-270}}))); - IBPSA.Controls.OBC.CDL.Conversions.BooleanToReal boiSigCon( - realTrue=1) - "Type conversion for boiler signal" - annotation (Placement(transformation(extent={{-100,-260},{-80,-240}}))); -equation - connect(conSysSta.onSys, conEquSta.onSys) annotation (Line(points={{-238,-50}, - {-220,-50},{-220,-216},{-202,-216}}, color={255,0,255})); - connect(conEquSta.onPum, boiPumCon.u) annotation (Line(points={{-178,-216},{-120, - -216},{-120,-280},{-102,-280}}, color={255,0,255})); - connect(radPumCon.u, conEquSta.onPum) annotation (Line(points={{-102,-70},{-120, - -70},{-120,-216},{-178,-216}}, color={255,0,255})); - connect(boiSigCon.u, conEquSta.onBoi) annotation (Line(points={{-102,-250},{-108, - -250},{-108,-204},{-178,-204}}, color={255,0,255})); - connect(radPumCon.y, pumRad.m_flow_in) - annotation (Line(points={{-78,-70},{-62,-70}}, color={0,0,127})); - connect(boiPumCon.y, pumBoi.m_flow_in) - annotation (Line(points={{-78,-280},{-62,-280}}, color={0,0,127})); - connect(boiSigCon.y, boi.y) annotation (Line(points={{-78,-250},{34,-250},{34, - -302},{22,-302}}, color={0,0,127})); - connect(conRadSup.yVal, valRad.y) annotation (Line(points={{-178,-150},{-62,-150}}, - color={0,0,127})); - connect(conEquSta.TBoi, boi.T) annotation (Line(points={{-202,-204},{-240,-204}, - {-240,-302},{-1,-302}}, color={0,0,127})); - connect(conSysSta.TOut, senTOut.T) annotation (Line(points={{-262,-44},{-280,-44}, - {-280,30},{-298,30}}, color={0,0,127})); - connect(conRadSup.TRoo, temRoo.T) annotation (Line(points={{-202,-144},{-268,-144}, - {-268,30},{-50,30}}, color={0,0,127})); - connect(conSysSta.TRoo, temRoo.T) annotation (Line(points={{-262,-56},{-268,-56}, - {-268,30},{-50,30}}, color={0,0,127})); - connect(temRet.T, conBoiRet.TRet) - annotation (Line(points={{71,-280},{98,-280}}, color={0,0,127})); - connect(conBoiRet.yVal, valBoi.y) annotation (Line(points={{122,-280},{140,-280}, - {140,-230},{72,-230}}, color={0,0,127})); - - connect(temSup.T, conRadSup.TSup) annotation (Line(points={{-61,-40},{-210,-40}, - {-210,-156},{-202,-156}}, color={0,0,127})); - annotation (Documentation(info=" -

-In this step, we added the last controller, which is controlling the mixing valve for the -radiator supply water temperature. -

-

Implementation

-

-This model was built as follows: -

-
    -
  1. -

    -First, we copied the controller - -IBPSA.Examples.Tutorial.CDL.Controls.OpenLoopRadiatorSupply -to create the block - -IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply. -

    -
  2. -
  3. -

    -In this new block, we used - -IBPSA.Controls.OBC.CDL.Reals.Line to compute the set point for the supply water temperature -based on the room air temperature. This set point is then used in a PI controller - -IBPSA.Controls.OBC.CDL.Reals.PID to modulate the mixing valve position -in order to track the supply water temperature set point. -

    -
  4. -
  5. -

    -To allow configuring the temperatures and the control gains, we exposed the main parameters of the controller, -see -IBPSA.Examples.Tutorial.CDL.Controls.RadiatorSupply. -

    -
  6. -
  7. -

    -We also implemented the open loop validation - -IBPSA.Examples.Tutorial.CDL.Controls.Validation.RadiatorSupply -to ensure that the controller is implemented correctly. -

    -
  8. -
-

Exercise

-

-Create a model, such as this model. -To do so, -

-
    -
  1. -

    -Copy - -IBPSA.Examples.Tutorial.CDL.System5. -

    -
  2. -
  3. -

    -Implement the controller for the radiator supply water temperature control. -

    -

    -Make a small unit test to verify that the controller is implemented correctly. -

    -
  4. -
  5. -

    -Use this new controller instead of the open loop controller conRadSup. -

    -
  6. -
-

-Simulate the system to verify that the mixing valve conRadSup is modulated and -the room air temperature temRoo.T is well tracked. -

-

-\"Temperatures -

-", -revisions=" -
    -
  • -February 18, 2020, by Michael Wetter:
    -First implementation. -
  • -
-"), - Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-400,-360},{240, 100}})), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos" - "Simulate and plot"), - experiment( - StartTime=1296000, - StopTime=1382400, - Tolerance=1e-06)); -end System6; diff --git a/IBPSA/Examples/Tutorial/CDL/package.mo b/IBPSA/Examples/Tutorial/CDL/package.mo deleted file mode 100644 index 833f66b57e..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/package.mo +++ /dev/null @@ -1,106 +0,0 @@ -within IBPSA.Examples.Tutorial; -package CDL "Package with examples for how to implement a control sequence using CDL" - extends Modelica.Icons.ExamplesPackage; - -annotation (preferredView="info", Documentation(info=" -

-This package contains examples with step-by-step instructions for how to -implement control sequences using the Control Description Language (CDL). -The CDL is described at -obc.lbl.gov and elementary building blocks are -available at - -IBPSA.Controls.OBC.CDL. -

-

-The example starts with an open-loop model of a boiler, a simple room and a radiator. -In subsequent steps, controllers are added, starting with open loop control and then closed loop control. -The tutorial also demonstrates how to add open loop validation tests for the controllers. -At the end, you should be able to implement, document and test your own controllers. -

-

-The figure below shows the system architecture and the control charts. -

-

-\"image\" -

-

-The controls intent is as follows: -

-
    -
  1. -

    -The overall system shall be switched on if the outdoor temperature is below -16°C and, in addition, the room temperature is below -20°C. -It shall be switched off if either the outdoor temperature is above -17°C or the room temperature is above -21°C. -

    -
  2. -
  3. -

    -The boiler shall have on/off control that regulates its temperature -between 70°C and 90°C. -

    -
  4. -
  5. -

    -The three-way valve at the boiler return shall be modulated with a PI controller -to track a return water temperature of 60°C. -

    -
  6. -
  7. -

    -The heating water supply temperature to the room shall be regulated with a PI controller -to be 50°C if the room temperature is 19°C, -and 21°C if the room temperature is 21°C. -

    -
  8. -
-

-To explain the implementation of the controllers for this model, the model has been created in -the stages described below. -

-
    -
  1. -In - -IBPSA.Examples.Tutorial.CDL.System1 -we connected constant control signals to the open loop model that is the starting point for this tutorial. -
  2. -
  3. -In - -IBPSA.Examples.Tutorial.CDL.System2 -we implemented four distinct controllers, which are all open loop but have the correct control input and output connectors. -These controllers will be refined in the next steps. -This determines the control architecture. -
  4. -
  5. -In - -IBPSA.Examples.Tutorial.CDL.System3 -we implemented the controller that regulates the return water temperature to its setpoint. -
  6. -
  7. -In - -IBPSA.Examples.Tutorial.CDL.System4 -we implemented the controller that switches the boiler on and off. -
  8. -
  9. -In - -IBPSA.Examples.Tutorial.CDL.System5 -we implemented the controller that switches the whole system on and off. -
  10. -
  11. -In - -IBPSA.Examples.Tutorial.CDL.System6 -we implemented the controller that tracks the room temperature set point. -
  12. -
-")); -end CDL; diff --git a/IBPSA/Examples/Tutorial/CDL/package.order b/IBPSA/Examples/Tutorial/CDL/package.order deleted file mode 100644 index b0e50dfcff..0000000000 --- a/IBPSA/Examples/Tutorial/CDL/package.order +++ /dev/null @@ -1,8 +0,0 @@ -System1 -System2 -System3 -System4 -System5 -System6 -Controls -BaseClasses diff --git a/IBPSA/Examples/Tutorial/package.order b/IBPSA/Examples/Tutorial/package.order index 053bc3d015..6e0ff92568 100644 --- a/IBPSA/Examples/Tutorial/package.order +++ b/IBPSA/Examples/Tutorial/package.order @@ -1,2 +1 @@ -CDL SimpleHouse diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System1/OpenLoopTemperatures.png deleted file mode 100644 index 77f0bb5a067a3c4f9231722a5bd8b561439cb4fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24721 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 diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System4/TemperaturesControl.png deleted file mode 100644 index a68058ca4d34cd1e6624401d5133c202e78208c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35011 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

0k6?r%Yc!A6yLDtVVy?=uddy!s!Eh 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 D^{%Ns diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png b/IBPSA/Resources/Images/Examples/Tutorial/CDL/System6/TemperaturesControl.png deleted file mode 100644 index 5d5569b2b0b74b9c44cfb3d3a290799ba7c082e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49164 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 diff --git a/IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf b/IBPSA/Resources/Images/Examples/Tutorial/CDL/schematics.pdf deleted file mode 100644 index 0a9ca939762cb97207ad30ee72087f2ec6b7d653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18394 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

yl;1BM2GAqX$^zCDbPghMTZ;{U zK8~iG(jSZu0+BxB*EX;$86gYM_qa3Xun>zsm8**)+c>opC4CK(z>w8QyU7q9)7`4| z8mH=`>!YgNiCpj{NT>c&VJKL$q>;jPA!SkULC<#ajMMrVhw|YjlY%EpNLN@!)g}DHz6nKh`|G{*#^oCiCw?3luS2Npddp%uE?eQFuvj5XXowWI3-jG zmYJ=!Ef~GV20gF>JVQYzgPcFq3->J%NPdXi*l$%%>E%n%k!^y(bbf)e( zS2D)7ZsNH3xXEEE^nTOB;SUQZu4;>O-cBl%$z>nc{*H0~9{IJbS=TT;IE>K?=Y4^zvfpvOrsQAuft>k z{ig7Q_0&EcCL2NnVUR8R_|vn|rlR%|vZ7YD-20;RkC%UK*A)LXY9ba~I8 z{uAcC$s0F1S4Ns4XksM4NXKSr!>&rid?2NfoX7+35d4Nab{r9&qUWQwWLKn9Ey61# zyA`ipa?OS?cA6^QoO`qYi>P5d&A#jHr+@#QKEBF;&d#uuQJKG+Z;2lCnhx*{;2mA0@9TLvJqBIY9jG}Gu-;ggTz%-_OgOYf*8D;@Bk4r|u@DA~PNvsjTvYlj%>>9^V- z*IB0(_)<{noLjpB4{@WsQxJOXMFJ4LIeH40zrFjTE0<;lkDi<0aP;lEPGGrZC@bi?~*R4&XS#^®28R9>e{j67 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PI   - - -   -   -   -   - - - - - - - -  Tout - - Boiler   - - - - - - 19°C - 50°C - 21°C - 21°C -  TRoo -  Tsup -  y -  y -  y -  Tsup - - - - - - - - - - - - 20°C  - 21°C  - 1  - 0  - - - - - - -  TRoo - - - - - - - - - - - - - - - - 16°C  - 17°C  - 1  - 0  - - - - - - -  Tout - - - -  TRoo - - - - -  TB - - - - - - - - - 70°C  - 90°C  - 1  - 0  - - - - - - - - - - - - - - - -  TBoi - - - - - - - - - 60°C - - - - - - - - - - - PI   - - - - - - - - - - - - - - - - - - Expansionvessel   - ANDgate - on/off - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Supply temperaturecontroller - System on/offcontroller - Boiler on/offcontroller - Return temperaturecontroller - - - diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt deleted file mode 100644 index 21ee36b0a8..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_BoilerReturn.txt +++ /dev/null @@ -1,12 +0,0 @@ -last-generated=2020-02-19 -statistics-simulation= -{ - "linear": " ", - "nonlinear": " ", - "number of continuous time states": "1", - "numerical Jacobians": "0" -} -time=[0e+00, 3.6e+03] -conBoiRet.TSet=[3.331499938964844e+02, 3.331499938964844e+02] -conBoiRet.TRet=[2.931499938964844e+02, 2.936499938964844e+02, 2.941499938964844e+02, 2.946499938964844e+02, 2.951499938964844e+02, 2.956499938964844e+02, 2.961499938964844e+02, 2.966499938964844e+02, 2.971499938964844e+02, 2.976499938964844e+02, 2.981499938964844e+02, 2.986499938964844e+02, 2.991499938964844e+02, 2.996499938964844e+02, 3.001499938964844e+02, 3.006499938964844e+02, 3.011499938964844e+02, 3.016499938964844e+02, 3.021499938964844e+02, 3.026499938964844e+02, 3.031499938964844e+02, 3.036499938964844e+02, 3.041499938964844e+02, 3.046499938964844e+02, 3.051499938964844e+02, 3.056499938964844e+02, 3.061499938964844e+02, 3.066499938964844e+02, 3.071499938964844e+02, 3.076499938964844e+02, 3.081499938964844e+02, 3.086499938964844e+02, 3.091499938964844e+02, 3.096499938964844e+02, 3.101499938964844e+02, 3.106499938964844e+02, 3.111499938964844e+02, 3.116499938964844e+02, 3.121499938964844e+02, 3.126499938964844e+02, 3.131499938964844e+02, 3.136499938964844e+02, 3.141499938964844e+02, 3.146499938964844e+02, 3.151499938964844e+02, 3.156499938964844e+02, 3.161499938964844e+02, 3.166499938964844e+02, 3.171499938964844e+02, 3.176499938964844e+02, 3.181499938964844e+02, 3.186499938964844e+02, 3.191499938964844e+02, 3.196499938964844e+02, 3.201499938964844e+02, 3.206499938964844e+02, 3.211499938964844e+02, 3.216499938964844e+02, 3.221499938964844e+02, 3.226499938964844e+02, 3.231499938964844e+02, 3.236499938964844e+02, 3.241499938964844e+02, 3.246499938964844e+02, 3.251499938964844e+02, 3.256499938964844e+02, 3.261499938964844e+02, 3.266499938964844e+02, 3.271499938964844e+02, 3.276499938964844e+02, 3.281499938964844e+02, 3.286499938964844e+02, 3.291499938964844e+02, 3.296499938964844e+02, 3.301499938964844e+02, 3.306499938964844e+02, 3.311499938964844e+02, 3.316499938964844e+02, 3.321499938964844e+02, 3.326499938964844e+02, 3.331499938964844e+02, 3.336499938964844e+02, 3.341499938964844e+02, 3.346499938964844e+02, 3.351499938964844e+02, 3.356499938964844e+02, 3.361499938964844e+02, 3.366499938964844e+02, 3.371499938964844e+02, 3.376499938964844e+02, 3.381499938964844e+02, 3.386499938964844e+02, 3.391499938964844e+02, 3.396499938964844e+02, 3.401499938964844e+02, 3.406499938964844e+02, 3.411499938964844e+02, 3.416499938964844e+02, 3.421499938964844e+02, 3.426499938964844e+02, 3.431499938964844e+02] -conBoiRet.yVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.583335362374783e-02, 7.333334535360336e-02, 1.458333432674408e-01, 2.333333343267441e-01, 3.35833340883255e-01, 4.5333331823349e-01, 5.858333110809326e-01, 7.333333492279053e-01, 8.958333134651184e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt deleted file mode 100644 index 14cf98e3cc..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_EquipmentOnOff.txt +++ /dev/null @@ -1,12 +0,0 @@ -last-generated=2020-02-19 -statistics-simulation= -{ - "linear": " ", - "nonlinear": " ", - "numerical Jacobians": "0" -} -time=[0e+00, 3.6e+03] -conEquSta.TBoi=[3.331499938964844e+02, 3.335499877929688e+02, 3.339500122070312e+02, 3.343500061035156e+02, 3.3475e+02, 3.351499938964844e+02, 3.355499877929688e+02, 3.359500122070312e+02, 3.363500061035156e+02, 3.3675e+02, 3.371499938964844e+02, 3.375499877929688e+02, 3.379500122070312e+02, 3.383500061035156e+02, 3.3875e+02, 3.391499938964844e+02, 3.395499877929688e+02, 3.399500122070312e+02, 3.403500061035156e+02, 3.4075e+02, 3.411499938964844e+02, 3.415499877929688e+02, 3.419500122070312e+02, 3.423500061035156e+02, 3.4275e+02, 3.431499938964844e+02, 3.435499877929688e+02, 3.439500122070312e+02, 3.443500061035156e+02, 3.4475e+02, 3.451499938964844e+02, 3.455499877929688e+02, 3.459500122070312e+02, 3.463500061035156e+02, 3.4675e+02, 3.471499938964844e+02, 3.475499877929688e+02, 3.479500122070312e+02, 3.483500061035156e+02, 3.4875e+02, 3.491499938964844e+02, 3.495499877929688e+02, 3.499500122070312e+02, 3.503500061035156e+02, 3.5075e+02, 3.511499938964844e+02, 3.515499877929688e+02, 3.519500122070312e+02, 3.523500061035156e+02, 3.5275e+02, 3.531499938964844e+02, 3.535499877929688e+02, 3.539500122070312e+02, 3.543500061035156e+02, 3.5475e+02, 3.551499938964844e+02, 3.555499877929688e+02, 3.559500122070312e+02, 3.563500061035156e+02, 3.5675e+02, 3.571499938964844e+02, 3.575499877929688e+02, 3.579500122070312e+02, 3.583500061035156e+02, 3.5875e+02, 3.591499938964844e+02, 3.595499877929688e+02, 3.599500122070312e+02, 3.603500061035156e+02, 3.6075e+02, 3.611499938964844e+02, 3.615499877929688e+02, 3.619500122070312e+02, 3.623500061035156e+02, 3.6275e+02, 3.631499938964844e+02, 3.635499877929688e+02, 3.639500122070312e+02, 3.643500061035156e+02, 3.6475e+02, 3.651499938964844e+02, 3.655499877929688e+02, 3.659500122070312e+02, 3.663500061035156e+02, 3.6675e+02, 3.671499938964844e+02, 3.675499877929688e+02, 3.679500122070312e+02, 3.683500061035156e+02, 3.6875e+02, 3.691499938964844e+02, 3.695499877929688e+02, 3.699500122070312e+02, 3.703500061035156e+02, 3.7075e+02, 3.711499938964844e+02, 3.715499877929688e+02, 3.719500122070312e+02, 3.723500061035156e+02, 3.7275e+02, 3.731499938964844e+02] -conEquSta.onSys=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] -conEquSta.onPum=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] -conEquSta.onBoi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt deleted file mode 100644 index 15489622af..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_RadiatorSupply.txt +++ /dev/null @@ -1,12 +0,0 @@ -last-generated=2020-02-19 -statistics-simulation= -{ - "linear": " ", - "nonlinear": " ", - "number of continuous time states": "1", - "numerical Jacobians": "0" -} -time=[0e+00, 3.6e+03] -conRadSup.TRoo=[2.971499938964844e+02, 2.971099853515625e+02, 2.970700073242188e+02, 2.970299987792969e+02, 2.96989990234375e+02, 2.969500122070312e+02, 2.969100036621094e+02, 2.968699951171875e+02, 2.968299865722656e+02, 2.967900085449219e+02, 2.9675e+02, 2.967099914550781e+02, 2.966700134277344e+02, 2.966300048828125e+02, 2.965899963378906e+02, 2.965499877929688e+02, 2.96510009765625e+02, 2.964700012207031e+02, 2.964299926757812e+02, 2.963900146484375e+02, 2.963500061035156e+02, 2.963099975585938e+02, 2.962699890136719e+02, 2.962300109863281e+02, 2.961900024414062e+02, 2.961499938964844e+02, 2.961099853515625e+02, 2.960700073242188e+02, 2.960299987792969e+02, 2.95989990234375e+02, 2.959500122070312e+02, 2.959100036621094e+02, 2.958699951171875e+02, 2.958299865722656e+02, 2.957900085449219e+02, 2.9575e+02, 2.957099914550781e+02, 2.956700134277344e+02, 2.956300048828125e+02, 2.955899963378906e+02, 2.955499877929688e+02, 2.95510009765625e+02, 2.954700012207031e+02, 2.954299926757812e+02, 2.953900146484375e+02, 2.953500061035156e+02, 2.953099975585938e+02, 2.952699890136719e+02, 2.952300109863281e+02, 2.951900024414062e+02, 2.951499938964844e+02, 2.951099853515625e+02, 2.950700073242188e+02, 2.950299987792969e+02, 2.94989990234375e+02, 2.949500122070312e+02, 2.949100036621094e+02, 2.948699951171875e+02, 2.948299865722656e+02, 2.947900085449219e+02, 2.9475e+02, 2.947099914550781e+02, 2.946700134277344e+02, 2.946300048828125e+02, 2.945899963378906e+02, 2.945499877929688e+02, 2.94510009765625e+02, 2.944700012207031e+02, 2.944299926757812e+02, 2.943900146484375e+02, 2.943500061035156e+02, 2.943099975585938e+02, 2.942699890136719e+02, 2.942300109863281e+02, 2.941900024414062e+02, 2.941499938964844e+02, 2.941099853515625e+02, 2.940700073242188e+02, 2.940299987792969e+02, 2.93989990234375e+02, 2.939500122070312e+02, 2.939100036621094e+02, 2.938699951171875e+02, 2.938299865722656e+02, 2.937900085449219e+02, 2.9375e+02, 2.937099914550781e+02, 2.936700134277344e+02, 2.936300048828125e+02, 2.935899963378906e+02, 2.935499877929688e+02, 2.93510009765625e+02, 2.934700012207031e+02, 2.934299926757812e+02, 2.933900146484375e+02, 2.933500061035156e+02, 2.933099975585938e+02, 2.932699890136719e+02, 2.932300109863281e+02, 2.931900024414062e+02, 2.931499938964844e+02] -conRadSup.TSup=[3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02, 3.093303527832031e+02, 3.149057006835938e+02, 3.193303527832031e+02, 3.22171142578125e+02, 3.231499938964844e+02, 3.22171142578125e+02, 3.193303527832031e+02, 3.149057006835938e+02, 3.093303527832031e+02, 3.031499938964844e+02, 2.969696655273438e+02, 2.91394287109375e+02, 2.869696655273438e+02, 2.841288757324219e+02, 2.831499938964844e+02, 2.841288757324219e+02, 2.869696655273438e+02, 2.91394287109375e+02, 2.969696655273438e+02, 3.031499938964844e+02] -conRadSup.yVal=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.343824088573456e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.219262838363647e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.495950937271118e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.245810151100159e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.496521949768066e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 5.245894193649292e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 4.496550559997559e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 7.886499166488647e-01, 1.303928345441818e-01, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1.211419925093651e-01, 8.903452754020691e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt deleted file mode 100644 index 305e965fa7..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_Controls_Validation_SystemOnOff.txt +++ /dev/null @@ -1,13 +0,0 @@ -last-generated=2020-02-19 -statistics-simulation= -{ - "linear": " ", - "nonlinear": " ", - "numerical Jacobians": "0" -} -time=[0e+00, 3.6e+03] -conSysSta.TRoo=[2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02, 2.969542236328125e+02, 2.963860778808594e+02, 2.955011291503906e+02, 2.943860778808594e+02, 2.931499938964844e+02, 2.919139404296875e+02, 2.907988586425781e+02, 2.899139404296875e+02, 2.893457641601562e+02, 2.891499938964844e+02, 2.893457641601562e+02, 2.899139404296875e+02, 2.907988586425781e+02, 2.919139404296875e+02, 2.931499938964844e+02, 2.943860778808594e+02, 2.955011291503906e+02, 2.963860778808594e+02, 2.969542236328125e+02, 2.971499938964844e+02] -conSysSta.TRooSet=[2.936499938964844e+02, 2.936499938964844e+02] -conSysSta.TOut=[2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02, 2.916950988769531e+02, 2.930889282226562e+02, 2.941950988769531e+02, 2.949052734375e+02, 2.951499938964844e+02, 2.949052734375e+02, 2.941950988769531e+02, 2.930889282226562e+02, 2.916950988769531e+02, 2.901499938964844e+02, 2.886049194335938e+02, 2.872110595703125e+02, 2.861049194335938e+02, 2.853947143554688e+02, 2.851499938964844e+02, 2.853947143554688e+02, 2.861049194335938e+02, 2.872110595703125e+02, 2.886049194335938e+02, 2.901499938964844e+02] -conSysSta.TOutLow=[2.891499938964844e+02, 2.891499938964844e+02] -conSysSta.onSys=[0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt deleted file mode 100644 index 1cfe0ca8dc..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System1.txt +++ /dev/null @@ -1,19 +0,0 @@ -last-generated=2024-09-13 -statistics-initialization= -{ - "nonlinear": "5, 9, 0, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "25", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.235456848144531e+02, 3.302677612304688e+02, 3.345385437011719e+02, 3.377018737792969e+02, 3.400711059570312e+02, 3.418246154785156e+02, 3.43099365234375e+02, 3.440057983398438e+02, 3.446341552734375e+02, 3.450574645996094e+02, 3.453338317871094e+02, 3.455127258300781e+02, 3.456378784179688e+02, 3.457569580078125e+02, 3.459273376464844e+02, 3.461693115234375e+02, 3.46459716796875e+02, 3.467494812011719e+02, 3.47017333984375e+02, 3.472599487304688e+02, 3.474747619628906e+02, 3.476561889648438e+02, 3.477958068847656e+02, 3.4789404296875e+02, 3.479646301269531e+02, 3.480312805175781e+02, 3.481113891601562e+02, 3.482064514160156e+02, 3.483145141601562e+02, 3.48431396484375e+02, 3.485502319335938e+02, 3.486645812988281e+02, 3.487763671875e+02, 3.491953735351562e+02, 3.505382385253906e+02, 3.518658447265625e+02, 3.530768737792969e+02, 3.541841125488281e+02, 3.551770629882812e+02, 3.560694580078125e+02, 3.568801879882812e+02, 3.576192016601562e+02, 3.582900085449219e+02, 3.589009094238281e+02, 3.594639587402344e+02, 3.599889831542969e+02, 3.604840698242188e+02, 3.609529724121094e+02, 3.613988342285156e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580688476562e+02, 3.690074768066406e+02, 3.689551086425781e+02, 3.687868041992188e+02, 3.68546142578125e+02, 3.683146667480469e+02, 3.681323852539062e+02, 3.679927062988281e+02, 3.678861999511719e+02, 3.6713037109375e+02, 3.658734130859375e+02, 3.648491821289062e+02, 3.640643005371094e+02, 3.634662780761719e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.62445556640625e+02, 3.623630065917969e+02, 3.622667236328125e+02, 3.621480407714844e+02, 3.620196533203125e+02, 3.619066772460938e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.6172265625e+02, 3.616731872558594e+02, 3.616102905273438e+02, 3.615349426269531e+02, 3.614475708007812e+02, 3.613488464355469e+02, 3.612393798828125e+02, 3.611209106445312e+02, 3.609960327148438e+02] -temSup.T=[2.931499938964844e+02, 3.056086120605469e+02, 3.113561401367188e+02, 3.153233642578125e+02, 3.182890625e+02, 3.205071105957031e+02, 3.221427001953125e+02, 3.233262023925781e+02, 3.241630859375e+02, 3.247395629882812e+02, 3.251250915527344e+02, 3.253751831054688e+02, 3.255378723144531e+02, 3.256560668945312e+02, 3.257808227539062e+02, 3.259664001464844e+02, 3.26222900390625e+02, 3.265184020996094e+02, 3.268041381835938e+02, 3.27066650390625e+02, 3.273036499023438e+02, 3.275118713378906e+02, 3.276850280761719e+02, 3.278150329589844e+02, 3.279053344726562e+02, 3.279723510742188e+02, 3.280408325195312e+02, 3.28124267578125e+02, 3.282225036621094e+02, 3.283329772949219e+02, 3.284511413574219e+02, 3.285694274902344e+02, 3.286827087402344e+02, 3.287948303222656e+02, 3.29435546875e+02, 3.308346557617188e+02, 3.321353454589844e+02, 3.33323486328125e+02, 3.344068298339844e+02, 3.353753967285156e+02, 3.362482604980469e+02, 3.370426330566406e+02, 3.377664184570312e+02, 3.384229431152344e+02, 3.39022216796875e+02, 3.395759582519531e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428024291992188e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947082519531e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696350097656e+02, 3.490020751953125e+02, 3.489236145019531e+02, 3.487330322265625e+02, 3.484853210449219e+02, 3.482633972167969e+02, 3.480914001464844e+02, 3.479599609375e+02, 3.478597412109375e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475646972656e+02, 3.429397583007812e+02, 3.426728210449219e+02, 3.425152282714844e+02, 3.42420654296875e+02, 3.423378601074219e+02, 3.422367553710938e+02, 3.421138916015625e+02, 3.419861755371094e+02, 3.4187890625e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.417067260742188e+02, 3.416545104980469e+02, 3.415888366699219e+02, 3.415107727050781e+02, 3.414208984375e+02, 3.413197021484375e+02, 3.412080688476562e+02, 3.41087890625e+02, 3.409619750976562e+02] -temRet.T=[2.931499938964844e+02, 3.142822570800781e+02, 3.206342468261719e+02, 3.24792236328125e+02, 3.278826293945312e+02, 3.301961059570312e+02, 3.319061584472656e+02, 3.331472473144531e+02, 3.340280151367188e+02, 3.3463720703125e+02, 3.350465698242188e+02, 3.35313232421875e+02, 3.354861145019531e+02, 3.35608642578125e+02, 3.35729736328125e+02, 3.359056396484375e+02, 3.361529846191406e+02, 3.364453430175781e+02, 3.36733642578125e+02, 3.369995422363281e+02, 3.372401123046875e+02, 3.374525146484375e+02, 3.376309204101562e+02, 3.377670288085938e+02, 3.378623046875e+02, 3.379315490722656e+02, 3.379988403320312e+02, 3.380801696777344e+02, 3.381763916015625e+02, 3.382853698730469e+02, 3.384027099609375e+02, 3.385213623046875e+02, 3.386353149414062e+02, 3.387472229003906e+02, 3.392459716796875e+02, 3.406112365722656e+02, 3.419290161132812e+02, 3.431316223144531e+02, 3.442301330566406e+02, 3.452140808105469e+02, 3.460992736816406e+02, 3.469039916992188e+02, 3.476374206542969e+02, 3.48302978515625e+02, 3.489095764160156e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787170410156e+02, 3.543737487792969e+02, 3.549752807617188e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264526367188e+02, 3.589697265625e+02, 3.589078063964844e+02, 3.587312622070312e+02, 3.584878845214844e+02, 3.582598571777344e+02, 3.580813598632812e+02, 3.579447326660156e+02, 3.578405151367188e+02, 3.569900512695312e+02, 3.557423400878906e+02, 3.547391357421875e+02, 3.539712219238281e+02, 3.533865661621094e+02, 3.52957763671875e+02, 3.526724243164062e+02, 3.5250146484375e+02, 3.524004821777344e+02, 3.523179016113281e+02, 3.522198486328125e+02, 3.52099609375e+02, 3.519714050292969e+02, 3.518605346679688e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.51680908203125e+02, 3.516304321289062e+02, 3.515664978027344e+02, 3.514901733398438e+02, 3.514018859863281e+02, 3.5130224609375e+02, 3.511919860839844e+02, 3.510728759765625e+02, 3.509476013183594e+02] -temRoo.T=[2.931499938964844e+02, 2.848866271972656e+02, 2.869789123535156e+02, 2.894321899414062e+02, 2.913446044921875e+02, 2.927545776367188e+02, 2.937647399902344e+02, 2.944679260253906e+02, 2.9494140625e+02, 2.952493896484375e+02, 2.954407958984375e+02, 2.955587463378906e+02, 2.956434936523438e+02, 2.957352294921875e+02, 2.959083862304688e+02, 2.961827697753906e+02, 2.965125427246094e+02, 2.968211364746094e+02, 2.970805358886719e+02, 2.973132019042969e+02, 2.975180053710938e+02, 2.976884765625e+02, 2.978131103515625e+02, 2.978904724121094e+02, 2.979407348632812e+02, 2.979949951171875e+02, 2.980780029296875e+02, 2.981799926757812e+02, 2.982949523925781e+02, 2.984177551269531e+02, 2.98541015625e+02, 2.986544494628906e+02, 2.987626342773438e+02, 2.988789978027344e+02, 3.010147094726562e+02, 3.024350280761719e+02, 3.035816650390625e+02, 3.046459045410156e+02, 3.05590576171875e+02, 3.064289855957031e+02, 3.071981811523438e+02, 3.079039916992188e+02, 3.085435791015625e+02, 3.091235961914062e+02, 3.09661376953125e+02, 3.101661682128906e+02, 3.106457824707031e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605529785156e+02, 3.1576318359375e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.17378662109375e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.190003662109375e+02, 3.189236145019531e+02, 3.1869873046875e+02, 3.183977355957031e+02, 3.181357727050781e+02, 3.179747009277344e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051086425781e+02, 3.142509155273438e+02, 3.135875244140625e+02, 3.130862426757812e+02, 3.127158203125e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.122685546875e+02, 3.121752624511719e+02, 3.120455322265625e+02, 3.11903564453125e+02, 3.117870483398438e+02, 3.117142028808594e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.1159716796875e+02, 3.115286254882812e+02, 3.114475708007812e+02, 3.113548889160156e+02, 3.112511596679688e+02, 3.111366882324219e+02, 3.110134887695312e+02, 3.108846435546875e+02, 3.107538452148438e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt deleted file mode 100644 index 1cfe0ca8dc..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System2.txt +++ /dev/null @@ -1,19 +0,0 @@ -last-generated=2024-09-13 -statistics-initialization= -{ - "nonlinear": "5, 9, 0, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "25", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.235456848144531e+02, 3.302677612304688e+02, 3.345385437011719e+02, 3.377018737792969e+02, 3.400711059570312e+02, 3.418246154785156e+02, 3.43099365234375e+02, 3.440057983398438e+02, 3.446341552734375e+02, 3.450574645996094e+02, 3.453338317871094e+02, 3.455127258300781e+02, 3.456378784179688e+02, 3.457569580078125e+02, 3.459273376464844e+02, 3.461693115234375e+02, 3.46459716796875e+02, 3.467494812011719e+02, 3.47017333984375e+02, 3.472599487304688e+02, 3.474747619628906e+02, 3.476561889648438e+02, 3.477958068847656e+02, 3.4789404296875e+02, 3.479646301269531e+02, 3.480312805175781e+02, 3.481113891601562e+02, 3.482064514160156e+02, 3.483145141601562e+02, 3.48431396484375e+02, 3.485502319335938e+02, 3.486645812988281e+02, 3.487763671875e+02, 3.491953735351562e+02, 3.505382385253906e+02, 3.518658447265625e+02, 3.530768737792969e+02, 3.541841125488281e+02, 3.551770629882812e+02, 3.560694580078125e+02, 3.568801879882812e+02, 3.576192016601562e+02, 3.582900085449219e+02, 3.589009094238281e+02, 3.594639587402344e+02, 3.599889831542969e+02, 3.604840698242188e+02, 3.609529724121094e+02, 3.613988342285156e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580688476562e+02, 3.690074768066406e+02, 3.689551086425781e+02, 3.687868041992188e+02, 3.68546142578125e+02, 3.683146667480469e+02, 3.681323852539062e+02, 3.679927062988281e+02, 3.678861999511719e+02, 3.6713037109375e+02, 3.658734130859375e+02, 3.648491821289062e+02, 3.640643005371094e+02, 3.634662780761719e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.62445556640625e+02, 3.623630065917969e+02, 3.622667236328125e+02, 3.621480407714844e+02, 3.620196533203125e+02, 3.619066772460938e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.6172265625e+02, 3.616731872558594e+02, 3.616102905273438e+02, 3.615349426269531e+02, 3.614475708007812e+02, 3.613488464355469e+02, 3.612393798828125e+02, 3.611209106445312e+02, 3.609960327148438e+02] -temSup.T=[2.931499938964844e+02, 3.056086120605469e+02, 3.113561401367188e+02, 3.153233642578125e+02, 3.182890625e+02, 3.205071105957031e+02, 3.221427001953125e+02, 3.233262023925781e+02, 3.241630859375e+02, 3.247395629882812e+02, 3.251250915527344e+02, 3.253751831054688e+02, 3.255378723144531e+02, 3.256560668945312e+02, 3.257808227539062e+02, 3.259664001464844e+02, 3.26222900390625e+02, 3.265184020996094e+02, 3.268041381835938e+02, 3.27066650390625e+02, 3.273036499023438e+02, 3.275118713378906e+02, 3.276850280761719e+02, 3.278150329589844e+02, 3.279053344726562e+02, 3.279723510742188e+02, 3.280408325195312e+02, 3.28124267578125e+02, 3.282225036621094e+02, 3.283329772949219e+02, 3.284511413574219e+02, 3.285694274902344e+02, 3.286827087402344e+02, 3.287948303222656e+02, 3.29435546875e+02, 3.308346557617188e+02, 3.321353454589844e+02, 3.33323486328125e+02, 3.344068298339844e+02, 3.353753967285156e+02, 3.362482604980469e+02, 3.370426330566406e+02, 3.377664184570312e+02, 3.384229431152344e+02, 3.39022216796875e+02, 3.395759582519531e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428024291992188e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947082519531e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696350097656e+02, 3.490020751953125e+02, 3.489236145019531e+02, 3.487330322265625e+02, 3.484853210449219e+02, 3.482633972167969e+02, 3.480914001464844e+02, 3.479599609375e+02, 3.478597412109375e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475646972656e+02, 3.429397583007812e+02, 3.426728210449219e+02, 3.425152282714844e+02, 3.42420654296875e+02, 3.423378601074219e+02, 3.422367553710938e+02, 3.421138916015625e+02, 3.419861755371094e+02, 3.4187890625e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.417067260742188e+02, 3.416545104980469e+02, 3.415888366699219e+02, 3.415107727050781e+02, 3.414208984375e+02, 3.413197021484375e+02, 3.412080688476562e+02, 3.41087890625e+02, 3.409619750976562e+02] -temRet.T=[2.931499938964844e+02, 3.142822570800781e+02, 3.206342468261719e+02, 3.24792236328125e+02, 3.278826293945312e+02, 3.301961059570312e+02, 3.319061584472656e+02, 3.331472473144531e+02, 3.340280151367188e+02, 3.3463720703125e+02, 3.350465698242188e+02, 3.35313232421875e+02, 3.354861145019531e+02, 3.35608642578125e+02, 3.35729736328125e+02, 3.359056396484375e+02, 3.361529846191406e+02, 3.364453430175781e+02, 3.36733642578125e+02, 3.369995422363281e+02, 3.372401123046875e+02, 3.374525146484375e+02, 3.376309204101562e+02, 3.377670288085938e+02, 3.378623046875e+02, 3.379315490722656e+02, 3.379988403320312e+02, 3.380801696777344e+02, 3.381763916015625e+02, 3.382853698730469e+02, 3.384027099609375e+02, 3.385213623046875e+02, 3.386353149414062e+02, 3.387472229003906e+02, 3.392459716796875e+02, 3.406112365722656e+02, 3.419290161132812e+02, 3.431316223144531e+02, 3.442301330566406e+02, 3.452140808105469e+02, 3.460992736816406e+02, 3.469039916992188e+02, 3.476374206542969e+02, 3.48302978515625e+02, 3.489095764160156e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787170410156e+02, 3.543737487792969e+02, 3.549752807617188e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264526367188e+02, 3.589697265625e+02, 3.589078063964844e+02, 3.587312622070312e+02, 3.584878845214844e+02, 3.582598571777344e+02, 3.580813598632812e+02, 3.579447326660156e+02, 3.578405151367188e+02, 3.569900512695312e+02, 3.557423400878906e+02, 3.547391357421875e+02, 3.539712219238281e+02, 3.533865661621094e+02, 3.52957763671875e+02, 3.526724243164062e+02, 3.5250146484375e+02, 3.524004821777344e+02, 3.523179016113281e+02, 3.522198486328125e+02, 3.52099609375e+02, 3.519714050292969e+02, 3.518605346679688e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.51680908203125e+02, 3.516304321289062e+02, 3.515664978027344e+02, 3.514901733398438e+02, 3.514018859863281e+02, 3.5130224609375e+02, 3.511919860839844e+02, 3.510728759765625e+02, 3.509476013183594e+02] -temRoo.T=[2.931499938964844e+02, 2.848866271972656e+02, 2.869789123535156e+02, 2.894321899414062e+02, 2.913446044921875e+02, 2.927545776367188e+02, 2.937647399902344e+02, 2.944679260253906e+02, 2.9494140625e+02, 2.952493896484375e+02, 2.954407958984375e+02, 2.955587463378906e+02, 2.956434936523438e+02, 2.957352294921875e+02, 2.959083862304688e+02, 2.961827697753906e+02, 2.965125427246094e+02, 2.968211364746094e+02, 2.970805358886719e+02, 2.973132019042969e+02, 2.975180053710938e+02, 2.976884765625e+02, 2.978131103515625e+02, 2.978904724121094e+02, 2.979407348632812e+02, 2.979949951171875e+02, 2.980780029296875e+02, 2.981799926757812e+02, 2.982949523925781e+02, 2.984177551269531e+02, 2.98541015625e+02, 2.986544494628906e+02, 2.987626342773438e+02, 2.988789978027344e+02, 3.010147094726562e+02, 3.024350280761719e+02, 3.035816650390625e+02, 3.046459045410156e+02, 3.05590576171875e+02, 3.064289855957031e+02, 3.071981811523438e+02, 3.079039916992188e+02, 3.085435791015625e+02, 3.091235961914062e+02, 3.09661376953125e+02, 3.101661682128906e+02, 3.106457824707031e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605529785156e+02, 3.1576318359375e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.17378662109375e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.190003662109375e+02, 3.189236145019531e+02, 3.1869873046875e+02, 3.183977355957031e+02, 3.181357727050781e+02, 3.179747009277344e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051086425781e+02, 3.142509155273438e+02, 3.135875244140625e+02, 3.130862426757812e+02, 3.127158203125e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.122685546875e+02, 3.121752624511719e+02, 3.120455322265625e+02, 3.11903564453125e+02, 3.117870483398438e+02, 3.117142028808594e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.1159716796875e+02, 3.115286254882812e+02, 3.114475708007812e+02, 3.113548889160156e+02, 3.112511596679688e+02, 3.111366882324219e+02, 3.110134887695312e+02, 3.108846435546875e+02, 3.107538452148438e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt deleted file mode 100644 index 76334f3afa..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System3.txt +++ /dev/null @@ -1,19 +0,0 @@ -last-generated=2024-09-13 -statistics-initialization= -{ - "nonlinear": "5, 9, 0, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "26", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.43205078125e+02, 3.434713439941406e+02, 3.442933044433594e+02, 3.448924865722656e+02, 3.452561645507812e+02, 3.454854736328125e+02, 3.456283569335938e+02, 3.457260131835938e+02, 3.458241577148438e+02, 3.45978515625e+02, 3.462084350585938e+02, 3.464895935058594e+02, 3.467725524902344e+02, 3.470345764160156e+02, 3.47273193359375e+02, 3.474848937988281e+02, 3.476638488769531e+02, 3.478019714355469e+02, 3.47898681640625e+02, 3.479682006835938e+02, 3.480339050292969e+02, 3.481134948730469e+02, 3.482081298828125e+02, 3.483157653808594e+02, 3.48432373046875e+02, 3.485509338378906e+02, 3.486650695800781e+02, 3.487767944335938e+02, 3.491956481933594e+02, 3.505384216308594e+02, 3.518659973144531e+02, 3.530770263671875e+02, 3.541842346191406e+02, 3.551771545410156e+02, 3.560695190429688e+02, 3.568802490234375e+02, 3.576192321777344e+02, 3.582900390625e+02, 3.589009094238281e+02, 3.594639892578125e+02, 3.59989013671875e+02, 3.604840698242188e+02, 3.609530029296875e+02, 3.613988647460938e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.632096862792969e+02, 3.637702941894531e+02, 3.643639221191406e+02, 3.649652709960938e+02, 3.655647583007812e+02, 3.661495666503906e+02, 3.667016906738281e+02, 3.671998596191406e+02, 3.676280517578125e+02, 3.679831848144531e+02, 3.682727966308594e+02, 3.685096130371094e+02, 3.687021484375e+02, 3.688519897460938e+02, 3.689580383300781e+02, 3.690074157714844e+02, 3.689550476074219e+02, 3.687867736816406e+02, 3.685461120605469e+02, 3.683146667480469e+02, 3.681323547363281e+02, 3.679927062988281e+02, 3.6788623046875e+02, 3.671304016113281e+02, 3.658734436035156e+02, 3.648491821289062e+02, 3.640643310546875e+02, 3.6346630859375e+02, 3.630252990722656e+02, 3.627292175292969e+02, 3.625504150390625e+02, 3.624454956054688e+02, 3.623629150390625e+02, 3.622666320800781e+02, 3.6214794921875e+02, 3.620196533203125e+02, 3.619066467285156e+02, 3.618231201171875e+02, 3.617662658691406e+02, 3.617226867675781e+02, 3.616732788085938e+02, 3.616103515625e+02, 3.615350036621094e+02, 3.614476318359375e+02, 3.61348876953125e+02, 3.612394714355469e+02, 3.611210632324219e+02, 3.609961853027344e+02] -temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.110102233886719e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.230311279296875e+02, 3.238466491699219e+02, 3.244719848632812e+02, 3.249839172363281e+02, 3.253121337890625e+02, 3.255178833007812e+02, 3.256466979980469e+02, 3.257389831542969e+02, 3.258440551757812e+02, 3.260146179199219e+02, 3.262597045898438e+02, 3.265465393066406e+02, 3.268257751464844e+02, 3.270829467773438e+02, 3.273160705566406e+02, 3.275213928222656e+02, 3.276922607421875e+02, 3.278208312988281e+02, 3.279096984863281e+02, 3.279757080078125e+02, 3.280433044433594e+02, 3.281263122558594e+02, 3.282240600585938e+02, 3.283341674804688e+02, 3.284520568847656e+02, 3.28570068359375e+02, 3.286831665039062e+02, 3.287952270507812e+02, 3.294358215332031e+02, 3.308348693847656e+02, 3.32135498046875e+02, 3.333235778808594e+02, 3.344069213867188e+02, 3.353754577636719e+02, 3.362483215332031e+02, 3.370426940917969e+02, 3.377664489746094e+02, 3.384229736328125e+02, 3.390222473144531e+02, 3.395759887695312e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428023986816406e+02, 3.433203735351562e+02, 3.438912963867188e+02, 3.444885864257812e+02, 3.450904541015625e+02, 3.456882629394531e+02, 3.462680358886719e+02, 3.468106079101562e+02, 3.472947387695312e+02, 3.477068786621094e+02, 3.480466003417969e+02, 3.483233032226562e+02, 3.485499267578125e+02, 3.487330322265625e+02, 3.4887353515625e+02, 3.489696044921875e+02, 3.490020446777344e+02, 3.48923583984375e+02, 3.487329711914062e+02, 3.484852905273438e+02, 3.482633972167969e+02, 3.480913696289062e+02, 3.479599609375e+02, 3.478597717285156e+02, 3.468447875976562e+02, 3.456152648925781e+02, 3.446482238769531e+02, 3.439093322753906e+02, 3.433475952148438e+02, 3.429397277832031e+02, 3.426727905273438e+02, 3.425152282714844e+02, 3.424205627441406e+02, 3.423377380371094e+02, 3.422366333007812e+02, 3.421138305664062e+02, 3.419862060546875e+02, 3.418788757324219e+02, 3.418018493652344e+02, 3.417496948242188e+02, 3.41706787109375e+02, 3.416546020507812e+02, 3.415888977050781e+02, 3.415108337402344e+02, 3.414209289550781e+02, 3.413197631835938e+02, 3.412081604003906e+02, 3.410880126953125e+02, 3.409621276855469e+02] -temRet.T=[2.931499938964844e+02, 3.333218688964844e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.331664428710938e+02, 3.334713745117188e+02, 3.343245849609375e+02, 3.348904418945312e+02, 3.35240966796875e+02, 3.354615783691406e+02, 3.355992431640625e+02, 3.356948547363281e+02, 3.357954406738281e+02, 3.359557189941406e+02, 3.361912536621094e+02, 3.364745788574219e+02, 3.367561950683594e+02, 3.370164489746094e+02, 3.372530517578125e+02, 3.3746240234375e+02, 3.37638427734375e+02, 3.377730407714844e+02, 3.378668212890625e+02, 3.379350280761719e+02, 3.380014038085938e+02, 3.380822448730469e+02, 3.381780395507812e+02, 3.382865600585938e+02, 3.384036560058594e+02, 3.385220336914062e+02, 3.386358032226562e+02, 3.387476196289062e+02, 3.392462463378906e+02, 3.406114501953125e+02, 3.419291687011719e+02, 3.431317443847656e+02, 3.44230224609375e+02, 3.452141723632812e+02, 3.460993347167969e+02, 3.46904052734375e+02, 3.47637451171875e+02, 3.483030090332031e+02, 3.489096069335938e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.532143249511719e+02, 3.537787475585938e+02, 3.543737487792969e+02, 3.549753112792969e+02, 3.555741882324219e+02, 3.561571655273438e+02, 3.567058410644531e+02, 3.571988525390625e+02, 3.576211547851562e+02, 3.579706420898438e+02, 3.582554931640625e+02, 3.584885559082031e+02, 3.586776428222656e+02, 3.588240356445312e+02, 3.589264221191406e+02, 3.589696960449219e+02, 3.589077453613281e+02, 3.587312316894531e+02, 3.584878540039062e+02, 3.582598571777344e+02, 3.580813293457031e+02, 3.579447021484375e+02, 3.57840576171875e+02, 3.569900512695312e+02, 3.557423706054688e+02, 3.547391357421875e+02, 3.539712524414062e+02, 3.533865966796875e+02, 3.52957763671875e+02, 3.526723937988281e+02, 3.5250146484375e+02, 3.52400390625e+02, 3.523177795410156e+02, 3.522197265625e+02, 3.520995178222656e+02, 3.51971435546875e+02, 3.518605041503906e+02, 3.517793579101562e+02, 3.517242431640625e+02, 3.516809387207031e+02, 3.516305236816406e+02, 3.515665893554688e+02, 3.51490234375e+02, 3.514019165039062e+02, 3.513022766113281e+02, 3.511920776367188e+02, 3.510730285644531e+02, 3.5094775390625e+02] -temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301635742188e+02, 2.892975769042969e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.9422509765625e+02, 2.948786010742188e+02, 2.951877136230469e+02, 2.954170532226562e+02, 2.955670776367188e+02, 2.956549987792969e+02, 2.957168884277344e+02, 2.957911682128906e+02, 2.959510803222656e+02, 2.962154846191406e+02, 2.965373840332031e+02, 2.968403015136719e+02, 2.970947265625e+02, 2.973243408203125e+02, 2.975263977050781e+02, 2.976948547363281e+02, 2.978182067871094e+02, 2.978943176269531e+02, 2.979436950683594e+02, 2.979971923828125e+02, 2.980797424316406e+02, 2.98181396484375e+02, 2.982959594726562e+02, 2.984185791015625e+02, 2.985416259765625e+02, 2.986548767089844e+02, 2.987629699707031e+02, 2.988792419433594e+02, 3.01014892578125e+02, 3.024351501464844e+02, 3.035817565917969e+02, 3.046459655761719e+02, 3.055906372070312e+02, 3.064290466308594e+02, 3.071982421875e+02, 3.079040222167969e+02, 3.085436096191406e+02, 3.091235961914062e+02, 3.096614074707031e+02, 3.101661682128906e+02, 3.106458129882812e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139285888671875e+02, 3.14550048828125e+02, 3.151605834960938e+02, 3.157632141113281e+02, 3.163482971191406e+02, 3.168951416015625e+02, 3.173786926269531e+02, 3.177808532714844e+02, 3.181035461425781e+02, 3.183600769042969e+02, 3.185693664550781e+02, 3.187411499023438e+02, 3.188727111816406e+02, 3.189614562988281e+02, 3.19000244140625e+02, 3.189235534667969e+02, 3.186986999511719e+02, 3.18397705078125e+02, 3.181358337402344e+02, 3.179746704101562e+02, 3.178573608398438e+02, 3.177685546875e+02, 3.177008972167969e+02, 3.152051391601562e+02, 3.142509155273438e+02, 3.135875549316406e+02, 3.130862121582031e+02, 3.127157592773438e+02, 3.124877014160156e+02, 3.123734741210938e+02, 3.12321044921875e+02, 3.12268310546875e+02, 3.121751708984375e+02, 3.120454406738281e+02, 3.119035339355469e+02, 3.117870788574219e+02, 3.117142333984375e+02, 3.116724853515625e+02, 3.116422729492188e+02, 3.115973205566406e+02, 3.115286865234375e+02, 3.114476318359375e+02, 3.113549194335938e+02, 3.112511901855469e+02, 3.111367492675781e+02, 3.110135498046875e+02, 3.108847351074219e+02, 3.107539367675781e+02] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt deleted file mode 100644 index 1288ad2fd5..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System4.txt +++ /dev/null @@ -1,21 +0,0 @@ -last-generated=2024-09-13 -statistics-initialization= -{ - "nonlinear": "5, 9, 0, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "26", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.43205078125e+02, 3.434713439941406e+02, 3.442933044433594e+02, 3.448924865722656e+02, 3.452561645507812e+02, 3.454854736328125e+02, 3.456283569335938e+02, 3.457260131835938e+02, 3.458241577148438e+02, 3.45978515625e+02, 3.462084350585938e+02, 3.464895935058594e+02, 3.467725524902344e+02, 3.470345764160156e+02, 3.47273193359375e+02, 3.474848937988281e+02, 3.476638488769531e+02, 3.478019714355469e+02, 3.47898681640625e+02, 3.479682006835938e+02, 3.480339050292969e+02, 3.481134948730469e+02, 3.482081298828125e+02, 3.483157653808594e+02, 3.48432373046875e+02, 3.485509338378906e+02, 3.486650695800781e+02, 3.487767944335938e+02, 3.491956481933594e+02, 3.505384216308594e+02, 3.518659973144531e+02, 3.530770263671875e+02, 3.541842346191406e+02, 3.551771545410156e+02, 3.560695190429688e+02, 3.568802490234375e+02, 3.576192321777344e+02, 3.582900390625e+02, 3.589009094238281e+02, 3.594639892578125e+02, 3.59989013671875e+02, 3.604840698242188e+02, 3.609530029296875e+02, 3.613988647460938e+02, 3.618287048339844e+02, 3.622544860839844e+02, 3.627047424316406e+02, 3.541706848144531e+02, 3.586401672363281e+02, 3.6102783203125e+02, 3.624544982910156e+02, 3.473058776855469e+02, 3.603316040039062e+02, 3.624865417480469e+02, 3.529296875e+02, 3.610571899414062e+02, 3.631178894042969e+02, 3.585865783691406e+02, 3.62072265625e+02, 3.468697204589844e+02, 3.607023010253906e+02, 3.629743957519531e+02, 3.579193725585938e+02, 3.617729797363281e+02, 3.509577026367188e+02, 3.593564453125e+02, 3.618064575195312e+02, 3.591344604492188e+02, 3.586734008789062e+02, 3.615327758789062e+02, 3.623335266113281e+02, 3.622222595214844e+02, 3.620665588378906e+02, 3.619429931640625e+02, 3.618490905761719e+02, 3.617927551269531e+02, 3.617894287109375e+02, 3.618338317871094e+02, 3.61899169921875e+02, 3.619463195800781e+02, 3.619490356445312e+02, 3.619058532714844e+02, 3.618348999023438e+02, 3.617657775878906e+02, 3.617156677246094e+02, 3.61684326171875e+02, 3.616601257324219e+02, 3.616254577636719e+02, 3.615739440917969e+02, 3.615072326660156e+02, 3.614264526367188e+02, 3.613327026367188e+02, 3.612271423339844e+02, 3.611116333007812e+02, 3.60989013671875e+02] -temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.110102233886719e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.230311279296875e+02, 3.238466491699219e+02, 3.244719848632812e+02, 3.249839172363281e+02, 3.253121337890625e+02, 3.255178833007812e+02, 3.256466979980469e+02, 3.257389831542969e+02, 3.258440551757812e+02, 3.260146179199219e+02, 3.262597045898438e+02, 3.265465393066406e+02, 3.268257751464844e+02, 3.270829467773438e+02, 3.273160705566406e+02, 3.275213928222656e+02, 3.276922607421875e+02, 3.278208312988281e+02, 3.279096984863281e+02, 3.279757080078125e+02, 3.280433044433594e+02, 3.281263122558594e+02, 3.282240600585938e+02, 3.283341674804688e+02, 3.284520568847656e+02, 3.28570068359375e+02, 3.286831665039062e+02, 3.287952270507812e+02, 3.294358215332031e+02, 3.308348693847656e+02, 3.32135498046875e+02, 3.333235778808594e+02, 3.344069213867188e+02, 3.353754577636719e+02, 3.362483215332031e+02, 3.370426940917969e+02, 3.377664489746094e+02, 3.384229736328125e+02, 3.390222473144531e+02, 3.395759887695312e+02, 3.400937194824219e+02, 3.405828552246094e+02, 3.410462646484375e+02, 3.4148779296875e+02, 3.419151916503906e+02, 3.423424072265625e+02, 3.428023986816406e+02, 3.412862548828125e+02, 3.395494689941406e+02, 3.413731079101562e+02, 3.427290954589844e+02, 3.3701904296875e+02, 3.409632263183594e+02, 3.428541259765625e+02, 3.385643920898438e+02, 3.416318054199219e+02, 3.434749145507812e+02, 3.400550842285156e+02, 3.425283813476562e+02, 3.370928955078125e+02, 3.413815307617188e+02, 3.433495178222656e+02, 3.397550354003906e+02, 3.422109985351562e+02, 3.4031494140625e+02, 3.402499389648438e+02, 3.421600952148438e+02, 3.431968078613281e+02, 3.398429565429688e+02, 3.419109802246094e+02, 3.423342590332031e+02, 3.421798706054688e+02, 3.4202978515625e+02, 3.419132080078125e+02, 3.418257446289062e+02, 3.417798767089844e+02, 3.417883911132812e+02, 3.418408813476562e+02, 3.419064331054688e+02, 3.419457397460938e+02, 3.419378051757812e+02, 3.41885986328125e+02, 3.418122863769531e+02, 3.417462768554688e+02, 3.417007446289062e+02, 3.416725769042969e+02, 3.416478576660156e+02, 3.41609619140625e+02, 3.415546264648438e+02, 3.414846801757812e+02, 3.414009704589844e+02, 3.413045043945312e+02, 3.41196533203125e+02, 3.410791625976562e+02, 3.409553527832031e+02] -temRet.T=[2.931499938964844e+02, 3.333218688964844e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.331664428710938e+02, 3.334713745117188e+02, 3.343245849609375e+02, 3.348904418945312e+02, 3.35240966796875e+02, 3.354615783691406e+02, 3.355992431640625e+02, 3.356948547363281e+02, 3.357954406738281e+02, 3.359557189941406e+02, 3.361912536621094e+02, 3.364745788574219e+02, 3.367561950683594e+02, 3.370164489746094e+02, 3.372530517578125e+02, 3.3746240234375e+02, 3.37638427734375e+02, 3.377730407714844e+02, 3.378668212890625e+02, 3.379350280761719e+02, 3.380014038085938e+02, 3.380822448730469e+02, 3.381780395507812e+02, 3.382865600585938e+02, 3.384036560058594e+02, 3.385220336914062e+02, 3.386358032226562e+02, 3.387476196289062e+02, 3.392462463378906e+02, 3.406114501953125e+02, 3.419291687011719e+02, 3.431317443847656e+02, 3.44230224609375e+02, 3.452141723632812e+02, 3.460993347167969e+02, 3.46904052734375e+02, 3.47637451171875e+02, 3.483030090332031e+02, 3.489096069335938e+02, 3.494692077636719e+02, 3.499915466308594e+02, 3.504844360351562e+02, 3.509513244628906e+02, 3.513955993652344e+02, 3.518245239257812e+02, 3.522507934570312e+02, 3.5270458984375e+02, 3.491664733886719e+02, 3.489520568847656e+02, 3.511195068359375e+02, 3.525196533203125e+02, 3.410640869140625e+02, 3.505323486328125e+02, 3.525862731933594e+02, 3.451190185546875e+02, 3.512355041503906e+02, 3.532137756347656e+02, 3.491168823242188e+02, 3.522052917480469e+02, 3.408605041503906e+02, 3.509209594726562e+02, 3.530771179199219e+02, 3.48597900390625e+02, 3.518997802734375e+02, 3.468207702636719e+02, 3.4966064453125e+02, 3.519014282226562e+02, 3.527380065917969e+02, 3.490868225097656e+02, 3.51636962890625e+02, 3.522988586425781e+02, 3.521707763671875e+02, 3.5201708984375e+02, 3.518960876464844e+02, 3.518045349121094e+02, 3.517520141601562e+02, 3.517530517578125e+02, 3.518004760742188e+02, 3.518659362792969e+02, 3.519102478027344e+02, 3.519090576171875e+02, 3.518626708984375e+02, 3.517906799316406e+02, 3.5172265625e+02, 3.516742248535156e+02, 3.516440734863281e+02, 3.516197204589844e+02, 3.51583740234375e+02, 3.515309448242188e+02, 3.514630432128906e+02, 3.513811950683594e+02, 3.512864379882812e+02, 3.511799926757812e+02, 3.510637817382812e+02, 3.509407348632812e+02] -temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301635742188e+02, 2.892975769042969e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.9422509765625e+02, 2.948786010742188e+02, 2.951877136230469e+02, 2.954170532226562e+02, 2.955670776367188e+02, 2.956549987792969e+02, 2.957168884277344e+02, 2.957911682128906e+02, 2.959510803222656e+02, 2.962154846191406e+02, 2.965373840332031e+02, 2.968403015136719e+02, 2.970947265625e+02, 2.973243408203125e+02, 2.975263977050781e+02, 2.976948547363281e+02, 2.978182067871094e+02, 2.978943176269531e+02, 2.979436950683594e+02, 2.979971923828125e+02, 2.980797424316406e+02, 2.98181396484375e+02, 2.982959594726562e+02, 2.984185791015625e+02, 2.985416259765625e+02, 2.986548767089844e+02, 2.987629699707031e+02, 2.988792419433594e+02, 3.01014892578125e+02, 3.024351501464844e+02, 3.035817565917969e+02, 3.046459655761719e+02, 3.055906372070312e+02, 3.064290466308594e+02, 3.071982421875e+02, 3.079040222167969e+02, 3.085436096191406e+02, 3.091235961914062e+02, 3.096614074707031e+02, 3.101661682128906e+02, 3.106458129882812e+02, 3.111026611328125e+02, 3.115364990234375e+02, 3.119558410644531e+02, 3.12372314453125e+02, 3.128164367675781e+02, 3.133385620117188e+02, 3.139214172363281e+02, 3.124472351074219e+02, 3.131286315917969e+02, 3.141797180175781e+02, 3.145890502929688e+02, 3.13705322265625e+02, 3.147475891113281e+02, 3.146864929199219e+02, 3.142790222167969e+02, 3.153054809570312e+02, 3.142137451171875e+02, 3.14788330078125e+02, 3.15270751953125e+02, 3.143161010742188e+02, 3.152500305175781e+02, 3.141626281738281e+02, 3.143001403808594e+02, 3.149447021484375e+02, 3.133312683105469e+02, 3.139218139648438e+02, 3.147353210449219e+02, 3.1331591796875e+02, 3.137755737304688e+02, 3.121613159179688e+02, 3.11927001953125e+02, 3.118166198730469e+02, 3.11737060546875e+02, 3.116876220703125e+02, 3.117040405273438e+02, 3.117762145996094e+02, 3.118657836914062e+02, 3.119212951660156e+02, 3.119105834960938e+02, 3.118436889648438e+02, 3.117496948242188e+02, 3.116694641113281e+02, 3.116246643066406e+02, 3.116041870117188e+02, 3.115902099609375e+02, 3.115573425292969e+02, 3.114983520507812e+02, 3.114244689941406e+02, 3.113372802734375e+02, 3.112377014160156e+02, 3.1112646484375e+02, 3.110057067871094e+02, 3.108787536621094e+02, 3.107493591308594e+02] -conBoiRet.yVal=[0e+00, 4.212583005428314e-01, 4.565468430519104e-01, 4.838085770606995e-01, 5.058921575546265e-01, 5.233334898948669e-01, 5.365664958953857e-01, 6.597625017166138e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] -conEquSta.onBoi=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt deleted file mode 100644 index aceb6ad53b..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System5.txt +++ /dev/null @@ -1,22 +0,0 @@ -last-generated=2024-09-19 -statistics-initialization= -{ - "nonlinear": "5, 10, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "26", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.434832763671875e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.432107238769531e+02, 3.412689514160156e+02, 3.432171936035156e+02, 3.432071838378906e+02, 3.4320166015625e+02, 3.431986999511719e+02, 3.432062072753906e+02, 3.432010498046875e+02, 3.413011169433594e+02, 3.432116394042969e+02, 3.432052917480469e+02, 3.4327685546875e+02, 3.432153625488281e+02, 3.413323059082031e+02, 3.432182922363281e+02, 3.432119750976562e+02, 3.431321105957031e+02, 3.432158813476562e+02, 3.412737731933594e+02, 3.432198791503906e+02, 3.432103576660156e+02, 3.432146606445312e+02, 3.432135925292969e+02, 3.4314208984375e+02, 3.432171325683594e+02, 3.432020874023438e+02, 3.432201843261719e+02, 3.42871826171875e+02, 3.432225952148438e+02, 3.412811889648438e+02, 3.432481384277344e+02, 3.431516418457031e+02, 3.413154296875e+02, 3.415331420898438e+02, 3.431570129394531e+02, 3.413214416503906e+02, 3.413232421875e+02, 3.4316650390625e+02, 3.413245239257812e+02, 3.413251647949219e+02, 3.433076782226562e+02, 3.413253479003906e+02, 3.432435913085938e+02, 3.413251953125e+02, 3.413246459960938e+02, 3.431742858886719e+02, 3.413232727050781e+02, 3.432348022460938e+02, 3.413182373046875e+02, 3.413131103515625e+02, 3.413131103515625e+02, 3.432421264648438e+02, 3.413114013671875e+02, 3.434130249023438e+02, 3.413118896484375e+02, 3.413118896484375e+02, 3.41317626953125e+02, 3.41317626953125e+02, 3.41317626953125e+02, 3.413144836425781e+02, 3.413144836425781e+02, 3.432393798828125e+02, 3.413183288574219e+02, 3.413183288574219e+02, 3.413230895996094e+02, 3.413230895996094e+02, 3.413209228515625e+02, 3.413209228515625e+02, 3.418636779785156e+02, 3.413165283203125e+02, 3.432117919921875e+02, 3.413403625488281e+02, 3.413269653320312e+02, 3.43216552734375e+02, 3.413267822265625e+02, 3.432596435546875e+02, 3.434873657226562e+02, 3.413261413574219e+02, 3.432266845703125e+02, 3.413264465332031e+02, 3.413274230957031e+02, 3.431798400878906e+02, 3.413275756835938e+02, 3.413270568847656e+02, 3.431701354980469e+02, 3.413266906738281e+02, 3.413622131347656e+02, 3.432836608886719e+02, 3.413270568847656e+02, 3.432550964355469e+02, 3.434814453125e+02, 3.413267517089844e+02, 3.432408752441406e+02, 3.413265075683594e+02, 3.413261413574219e+02, 3.432283325195312e+02] -temSup.T=[2.931499938964844e+02, 3.036293029785156e+02, 3.1101025390625e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.213748168945312e+02, 3.229210205078125e+02, 3.197828063964844e+02, 3.218347473144531e+02, 3.231505737304688e+02, 3.194843444824219e+02, 3.215145263671875e+02, 3.227781982421875e+02, 3.233633117675781e+02, 3.205654602050781e+02, 3.22278564453125e+02, 3.185347595214844e+02, 3.207666625976562e+02, 3.226780090332031e+02, 3.193686828613281e+02, 3.218971862792969e+02, 3.175887756347656e+02, 3.210928344726562e+02, 3.225085754394531e+02, 3.201983032226562e+02, 3.224572448730469e+02, 3.190616760253906e+02, 3.217935180664062e+02, 3.176122741699219e+02, 3.211933898925781e+02, 3.173088073730469e+02, 3.207025756835938e+02, 3.223034973144531e+02, 3.20312255859375e+02, 3.214923706054688e+02, 3.181777648925781e+02, 3.136198120117188e+02, 3.179538879394531e+02, 3.173634643554688e+02, 3.125412902832031e+02, 3.168973693847656e+02, 3.164294128417969e+02, 3.114633178710938e+02, 3.160238952636719e+02, 3.156395874023438e+02, 3.111219482421875e+02, 3.15251220703125e+02, 3.137964477539062e+02, 3.148606567382812e+02, 3.144755554199219e+02, 3.098387451171875e+02, 3.140381774902344e+02, 3.124127807617188e+02, 3.133011169433594e+02, 3.123234252929688e+02, 3.123234252929688e+02, 3.111024780273438e+02, 3.113951416015625e+02, 3.075806579589844e+02, 3.105326843261719e+02, 3.105326843261719e+02, 3.101451416015625e+02, 3.101451416015625e+02, 3.101451416015625e+02, 3.100009155273438e+02, 3.100009155273438e+02, 3.067701416015625e+02, 3.100101318359375e+02, 3.100101318359375e+02, 3.1067626953125e+02, 3.1067626953125e+02, 3.113613586425781e+02, 3.113613586425781e+02, 3.112803649902344e+02, 3.113517150878906e+02, 3.091761779785156e+02, 3.147893676757812e+02, 3.154362182617188e+02, 3.107131958007812e+02, 3.154381713867188e+02, 3.14986083984375e+02, 3.130552673339844e+02, 3.1522998046875e+02, 3.132066040039062e+02, 3.15069091796875e+02, 3.151340637207031e+02, 3.116830139160156e+02, 3.153270568847656e+02, 3.154429626464844e+02, 3.108334045410156e+02, 3.15427001953125e+02, 3.153990173339844e+02, 3.109686889648438e+02, 3.15482177734375e+02, 3.147348937988281e+02, 3.129483337402344e+02, 3.157128601074219e+02, 3.142114868164062e+02, 3.158470458984375e+02, 3.159845886230469e+02, 3.1395166015625e+02] -temRet.T=[2.931499938964844e+02, 3.333218383789062e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.331719970703125e+02, 3.330797729492188e+02, 3.331796875e+02, 3.331683654785156e+02, 3.331630554199219e+02, 3.331756286621094e+02, 3.331673278808594e+02, 3.331625061035156e+02, 3.331213684082031e+02, 3.331729431152344e+02, 3.331667785644531e+02, 3.330426635742188e+02, 3.331762390136719e+02, 3.330877075195312e+02, 3.331846313476562e+02, 3.331731567382812e+02, 3.331069641113281e+02, 3.331767272949219e+02, 3.330840148925781e+02, 3.331806335449219e+02, 3.33171630859375e+02, 3.331859436035156e+02, 3.331747131347656e+02, 3.331281127929688e+02, 3.331780395507812e+02, 3.330380554199219e+02, 3.331809692382812e+02, 3.331681518554688e+02, 3.33183349609375e+02, 3.330904541015625e+02, 3.332095336914062e+02, 3.331208801269531e+02, 3.331210327148438e+02, 3.331462097167969e+02, 3.331207885742188e+02, 3.33127685546875e+02, 3.3313037109375e+02, 3.330989685058594e+02, 3.331325378417969e+02, 3.331344299316406e+02, 3.330813293457031e+02, 3.331361694335938e+02, 3.332266845703125e+02, 3.331374206542969e+02, 3.331385803222656e+02, 3.331060180664062e+02, 3.33139404296875e+02, 3.332242126464844e+02, 3.331390686035156e+02, 3.331380615234375e+02, 3.331380615234375e+02, 3.332298583984375e+02, 3.331373596191406e+02, 3.332115478515625e+02, 3.331369018554688e+02, 3.331369018554688e+02, 3.331404724121094e+02, 3.331404724121094e+02, 3.331404724121094e+02, 3.331390075683594e+02, 3.331390075683594e+02, 3.331656494140625e+02, 3.331409912109375e+02, 3.331409912109375e+02, 3.331437683105469e+02, 3.331437683105469e+02, 3.331425476074219e+02, 3.331425476074219e+02, 3.331925354003906e+02, 3.331404418945312e+02, 3.331940002441406e+02, 3.331416931152344e+02, 3.331355895996094e+02, 3.330783996582031e+02, 3.331355895996094e+02, 3.332304992675781e+02, 3.332329711914062e+02, 3.331363220214844e+02, 3.332164001464844e+02, 3.331370544433594e+02, 3.331370544433594e+02, 3.331669616699219e+02, 3.331362609863281e+02, 3.331356201171875e+02, 3.331059265136719e+02, 3.331356201171875e+02, 3.331392822265625e+02, 3.330787048339844e+02, 3.331354675292969e+02, 3.332292175292969e+02, 3.332362060546875e+02, 3.331343383789062e+02, 3.332232360839844e+02, 3.331337585449219e+02, 3.331330261230469e+02, 3.332156677246094e+02] -temRoo.T=[2.931499938964844e+02, 2.834371948242188e+02, 2.862301330566406e+02, 2.892975463867188e+02, 2.915568542480469e+02, 2.931440124511719e+02, 2.941587219238281e+02, 2.922658386230469e+02, 2.932417602539062e+02, 2.94072265625e+02, 2.921136779785156e+02, 2.928497619628906e+02, 2.936820373535156e+02, 2.934452514648438e+02, 2.924263916015625e+02, 2.93575927734375e+02, 2.927049255371094e+02, 2.928812866210938e+02, 2.941804809570312e+02, 2.924045104980469e+02, 2.937210083007812e+02, 2.923773803710938e+02, 2.93244140625e+02, 2.93449462890625e+02, 2.92740478515625e+02, 2.941199035644531e+02, 2.923981018066406e+02, 2.937544860839844e+02, 2.923780517578125e+02, 2.934642639160156e+02, 2.926152038574219e+02, 2.932439575195312e+02, 2.930661010742188e+02, 2.930980224609375e+02, 2.939833679199219e+02, 2.939597473144531e+02, 2.928506774902344e+02, 2.939415893554688e+02, 2.942293701171875e+02, 2.929274597167969e+02, 2.939508056640625e+02, 2.943716430664062e+02, 2.929440612792969e+02, 2.940947265625e+02, 2.942908325195312e+02, 2.929515380859375e+02, 2.943915710449219e+02, 2.938172302246094e+02, 2.934654235839844e+02, 2.946894226074219e+02, 2.930814208984375e+02, 2.9433154296875e+02, 2.939205017089844e+02, 2.940247802734375e+02, 2.944462280273438e+02, 2.940744323730469e+02, 2.941338195800781e+02, 2.944700317382812e+02, 2.931013793945312e+02, 2.950010375976562e+02, 2.937785339355469e+02, 2.944610595703125e+02, 2.945914001464844e+02, 2.932905883789062e+02, 2.950827941894531e+02, 2.941322937011719e+02, 2.933622131347656e+02, 2.948946533203125e+02, 2.934913024902344e+02, 2.949083251953125e+02, 2.937841186523438e+02, 2.946959838867188e+02, 2.940284118652344e+02, 2.942195129394531e+02, 2.94270751953125e+02, 2.936306762695312e+02, 2.9396240234375e+02, 2.943980102539062e+02, 2.929287414550781e+02, 2.942446899414062e+02, 2.940342407226562e+02, 2.930511169433594e+02, 2.944958190917969e+02, 2.935714111328125e+02, 2.934937438964844e+02, 2.946109924316406e+02, 2.931596984863281e+02, 2.938140563964844e+02, 2.945286254882812e+02, 2.929768981933594e+02, 2.941008911132812e+02, 2.942635498046875e+02, 2.929299926757812e+02, 2.943206176757812e+02, 2.938662109375e+02, 2.930386352539062e+02, 2.944496154785156e+02, 2.935947875976562e+02, 2.931981201171875e+02, 2.94506103515625e+02, 2.934295959472656e+02] -conBoiRet.yVal=[0e+00, 4.212594628334045e-01, 4.565480053424835e-01, 4.838098287582397e-01, 5.058930516242981e-01, 5.233339667320251e-01, 5.236923694610596e-01, 5.114201307296753e-01, 5.269390344619751e-01, 5.375866889953613e-01, 5.091941952705383e-01, 5.244570374488831e-01, 5.345306396484375e-01, 5.361558794975281e-01, 5.172062516212463e-01, 5.304576754570007e-01, 5.046308040618896e-01, 5.186852812767029e-01, 5.250994563102722e-01, 5.083945989608765e-01, 5.273821353912354e-01, 4.959457218647003e-01, 5.211418867111206e-01, 5.086243152618408e-01, 5.144302845001221e-01, 5.318449735641479e-01, 5.061728954315186e-01, 5.265560150146484e-01, 4.959854781627655e-01, 5.218941569328308e-01, 4.948271512985229e-01, 5.181629657745361e-01, 5.102766156196594e-01, 5.152435302734375e-01, 4.907311797142029e-01, 4.999020397663116e-01, 4.709380865097046e-01, 4.793302714824677e-01, 4.872170388698578e-01, 4.647347331047058e-01, 4.73406046628952e-01, 4.782120883464813e-01, 4.590348303318024e-01, 4.694218337535858e-01, 4.735685586929321e-01, 4.590467512607574e-01, 4.665768444538116e-01, 4.718035161495209e-01, 4.60739940404892e-01, 4.640884697437286e-01, 4.502870142459869e-01, 4.588809907436371e-01, 4.636670053005219e-01, 4.519980549812317e-01, 4.530890583992004e-01, 4.444915950298309e-01, 4.563360810279846e-01, 4.393826425075531e-01, 4.436482787132263e-01, 4.376770555973053e-01, 4.282426834106445e-01, 4.411533176898956e-01, 4.342884719371796e-01, 4.274236261844635e-01, 4.373604655265808e-01, 4.294531941413879e-01, 4.348052740097046e-01, 4.357894957065582e-01, 4.293039739131927e-01, 4.430703222751617e-01, 4.38592940568924e-01, 4.473768174648285e-01, 4.420123100280762e-01, 4.530364871025085e-01, 4.41187858581543e-01, 4.460897147655487e-01, 4.652161002159119e-01, 4.719216823577881e-01, 4.554951786994934e-01, 4.672927558422089e-01, 4.791069328784943e-01, 4.731855690479279e-01, 4.67265248298645e-01, 4.682562649250031e-01, 4.624899327754974e-01, 4.683427810668945e-01, 4.59576815366745e-01, 4.651550352573395e-01, 4.713089168071747e-01, 4.555608928203583e-01, 4.665520191192627e-01, 4.725323021411896e-01, 4.576119780540466e-01, 4.680196344852448e-01, 4.775474965572357e-01, 4.748954772949219e-01, 4.701705276966095e-01, 4.743029177188873e-01, 4.654714167118073e-01, 4.724253416061401e-01, 4.726920425891876e-01] -conEquSta.onBoi=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00] -conSysSta.onSys=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 1e+00] diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt deleted file mode 100644 index f28e82de20..0000000000 --- a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Examples_Tutorial_CDL_System6.txt +++ /dev/null @@ -1,23 +0,0 @@ -last-generated=2024-09-13 -statistics-initialization= -{ - "nonlinear": "5, 10, 0, 0", - "numerical Jacobians": "0" -} -statistics-simulation= -{ - "linear": "0, 0, 0, 0, 0, 0, 0", - "nonlinear": "1, 10, 0", - "number of continuous time states": "27", - "numerical Jacobians": "0" -} -time=[1.296e+06, 1.3824e+06] -senTOut.T=[2.681499938964844e+02, 2.680006103515625e+02, 2.678824462890625e+02, 2.677569885253906e+02, 2.675857238769531e+02, 2.673489074707031e+02, 2.670778503417969e+02, 2.667972106933594e+02, 2.665312194824219e+02, 2.6629833984375e+02, 2.661046142578125e+02, 2.659736938476562e+02, 2.659306640625e+02, 2.660298767089844e+02, 2.6639697265625e+02, 2.6689599609375e+02, 2.673535766601562e+02, 2.676152648925781e+02, 2.678009948730469e+02, 2.679618225097656e+02, 2.680851135253906e+02, 2.681575012207031e+02, 2.681536254882812e+02, 2.681101989746094e+02, 2.680885620117188e+02, 2.681499938964844e+02, 2.682830200195312e+02, 2.684293518066406e+02, 2.685801696777344e+02, 2.687266235351562e+02, 2.688496398925781e+02, 2.689453125e+02, 2.690469055175781e+02, 2.69188232421875e+02, 2.694860229492188e+02, 2.701334228515625e+02, 2.709511413574219e+02, 2.717348327636719e+02, 2.723293762207031e+02, 2.728933410644531e+02, 2.734419860839844e+02, 2.739486999511719e+02, 2.743910217285156e+02, 2.748066101074219e+02, 2.752138061523438e+02, 2.756160583496094e+02, 2.760163269042969e+02, 2.763985595703125e+02, 2.767682189941406e+02, 2.771453247070312e+02, 2.775499877929688e+02, 2.780906677246094e+02, 2.787913208007812e+02, 2.795452575683594e+02, 2.802459106445312e+02, 2.808594970703125e+02, 2.814520263671875e+02, 2.819882507324219e+02, 2.8243017578125e+02, 2.827425842285156e+02, 2.829331359863281e+02, 2.830432434082031e+02, 2.831151733398438e+02, 2.831843566894531e+02, 2.832323608398438e+02, 2.832435302734375e+02, 2.832067260742188e+02, 2.830890808105469e+02, 2.826735534667969e+02, 2.820996398925781e+02, 2.816126098632812e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.814500122070312e+02, 2.815123901367188e+02, 2.816962585449219e+02, 2.819049987792969e+02, 2.820390930175781e+02, 2.820126342773438e+02, 2.818557434082031e+02, 2.816533203125e+02, 2.81490234375e+02, 2.814390258789062e+02, 2.814595336914062e+02, 2.814947814941406e+02, 2.814945983886719e+02, 2.814153137207031e+02, 2.813063659667969e+02, 2.811892395019531e+02, 2.810629577636719e+02, 2.809265441894531e+02, 2.807815856933594e+02, 2.806335144042969e+02, 2.8048779296875e+02, 2.803500061035156e+02] -boi.T=[2.931499938964844e+02, 3.434833679199219e+02, 3.432331848144531e+02, 3.432239074707031e+02, 3.43217041015625e+02, 3.528956604003906e+02, 3.576978759765625e+02, 3.526015930175781e+02, 3.602760009765625e+02, 3.509493713378906e+02, 3.608724975585938e+02, 3.475165710449219e+02, 3.572972106933594e+02, 3.452764892578125e+02, 3.555399169921875e+02, 3.449403991699219e+02, 3.5786083984375e+02, 3.474909973144531e+02, 3.617934265136719e+02, 3.517604370117188e+02, 3.456141967773438e+02, 3.582394714355469e+02, 3.485054321289062e+02, 3.604246520996094e+02, 3.540896301269531e+02, 3.455384216308594e+02, 3.605604858398438e+02, 3.511347351074219e+02, 3.440261840820312e+02, 3.601527709960938e+02, 3.515797119140625e+02, 3.449183349609375e+02, 3.620229797363281e+02, 3.54238037109375e+02, 3.535430297851562e+02, 3.526867980957031e+02, 3.512720031738281e+02, 3.514784240722656e+02, 3.523876037597656e+02, 3.536019592285156e+02, 3.549525756835938e+02, 3.563995971679688e+02, 3.579619445800781e+02, 3.596748352050781e+02, 3.617506408691406e+02, 3.60470458984375e+02, 3.559532775878906e+02, 3.508215637207031e+02, 3.44654296875e+02, 3.469327392578125e+02, 3.512892456054688e+02, 3.554247436523438e+02, 3.594942016601562e+02, 3.558909912109375e+02, 3.466330871582031e+02, 3.546285400390625e+02, 3.61640380859375e+02, 3.472928466796875e+02, 3.571298522949219e+02, 3.440164184570312e+02, 3.547879028320312e+02, 3.50660888671875e+02, 3.528243408203125e+02, 3.604035949707031e+02, 3.512106018066406e+02, 3.614145812988281e+02, 3.494896545410156e+02, 3.59525634765625e+02, 3.456096496582031e+02, 3.542845764160156e+02, 3.612555541992188e+02, 3.444588012695312e+02, 3.529975280761719e+02, 3.599310607910156e+02, 3.433215026855469e+02, 3.517929382324219e+02, 3.618186340332031e+02, 3.601310119628906e+02, 3.603203125e+02, 3.617422485351562e+02, 3.611863098144531e+02, 3.574175415039062e+02, 3.532514038085938e+02, 3.489363098144531e+02, 3.44717529296875e+02, 3.452042236328125e+02, 3.477545776367188e+02, 3.501216125488281e+02, 3.523743286132812e+02, 3.544904174804688e+02, 3.565160217285156e+02, 3.58537841796875e+02, 3.606431579589844e+02, 3.6238623046875e+02, 3.589515991210938e+02, 3.558465270996094e+02, 3.530482177734375e+02, 3.505100708007812e+02, 3.4816259765625e+02, 3.459473266601562e+02, 3.432810974121094e+02] -temSup.T=[2.931499938964844e+02, 3.036293640136719e+02, 3.1101025390625e+02, 3.156801452636719e+02, 3.190068054199219e+02, 3.181846313476562e+02, 3.185993957519531e+02, 3.186600036621094e+02, 3.189481201171875e+02, 3.189635925292969e+02, 3.192712707519531e+02, 3.194983520507812e+02, 3.193892211914062e+02, 3.19415771484375e+02, 3.19120849609375e+02, 3.185459899902344e+02, 3.183751525878906e+02, 3.185407409667969e+02, 3.180388793945312e+02, 3.17714111328125e+02, 3.173306274414062e+02, 3.176727905273438e+02, 3.180802001953125e+02, 3.177732849121094e+02, 3.1754443359375e+02, 3.1768505859375e+02, 3.176912536621094e+02, 3.175335998535156e+02, 3.1697998046875e+02, 3.172467651367188e+02, 3.172243041992188e+02, 3.168643493652344e+02, 3.170609436035156e+02, 3.167634582519531e+02, 3.124078369140625e+02, 3.115540161132812e+02, 3.104700927734375e+02, 3.09622802734375e+02, 3.090401306152344e+02, 3.084966735839844e+02, 3.080016174316406e+02, 3.075909729003906e+02, 3.073069152832031e+02, 3.071300659179688e+02, 3.070762329101562e+02, 3.0696240234375e+02, 3.068350830078125e+02, 3.065877990722656e+02, 3.060327758789062e+02, 3.05546142578125e+02, 3.04848876953125e+02, 3.040871276855469e+02, 3.036488342285156e+02, 3.034918823242188e+02, 3.028552856445312e+02, 3.018724060058594e+02, 3.015412902832031e+02, 3.011158752441406e+02, 3.004388427734375e+02, 3.002837829589844e+02, 2.999995422363281e+02, 3.00043701171875e+02, 2.999257507324219e+02, 3.000049133300781e+02, 2.998818969726562e+02, 2.999306335449219e+02, 2.9996142578125e+02, 2.999478454589844e+02, 3.005303039550781e+02, 3.008473205566406e+02, 3.015175476074219e+02, 3.016997375488281e+02, 3.014815673828125e+02, 3.01451904296875e+02, 3.016185607910156e+02, 3.015406188964844e+02, 3.041492309570312e+02, 3.055158386230469e+02, 3.062835388183594e+02, 3.067785949707031e+02, 3.0699365234375e+02, 3.070588684082031e+02, 3.070314331054688e+02, 3.069041442871094e+02, 3.067091979980469e+02, 3.067263793945312e+02, 3.067084350585938e+02, 3.066339721679688e+02, 3.064884033203125e+02, 3.063646240234375e+02, 3.063402099609375e+02, 3.064747619628906e+02, 3.068072814941406e+02, 3.071504516601562e+02, 3.074424133300781e+02, 3.077146606445312e+02, 3.07935302734375e+02, 3.080780029296875e+02, 3.081256103515625e+02, 3.080643005371094e+02, 3.080347290039062e+02] -temRet.T=[2.931499938964844e+02, 3.333218994140625e+02, 3.331938171386719e+02, 3.331850891113281e+02, 3.331782531738281e+02, 3.439313049316406e+02, 3.521710815429688e+02, 3.435746459960938e+02, 3.540379943847656e+02, 3.419050598144531e+02, 3.516350402832031e+02, 3.381692199707031e+02, 3.480570373535156e+02, 3.359356079101562e+02, 3.463271789550781e+02, 3.358786010742188e+02, 3.488461608886719e+02, 3.382138671875e+02, 3.528662414550781e+02, 3.430753173828125e+02, 3.406753540039062e+02, 3.494378662109375e+02, 3.393665466308594e+02, 3.544672241210938e+02, 3.454693603515625e+02, 3.366733703613281e+02, 3.516876525878906e+02, 3.423803405761719e+02, 3.391623840332031e+02, 3.514603271484375e+02, 3.428921813964844e+02, 3.364239501953125e+02, 3.533380126953125e+02, 3.458009033203125e+02, 3.485299377441406e+02, 3.486251525878906e+02, 3.479062805175781e+02, 3.484880981445312e+02, 3.496084899902344e+02, 3.510238037109375e+02, 3.525453491210938e+02, 3.541170349121094e+02, 3.557326965332031e+02, 3.574421081542969e+02, 3.583822631835938e+02, 3.54431396484375e+02, 3.497737121582031e+02, 3.4457080078125e+02, 3.400477905273438e+02, 3.445541381835938e+02, 3.492832641601562e+02, 3.538783874511719e+02, 3.580769958496094e+02, 3.506819458007812e+02, 3.449400329589844e+02, 3.533544921875e+02, 3.604164428710938e+02, 3.460746459960938e+02, 3.561886291503906e+02, 3.43033935546875e+02, 3.53843994140625e+02, 3.461331176757812e+02, 3.518097534179688e+02, 3.558353271484375e+02, 3.501661682128906e+02, 3.604344177246094e+02, 3.484012756347656e+02, 3.585531311035156e+02, 3.44355224609375e+02, 3.53044189453125e+02, 3.599440002441406e+02, 3.430190734863281e+02, 3.516394958496094e+02, 3.587284851074219e+02, 3.419649047851562e+02, 3.503922729492188e+02, 3.612626953125e+02, 3.587860717773438e+02, 3.584432373046875e+02, 3.585357666015625e+02, 3.551532897949219e+02, 3.512120056152344e+02, 3.469041137695312e+02, 3.425299377441406e+02, 3.397169799804688e+02, 3.424599914550781e+02, 3.451210632324219e+02, 3.476570739746094e+02, 3.501051940917969e+02, 3.523716735839844e+02, 3.544588317871094e+02, 3.564186096191406e+02, 3.583626403808594e+02, 3.563072509765625e+02, 3.5266748046875e+02, 3.493633422851562e+02, 3.464041137695312e+02, 3.437685852050781e+02, 3.413943481445312e+02, 3.393263549804688e+02, 3.402254333496094e+02] -temRoo.T=[2.931499938964844e+02, 2.834371643066406e+02, 2.862301330566406e+02, 2.892975769042969e+02, 2.91556884765625e+02, 2.924832458496094e+02, 2.924545288085938e+02, 2.924683837890625e+02, 2.924432373046875e+02, 2.924492492675781e+02, 2.924227600097656e+02, 2.924105529785156e+02, 2.924169616699219e+02, 2.923835754394531e+02, 2.924335021972656e+02, 2.92436279296875e+02, 2.924851379394531e+02, 2.92466064453125e+02, 2.92510986328125e+02, 2.925418090820312e+02, 2.925221252441406e+02, 2.925343627929688e+02, 2.925024719238281e+02, 2.925279846191406e+02, 2.925511169433594e+02, 2.925020446777344e+02, 2.925323486328125e+02, 2.925522766113281e+02, 2.925442810058594e+02, 2.925641479492188e+02, 2.925733642578125e+02, 2.925527038574219e+02, 2.925766296386719e+02, 2.926077575683594e+02, 2.926939697265625e+02, 2.928887329101562e+02, 2.929942016601562e+02, 2.930628662109375e+02, 2.931092224121094e+02, 2.931529235839844e+02, 2.931947021484375e+02, 2.932321166992188e+02, 2.932615661621094e+02, 2.932836303710938e+02, 2.932965393066406e+02, 2.933004455566406e+02, 2.932983093261719e+02, 2.9329638671875e+02, 2.933058471679688e+02, 2.933336181640625e+02, 2.933860168457031e+02, 2.934620361328125e+02, 2.9352392578125e+02, 2.935338439941406e+02, 2.935364685058594e+02, 2.936015930175781e+02, 2.936659240722656e+02, 2.936662292480469e+02, 2.937183837890625e+02, 2.93729248046875e+02, 2.937367858886719e+02, 2.93751220703125e+02, 2.937371520996094e+02, 2.937605590820312e+02, 2.9374072265625e+02, 2.9376611328125e+02, 2.937378234863281e+02, 2.937599182128906e+02, 2.937034606933594e+02, 2.936749572753906e+02, 2.936654968261719e+02, 2.936250610351562e+02, 2.936240539550781e+02, 2.936634216308594e+02, 2.936337585449219e+02, 2.936203308105469e+02, 2.934090576171875e+02, 2.933837890625e+02, 2.933442687988281e+02, 2.933167724609375e+02, 2.93299072265625e+02, 2.932864074707031e+02, 2.932745056152344e+02, 2.932637939453125e+02, 2.932545471191406e+02, 2.932497253417969e+02, 2.93251953125e+02, 2.932626342773438e+02, 2.932821960449219e+02, 2.933033752441406e+02, 2.933187866210938e+02, 2.933218994140625e+02, 2.933094177246094e+02, 2.932885131835938e+02, 2.932628479003906e+02, 2.932356872558594e+02, 2.932101135253906e+02, 2.931886291503906e+02, 2.931727905273438e+02, 2.931629943847656e+02, 2.931585388183594e+02] -conBoiRet.yVal=[0e+00, 4.212586879730225e-01, 4.565469026565552e-01, 4.838089942932129e-01, 5.058921575546265e-01, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] -conRadSup.yVal=[1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 8.280595541000366e-01, 7.872971296310425e-01, 8.308314681053162e-01, 7.737717032432556e-01, 8.45884382724762e-01, 7.899181246757507e-01, 8.887307047843933e-01, 8.119707107543945e-01, 9.11929726600647e-01, 8.20879340171814e-01, 8.946013450622559e-01, 7.933893203735352e-01, 8.787143230438232e-01, 7.640860676765442e-01, 8.136985301971436e-01, 8.346748352050781e-01, 7.783265709877014e-01, 8.606112599372864e-01, 7.530050873756409e-01, 7.947607636451721e-01, 8.739627599716187e-01, 7.674879431724548e-01, 8.19435715675354e-01, 8.412542939186096e-01, 7.598286271095276e-01, 8.11187207698822e-01, 8.60146701335907e-01, 7.479205131530762e-01, 7.793366312980652e-01, 7.707185745239258e-01, 7.100793719291687e-01, 6.651185154914856e-01, 6.312261819839478e-01, 6.057806611061096e-01, 5.786939859390259e-01, 5.525615811347961e-01, 5.297839641571045e-01, 5.137857794761658e-01, 5.052066445350647e-01, 5.072216391563416e-01, 5.342182517051697e-01, 5.682747364044189e-01, 6.019164323806763e-01, 6.211527585983276e-01, 5.796337723731995e-01, 5.148346424102783e-01, 4.289049804210663e-01, 3.828279078006744e-01, 4.464203715324402e-01, 4.837310612201691e-01, 3.770953714847565e-01, 3.231187760829926e-01, 3.936016857624054e-01, 2.861414849758148e-01, 3.561140298843384e-01, 2.963634729385376e-01, 3.350069522857666e-01, 3.215218186378479e-01, 3.020563423633575e-01, 3.348166346549988e-01, 2.826885282993317e-01, 3.521836698055267e-01, 2.805283963680267e-01, 4.067943096160889e-01, 3.671534657478333e-01, 3.562982380390167e-01, 4.50657069683075e-01, 3.975051045417786e-01, 3.344292342662811e-01, 4.426386952400208e-01, 4.100818932056427e-01, 1.92404180765152e-01, 3.860281109809875e-01, 4.618188738822937e-01, 4.974184334278107e-01, 5.309092998504639e-01, 5.643199682235718e-01, 5.983712077140808e-01, 6.284129619598389e-01, 6.471862196922302e-01, 6.299030184745789e-01, 6.065564751625061e-01, 5.782372355461121e-01, 5.462060570716858e-01, 5.177878141403198e-01, 4.990358650684357e-01, 4.948543012142181e-01, 5.048975348472595e-01, 5.306417942047119e-01, 5.654724836349487e-01, 5.986533761024475e-01, 6.277169585227966e-01, 6.511507034301758e-01, 6.683641076087952e-01, 6.80217981338501e-01, 6.74770712852478e-01] -conEquSta.onBoi=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 0e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 0e+00] -conSysSta.onSys=[0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00] diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos deleted file mode 100644 index 82ae145a12..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/BoilerReturn.mos +++ /dev/null @@ -1,5 +0,0 @@ -// Script generated by Dymola Wed Feb 19 14:48:31 2020 -// Plot commands -simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.BoilerReturn", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="BoilerReturn"); -createPlot(id=2, position={15, 15, 542, 503}, y={"conBoiRet.TSet", "conBoiRet.TRet"}, range={0.0, 4000.0, 0.0, 80.0}, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); -createPlot(id=2, position={15, 15, 542, 249}, y={"conBoiRet.yVal"}, range={0.0, 4000.0, -1.0, 2.0}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos deleted file mode 100644 index 4aac1295ad..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/EquipmentOnOff.mos +++ /dev/null @@ -1,3 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.EquipmentOnOff", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="EquipmentOnOff"); -createPlot(id=2, position={15, 15, 793, 722}, y={"conEquSta.TBoi"}, range={0.0, 4000.0, 50.0, 110.0}, grid=true, colors={{28,108,200}}, displayUnits={"degC"}); -createPlot(id=2, position={15, 15, 793, 359}, y={"conEquSta.onSys", "conEquSta.onPum", "conEquSta.onBoi"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {28,108,200}, {28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos deleted file mode 100644 index 4695d891e4..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/RadiatorSupply.mos +++ /dev/null @@ -1,3 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.RadiatorSupply", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="RadiatorSupply"); -createPlot(id=2, position={15, 15, 542, 517}, y={"conRadSup.TRoo", "conRadSup.TSup"}, range={0.0, 4000.0, 0.0, 60.0}, grid=true, colors={{28,108,200}, {238,46,47}}, displayUnits={"degC", "degC"}); -createPlot(id=2, position={15, 15, 542, 256}, y={"conRadSup.yVal"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos deleted file mode 100644 index 4b448c5ebd..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/Controls/Validation/SystemOnOff.mos +++ /dev/null @@ -1,3 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.Controls.Validation.SystemOnOff", stopTime=3600, method="Cvode", tolerance=1e-06, resultFile="SystemOnOff"); -createPlot(id=3, position={75, 75, 758, 583}, y={"conSysSta.TRoo", "conSysSta.TRooSet", "conSysSta.TOut", "conSysSta.TOutLow"}, range={0.0, 4000.0, 10.0, 25.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}}, displayUnits={"degC", "degC", "degC", "degC"}); -createPlot(id=3, position={75, 75, 758, 289}, y={"conSysSta.onSys"}, range={0.0, 4000.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos deleted file mode 100644 index 17ad1282fb..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System1.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System1", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem1"); -createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos deleted file mode 100644 index d083bd6b4d..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System2.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System2", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem2"); -createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos deleted file mode 100644 index f0c4423da1..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System3.mos +++ /dev/null @@ -1,2 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System3", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem3"); -createPlot(id=1, position={35, 35, 912, 543}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={0.0, 2.0, -20.0, 50.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="h", displayUnits={"degC", "degC", "degC", "degC", "degC"}); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos deleted file mode 100644 index fb738b6520..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System4.mos +++ /dev/null @@ -1,4 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System4", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem4"); -createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={15.0, 16.0, -50.0, 100.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); -createPlot(id=2, position={35, 35, 1209, 303}, y={"conBoiRet.yVal"}, range={15.0, 16.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="h"); -createPlot(id=2, position={35, 35, 1209, 302}, y={"conEquSta.onBoi"}, range={15.0, 16.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}}, timeUnit="h"); diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos deleted file mode 100644 index f91eb5d105..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System5.mos +++ /dev/null @@ -1,5 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System5", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem5"); -createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, autoscale=true, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, range2={0.20000000000000004, 0.9000000000000001}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); -createPlot(id=2, position={35, 35, 1209, 216}, y={"conBoiRet.yVal"}, range={360.0, 384.0, -0.5, 1.0}, grid=true, subPlot=2, colors={{28,108,200}}, timeUnit="h"); -createPlot(id=2, position={35, 35, 1209, 281}, y={"conEquSta.onBoi", "conSysSta.onSys"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}, timeUnit="h"); - diff --git a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos b/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos deleted file mode 100644 index b44644b3dd..0000000000 --- a/IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/CDL/System6.mos +++ /dev/null @@ -1,5 +0,0 @@ -simulateModel("IBPSA.Examples.Tutorial.CDL.System6", startTime=1296000, stopTime=1382400, method="Cvode", tolerance=1e-06, resultFile="ControlDescriptionLanguageSystem6"); -createPlot(id=2, position={35, 35, 1209, 915}, y={"senTOut.T", "boi.T", "temSup.T", "temRet.T", "temRoo.T"}, range={15.0, 16.0, -50.0, 100.0}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}, timeUnit="d", displayUnits={"degC", "degC", "degC", "degC", "degC"}); -createPlot(id=2, position={35, 35, 1209, 303}, y={"conBoiRet.yVal", "conRadSup.yVal"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=2, colors={{28,108,200}, {238,46,47}}, timeUnit="h"); -createPlot(id=2, position={35, 35, 1209, 302}, y={"conEquSta.onBoi", "conSysSta.onSys"}, range={360.0, 384.0, -0.5, 1.5}, grid=true, subPlot=3, colors={{28,108,200}, {28,108,200}}, timeUnit="h"); - From 4b30907f9fd9e5ac2ec91b78024a96382e778649 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Sat, 14 Dec 2024 00:29:03 +0000 Subject: [PATCH 13/21] Corrected package name in documentation --- IBPSA/Airflow/Multizone/BaseClasses/TwoWayFlowElement.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IBPSA/Airflow/Multizone/BaseClasses/TwoWayFlowElement.mo b/IBPSA/Airflow/Multizone/BaseClasses/TwoWayFlowElement.mo index f784b173ac..e0e2c8e1db 100644 --- a/IBPSA/Airflow/Multizone/BaseClasses/TwoWayFlowElement.mo +++ b/IBPSA/Airflow/Multizone/BaseClasses/TwoWayFlowElement.mo @@ -169,7 +169,7 @@ This is for February 24, 2015 by Michael Wetter:
Changed model to use -Buildings.Utilities.Psychrometrics.Functions.density_pTX +IBPSA.Utilities.Psychrometrics.Functions.density_pTX for the density computation as From 71070d8af7244996c717c496e41175b374dada95 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Sat, 14 Dec 2024 00:31:49 +0000 Subject: [PATCH 14/21] Added IBPSA/Utilities/Math/Functions/round.mo This function is used in various CDL Elementary Blocks --- ...tilities_Math_Functions_Examples_Round.txt | 13 ++++ .../Math/Functions/Examples/Round.mos | 2 + .../Math/Functions/Examples/Round.mo | 35 +++++++++++ IBPSA/Utilities/Math/Functions/round.mo | 63 +++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Utilities_Math_Functions_Examples_Round.txt create mode 100644 IBPSA/Resources/Scripts/Dymola/Utilities/Math/Functions/Examples/Round.mos create mode 100644 IBPSA/Utilities/Math/Functions/Examples/Round.mo create mode 100644 IBPSA/Utilities/Math/Functions/round.mo diff --git a/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Utilities_Math_Functions_Examples_Round.txt b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Utilities_Math_Functions_Examples_Round.txt new file mode 100644 index 0000000000..d74ee1a8c1 --- /dev/null +++ b/IBPSA/Resources/ReferenceResults/Dymola/IBPSA_Utilities_Math_Functions_Examples_Round.txt @@ -0,0 +1,13 @@ +last-generated=2020-10-19 +statistics-simulation= +{ + "linear": " ", + "nonlinear": " ", + "numerical Jacobians": "0" +} +time=[-2e+00, 2e+00] +ym2=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +ym1=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +y=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +y1=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] +y2=[-2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -2e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, -1e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 1e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00, 2e+00] diff --git a/IBPSA/Resources/Scripts/Dymola/Utilities/Math/Functions/Examples/Round.mos b/IBPSA/Resources/Scripts/Dymola/Utilities/Math/Functions/Examples/Round.mos new file mode 100644 index 0000000000..b378d70167 --- /dev/null +++ b/IBPSA/Resources/Scripts/Dymola/Utilities/Math/Functions/Examples/Round.mos @@ -0,0 +1,2 @@ +simulateModel("IBPSA.Utilities.Math.Functions.Examples.Round", startTime=-2, stopTime=2, method="Cvode", tolerance=1e-06, resultFile="Round"); +createPlot(id=1, position={35, 35, 1536, 906}, y={"ym2", "ym1", "y", "y1", "y2"}, range={-2.0, 2.0, -2.5, 2.5}, grid=true, colors={{28,108,200}, {238,46,47}, {0,140,72}, {217,67,180}, {0,0,0}}); diff --git a/IBPSA/Utilities/Math/Functions/Examples/Round.mo b/IBPSA/Utilities/Math/Functions/Examples/Round.mo new file mode 100644 index 0000000000..3b860d0d87 --- /dev/null +++ b/IBPSA/Utilities/Math/Functions/Examples/Round.mo @@ -0,0 +1,35 @@ +within IBPSA.Utilities.Math.Functions.Examples; +model Round "Example for round function" + extends Modelica.Icons.Example; + Real ym2 "Function value"; + Real ym1 "Function value"; + Real y "Function value"; + Real y1 "Function value"; + Real y2 "Function value"; +equation + ym2=IBPSA.Utilities.Math.Functions.round(x=time*100, n=-2)/100; + ym1=IBPSA.Utilities.Math.Functions.round(x=time*10, n=-1)/10; + y=IBPSA.Utilities.Math.Functions.round(x=time, n=0); + y1=IBPSA.Utilities.Math.Functions.round(x=time/10, n=1)*10; + y2=IBPSA.Utilities.Math.Functions.round(x=time/100, n=2)*100; + annotation(experiment(StartTime=-2,Tolerance=1e-6, StopTime=2.0), +__Dymola_Commands(file="modelica://IBPSA/Resources/Scripts/Dymola/Utilities/Math/Functions/Examples/Round.mos" + "Simulate and plot"), +Documentation(info=" +

+This example tests the implementation of + +IBPSA.Utilities.Math.Functions.round +for different values of n. +Arguments and return values are scale to simplify the show that the scaling for the rounding +is implemented correctly. +

+", revisions=" +
    +
  • +October 19, 2020, by Michael Wetter:
    +First implementation. +
  • +
+")); +end Round; diff --git a/IBPSA/Utilities/Math/Functions/round.mo b/IBPSA/Utilities/Math/Functions/round.mo new file mode 100644 index 0000000000..6c0a6f90af --- /dev/null +++ b/IBPSA/Utilities/Math/Functions/round.mo @@ -0,0 +1,63 @@ +within IBPSA.Utilities.Math.Functions; +function round "Round real number to specified digits" + extends Modelica.Icons.Function; + + input Real x "Argument to be rounded"; + input Integer n "Number of digits being round to"; + output Real y "Connector of Real output signal"; + +protected + Real fac = 10^n "Factor used for rounding"; + +algorithm + y := if (x>0) then floor(x*fac + 0.5)/fac else ceil(x*fac - 0.5)/fac; + +annotation ( +Documentation(info=" +

+Function that outputs the input after rounding it to n digits. +

+

+For example, +

+
    +
  • +set n = 0 to round to the nearest integer, +
  • +
  • +set n = 1 to round to the next decimal point, and +
  • +
  • +set n = -1 to round to the next multiple of ten. +
  • +
+

+Hence, the function outputs +

+
+    y = floor(x*(10^n) + 0.5)/(10^n)  for  x > 0,
+    y = ceil( x*(10^n) - 0.5)/(10^n)  for  x < 0.
+
+

+To use this function as a block, use + +Buildings.Controls.OBC.CDL.Reals.Round. +

+", revisions=" +
    +
  • +August 30, 2024, by Michael Wetter:
    +Removed wrong parameter declaration on a protected variable which causes an error in +Dymola 2025x beta1.
    +This is for +Buildings, #3978. +
  • +
  • +March 2, 2020, by Michael Wetter:
    +First implementation.
    +This is for +Buildings, #2170. +
  • +
+")); +end round; From 57153d870aff66c3c192526507b5bbf5e5752654 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 13 Dec 2024 16:33:02 -0800 Subject: [PATCH 15/21] Updated package.order --- IBPSA/Utilities/Math/Functions/Examples/package.order | 1 + IBPSA/Utilities/Math/Functions/package.order | 1 + IBPSA/failed-simulator-dymola.log | 2 -- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 IBPSA/failed-simulator-dymola.log diff --git a/IBPSA/Utilities/Math/Functions/Examples/package.order b/IBPSA/Utilities/Math/Functions/Examples/package.order index a073d84717..0b7ed0c40e 100644 --- a/IBPSA/Utilities/Math/Functions/Examples/package.order +++ b/IBPSA/Utilities/Math/Functions/Examples/package.order @@ -19,6 +19,7 @@ RegNonZeroPower RegNonZeroPowerDerivativeCheck RegNonZeroPowerDerivative_2_Check RegStep +Round SmoothExponentialDerivativeCheck SmoothHeavisideDerivatives SmoothInterpolation diff --git a/IBPSA/Utilities/Math/Functions/package.order b/IBPSA/Utilities/Math/Functions/package.order index b809973459..d668c299cf 100644 --- a/IBPSA/Utilities/Math/Functions/package.order +++ b/IBPSA/Utilities/Math/Functions/package.order @@ -21,6 +21,7 @@ quadraticLinear quinticHermite regNonZeroPower regStep +round smoothExponential smoothHeaviside smoothInterpolation diff --git a/IBPSA/failed-simulator-dymola.log b/IBPSA/failed-simulator-dymola.log deleted file mode 100644 index 3d43ef277d..0000000000 --- a/IBPSA/failed-simulator-dymola.log +++ /dev/null @@ -1,2 +0,0 @@ -Automatically generated BuildingsPy dump file for failed translations. - From 22198216674a0beca6f8018b44acd586856baaf2 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 12:52:31 -0800 Subject: [PATCH 16/21] Replaced reference to Buildings --- IBPSA/Utilities/Math/Functions/round.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IBPSA/Utilities/Math/Functions/round.mo b/IBPSA/Utilities/Math/Functions/round.mo index 6c0a6f90af..0959621f08 100644 --- a/IBPSA/Utilities/Math/Functions/round.mo +++ b/IBPSA/Utilities/Math/Functions/round.mo @@ -41,7 +41,7 @@ Hence, the function outputs

To use this function as a block, use -Buildings.Controls.OBC.CDL.Reals.Round. +IBPSA.Controls.OBC.CDL.Reals.Round.

", revisions="
    From dd4dcbb78713ad07fce1363c13fb4c5e9a707104 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 14:12:03 -0800 Subject: [PATCH 17/21] Added user guide --- IBPSA/Controls/OBC/UsersGuide.mo | 248 ++++++++++++++++++ IBPSA/Controls/OBC/package.order | 1 + .../Images/OBC/OBC_logo-only_150dpi.png | Bin 0 -> 82520 bytes .../Images/OBC/OBC_stacked_150dpi_small.png | Bin 0 -> 49807 bytes 4 files changed, 249 insertions(+) create mode 100644 IBPSA/Controls/OBC/UsersGuide.mo create mode 100644 IBPSA/Resources/Images/OBC/OBC_logo-only_150dpi.png create mode 100644 IBPSA/Resources/Images/OBC/OBC_stacked_150dpi_small.png diff --git a/IBPSA/Controls/OBC/UsersGuide.mo b/IBPSA/Controls/OBC/UsersGuide.mo new file mode 100644 index 0000000000..3bee317dac --- /dev/null +++ b/IBPSA/Controls/OBC/UsersGuide.mo @@ -0,0 +1,248 @@ +within IBPSA.Controls.OBC; +package UsersGuide "User's Guide" + extends Modelica.Icons.Information; + + class Conventions "Naming conventions in OBC package" + extends Modelica.Icons.Information; + + annotation (preferredView="info", + defaultComponentName="useGui", + Documentation(info=" +

    +The IBPSA.Controls.OBC package follows the naming conventions of +the Buildings Library, +see IBPSA.UsersGuide.Conventions. +The table below shows some examples of commonly used names. +Note that the names are generally composed as follows: +

    +
      +
    • +

      If needed to understand the context, a prefix u for input or y for output may be used.

      +
    • +
    • +

      Next, the quantity is used, such as TOut or TZonHea.

      +
    • +
    • +

      Finally, as a postfix a qualifier may be added, such as Set for set point, Min for minimum, +or Coo for cooling. +

      +
    • +
    +

    +Generally, we strive for short names, and therefore often prefix or postfix are omitted if +the type of the variable is clear from the context. +For example, a room temperature thermostat may simply use T as an input +as it is clear that this will be the room temperature. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Instance names
    NameComments
    TOut (hOut)Outdoor air temperature (enthalpy)
    TZonHeaSet (TZonCooSet)Zone heating (cooling) set point temperature
    VDis_flowMeasured discharge airflow rate
    dpBuiBuilding static pressure difference, relative to ambient
    uOpeModZone group operating mode
    uResReqNumber of reset requests
    uSupFanCurrent supply fan enabling status, true: fan is enabled
    uSupFanSpeCurrent supply fan speed
    uDamMeasured damper position
    uHea (uCoo)Heating (cooling) loop signal
    yPosMin (yPosMax)Minimum (maximum) position
    yHeaCoi (yCooCoi)Heating (cooling) coil control signal
    uChiIsoValChiller condenser water isolation valve status
    dpChiWat_remoteChilled water differntial statis pressure from remote sensor
    TChiWatRetChilled water return temperature
    VChiWat_flowMeasured chilled water volume flow rate
    uHeaPreConChiller head pressure control loop signal from chiller controller
    yChiPumSpeChilled water pump speed setpoint
    yChiChiller status setpoint
    yMinValPosMinimum valve position setpoint
    Parameter names
    Name Comments
    use_TMixSet to true if mixed air temperature measurement is used
    have_occSen (have_winSen)Set to true if the zone has occupancy (window) sensor
    AFloArea of the zone
    VDisHeaSetMax_flow (VDisCooSetMax_flow)Zone maximum heating (cooling) airflow set point
    VOutPerAre_flow (VOutPerPer_flow)Outdoor airflow rate per unit area (person)
    V_flow_nominalNominal volume flow rate
    VOutMin_flowCalculated minimum outdoor airflow rate at design stage
    pMinSet (pMaxSet)Minimum (maximum) pressure set point for fan speed control
    TSupSetMin (TSupSetMax)Lowest (Highest) cooling supply air temperature
    TOccHeaSet (TUnoHeaSet)Zone occupied (unoccupied) heating set point
    TZonCooMax (TZonCooMin)Maximum (minimum) zone cooling set point when cooling is on
    retDamPhyPosMax (outDamPhyPosMax)Physically fixed maximum position of the return (outdoor) air damper
    samplePeriodSample period
    zonDisEffHea (zonDisEffCoo)Zone air distribution effectiveness during heating (cooling)
    kCooGain for cooling control loop signal
    TiCooTime constant of integrator block for cooling control loop signal
    TdCooTime constant of derivative block for cooling control loop signal
    nChiTotal number of chillers
    have_parChiTrue: the plant has parallel chillers
    have_heaChiWatPumTrue: the plant has headed chilled water pumps
    have_fixSpeConWatPumTrue: the plant has fixed speed condenser water pumps
    need_reduceChillerDemandTrue: the plant needs to limit chiller demand when chiller staging
    minChiLifMinimum allowable lift at minimum load for chiller
    TChiWatSupMinMinimum chilled water supply temperature
    dpChiWatPumMinMinimum chilled water pump differential static pressure
    lift_minChiller minimum lift
    +
    +"), + Icon(graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon(origin={-4.167,-15}, + fillColor={255,255,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-15.833,20.0},{-15.833,30.0},{14.167,40.0},{24.167,20.0},{4.167,-30.0},{14.167,-30.0},{24.167,-30.0},{24.167,-40.0},{-5.833,-50.0},{-15.833,-30.0},{4.167,20.0},{-5.833,20.0}}, + smooth=Smooth.Bezier), + Ellipse(origin={7.5,56.5}, + fillColor={255,255,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-12.5,-12.5},{12.5,12.5}})})); + end Conventions; + annotation (preferredView="info", + defaultComponentName="useGui", + Documentation(info=" +\"OBC +

    +The package IBPSA.Controls.OBC +contains the Control Description Language (CDL) and models for building control that +are implemented using CDL. +The Control Description Language is a language that is being standardized through +ASHRAE Standard 231P. +It has been developed to digitalized the design, implementation and commissioning +of building control sequences in format that is independent of any particular +control product line (Wetter et al., 2018). +For a description of the process for digitalizing control delivery, +see Wetter et al. (2022). +

    + +

    +The package also contains models for unit conversions, +IBPSA.Controls.OBC.UnitConversions, +and utilities models, such as +IBPSA.Controls.OBC.Utilities.OptimalStart, +which output the optimal start time for an HVAC system. +

    +

    +The Control Description Language (CDL) can be found in +IBPSA.Controls.OBC.CDL +and its specification is at obc.lbl.gov. +

    +

    References

    +
      +
    • +Michael Wetter, Milica Grahovac and Jianjun Hu.
      +Control Description Language.
      +1st American Modelica Conference, Cambridge, MA, USA, August 2018.
      +https://doi.org/10.3384/ecp1815417. +
    • +
    • +Michael Wetter, Paul Ehrlich, Antoine Gautier, Milica Grahovac, Philip Haves, Jianjun Hu, Anand Prakash, Dave Robin and Kun Zhang.
      +OpenBuildingControl: Digitizing the control delivery from building energy modeling to specification, implementation and formal verification.
      +Energy, Volume 238, Part A, January 2022.
      +https://doi.org/10.1016/j.energy.2021.121501. +
    • +
    +"), + Icon(graphics={ + Ellipse( + lineColor={75,138,73}, + fillColor={75,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-100,-100},{100,100}}), + Polygon(origin={-4.167,-15}, + fillColor={255,255,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-15.833,20.0},{-15.833,30.0},{14.167,40.0},{24.167,20.0},{4.167,-30.0},{14.167,-30.0},{24.167,-30.0},{24.167,-40.0},{-5.833,-50.0},{-15.833,-30.0},{4.167,20.0},{-5.833,20.0}}, + smooth=Smooth.Bezier), + Ellipse(origin={7.5,56.5}, + fillColor={255,255,255}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + extent={{-12.5,-12.5},{12.5,12.5}})})); +end UsersGuide; diff --git a/IBPSA/Controls/OBC/package.order b/IBPSA/Controls/OBC/package.order index d59809a8a9..9274f7c5a3 100644 --- a/IBPSA/Controls/OBC/package.order +++ b/IBPSA/Controls/OBC/package.order @@ -1,2 +1,3 @@ +UsersGuide CDL Utilities diff --git a/IBPSA/Resources/Images/OBC/OBC_logo-only_150dpi.png b/IBPSA/Resources/Images/OBC/OBC_logo-only_150dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..b1dc7d8956aa74a4fedd45f9365036393c2677aa GIT binary patch literal 82520 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 z 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 D9kKfM literal 0 HcmV?d00001 From d5daa88a4beeb8cc0ebcc62b9ab28e19ff641c42 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 14:18:02 -0800 Subject: [PATCH 18/21] Corrected typo --- IBPSA/Controls/OBC/Utilities/OptimalStart.mo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IBPSA/Controls/OBC/Utilities/OptimalStart.mo b/IBPSA/Controls/OBC/Utilities/OptimalStart.mo index 5846edbc08..738cb9b694 100644 --- a/IBPSA/Controls/OBC/Utilities/OptimalStart.mo +++ b/IBPSA/Controls/OBC/Utilities/OptimalStart.mo @@ -257,7 +257,7 @@ for the calculation.

    The algorithm is as follows:

    -
    Step 1: Calculate temeperature slope TSlo
    +
    Step 1: Calculate temperature slope TSlo

    Once the HVAC system is started, a timer records the time duration Δt for the zone temperature to reach the From a7a29c2f189acc79087cc322b10594d986fb6a17 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 14:18:12 -0800 Subject: [PATCH 19/21] Formatted text --- IBPSA/Controls/OBC/UsersGuide.mo | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IBPSA/Controls/OBC/UsersGuide.mo b/IBPSA/Controls/OBC/UsersGuide.mo index 3bee317dac..671e26617c 100644 --- a/IBPSA/Controls/OBC/UsersGuide.mo +++ b/IBPSA/Controls/OBC/UsersGuide.mo @@ -181,7 +181,8 @@ The package contains control sequences for

    • HVAC airside system control -IBPSA.Controls.OBC.ASHRAE.G36, + +IBPSA.Controls.OBC.ASHRAE.G36,
    • radiant heating and cooling systems From 27c793980a801cff8b3ec75bf7db4272629da512 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 14:25:29 -0800 Subject: [PATCH 20/21] Revised users guide --- IBPSA/Controls/OBC/UsersGuide.mo | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IBPSA/Controls/OBC/UsersGuide.mo b/IBPSA/Controls/OBC/UsersGuide.mo index 671e26617c..0592bb6ce6 100644 --- a/IBPSA/Controls/OBC/UsersGuide.mo +++ b/IBPSA/Controls/OBC/UsersGuide.mo @@ -10,7 +10,7 @@ package UsersGuide "User's Guide" Documentation(info="

      The IBPSA.Controls.OBC package follows the naming conventions of -the Buildings Library, +the IBPSA Library, see IBPSA.UsersGuide.Conventions. The table below shows some examples of commonly used names. Note that the names are generally composed as follows: @@ -163,7 +163,7 @@ contains the Control Description Language (CDL) and models for building control are implemented using CDL. The Control Description Language is a language that is being standardized through ASHRAE Standard 231P. -It has been developed to digitalized the design, implementation and commissioning +It has been developed to digitalize the design, implementation and commissioning of building control sequences in format that is independent of any particular control product line (Wetter et al., 2018). For a description of the process for digitalizing control delivery, @@ -176,7 +176,7 @@ have been developed in the OpenBuildingControl project, see obc.lbl.gov.

      -The package contains control sequences for +This package contains control sequences for

      • From f7ad86f1c42eac84098f6fa50905a285d111a5e3 Mon Sep 17 00:00:00 2001 From: Michael Wetter Date: Fri, 3 Jan 2025 14:35:19 -0800 Subject: [PATCH 21/21] Updated users guide --- IBPSA/Controls/OBC/UsersGuide.mo | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/IBPSA/Controls/OBC/UsersGuide.mo b/IBPSA/Controls/OBC/UsersGuide.mo index 0592bb6ce6..b3c786cbc0 100644 --- a/IBPSA/Controls/OBC/UsersGuide.mo +++ b/IBPSA/Controls/OBC/UsersGuide.mo @@ -211,6 +211,17 @@ which output the optimal start time for an HVAC system. The Control Description Language (CDL) can be found in IBPSA.Controls.OBC.CDL and its specification is at obc.lbl.gov. +Note that the implementation in +IBPSA.Controls.OBC.CDL +replicates some classes from the Modelica Standard Library. +This was done to have a self-contained implementation of CDL that can be +standardized through ASHRAE and that has minimum dependencies +on other software to ease support by building automation systems. +The replication of the implementation of the blocks also avoids +that CDL inadvertently changes +if the Modelica Standard Library is updated, +which is undesirable as changes to CDL will need to go through the +ASHRAE standardization process.

        References