From 05a80522546e511415dbffb314f769e93cc60679 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Tue, 19 May 2026 16:27:14 +0200 Subject: [PATCH 1/3] Support multiple extends clauses per class Replace single extend properties with extendsInfo array and provide backward-compatible getters. --- client/src/data/templates.json | 1862 +++++++++++++---- server/src/parser/parser.ts | 58 +- .../parser/parsed-elements.test.ts | 55 + .../Interface/MultipleExtendsInterface.mo | 5 + .../TestPackage/Interface/package.order | 1 + 5 files changed, 1589 insertions(+), 392 deletions(-) create mode 100644 server/tests/static-data/TestPackage/Interface/MultipleExtendsInterface.mo diff --git a/client/src/data/templates.json b/client/src/data/templates.json index e84fffc9..6d8facb0 100644 --- a/client/src/data/templates.json +++ b/client/src/data/templates.json @@ -503,7 +503,6 @@ "type": "Buildings.Templates.Components.Data.Damper", "name": "Record for damper model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Data.Damper.typ", @@ -1645,6 +1644,103 @@ "definition": false, "shortExclType": false }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "type": "Boolean", + "value": true, + "name": "Set to true to continuously open and close valve using strokeTime", + "group": "Actuator position", + "tab": "Dynamics", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "type": "Modelica.Units.SI.Time", + "value": 120, + "name": "Time needed to fully open or close actuator", + "group": "Actuator position", + "tab": "Dynamics", + "visible": false, + "enable": "use_strokeTime", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "type": "Modelica.Blocks.Types.Init", + "value": "Modelica.Blocks.Types.Init.InitialOutput", + "name": "Type of initialization (no init/steady state/initial state/initial output)", + "group": "Actuator position", + "tab": "Dynamics", + "visible": false, + "enable": "use_strokeTime", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "type": "Real", + "value": 1, + "name": "Initial position of actuator", + "group": "Actuator position", + "tab": "Dynamics", + "visible": true, + "enable": "use_strokeTime", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "type": "Modelica.Blocks.Interfaces.RealInput", + "name": "Actuator position (0: closed, 1: open)", + "group": "", + "tab": "", + "visible": false, + "enable": true, + "modifiers": { + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y.min": { + "expression": 0, + "final": false + }, + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y.max": { + "expression": 1, + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual", + "type": "Modelica.Blocks.Interfaces.RealOutput", + "name": "Actual actuator position", + "group": "", + "tab": "", + "visible": false, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, { "modelicaPath": "Buildings.Fluid.Interfaces.PartialTwoPort", "type": "Buildings.Fluid.Interfaces.PartialTwoPort", @@ -1792,6 +1888,26 @@ "Buildings.Fluid.Interfaces.PartialTwoPort" ] }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "type": "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "name": "Partial model that implements the filtered opening for valves and dampers", + "visible": false, + "replaceable": false, + "options": [ + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" + ] + }, { "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", "type": "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", @@ -1860,7 +1976,13 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -1868,7 +1990,8 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -1876,9 +1999,201 @@ "type": "Buildings.Fluid.Actuators.Dampers.Exponential", "name": "Air damper with exponential opening characteristics", "visible": false, + "replaceable": false, + "options": [ + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpDamper_nominal", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpFixed_nominal", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.use_deltaM", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.v_nominal", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.A", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.roundDuct", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.ReC", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.a", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.b", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.yL", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.yU", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k0", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k1", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.l", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.use_constant_density", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.rho", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.kFixed", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.kDam", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k", + "Buildings.Fluid.BaseClasses.PartialResistance.homotopyInitialization", + "Buildings.Fluid.BaseClasses.PartialResistance.from_dp", + "Buildings.Fluid.BaseClasses.PartialResistance.dp_nominal", + "Buildings.Fluid.BaseClasses.PartialResistance.linearized", + "Buildings.Fluid.BaseClasses.PartialResistance.m_flow_turbulent", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow_nominal", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow_small", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.show_T", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.dp", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_a", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", + "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Actuators.Dampers.Exponential", + "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", + "Buildings.Fluid.BaseClasses.PartialResistance", + "Buildings.Fluid.Interfaces.PartialTwoPortInterface", + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" + ] + }, + { + "modelicaPath": "Buildings.Templates.Components.Actuators.Damper.ind", + "type": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", + "name": "Pressure independent damper", + "group": "", + "tab": "", + "visible": false, + "enable": false, + "modifiers": { + "Buildings.Templates.Components.Actuators.Damper.ind.Medium": { + "final": true, + "redeclare": "Buildings.Fluid.Interfaces.PartialTwoPort.Medium" + }, + "Buildings.Templates.Components.Actuators.Damper.ind.m_flow_nominal": { + "expression": "m_flow_nominal", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.dpDamper_nominal": { + "expression": "dp_nominal", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.dpFixed_nominal": { + "expression": "dat.dpFixed_nominal", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.use_strokeTime": { + "expression": "use_strokeTime", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.strokeTime": { + "expression": "strokeTime", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.init": { + "expression": "init", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.y_start": { + "expression": "y_start", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.allowFlowReversal": { + "expression": "allowFlowReversal", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.show_T": { + "expression": "show_T", + "final": true + }, + "Buildings.Templates.Components.Actuators.Damper.ind.from_dp": { + "expression": "from_dp", + "final": true + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.phi", + "type": "Real", + "value": { + "operator": "+", + "operands": [ + "l", + { + "operator": "*", + "operands": [ + "y_internal", + "1 -l" + ] + } + ] + }, + "name": "Ratio actual to nominal mass flow rate of damper, phi=kDam(y)/kDam(y=1)", + "group": "", + "tab": "", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.l2", + "type": "Real", + "value": 0.01, + "name": "Gain for mass flow increase if pressure is above nominal pressure", + "group": "", + "tab": "Advanced", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.deltax", + "type": "Real", + "value": 0.02, + "name": "Transition interval for flow rate", + "group": "", + "tab": "Advanced", + "visible": true, + "enable": true, "modifiers": {}, "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", + "type": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", + "name": "Model for an air damper whose mass flow is proportional to the input signal", + "visible": false, + "modifiers": { + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.linearized": { + "expression": false, + "final": true + }, + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.casePreInd": { + "expression": true, + "final": true + }, + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.from_dp": { + "expression": true, + "final": false + } + }, + "replaceable": false, "options": [ + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.phi", + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.l2", + "Buildings.Fluid.Actuators.Dampers.PressureIndependent.deltax", "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpDamper_nominal", "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpFixed_nominal", "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.use_deltaM", @@ -1913,193 +2228,13 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" - ], - "definition": true, - "shortExclType": false, - "treeList": [ - "Buildings.Fluid.Actuators.Dampers.Exponential", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", - "Buildings.Fluid.BaseClasses.PartialResistance", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" - ] - }, - { - "modelicaPath": "Buildings.Templates.Components.Actuators.Damper.ind", - "type": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", - "name": "Pressure independent damper", - "group": "", - "tab": "", - "visible": false, - "enable": false, - "modifiers": { - "Buildings.Templates.Components.Actuators.Damper.ind.Medium": { - "final": true, - "redeclare": "Buildings.Fluid.Interfaces.PartialTwoPort.Medium" - }, - "Buildings.Templates.Components.Actuators.Damper.ind.m_flow_nominal": { - "expression": "m_flow_nominal", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.dpDamper_nominal": { - "expression": "dp_nominal", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.dpFixed_nominal": { - "expression": "dat.dpFixed_nominal", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.use_strokeTime": { - "expression": "use_strokeTime", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.strokeTime": { - "expression": "strokeTime", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.init": { - "expression": "init", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.y_start": { - "expression": "y_start", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.allowFlowReversal": { - "expression": "allowFlowReversal", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.show_T": { - "expression": "show_T", - "final": true - }, - "Buildings.Templates.Components.Actuators.Damper.ind.from_dp": { - "expression": "from_dp", - "final": true - } - }, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.phi", - "type": "Real", - "value": { - "operator": "+", - "operands": [ - "l", - { - "operator": "*", - "operands": [ - "y_internal", - "1 -l" - ] - } - ] - }, - "name": "Ratio actual to nominal mass flow rate of damper, phi=kDam(y)/kDam(y=1)", - "group": "", - "tab": "", - "visible": true, - "enable": true, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.l2", - "type": "Real", - "value": 0.01, - "name": "Gain for mass flow increase if pressure is above nominal pressure", - "group": "", - "tab": "Advanced", - "visible": true, - "enable": true, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent.deltax", - "type": "Real", - "value": 0.02, - "name": "Transition interval for flow rate", - "group": "", - "tab": "Advanced", - "visible": true, - "enable": true, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", - "type": "Buildings.Fluid.Actuators.Dampers.PressureIndependent", - "name": "Model for an air damper whose mass flow is proportional to the input signal", - "visible": false, - "modifiers": { - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.linearized": { - "expression": false, - "final": true - }, - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.casePreInd": { - "expression": true, - "final": true - }, - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.from_dp": { - "expression": true, - "final": false - } - }, - "replaceable": false, - "options": [ - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.phi", - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.l2", - "Buildings.Fluid.Actuators.Dampers.PressureIndependent.deltax", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpDamper_nominal", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.dpFixed_nominal", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.use_deltaM", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.deltaM", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.v_nominal", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.A", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.roundDuct", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.ReC", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.a", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.b", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.yL", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.yU", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k0", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k1", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.l", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.use_constant_density", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.rho", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.kFixed", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.kDam", - "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential.k", - "Buildings.Fluid.BaseClasses.PartialResistance.homotopyInitialization", - "Buildings.Fluid.BaseClasses.PartialResistance.from_dp", - "Buildings.Fluid.BaseClasses.PartialResistance.dp_nominal", - "Buildings.Fluid.BaseClasses.PartialResistance.linearized", - "Buildings.Fluid.BaseClasses.PartialResistance.m_flow_turbulent", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow_nominal", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow_small", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.show_T", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.m_flow", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.dp", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_a", - "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", - "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -2108,7 +2243,8 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialDamperExponential", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -2207,7 +2343,6 @@ "type": "Buildings.Templates.Components.Routing.PassThroughFluid", "name": "Direct fluid pass-through", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Routing.PassThroughFluid.icon_pipe", @@ -2910,7 +3045,6 @@ "type": "Buildings.Fluid.Sensors.BaseClasses.PartialFlowSensor", "name": "Partial component to model sensors that measure flow properties", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sensors.BaseClasses.PartialFlowSensor.m_flow_nominal", @@ -2931,7 +3065,6 @@ "type": "Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor", "name": "Partial component to model sensors that measure flow properties using a dynamic model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sensors.BaseClasses.PartialDynamicFlowSensor.tau", @@ -3098,7 +3231,6 @@ "type": "Buildings.Templates.Components.Interfaces.PartialSensor", "name": "Interface class for sensor", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Interfaces.PartialSensor.have_sen", @@ -3398,7 +3530,6 @@ "type": "Buildings.Fluid.Sensors.TemperatureTwoPort", "name": "Ideal two port temperature sensor", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sensors.TemperatureTwoPort.T", @@ -3625,7 +3756,6 @@ "type": "Buildings.Fluid.Sensors.SpecificEnthalpyTwoPort", "name": "Ideal two port sensor for the specific enthalpy", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sensors.SpecificEnthalpyTwoPort.h_out_start", @@ -4749,7 +4879,6 @@ "type": "Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters", "name": "Record for flow parameters", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters.V_flow", @@ -5191,7 +5320,6 @@ "type": "Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters", "name": "Record for efficiency parameters vs. volumetric flow rate", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters.V_flow", @@ -5310,7 +5438,6 @@ "type": "Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters_yMot", "name": "Record for efficiency parameters vs. motor part load ratio", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters_yMot.y", @@ -5397,7 +5524,6 @@ "type": "Buildings.Fluid.Movers.BaseClasses.Characteristics.powerParameters", "name": "Record for electrical power parameters", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.BaseClasses.Characteristics.powerParameters.V_flow", @@ -5508,7 +5634,6 @@ "type": "Buildings.Fluid.Movers.BaseClasses.Euler.peak", "name": "Record for the operation condition at peak efficiency", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.BaseClasses.Euler.peak.V_flow", @@ -5867,7 +5992,6 @@ "type": "Buildings.Fluid.Movers.Data.Generic", "name": "Generic data record for movers", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Movers.Data.Generic.pressure", @@ -5903,7 +6027,6 @@ "type": "Buildings.Templates.Components.Data.Fan", "name": "Record for fan model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Data.Fan.typ", @@ -5958,7 +6081,6 @@ "type": "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection", "name": "Record for outdoor/relief/return air section", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typDamOut", @@ -6390,7 +6512,6 @@ "type": "Buildings.Templates.AirHandlersFans.Interfaces.Bus", "name": "Control bus for air handler", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Interfaces.Bus.fanSup", @@ -6813,7 +6934,6 @@ "type": "Buildings.Fluid.Sensors.RelativePressure", "name": "Ideal relative pressure sensor", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sensors.RelativePressure.port_a", @@ -8147,7 +8267,6 @@ "type": "Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume", "name": "Partial mixing volume with inlet and outlet ports (flow reversal is allowed)", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume.initialize_p", @@ -8559,7 +8678,6 @@ "type": "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSectionDedicatedDampers", "name": "Base class for modeling separate dampers for ventilation and economizer", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Components.Interfaces.PartialOutdoorSectionDedicatedDampers.damOut", @@ -9481,114 +9599,26 @@ "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.mSenFac": { "expression": 1, "final": true - } - }, - "replaceable": false, - "options": [ - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.per", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.inputType", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.constInput", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.stageInputs", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.computePowerUsingSimilarityLaws", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.addPowerToMedium", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.nominalValuesDefineDefaultPressureCurve", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.tau", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.use_riseTime", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.riseTime", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.init", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.stage", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.y_actual", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.P", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.heatPort", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.VMachine_flow", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.dpMachine", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.eta", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.etaHyd", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.etaMot", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.m_flow_small", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.show_T", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.m_flow", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.dp", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.sta_a", - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.sta_b", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.energyDynamics", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.massDynamics", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.substanceDynamics", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.traceDynamics", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.p_start", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.T_start", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" - ], - "definition": true, - "shortExclType": false, - "treeList": [ - "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" - ] - }, - { - "modelicaPath": "Buildings.Fluid.Movers.SpeedControlled_y", - "type": "Buildings.Fluid.Movers.SpeedControlled_y", - "name": "Fan or pump with ideally controlled normalized speed y as input signal", - "visible": false, - "modifiers": { - "Buildings.Fluid.Movers.SpeedControlled_y.preVar": { - "expression": "Buildings.Fluid.Movers.BaseClasses.Types.PrescribedVariable.Speed", - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.nominalValuesDefineDefaultPressureCurve": { - "expression": false, - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.computePowerUsingSimilarityLaws": { - "expression": true, - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.stageInputs": { - "expression": "per.speeds", - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.constInput": { - "expression": "per.constantSpeed", - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.y_start": { - "expression": "y_start", - "final": true }, - "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.u.unit": { - "expression": "\"1\"", - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.y.unit": { - "expression": "\"1\"", - "final": true - }, - "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.pressure": { - "expression": "per.pressure", - "final": true, - "recordBinding": true + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.port_a.p.start": { + "expression": "Medium.p_default", + "final": false }, - "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.etaHydMet": { - "expression": "per.etaHydMet", - "final": true + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.port_a.h_outflow.start": { + "expression": "h_outflow_start", + "final": false }, - "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.etaMotMet": { - "expression": "per.etaMotMet", - "final": true + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.port_b.p.start": { + "expression": "p_start", + "final": false }, - "Buildings.Fluid.Movers.SpeedControlled_y.eff.r_N.start": { - "expression": "y_start", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.port_b.h_outflow.start": { + "expression": "h_outflow_start", "final": false } }, "replaceable": false, "options": [ - "Buildings.Fluid.Movers.SpeedControlled_y.y_start", - "Buildings.Fluid.Movers.SpeedControlled_y.y", "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.per", "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.inputType", "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.constInput", @@ -9624,14 +9654,126 @@ "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Interfaces.PartialTwoPort" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Movers.SpeedControlled_y", + "type": "Buildings.Fluid.Movers.SpeedControlled_y", + "name": "Fan or pump with ideally controlled normalized speed y as input signal", + "visible": false, + "modifiers": { + "Buildings.Fluid.Movers.SpeedControlled_y.preVar": { + "expression": "Buildings.Fluid.Movers.BaseClasses.Types.PrescribedVariable.Speed", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.nominalValuesDefineDefaultPressureCurve": { + "expression": false, + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.computePowerUsingSimilarityLaws": { + "expression": true, + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.stageInputs": { + "expression": "per.speeds", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.constInput": { + "expression": "per.constantSpeed", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.y_start": { + "expression": "y_start", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.u.unit": { + "expression": "\"1\"", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.motSpe.y.unit": { + "expression": "\"1\"", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.pressure": { + "expression": "per.pressure", + "final": true, + "recordBinding": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.etaHydMet": { + "expression": "per.etaHydMet", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.eff.per.etaMotMet": { + "expression": "per.etaMotMet", + "final": true + }, + "Buildings.Fluid.Movers.SpeedControlled_y.eff.r_N.start": { + "expression": "y_start", + "final": false + } + }, + "replaceable": false, + "options": [ + "Buildings.Fluid.Movers.SpeedControlled_y.y_start", + "Buildings.Fluid.Movers.SpeedControlled_y.y", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.per", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.inputType", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.constInput", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.stageInputs", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.computePowerUsingSimilarityLaws", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.addPowerToMedium", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.nominalValuesDefineDefaultPressureCurve", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.tau", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.use_riseTime", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.riseTime", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.init", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.stage", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.y_actual", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.P", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.heatPort", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.VMachine_flow", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.dpMachine", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.eta", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.etaHyd", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.etaMot", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.m_flow_small", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.show_T", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.m_flow", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.dp", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.sta_a", + "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine.sta_b", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.energyDynamics", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.massDynamics", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.substanceDynamics", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.traceDynamics", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.p_start", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.T_start", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Fluid.Movers.SpeedControlled_y", "Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Interfaces.PartialTwoPort" ] }, { @@ -10296,7 +10438,6 @@ "type": "Buildings.Fluid.BaseClasses.MassFlowRateMultiplier", "name": "Model that multiplies the mass flow rate", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.BaseClasses.MassFlowRateMultiplier.use_input", @@ -14547,7 +14688,6 @@ "type": "Buildings.BoundaryConditions.WeatherData.Bus", "name": "Data bus that stores weather data", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.BoundaryConditions.WeatherData.Bus.TDryBul", @@ -14742,7 +14882,6 @@ "type": "Buildings.Fluid.Sources.Outside", "name": "Boundary that takes weather data, and optionally trace substances, as an input", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sources.BaseClasses.Outside.use_C_in", @@ -15218,7 +15357,6 @@ "type": "Buildings.Fluid.Sources.BaseClasses.PartialSource_Xi_C", "name": "Partial component source with parameter definitions for Xi and C", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sources.BaseClasses.PartialSource_Xi_C.use_X_in", @@ -15245,7 +15383,6 @@ "type": "Buildings.Fluid.Sources.Boundary_pT", "name": "Boundary with prescribed pressure, temperature, composition and trace substances", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Sources.Boundary_pT.use_p_in", @@ -16496,7 +16633,6 @@ "type": "Buildings.Templates.Components.Data.Coil", "name": "Record for coil model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Data.Coil.typ", @@ -17395,7 +17531,6 @@ "type": "Buildings.Fluid.Actuators.Valves.Data.Generic", "name": "Generic record for valve parameters", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Actuators.Valves.Data.Generic.y", @@ -17688,7 +17823,6 @@ "type": "Buildings.Templates.Components.Data.Valve", "name": "Record for valve model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Data.Valve.typ", @@ -18352,6 +18486,362 @@ "definition": false, "shortExclType": false }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes.OpPoint", + "name": "Selection of flow coefficient", + "group": "Flow Coefficient", + "tab": "", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [ + "Buildings.Fluid.Types.CvTypes.OpPoint", + "Buildings.Fluid.Types.CvTypes.Kv", + "Buildings.Fluid.Types.CvTypes.Cv", + "Buildings.Fluid.Types.CvTypes.Av" + ], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Types.CvTypes", + "name": "Enumeration to define the choice of valve flow coefficient", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes", + "visible": true, + "replaceable": false, + "options": [ + "Buildings.Fluid.Types.CvTypes.OpPoint", + "Buildings.Fluid.Types.CvTypes.Kv", + "Buildings.Fluid.Types.CvTypes.Cv", + "Buildings.Fluid.Types.CvTypes.Av" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Types.CvTypes" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Types.CvTypes.OpPoint", + "name": "flow coefficient defined by m_flow_nominal/sqrt(dp_nominal)", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes.OpPoint", + "visible": false, + "replaceable": false, + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Types.CvTypes" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Types.CvTypes.Kv", + "name": "Kv (metric) flow coefficient", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes.Kv", + "visible": false, + "replaceable": false, + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Types.CvTypes" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Types.CvTypes.Cv", + "name": "Cv (US) flow coefficient", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes.Cv", + "visible": false, + "replaceable": false, + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Types.CvTypes" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Types.CvTypes.Av", + "name": "Av (metric) flow coefficient", + "type": "Buildings.Fluid.Types.CvTypes", + "value": "Buildings.Fluid.Types.CvTypes.Av", + "visible": false, + "replaceable": false, + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Types.CvTypes" + ] + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "type": "Real", + "name": "Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]", + "group": "Flow Coefficient", + "tab": "", + "visible": true, + "enable": { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Kv" + ] + }, + "modifiers": { + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv.fixed": { + "expression": { + "operator": "if_elseif", + "operands": [ + { + "operator": "if", + "operands": [ + { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Kv" + ] + }, + true + ] + }, + { + "operator": "else", + "operands": [ + false + ] + } + ] + }, + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "type": "Real", + "name": "Cv (US) flow coefficient [USG/min/(psi)^(1/2)]", + "group": "Flow Coefficient", + "tab": "", + "visible": true, + "enable": { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Cv" + ] + }, + "modifiers": { + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv.fixed": { + "expression": { + "operator": "if_elseif", + "operands": [ + { + "operator": "if", + "operands": [ + { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Cv" + ] + }, + true + ] + }, + { + "operator": "else", + "operands": [ + false + ] + } + ] + }, + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "type": "Modelica.Units.SI.Area", + "name": "Av (metric) flow coefficient", + "group": "Flow Coefficient", + "tab": "", + "visible": false, + "enable": { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Av" + ] + }, + "modifiers": { + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av.fixed": { + "expression": { + "operator": "if_elseif", + "operands": [ + { + "operator": "if", + "operands": [ + { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.Av" + ] + }, + true + ] + }, + { + "operator": "else", + "operands": [ + false + ] + } + ] + }, + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "type": "Real", + "value": 0.02, + "name": "Fraction of nominal flow rate where linearization starts, if y=1", + "group": "Pressure-flow linearization", + "tab": "", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "type": "Modelica.Units.SI.MassFlowRate", + "name": "Nominal mass flow rate", + "group": "Nominal condition", + "tab": "", + "visible": false, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "type": "Modelica.Units.SI.PressureDifference", + "name": "Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint", + "group": "Nominal condition", + "tab": "", + "visible": false, + "enable": { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.OpPoint" + ] + }, + "modifiers": { + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal.displayUnit": { + "expression": "\"Pa\"", + "final": false + }, + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal.min": { + "expression": 0, + "final": false + }, + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal.fixed": { + "expression": { + "operator": "if_elseif", + "operands": [ + { + "operator": "if", + "operands": [ + { + "operator": "==", + "operands": [ + "CvData", + "Buildings.Fluid.Types.CvTypes.OpPoint" + ] + }, + true + ] + }, + { + "operator": "else", + "operands": [ + false + ] + } + ] + }, + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "type": "Modelica.Units.SI.Density", + "name": "Inlet density for which valve coefficients are defined", + "group": "Nominal condition", + "tab": "Advanced", + "visible": false, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "type": "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "name": "Model with parameters for valves", + "visible": false, + "replaceable": false, + "options": [ + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters" + ] + }, { "modelicaPath": "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "type": "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", @@ -18369,6 +18859,21 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve.m_flow_turbulent": { "expression": "deltaM*abs(m_flow_nominal)", "final": true + }, + "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve.rhoStd": { + "expression": { + "operator": "function_call", + "operands": [ + { + "operator": "Medium.density_pTX", + "operands": [ + "Medium.density_pTX", + "Medium.density_pTX" + ] + } + ] + }, + "final": false } }, "replaceable": false, @@ -18393,7 +18898,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18401,7 +18920,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -18409,7 +18930,6 @@ "type": "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValveKv", "name": "Partial model for a two way valve using a Kv characteristic", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve.dpFixed_nominal", @@ -18432,7 +18952,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18441,7 +18975,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -18490,7 +19026,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18499,7 +19049,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -18613,7 +19165,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18622,7 +19188,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -18772,7 +19340,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18781,7 +19363,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -18922,7 +19506,21 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual" ], "definition": true, "shortExclType": false, @@ -18931,7 +19529,9 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve", "Buildings.Fluid.BaseClasses.PartialResistance", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal" ] }, { @@ -19217,6 +19817,21 @@ "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve.res3": { "final": false, "redeclare": "Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve" + }, + "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve.rhoStd": { + "expression": { + "operator": "function_call", + "operands": [ + { + "operator": "Medium.density_pTX", + "operands": [ + "Medium.density_pTX", + "Medium.density_pTX" + ] + } + ] + }, + "final": false } }, "replaceable": false, @@ -19251,14 +19866,30 @@ "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve", "Buildings.Fluid.BaseClasses.PartialThreeWayResistance", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters" ] }, { @@ -19326,7 +19957,21 @@ "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd" ], "definition": true, "shortExclType": false, @@ -19334,7 +19979,9 @@ "Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear", "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve", "Buildings.Fluid.BaseClasses.PartialThreeWayResistance", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters" ] }, { @@ -19526,7 +20173,21 @@ "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd" ], "definition": true, "shortExclType": false, @@ -19534,7 +20195,9 @@ "Buildings.Fluid.Actuators.Valves.ThreeWayLinear", "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve", "Buildings.Fluid.BaseClasses.PartialThreeWayResistance", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters" ] }, { @@ -19778,7 +20441,21 @@ "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.X_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_start", "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.C_nominal", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations.mSenFac", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.use_strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.strokeTime", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.init", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_start", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal.y_actual", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.CvData", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Kv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Cv", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.Av", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.deltaM", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.m_flow_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.dpValve_nominal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters.rhoStd" ], "definition": true, "shortExclType": false, @@ -19786,7 +20463,9 @@ "Buildings.Fluid.Actuators.Valves.ThreeWayTable", "Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve", "Buildings.Fluid.BaseClasses.PartialThreeWayResistance", - "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations" + "Buildings.Fluid.Interfaces.LumpedVolumeDeclarations", + "Buildings.Fluid.Actuators.BaseClasses.ActuatorSignal", + "Buildings.Fluid.Actuators.BaseClasses.ValveParameters" ] }, { @@ -20343,7 +21022,6 @@ "type": "Buildings.Fluid.HeatExchangers.BaseClasses.HADryCoil", "name": "Sensible convective heat transfer model for air to water coil", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.HeatExchangers.BaseClasses.HADryCoil.UA_nominal", @@ -21519,6 +22197,172 @@ "definition": false, "shortExclType": false }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "type": "Boolean", + "value": true, + "name": "=true, compute flow resistance. Set to false to assume no friction", + "group": "Medium 1", + "tab": "Flow resistance", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "type": "Boolean", + "value": false, + "name": "= true, use m_flow = f(dp) else dp = f(m_flow)", + "group": "Medium 1", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance1", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "type": "Modelica.Units.SI.PressureDifference", + "name": "Pressure difference", + "group": "Nominal condition", + "tab": "", + "visible": false, + "enable": true, + "modifiers": { + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal.min": { + "expression": 0, + "final": false + }, + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal.displayUnit": { + "expression": "\"Pa\"", + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "type": "Boolean", + "value": false, + "name": "= true, use linear relation between m_flow and dp for any flow rate", + "group": "Medium 1", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance1", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "type": "Real", + "value": 0.1, + "name": "Fraction of nominal flow rate where flow transitions to laminar", + "group": "Medium 1", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance1", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "type": "Boolean", + "value": true, + "name": "=true, compute flow resistance. Set to false to assume no friction", + "group": "Medium 2", + "tab": "Flow resistance", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "type": "Boolean", + "value": false, + "name": "= true, use m_flow = f(dp) else dp = f(m_flow)", + "group": "Medium 2", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance2", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "type": "Modelica.Units.SI.PressureDifference", + "name": "Pressure difference", + "group": "Nominal condition", + "tab": "", + "visible": false, + "enable": true, + "modifiers": { + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal.min": { + "expression": 0, + "final": false + }, + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal.displayUnit": { + "expression": "\"Pa\"", + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "type": "Boolean", + "value": false, + "name": "= true, use linear relation between m_flow and dp for any flow rate", + "group": "Medium 2", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance2", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2", + "type": "Real", + "value": 0.1, + "name": "Fraction of nominal flow rate where flow transitions to laminar", + "group": "Medium 2", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance2", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, { "modelicaPath": "Buildings.Fluid.Interfaces.PartialFourPort", "type": "Buildings.Fluid.Interfaces.PartialFourPort", @@ -21544,7 +22388,6 @@ "type": "Buildings.Fluid.Interfaces.PartialFourPortInterface", "name": "Partial model with four ports and declaration of quantities that are used by many models", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.Interfaces.PartialFourPortInterface.m1_flow_nominal", @@ -21574,12 +22417,57 @@ "Buildings.Fluid.Interfaces.PartialFourPort" ] }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters", + "type": "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters", + "name": "Parameters for flow resistance for models with four ports", + "visible": false, + "replaceable": false, + "options": [ + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" + ] + }, { "modelicaPath": "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "type": "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "name": "Partial model transporting two fluid streams between four ports without storing mass or energy", "visible": false, - "modifiers": {}, + "modifiers": { + "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger.computeFlowResistance1": { + "expression": { + "operator": ">", + "operands": [ + "dp1_nominal", + "Modelica.Constants.eps" + ] + }, + "final": true + }, + "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger.computeFlowResistance2": { + "expression": { + "operator": ">", + "operands": [ + "dp2_nominal", + "Modelica.Constants.eps" + ] + }, + "final": true + } + }, "replaceable": false, "options": [ "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger.prescribedHeatFlowRate1", @@ -21609,14 +22497,25 @@ "Buildings.Fluid.Interfaces.PartialFourPort.port_a1", "Buildings.Fluid.Interfaces.PartialFourPort.port_b1", "Buildings.Fluid.Interfaces.PartialFourPort.port_a2", - "Buildings.Fluid.Interfaces.PartialFourPort.port_b2" + "Buildings.Fluid.Interfaces.PartialFourPort.port_b2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialFourPortInterface", - "Buildings.Fluid.Interfaces.PartialFourPort" + "Buildings.Fluid.Interfaces.PartialFourPort", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" ] }, { @@ -21673,7 +22572,17 @@ "Buildings.Fluid.Interfaces.PartialFourPort.port_a1", "Buildings.Fluid.Interfaces.PartialFourPort.port_b1", "Buildings.Fluid.Interfaces.PartialFourPort.port_a2", - "Buildings.Fluid.Interfaces.PartialFourPort.port_b2" + "Buildings.Fluid.Interfaces.PartialFourPort.port_b2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" ], "definition": true, "shortExclType": false, @@ -21681,7 +22590,8 @@ "Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness", "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialFourPortInterface", - "Buildings.Fluid.Interfaces.PartialFourPort" + "Buildings.Fluid.Interfaces.PartialFourPort", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" ] }, { @@ -21761,7 +22671,17 @@ "Buildings.Fluid.Interfaces.PartialFourPort.port_a1", "Buildings.Fluid.Interfaces.PartialFourPort.port_b1", "Buildings.Fluid.Interfaces.PartialFourPort.port_a2", - "Buildings.Fluid.Interfaces.PartialFourPort.port_b2" + "Buildings.Fluid.Interfaces.PartialFourPort.port_b2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" ], "definition": true, "shortExclType": false, @@ -21770,7 +22690,8 @@ "Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness", "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialFourPortInterface", - "Buildings.Fluid.Interfaces.PartialFourPort" + "Buildings.Fluid.Interfaces.PartialFourPort", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" ] }, { @@ -21838,7 +22759,17 @@ "Buildings.Fluid.Interfaces.PartialFourPort.port_a1", "Buildings.Fluid.Interfaces.PartialFourPort.port_b1", "Buildings.Fluid.Interfaces.PartialFourPort.port_a2", - "Buildings.Fluid.Interfaces.PartialFourPort.port_b2" + "Buildings.Fluid.Interfaces.PartialFourPort.port_b2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" ], "definition": true, "shortExclType": false, @@ -21848,7 +22779,8 @@ "Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness", "Buildings.Fluid.Interfaces.StaticFourPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialFourPortInterface", - "Buildings.Fluid.Interfaces.PartialFourPort" + "Buildings.Fluid.Interfaces.PartialFourPort", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" ] }, { @@ -22478,6 +23410,108 @@ "Buildings.Fluid.Interfaces.PartialTwoPort" ] }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.computeFlowResistance", + "type": "Boolean", + "value": true, + "name": "=true, compute flow resistance. Set to false to assume no friction", + "group": "", + "tab": "Flow resistance", + "visible": true, + "enable": true, + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.from_dp", + "type": "Boolean", + "value": false, + "name": "= true, use m_flow = f(dp) else dp = f(m_flow)", + "group": "", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal", + "type": "Modelica.Units.SI.PressureDifference", + "name": "Pressure difference", + "group": "Nominal condition", + "tab": "", + "visible": false, + "enable": true, + "modifiers": { + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal.min": { + "expression": 0, + "final": false + }, + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal.displayUnit": { + "expression": "\"Pa\"", + "final": false + } + }, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.linearizeFlowResistance", + "type": "Boolean", + "value": false, + "name": "= true, use linear relation between m_flow and dp for any flow rate", + "group": "", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.deltaM", + "type": "Real", + "value": 0.1, + "name": "Fraction of nominal flow rate where flow transitions to laminar", + "group": "", + "tab": "Flow resistance", + "visible": true, + "enable": "computeFlowResistance", + "modifiers": {}, + "replaceable": false, + "options": [], + "definition": false, + "shortExclType": false + }, + { + "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters", + "type": "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters", + "name": "Parameters for flow resistance for models with two ports", + "visible": false, + "replaceable": false, + "options": [ + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.computeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.from_dp", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.linearizeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.deltaM" + ], + "definition": true, + "shortExclType": false, + "treeList": [ + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters" + ] + }, { "modelicaPath": "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger", "type": "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger", @@ -22491,6 +23525,10 @@ "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger.port_b.h_outflow.start": { "expression": "h_outflow_start", "final": false + }, + "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger.computeFlowResistance": { + "expression": true, + "final": true } }, "replaceable": false, @@ -22513,14 +23551,20 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.computeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.from_dp", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.linearizeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.deltaM" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters" ] }, { @@ -22561,7 +23605,12 @@ "Buildings.Fluid.Interfaces.PartialTwoPortInterface.sta_b", "Buildings.Fluid.Interfaces.PartialTwoPort.allowFlowReversal", "Buildings.Fluid.Interfaces.PartialTwoPort.port_a", - "Buildings.Fluid.Interfaces.PartialTwoPort.port_b" + "Buildings.Fluid.Interfaces.PartialTwoPort.port_b", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.computeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.from_dp", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.dp_nominal", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.linearizeFlowResistance", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters.deltaM" ], "definition": true, "shortExclType": false, @@ -22569,7 +23618,8 @@ "Buildings.Fluid.HeatExchangers.HeaterCooler_u", "Buildings.Fluid.Interfaces.TwoPortHeatMassExchanger", "Buildings.Fluid.Interfaces.PartialTwoPortInterface", - "Buildings.Fluid.Interfaces.PartialTwoPort" + "Buildings.Fluid.Interfaces.PartialTwoPort", + "Buildings.Fluid.Interfaces.TwoPortFlowResistanceParameters" ] }, { @@ -23286,6 +24336,14 @@ "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU.Medium2": { "final": false, "redeclare": "Buildings.Media.Air" + }, + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU.computeFlowResistance1": { + "expression": true, + "final": true + }, + "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU.computeFlowResistance2": { + "expression": true, + "final": true } }, "replaceable": false, @@ -23325,14 +24383,25 @@ "Buildings.Fluid.Interfaces.PartialFourPort.port_a1", "Buildings.Fluid.Interfaces.PartialFourPort.port_b1", "Buildings.Fluid.Interfaces.PartialFourPort.port_a2", - "Buildings.Fluid.Interfaces.PartialFourPort.port_b2" + "Buildings.Fluid.Interfaces.PartialFourPort.port_b2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp1_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM1", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.computeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.from_dp2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.dp2_nominal", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.linearizeFlowResistance2", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters.deltaM2" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU", "Buildings.Fluid.Interfaces.PartialFourPortInterface", - "Buildings.Fluid.Interfaces.PartialFourPort" + "Buildings.Fluid.Interfaces.PartialFourPort", + "Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters" ] }, { @@ -48841,7 +49910,6 @@ "type": "Buildings.Templates.AirHandlersFans.Components.Data.PartialController", "name": "Record for controller interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Components.Data.PartialController.typ", @@ -48929,7 +49997,6 @@ "type": "Buildings.Templates.ZoneEquipment.Interfaces.Bus", "name": "Control bus for zone equipment", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Interfaces.Bus.damVAV", @@ -49522,7 +50589,6 @@ "type": "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler", "name": "Configuration parameters for air handler interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Configuration.PartialAirHandler.typ", @@ -49725,7 +50791,6 @@ "type": "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler", "name": "Record for air handler interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.cfg", @@ -51120,7 +52185,6 @@ "type": "Buildings.Fluid.FixedResistances.LosslessPipe", "name": "Pipe with no flow friction and no heat transfer", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Fluid.FixedResistances.LosslessPipe.from_dp", @@ -51758,7 +52822,6 @@ "type": "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController", "name": "Record for multiple-zone VAV controller", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Components.Data.VAVMultiZoneController.typSecOut", @@ -52032,7 +53095,6 @@ "type": "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone", "name": "Configuration parameters for multiple-zone VAV", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.AirHandlersFans.Configuration.VAVMultiZone.typCoiHeaPre", @@ -52362,6 +53424,54 @@ ] }, "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typDamOut": { + "expression": "cfg.typDamOut", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typDamOutMin": { + "expression": "cfg.typDamOutMin", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typDamRel": { + "expression": "cfg.typDamRel", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typDamRet": { + "expression": "cfg.typDamRet", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typFanRel": { + "expression": "cfg.typFanRel", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.typFanRet": { + "expression": "cfg.typFanRet", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.nFanRel": { + "expression": "cfg.nFanRel", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.nFanRet": { + "expression": "cfg.nFanRet", + "final": true + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.damOut.m_flow_nominal": { + "expression": "mAirSup_flow_nominal", + "final": false + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.damOutMin.m_flow_nominal": { + "expression": "mOutMin_flow_nominal", + "final": false + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.damRel.m_flow_nominal": { + "expression": "mAirRet_flow_nominal", + "final": false + }, + "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone.damRet.m_flow_nominal": { + "expression": "mAirRet_flow_nominal", + "final": false } }, "replaceable": false, @@ -52376,13 +53486,29 @@ "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.id_souHeaWat", "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.ctl", "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.mAirSup_flow_nominal", - "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.mAirRet_flow_nominal" + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler.mAirRet_flow_nominal", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typDamOut", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typDamOutMin", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typDamRel", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typDamRet", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typFanRel", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.typFanRet", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.nFanRet", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.nFanRel", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.mOutMin_flow_nominal", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.damOut", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.damOutMin", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.damRel", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.damRet", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.fanRel", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection.fanRet" ], "definition": true, "shortExclType": false, "treeList": [ "Buildings.Templates.AirHandlersFans.Data.VAVMultiZone", - "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler" + "Buildings.Templates.AirHandlersFans.Data.PartialAirHandler", + "Buildings.Templates.AirHandlersFans.Components.Data.OutdoorReliefReturnSection" ] }, { @@ -52725,7 +53851,6 @@ "type": "Buildings.Templates.ZoneEquipment.Components.Data.PartialController", "name": "Record for controller interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Components.Data.PartialController.typ" @@ -53166,7 +54291,6 @@ "type": "Buildings.Templates.ZoneEquipment.Configuration.PartialAirTerminal", "name": "Configuration parameters for air terminal unit interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Configuration.PartialAirTerminal.typ", @@ -53367,7 +54491,6 @@ "type": "Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal", "name": "Record for air terminal unit interface class", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Data.PartialAirTerminal.cfg", @@ -54551,7 +55674,6 @@ "type": "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController", "name": "Record for VAV terminal unit controller", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Components.Data.VAVBoxController.stdVen", @@ -54657,7 +55779,6 @@ "type": "Buildings.Templates.ZoneEquipment.Configuration.VAVBox", "name": "Configuration parameters for VAV terminal unit", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Configuration.VAVBox.typDamVAV", @@ -64068,7 +65189,6 @@ "type": "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox", "name": "Guideline 36 controller for VAV terminal unit", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.ZoneEquipment.Components.Interfaces.ControllerG36VAVBox.have_occSen", diff --git a/server/src/parser/parser.ts b/server/src/parser/parser.ts index a39401aa..5e5d65ef 100644 --- a/server/src/parser/parser.ts +++ b/server/src/parser/parser.ts @@ -566,9 +566,24 @@ export class ShortClass extends Element { export class LongClass extends Element { elementList: Element[] | undefined = []; entryPoint = false; - mods: Modification[] | undefined; - extendElement: LongClass | undefined; - extendElementDeadEnd = false; + extendsInfo: Array<{ + element: LongClass | undefined; + mods: Modification[] | undefined; + deadEnd: boolean; + }> = []; + + get mods(): Modification[] | undefined { + const all = this.extendsInfo.flatMap((e) => e.mods ?? []); + return all.length > 0 ? all : undefined; + } + + get extendElement(): LongClass | undefined { + return this.extendsInfo[0]?.element; + } + + get extendElementDeadEnd(): boolean { + return this.extendsInfo[0]?.deadEnd ?? false; + } constructor( definition: any, @@ -596,13 +611,11 @@ export class LongClass extends Element { const element = _constructElement(e, this.modelicaPath); if (element?.elementType === "extends_clause") { const extendParam = element as Extend; - this.mods = extendParam.mods; - this.extendElement = typeStore.get(extendParam.type) as LongClass; - // Kludge - the instatiation of the extend type (extendParam) should - // likely be assigned and not the fetched type. However with how - // the extend param is unpacked into the LongClass, this is a smaller - // change - this.extendElementDeadEnd = extendParam.deadEnd; + this.extendsInfo.push({ + element: typeStore.get(extendParam.type) as LongClass | undefined, + mods: extendParam.mods, + deadEnd: extendParam.deadEnd, + }); } return element; }) @@ -628,12 +641,14 @@ export class LongClass extends Element { getChildElements(useDeadEnd = false): Element[] { const elements = this.elementList || []; - return ( - this.extendElement === undefined || - (this.extendElementDeadEnd && useDeadEnd) - ? elements - : [...elements, ...this.extendElement?.getChildElements(useDeadEnd)] - ).filter((el) => Object.keys(el.getInputs({}, false)).length > 0); + const inheritedElements = this.extendsInfo.flatMap(({ element, deadEnd }) => { + if (element === undefined || (deadEnd && useDeadEnd)) return []; + return element.getChildElements(useDeadEnd); + }); + + return [...elements, ...inheritedElements].filter( + (el) => Object.keys(el.getInputs({}, false)).length > 0, + ); } getInputs(inputs: { [key: string]: TemplateInput } = {}, recursive = true) { @@ -655,7 +670,7 @@ export class LongClass extends Element { // make sure all child elements (extend + other elements) get // template inputs added - this.extendElement?.getInputs(inputs); + this.extendsInfo.forEach(({ element }) => element?.getInputs(inputs)); this.elementList?.map((e) => e.getInputs(inputs)); inputs[this.modelicaPath] = { @@ -1001,10 +1016,11 @@ export class Extend extends Element { } this.deadEnd = this.getLinkageKeywordValue() === false; - const registered = this.registerPath(this.modelicaPath, this.type); - if (!registered) { - return; // PUNCH-OUT! - } + // Force-load the referenced type into the store. Unlike other element types, + // Extend does not register itself: every extends clause in the same parent + // shares the same __extend path, so store registration would cause false-positive + // duplicate detection for the second+ extends clause. + typeStore.get(this.type); if (definition.extends_clause.class_modification) { this.mods = getModificationList( diff --git a/server/tests/integration/parser/parsed-elements.test.ts b/server/tests/integration/parser/parsed-elements.test.ts index 07d8191b..58969811 100644 --- a/server/tests/integration/parser/parsed-elements.test.ts +++ b/server/tests/integration/parser/parsed-elements.test.ts @@ -1,4 +1,5 @@ import * as parser from "../../../src/parser/parser"; +import * as loader from "../../../src/parser/loader"; import { initializeTestModelicaJson } from "./utils"; const testModelicaFile = "TestPackage.Template.TestTemplate"; @@ -281,3 +282,57 @@ describe("Expected elements are extracted", () => { expect(forcedFalse.enable).toBeFalsy(); }); }); + +describe("Multiple extends clauses (regression #507)", () => { + const elementPath = "TestPackage.Interface.MultipleExtendsInterface"; + + beforeAll(() => { + initializeTestModelicaJson(); + parser.typeStore.get(elementPath); // force load from JSON + }); + + it("retains all extends entries in extendsInfo", () => { + const element = parser.findElement(elementPath) as parser.LongClass; + expect(element).toBeDefined(); + expect(element.extendsInfo.length).toBe(2); + }); + + it("each extendsInfo entry resolves to a distinct parent", () => { + const element = parser.findElement(elementPath) as parser.LongClass; + const parentPaths = element.extendsInfo.map((e) => e.element?.modelicaPath); + expect(parentPaths).toContain("TestPackage.Interface.NestedExtendInterface"); + expect(parentPaths).toContain("TestPackage.Interface.PartialComponent"); + }); + + it("getChildElements includes elements from every extends parent", () => { + const element = parser.findElement(elementPath) as parser.LongClass; + const childPaths = element.getChildElements().map((e) => e.modelicaPath); + expect(childPaths).toContain("TestPackage.Interface.NestedExtendInterface.nested_interface_param"); + expect(childPaths).toContain("TestPackage.Interface.PartialComponent.container"); + }); + + it("mods getter is undefined when no extends has modifications", () => { + const element = parser.findElement(elementPath) as parser.LongClass; + expect(element.mods).toBeUndefined(); + }); + + it("a shared base class is loaded from disk only once across multiple subclasses", () => { + // NestedExtendInterface is extended by both ExtendInterface and MultipleExtendsInterface. + // Loading both should trigger exactly one disk read for NestedExtendInterface. + parser.typeStore._store.clear(); + initializeTestModelicaJson(); + + const loaderSpy = jest.spyOn(loader, "loader"); + + parser.typeStore.get("TestPackage.Interface.ExtendInterface"); + parser.typeStore.get("TestPackage.Interface.MultipleExtendsInterface"); + + const canonicalPath = "TestPackage.Interface.NestedExtendInterface"; + const exactLoads = loaderSpy.mock.calls.filter( + (args) => args[0] === canonicalPath, + ); + expect(exactLoads.length).toBe(1); + + loaderSpy.mockRestore(); + }); +}); diff --git a/server/tests/static-data/TestPackage/Interface/MultipleExtendsInterface.mo b/server/tests/static-data/TestPackage/Interface/MultipleExtendsInterface.mo new file mode 100644 index 00000000..9a3fa241 --- /dev/null +++ b/server/tests/static-data/TestPackage/Interface/MultipleExtendsInterface.mo @@ -0,0 +1,5 @@ +within TestPackage.Interface; +partial model MultipleExtendsInterface "Test Multiple Extends Interface" + extends TestPackage.Interface.NestedExtendInterface; + extends TestPackage.Interface.PartialComponent; +end MultipleExtendsInterface; diff --git a/server/tests/static-data/TestPackage/Interface/package.order b/server/tests/static-data/TestPackage/Interface/package.order index 81b8e4f1..1f55a786 100644 --- a/server/tests/static-data/TestPackage/Interface/package.order +++ b/server/tests/static-data/TestPackage/Interface/package.order @@ -1,2 +1,3 @@ ExtendInterface PartialComponent +MultipleExtendsInterface From 64783b25b2cb080f7601c9ee4690f77dc5680be7 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Wed, 20 May 2026 10:20:46 +0200 Subject: [PATCH 2/3] Use localModMap to prevent extends mods from leaking into child scopes Extends clause modifiers must only apply to parameters at the current level. Mutating the original modMap caused values to propagate into nested component scopes, creating self-referencing parameters. A separate localModMap is used for extractAttributes calls while preserving modMap for child component scopes. --- server/src/parser/schedule.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/server/src/parser/schedule.ts b/server/src/parser/schedule.ts index 1456ede5..b9978b53 100644 --- a/server/src/parser/schedule.ts +++ b/server/src/parser/schedule.ts @@ -245,16 +245,23 @@ function buildColumnsFromElement( const columns: Column[] = []; const groupedColumns = new Map(); // group/tab name -> columns - // Merge this element's extends mods (non-redeclare, value-bearing) into the modMap - // so that e.g. `extends Parent(x=someValue)` overrides are visible to all child columns. + // Extends clause mods (e.g. `extends Parent(final x=cfg.x)`) apply only to + // inherited parameters at this level. They must NOT propagate into nested + // component scopes: buildModifierMap copies `modMap` as `inherited`, so if + // we mutated modMap here, `cfg.x` would also leak into e.g. the `cfg` + // component's parameters and create self-referencing values like + // `instanceName="cfg.x" value="cfg.x"`. + // Solution: build a localModMap for current-level extractAttributes calls + // while keeping the original modMap for child component scopes. + const localModMap: ModifierMap = new Map(modMap); for (const mod of (element as LongClass).mods ?? []) { if ( mod.value !== undefined && mod.name && !mod.redeclare && - !modMap.has(mod.name) + !localModMap.has(mod.name) ) { - modMap.set(mod.name, mod.value); + localModMap.set(mod.name, mod.value); } } @@ -325,7 +332,7 @@ function buildColumnsFromElement( const attributes = extractAttributes( component, element, - modMap, + localModMap, instancePath, localNames, ); @@ -356,7 +363,7 @@ function buildColumnsFromElement( const groupAttributes = extractAttributes( component, element, - modMap, + localModMap, instancePath, localNames, ); From c41d2186d60e3091b1c6e40fe55d27aa9c14a195 Mon Sep 17 00:00:00 2001 From: AntoineGautier Date: Fri, 29 May 2026 10:51:42 +0200 Subject: [PATCH 3/3] Update templates.json --- client/src/data/templates.json | 150 --------------------------------- 1 file changed, 150 deletions(-) diff --git a/client/src/data/templates.json b/client/src/data/templates.json index 15e06b1b..94954440 100644 --- a/client/src/data/templates.json +++ b/client/src/data/templates.json @@ -17105,7 +17105,6 @@ "type": "Buildings.Templates.Components.Data.Valve", "name": "Record for valve model", "visible": false, - "modifiers": {}, "replaceable": false, "options": [ "Buildings.Templates.Components.Data.Valve.typ", @@ -17900,155 +17899,6 @@ "definition": false, "shortExclType": false }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve.typ", - "type": "Buildings.Templates.Components.Types.Valve", - "name": "Equipment type", - "group": "Configuration", - "tab": "", - "visible": true, - "enable": false, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve.m_flow_nominal", - "type": "Modelica.Units.SI.MassFlowRate", - "name": "Nominal mass flow rate of fully open valve", - "group": "Nominal condition", - "tab": "", - "visible": false, - "enable": { - "operator": "!=", - "operands": [ - "typ", - "Buildings.Templates.Components.Types.Valve.None" - ] - }, - "modifiers": { - "Buildings.Templates.Components.Data.Valve.m_flow_nominal.min": { - "expression": 0, - "final": true - }, - "Buildings.Templates.Components.Data.Valve.m_flow_nominal.start": { - "expression": 1, - "final": false - } - }, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve.dpValve_nominal", - "type": "Modelica.Units.SI.PressureDifference", - "name": "Nominal pressure drop of fully open valve", - "group": "Nominal condition", - "tab": "", - "visible": false, - "enable": { - "operator": "!=", - "operands": [ - "typ", - "Buildings.Templates.Components.Types.Valve.None" - ] - }, - "modifiers": { - "Buildings.Templates.Components.Data.Valve.dpValve_nominal.min": { - "expression": 0, - "final": true - }, - "Buildings.Templates.Components.Data.Valve.dpValve_nominal.displayUnit": { - "expression": "\"Pa\"", - "final": false - }, - "Buildings.Templates.Components.Data.Valve.dpValve_nominal.start": { - "expression": 0, - "final": false - } - }, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve.dpFixed_nominal", - "type": "Modelica.Units.SI.PressureDifference", - "value": 0, - "name": "Nominal pressure drop of pipes and other equipment in flow leg", - "group": "Nominal condition", - "tab": "", - "visible": false, - "enable": { - "operator": "!=", - "operands": [ - "typ", - "Buildings.Templates.Components.Types.Valve.None" - ] - }, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve.dpFixedByp_nominal", - "type": "Modelica.Units.SI.PressureDifference", - "value": "dpFixed_nominal", - "name": "Nominal pressure drop in the bypass line", - "group": "Nominal condition", - "tab": "", - "visible": false, - "enable": { - "operator": "||", - "operands": [ - { - "operator": "==", - "operands": [ - "typ", - "Buildings.Templates.Components.Types.Valve.ThreeWayTwoPosition" - ] - }, - { - "operator": "==", - "operands": [ - "typ", - "Buildings.Templates.Components.Types.Valve.ThreeWayModulating" - ] - } - ] - }, - "modifiers": {}, - "replaceable": false, - "options": [], - "definition": false, - "shortExclType": false - }, - { - "modelicaPath": "Buildings.Templates.Components.Data.Valve", - "type": "Buildings.Templates.Components.Data.Valve", - "name": "Record for valve model", - "visible": false, - "replaceable": false, - "options": [ - "Buildings.Templates.Components.Data.Valve.typ", - "Buildings.Templates.Components.Data.Valve.m_flow_nominal", - "Buildings.Templates.Components.Data.Valve.dpValve_nominal", - "Buildings.Templates.Components.Data.Valve.dpFixed_nominal", - "Buildings.Templates.Components.Data.Valve.dpFixedByp_nominal" - ], - "definition": true, - "shortExclType": false, - "treeList": [ - "Buildings.Templates.Components.Data.Valve" - ] - }, { "modelicaPath": "Buildings.Templates.Components.Actuators.Valve.dpValve_nominal", "type": "Modelica.Units.SI.PressureDifference",