From 1563dc26ceb62c116672b86e37caf55b95e63273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=96stlund?= Date: Fri, 10 Nov 2023 14:31:37 +0100 Subject: [PATCH] Expandable connector fixes (#11550) - Fix Typing.checkConnectorTypeBalance by using the instance parent instead of the direct parent when checking if a component is inside a connector or not. - Remove non-present variables in expandable connectors before collecting unassigned flow variables, to avoid generating equations for non-existent variables. - Remove unused function Typing.checkConnectorType. --- OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo | 2 +- OMCompiler/Compiler/NFFrontEnd/NFTyping.mo | 16 +--------- .../scodeinst/ExpandableConnector10.mo | 29 +++++++++++++++++++ .../flattening/modelica/scodeinst/Makefile | 1 + 4 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 testsuite/flattening/modelica/scodeinst/ExpandableConnector10.mo diff --git a/OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo b/OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo index 98b354bb3a3..9044e81cfd2 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFFlatten.mo @@ -2095,6 +2095,7 @@ algorithm // Elaborate expandable connectors. (flatModel, conns) := ExpandableConnectors.elaborate(flatModel, conns); + flatModel.variables := list(v for v guard Variable.isPresent(v) in flatModel.variables); // Collect flow variables from the model, which needs to be done after // elaborating expandable connectors to get all of them. @@ -2128,7 +2129,6 @@ algorithm // add the equations to the flat model flatModel.equations := listAppend(conn_eql, flatModel.equations); - flatModel.variables := list(v for v guard Variable.isPresent(v) in flatModel.variables); // remove input and output prefixes from local IOs that are determined through connect equations if Flags.getConfigInt(Flags.EXPOSE_LOCAL_IOS) > 0 then diff --git a/OMCompiler/Compiler/NFFrontEnd/NFTyping.mo b/OMCompiler/Compiler/NFFrontEnd/NFTyping.mo index f6066c58a2f..81f8f0b0bf4 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFTyping.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFTyping.mo @@ -360,7 +360,7 @@ algorithm return; end if; - parent := InstNode.parent(component); + parent := InstNode.instanceParent(component); if InstNode.isComponent(parent) and Component.isConnector(InstNode.component(parent)) then return; end if; @@ -504,20 +504,6 @@ algorithm end if; end checkComponentStreamAttribute; -function checkConnectorType - input InstNode node; - output Boolean isConnector; -protected - InstNode dnode = InstNode.getDerivedNode(node); -algorithm - if InstNode.isEmpty(dnode) or InstNode.isInnerOuterNode(dnode) then - isConnector := false; - else - isConnector := Class.isConnectorClass(InstNode.getClass(dnode)) or - checkConnectorType(InstNode.parent(dnode)); - end if; -end checkConnectorType; - function typeIterator input InstNode iterator; input Expression range; diff --git a/testsuite/flattening/modelica/scodeinst/ExpandableConnector10.mo b/testsuite/flattening/modelica/scodeinst/ExpandableConnector10.mo new file mode 100644 index 00000000000..b064cba8592 --- /dev/null +++ b/testsuite/flattening/modelica/scodeinst/ExpandableConnector10.mo @@ -0,0 +1,29 @@ +// name: ExpandableConnector10 +// keywords: expandable connector +// status: correct +// cflags: -d=newInst +// +// + +connector FluidPort + flow Real m_flow; + Real p; + stream Real h_outflow; +end FluidPort; + +connector FluidPort_a + extends FluidPort; +end FluidPort_a; + +expandable connector Bus + FluidPort_a port_1; +end Bus; + +model ExpandableConnector10 + Bus bus; +end ExpandableConnector10; + +// Result: +// class ExpandableConnector10 +// end ExpandableConnector10; +// endResult diff --git a/testsuite/flattening/modelica/scodeinst/Makefile b/testsuite/flattening/modelica/scodeinst/Makefile index 64a08c27818..269f9fbf8e4 100644 --- a/testsuite/flattening/modelica/scodeinst/Makefile +++ b/testsuite/flattening/modelica/scodeinst/Makefile @@ -441,6 +441,7 @@ ExpandableConnector6.mo \ ExpandableConnector7.mo \ ExpandableConnector8.mo \ ExpandableConnector9.mo \ +ExpandableConnector10.mo \ ExpandableConnectorComplex1.mo \ ExpandableConnectorFlow1.mo \ ExpandableConnectorFlow2.mo \