diff --git a/OMCompiler/Compiler/.cmake/meta_modelica_source_list.cmake b/OMCompiler/Compiler/.cmake/meta_modelica_source_list.cmake index 6cfb857cc85..91f10635974 100644 --- a/OMCompiler/Compiler/.cmake/meta_modelica_source_list.cmake +++ b/OMCompiler/Compiler/.cmake/meta_modelica_source_list.cmake @@ -308,6 +308,7 @@ set(OMC_MM_BACKEND_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/NBackEnd/Util/NBSlice.mo # "NFFrontEnd"; + ${CMAKE_CURRENT_SOURCE_DIR}/NFFrontEnd/BaseModelica.mo ${CMAKE_CURRENT_SOURCE_DIR}/NFFrontEnd/NFAlgorithm.mo ${CMAKE_CURRENT_SOURCE_DIR}/NFFrontEnd/NFArrayConnections.mo ${CMAKE_CURRENT_SOURCE_DIR}/NFFrontEnd/NFAttributes.mo diff --git a/OMCompiler/Compiler/NFFrontEnd/BaseModelica.mo b/OMCompiler/Compiler/NFFrontEnd/BaseModelica.mo new file mode 100644 index 00000000000..85d036fb9aa --- /dev/null +++ b/OMCompiler/Compiler/NFFrontEnd/BaseModelica.mo @@ -0,0 +1,79 @@ +/* + * This file is part of OpenModelica. + * + * Copyright (c) 1998-CurrentYear, Linköping University, + * Department of Computer and Information Science, + * SE-58183 Linköping, Sweden. + * + * All rights reserved. + * + * THIS PROGRAM IS PROVIDED UNDER THE TERMS OF GPL VERSION 3 + * AND THIS OSMC PUBLIC LICENSE (OSMC-PL). + * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES RECIPIENT'S + * ACCEPTANCE OF THE OSMC PUBLIC LICENSE. + * + * The OpenModelica software and the Open Source Modelica + * Consortium (OSMC) Public License (OSMC-PL) are obtained + * from Linköping University, either from the above address, + * from the URLs: http://www.ida.liu.se/projects/OpenModelica or + * http://www.openmodelica.org, and in the OpenModelica distribution. + * GNU version 3 is obtained from: http://www.gnu.org/copyleft/gpl.html. + * + * This program is distributed WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH + * IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS + * OF OSMC-PL. + * + * See the full OSMC Public License conditions for more details. + * + */ + +encapsulated package BaseModelica +protected + import Flags; + +public + type ScalarizeMode = enumeration( + SCALARIZED, + PARTIALLY_SCALARIZED, + NOT_SCALARIZED + ); + + type RecordMode = enumeration( + WITH_RECORDS, + WITHOUT_RECORDS + ); + + uniontype OutputFormat + record OUTPUT_FORMAT + ScalarizeMode scalarizeMode; + RecordMode recordMode; + end OUTPUT_FORMAT; + end OutputFormat; + + constant OutputFormat defaultFormat = OutputFormat.OUTPUT_FORMAT(ScalarizeMode.PARTIALLY_SCALARIZED, RecordMode.WITH_RECORDS); + + function formatFromFlags + output OutputFormat format = defaultFormat; + algorithm + if not Flags.isSet(Flags.NF_SCALARIZE) then + format.scalarizeMode := ScalarizeMode.NOT_SCALARIZED; + end if; + + format.recordMode := RecordMode.WITH_RECORDS; + + for option in Flags.getConfigStringList(Flags.BASE_MODELICA_FORMAT) loop + () := match option + case "scalarized" algorithm format.scalarizeMode := ScalarizeMode.SCALARIZED; then (); + case "partiallyScalarized" algorithm format.scalarizeMode := ScalarizeMode.PARTIALLY_SCALARIZED; then (); + case "nonScalarized" algorithm format.scalarizeMode := ScalarizeMode.NOT_SCALARIZED; then (); + case "withRecords" algorithm format.recordMode := RecordMode.WITH_RECORDS; then (); + case "withoutRecords" algorithm format.recordMode := RecordMode.WITHOUT_RECORDS; then (); + else (); + end match; + end for; + end formatFromFlags; + +annotation(__OpenModelica_Interface="frontend"); +end BaseModelica; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFBinding.mo b/OMCompiler/Compiler/NFFrontEnd/NFBinding.mo index efbfde80aff..55d506202eb 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFBinding.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFBinding.mo @@ -32,6 +32,7 @@ encapsulated uniontype NFBinding public + import BaseModelica; import Expression = NFExpression; import NFInstNode.InstNode; import Type = NFType; @@ -465,17 +466,18 @@ public function toFlatString input Binding binding; + input BaseModelica.OutputFormat format; input String prefix = ""; output String string; algorithm string := match binding case UNBOUND() then ""; case RAW_BINDING() then prefix + Dump.printExpStr(binding.bindingExp); - case UNTYPED_BINDING() then prefix + Expression.toFlatString(binding.bindingExp); - case TYPED_BINDING() then prefix + Expression.toFlatString(binding.bindingExp); - case FLAT_BINDING() then prefix + Expression.toFlatString(binding.bindingExp); - case CEVAL_BINDING() then prefix + Expression.toFlatString(binding.bindingExp); - case INVALID_BINDING() then toFlatString(binding.binding, prefix); + case UNTYPED_BINDING() then prefix + Expression.toFlatString(binding.bindingExp, format); + case TYPED_BINDING() then prefix + Expression.toFlatString(binding.bindingExp, format); + case FLAT_BINDING() then prefix + Expression.toFlatString(binding.bindingExp, format); + case CEVAL_BINDING() then prefix + Expression.toFlatString(binding.bindingExp, format); + case INVALID_BINDING() then toFlatString(binding.binding, format, prefix); end match; end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFCall.mo b/OMCompiler/Compiler/NFFrontEnd/NFCall.mo index 2947efa9f7b..21ef26e679c 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFCall.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFCall.mo @@ -33,6 +33,7 @@ encapsulated uniontype NFCall import Absyn; import AbsynUtil; +import BaseModelica; import DAE; import Expression = NFExpression; import NFCallAttributes; @@ -797,6 +798,7 @@ public function toFlatString input NFCall call; + input BaseModelica.OutputFormat format; output String str; protected String name, arg_str,c; @@ -807,12 +809,12 @@ public case TYPED_CALL() algorithm name := AbsynUtil.pathString(Function.nameConsiderBuiltin(call.fn)); - arg_str := stringDelimitList(list(Expression.toFlatString(arg) for arg in call.arguments), ", "); + arg_str := stringDelimitList(list(Expression.toFlatString(arg, format) for arg in call.arguments), ", "); then if Function.isBuiltin(call.fn) then stringAppendList({name, "(", arg_str, ")"}) elseif isExternalObjectConstructor(call) then - stringAppendList({Type.toFlatString(call.ty), "(", arg_str, ")"}) + stringAppendList({Type.toFlatString(call.ty, format), "(", arg_str, ")"}) else stringAppendList({Util.makeQuotedIdentifier(name), "(", arg_str, ")"}); @@ -822,12 +824,12 @@ public // Vectorized calls contains iterators with illegal Modelica names // (to avoid name conflicts), to make the flat output legal such // calls are reverted to their original form here. - str := Expression.toFlatString(devectorizeCall(call)); + str := Expression.toFlatString(devectorizeCall(call), format); else name := AbsynUtil.pathString(Function.nameConsiderBuiltin(NFBuiltinFuncs.ARRAY_FUNC)); - arg_str := Expression.toFlatString(call.exp); + arg_str := Expression.toFlatString(call.exp, format); c := stringDelimitList(list(Util.makeQuotedIdentifier(InstNode.name(Util.tuple21(iter))) + " in " + - Expression.toFlatString(Util.tuple22(iter)) for iter in call.iters), ", "); + Expression.toFlatString(Util.tuple22(iter), format) for iter in call.iters), ", "); str := stringAppendList({"{", arg_str, " for ", c, "}"}); end if; then @@ -836,9 +838,9 @@ public case TYPED_REDUCTION() algorithm name := AbsynUtil.pathString(Function.nameConsiderBuiltin(call.fn)); - arg_str := Expression.toFlatString(call.exp); + arg_str := Expression.toFlatString(call.exp, format); c := stringDelimitList(list(Util.makeQuotedIdentifier(InstNode.name(Util.tuple21(iter))) + " in " + - Expression.toFlatString(Util.tuple22(iter)) for iter in call.iters), ", "); + Expression.toFlatString(Util.tuple22(iter), format) for iter in call.iters), ", "); then if Function.isBuiltin(call.fn) then stringAppendList({name, "(", arg_str, " for ", c, ")"}) diff --git a/OMCompiler/Compiler/NFFrontEnd/NFClass.mo b/OMCompiler/Compiler/NFFrontEnd/NFClass.mo index 067ee68ff58..f2e43cc2512 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFClass.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFClass.mo @@ -32,6 +32,7 @@ encapsulated uniontype NFClass import Attributes = NFAttributes; +import BaseModelica; import Component = NFComponent; import Dimension = NFDimension; import Expression = NFExpression; @@ -838,6 +839,7 @@ constant Prefixes DEFAULT_PREFIXES = Prefixes.PREFIXES( function toFlatStream input Class cls; input InstNode clsNode; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -855,7 +857,7 @@ constant Prefixes DEFAULT_PREFIXES = Prefixes.PREFIXES( s := IOStream.append(s, "\n"); for comp in ClassTree.getComponents(cls.elements) loop - s := IOStream.append(s, InstNode.toFlatString(comp, indent + " ")); + s := IOStream.append(s, InstNode.toFlatString(comp, format, indent + " ")); s := IOStream.append(s, ";\n"); end for; @@ -892,13 +894,14 @@ constant Prefixes DEFAULT_PREFIXES = Prefixes.PREFIXES( function toFlatString input Class cls; input InstNode clsNode; + input BaseModelica.OutputFormat format = BaseModelica.defaultFormat; input String indent = ""; output String str; protected IOStream.IOStream s; algorithm s := IOStream.create(getInstanceName(), IOStream.IOStreamType.LIST()); - s := toFlatStream(cls, clsNode, indent, s); + s := toFlatStream(cls, clsNode, format, indent, s); str := IOStream.string(s); IOStream.delete(s); end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFClockKind.mo b/OMCompiler/Compiler/NFFrontEnd/NFClockKind.mo index 90421519ed1..c6e3a1d90fb 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFClockKind.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFClockKind.mo @@ -31,6 +31,7 @@ encapsulated uniontype NFClockKind import Absyn; + import BaseModelica; import DAE; import Expression = NFExpression; @@ -500,6 +501,7 @@ public function toFlatString input ClockKind ck; + input BaseModelica.OutputFormat format; output String str; algorithm str := match ck @@ -507,10 +509,10 @@ public Expression e1, e2; case INFERRED_CLOCK() then ""; - case RATIONAL_CLOCK(e1, e2) then Expression.toFlatString(e1) + ", " + Expression.toFlatString(e2); - case REAL_CLOCK(e1) then Expression.toFlatString(e1); - case EVENT_CLOCK(e1, e2) then Expression.toFlatString(e1) + ", " + Expression.toFlatString(e2); - case SOLVER_CLOCK(e1, e2) then Expression.toFlatString(e1) + ", " + Expression.toFlatString(e2); + case RATIONAL_CLOCK(e1, e2) then Expression.toFlatString(e1, format) + ", " + Expression.toFlatString(e2, format); + case REAL_CLOCK(e1) then Expression.toFlatString(e1, format); + case EVENT_CLOCK(e1, e2) then Expression.toFlatString(e1, format) + ", " + Expression.toFlatString(e2, format); + case SOLVER_CLOCK(e1, e2) then Expression.toFlatString(e1, format) + ", " + Expression.toFlatString(e2, format); end match; str := "Clock(" + str + ")"; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFComponent.mo b/OMCompiler/Compiler/NFFrontEnd/NFComponent.mo index 8941aa64e1e..e7190c72a27 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFComponent.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFComponent.mo @@ -31,6 +31,7 @@ encapsulated uniontype NFComponent +import BaseModelica; import Binding = NFBinding; import Class = NFClass; import NFClassTree.ClassTree; @@ -722,6 +723,7 @@ public function toFlatStream input String name; input Component component; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -732,23 +734,23 @@ public algorithm s := IOStream.append(s, indent); s := Attributes.toFlatStream(component.attributes, component.ty, s); - s := IOStream.append(s, Type.toFlatString(component.ty)); + s := IOStream.append(s, Type.toFlatString(component.ty, format)); s := IOStream.append(s, " '"); s := IOStream.append(s, name); s := IOStream.append(s, "'"); ty_attrs := list((Modifier.name(a), Modifier.binding(a)) for a in Class.getTypeAttributes(InstNode.getClass(component.classInst))); - s := typeAttrsToFlatStream(ty_attrs, component.ty, s); + s := typeAttrsToFlatStream(ty_attrs, component.ty, format, s); - s := IOStream.append(s, Binding.toFlatString(component.binding, " = ")); + s := IOStream.append(s, Binding.toFlatString(component.binding, format, " = ")); then (); case TYPE_ATTRIBUTE() algorithm s := IOStream.append(s, name); - s := IOStream.append(s, Modifier.toFlatString(component.modifier, printName = false)); + s := IOStream.append(s, Modifier.toFlatString(component.modifier, format, printName = false)); then (); end match; @@ -757,6 +759,7 @@ public function typeAttrsToFlatStream input list> typeAttrs; input Type componentType; + input BaseModelica.OutputFormat format; input output IOStream.IOStream s; protected Integer var_dims, binding_dims; @@ -783,7 +786,7 @@ public s := IOStream.append(s, name); s := IOStream.append(s, " = "); - s := IOStream.append(s, Expression.toFlatString(bind_exp)); + s := IOStream.append(s, Expression.toFlatString(bind_exp, format)); ty_attrs := listRest(ty_attrs); if listEmpty(ty_attrs) then @@ -799,13 +802,14 @@ public function toFlatString input String name; input Component component; + input BaseModelica.OutputFormat format; input String indent = ""; output String str; protected IOStream.IOStream s; algorithm s := IOStream.create(name, IOStream.IOStreamType.LIST()); - s := toFlatStream(name, component, indent, s); + s := toFlatStream(name, component, format, indent, s); str := IOStream.string(s); IOStream.delete(s); end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFComponentRef.mo b/OMCompiler/Compiler/NFFrontEnd/NFComponentRef.mo index 3f8970ca4b1..93849f2b9bd 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFComponentRef.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFComponentRef.mo @@ -30,6 +30,8 @@ */ encapsulated uniontype NFComponentRef + import BaseModelica; + protected import Component = NFComponent; import Absyn; @@ -327,6 +329,8 @@ public algorithm name := match cref case CREF() then InstNode.name(cref.node); + case WILD() then "_"; + case STRING() then cref.name; else ""; end match; end firstName; @@ -341,6 +345,12 @@ public then (); + case STRING() + algorithm + cref.restCref := EMPTY(); + then + (); + else (); end match; end first; @@ -1215,46 +1225,82 @@ public function toFlatString input ComponentRef cref; + input BaseModelica.OutputFormat format; output String str; protected - ComponentRef cr; + list strl; + list crefs; list subs; - list strl = {}; + ComponentRef cr; algorithm - (cr, subs) := stripSubscripts(cref); - strl := toFlatString_impl(cr, strl); + str := firstName(cref); - str := match listHead(strl) - case "time" then "time"; - case "_" then "_"; - else stringAppendList({"'", stringDelimitList(strl, "."), "'", Subscript.toFlatStringList(subs)}); - end match; - end toFlatString; + if str == "time" or str == "_" then + return; + end if; - function toFlatString_impl - input ComponentRef cref; - input output list strl; - algorithm - strl := match cref - local - String str; + crefs := toListReverse(cref); + strl := {"'"}; + subs := {}; - case CREF() - algorithm - str := Util.escapeQuotes(InstNode.name(cref.node)) + Subscript.toFlatStringList(cref.subscripts); + if format.scalarizeMode == BaseModelica.ScalarizeMode.NOT_SCALARIZED then + while not listEmpty(crefs) loop + cr :: crefs := crefs; + strl := firstName(cr) :: strl; + subs := listAppend(getSubscripts(cr), subs); - if Type.isRecord(cref.ty) and not listEmpty(strl) then - strl := ("'" + listHead(strl)) :: listRest(strl); - str := str + "'"; + if format.recordMode == BaseModelica.RecordMode.WITH_RECORDS and isCref(cr) and + Type.isRecord(scalarType(cr)) and not listEmpty(crefs) then + strl := "'" :: strl; + + if not listEmpty(subs) then + strl := Subscript.toFlatStringList(subs, format) :: strl; + subs := {}; end if; - then - toFlatString_impl(cref.restCref, str :: strl); - case WILD() then "_" :: strl; - case STRING() then toFlatString_impl(cref.restCref, cref.name :: strl); - else strl; - end match; - end toFlatString_impl; + if not listEmpty(crefs) then + strl := ".'" :: strl; + end if; + elseif not listEmpty(crefs) then + strl := "." :: strl; + end if; + end while; + else + while not listEmpty(crefs) loop + cr :: crefs := crefs; + strl := firstName(cr) :: strl; + subs := getSubscripts(cr); + + if not listEmpty(subs) and + not (format.scalarizeMode == BaseModelica.ScalarizeMode.PARTIALLY_SCALARIZED and listEmpty(crefs)) then + strl := Subscript.toFlatStringList(subs, format) :: strl; + end if; + + if not listEmpty(crefs) then + if format.recordMode == BaseModelica.RecordMode.WITH_RECORDS and isCref(cr) and + Type.isRecord(scalarType(cr)) then + strl := "'.'" :: strl; + else + strl := "." :: strl; + end if; + end if; + end while; + + if format.scalarizeMode == BaseModelica.ScalarizeMode.PARTIALLY_SCALARIZED then + subs := getSubscripts(cref); + else + subs := {}; + end if; + end if; + + strl := "'" :: strl; + + if not listEmpty(subs) then + strl := Subscript.toFlatStringList(subs, format) :: strl; + end if; + + str := stringAppendList(listReverse(strl)); + end toFlatString; function listToString input list crs; @@ -1595,6 +1641,8 @@ public then toListReverse(cref.restCref, includeScope, cref :: accum); case CREF(origin = Origin.CREF) then toListReverse(cref.restCref, includeScope, cref :: accum); + case STRING() + then toListReverse(cref.restCref, includeScope, cref :: accum); else accum; end match; end toListReverse; @@ -2183,6 +2231,5 @@ public end if; end getRecordChildren; - annotation(__OpenModelica_Interface="frontend"); end NFComponentRef; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFDimension.mo b/OMCompiler/Compiler/NFFrontEnd/NFDimension.mo index 9faadb31c29..4a848ccbc50 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFDimension.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFDimension.mo @@ -393,15 +393,16 @@ public function toFlatString input Dimension dim; + input BaseModelica.OutputFormat format; output String str; algorithm str := match dim case INTEGER() then String(dim.size); case BOOLEAN() then "Boolean"; - case ENUM() then Type.toFlatString(dim.enumType); - case EXP() then Expression.toFlatString(dim.exp); + case ENUM() then Type.toFlatString(dim.enumType, format); + case EXP() then Expression.toFlatString(dim.exp, format); case UNKNOWN() then ":"; - case UNTYPED() then Expression.toFlatString(dim.dimension); + case UNTYPED() then Expression.toFlatString(dim.dimension, format); end match; end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFEquation.mo b/OMCompiler/Compiler/NFFrontEnd/NFEquation.mo index 30f0011d27f..417d84664dc 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFEquation.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFEquation.mo @@ -124,20 +124,21 @@ public function toFlatStream input Branch branch; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; algorithm s := match branch case BRANCH() algorithm - s := IOStream.append(s, Expression.toFlatString(branch.condition)); + s := IOStream.append(s, Expression.toFlatString(branch.condition, format)); s := IOStream.append(s, " then\n"); - s := toFlatStreamList(branch.body, indent + " ", s); + s := toFlatStreamList(branch.body, format, indent + " ", s); then s; case INVALID_BRANCH() - then toFlatStream(branch.branch, indent, s); + then toFlatStream(branch.branch, format, indent, s); end match; end toFlatStream; @@ -1409,6 +1410,7 @@ public function toFlatStream input Equation eq; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; algorithm @@ -1417,26 +1419,26 @@ public s := match eq case EQUALITY() algorithm - s := IOStream.append(s, Expression.toFlatString(eq.lhs)); + s := IOStream.append(s, Expression.toFlatString(eq.lhs, format)); s := IOStream.append(s, " = "); - s := IOStream.append(s, Expression.toFlatString(eq.rhs)); + s := IOStream.append(s, Expression.toFlatString(eq.rhs, format)); then s; case ARRAY_EQUALITY() algorithm - s := IOStream.append(s, Expression.toFlatString(eq.lhs)); + s := IOStream.append(s, Expression.toFlatString(eq.lhs, format)); s := IOStream.append(s, " = "); - s := IOStream.append(s, Expression.toFlatString(eq.rhs)); + s := IOStream.append(s, Expression.toFlatString(eq.rhs, format)); then s; case CONNECT() algorithm s := IOStream.append(s, "connect("); - s := IOStream.append(s, Expression.toFlatString(eq.lhs)); + s := IOStream.append(s, Expression.toFlatString(eq.lhs, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(eq.rhs)); + s := IOStream.append(s, Expression.toFlatString(eq.rhs, format)); s := IOStream.append(s, ")"); then s; @@ -1448,11 +1450,11 @@ public if isSome(eq.range) then s := IOStream.append(s, " in "); - s := IOStream.append(s, Expression.toFlatString(Util.getOption(eq.range))); + s := IOStream.append(s, Expression.toFlatString(Util.getOption(eq.range), format)); end if; s := IOStream.append(s, " loop\n"); - s := toFlatStreamList(eq.body, indent + " ", s); + s := toFlatStreamList(eq.body, format, indent + " ", s); s := IOStream.append(s, indent); s := IOStream.append(s, "end for"); then @@ -1461,12 +1463,12 @@ public case IF() algorithm s := IOStream.append(s, "if "); - s := Branch.toFlatStream(listHead(eq.branches), indent, s); + s := Branch.toFlatStream(listHead(eq.branches), format, indent, s); for b in listRest(eq.branches) loop s := IOStream.append(s, indent); s := IOStream.append(s, "elseif "); - s := Branch.toFlatStream(b, indent, s); + s := Branch.toFlatStream(b, format, indent, s); end for; s := IOStream.append(s, indent); @@ -1477,12 +1479,12 @@ public case WHEN() algorithm s := IOStream.append(s, "when "); - s := Branch.toFlatStream(listHead(eq.branches), indent, s); + s := Branch.toFlatStream(listHead(eq.branches), format, indent, s); for b in listRest(eq.branches) loop s := IOStream.append(s, indent); s := IOStream.append(s, "elsewhen "); - s := Branch.toFlatStream(b, indent, s); + s := Branch.toFlatStream(b, format, indent, s); end for; s := IOStream.append(s, indent); @@ -1493,11 +1495,11 @@ public case ASSERT() algorithm s := IOStream.append(s, "assert("); - s := IOStream.append(s, Expression.toFlatString(eq.condition)); + s := IOStream.append(s, Expression.toFlatString(eq.condition, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(eq.message)); + s := IOStream.append(s, Expression.toFlatString(eq.message, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(eq.level)); + s := IOStream.append(s, Expression.toFlatString(eq.level, format)); s := IOStream.append(s, ")"); then s; @@ -1505,7 +1507,7 @@ public case TERMINATE() algorithm s := IOStream.append(s, "terminate("); - s := IOStream.append(s, Expression.toFlatString(eq.message)); + s := IOStream.append(s, Expression.toFlatString(eq.message, format)); s := IOStream.append(s, ")"); then s; @@ -1513,15 +1515,15 @@ public case REINIT() algorithm s := IOStream.append(s, "reinit("); - s := IOStream.append(s, Expression.toFlatString(eq.cref)); + s := IOStream.append(s, Expression.toFlatString(eq.cref, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(eq.reinitExp)); + s := IOStream.append(s, Expression.toFlatString(eq.reinitExp, format)); s := IOStream.append(s, ")"); then s; case NORETCALL() - then IOStream.append(s, Expression.toFlatString(eq.exp)); + then IOStream.append(s, Expression.toFlatString(eq.exp, format)); else IOStream.append(s, "#UNKNOWN EQUATION#"); end match; @@ -1531,6 +1533,7 @@ public function toFlatStreamList input list eql; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -1550,7 +1553,7 @@ public prev_multi_line := multi_line; - s := toFlatStream(eq, indent, s); + s := toFlatStream(eq, format, indent, s); s := IOStream.append(s, ";\n"); end for; end toFlatStreamList; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFExpression.mo b/OMCompiler/Compiler/NFFrontEnd/NFExpression.mo index 131586d6bec..57094f14187 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFExpression.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFExpression.mo @@ -57,6 +57,7 @@ protected public import Absyn.Path; + import BaseModelica; import DAE; import NFInstNode.InstNode; import Operator = NFOperator; @@ -1889,6 +1890,7 @@ public function toFlatString input Expression exp; + input BaseModelica.OutputFormat format; output String str; protected Type t; @@ -1905,81 +1907,81 @@ public case ENUM_LITERAL(ty = t as Type.ENUMERATION()) then "'" + AbsynUtil.pathString(t.typePath) + "'." + exp.name; - case CLKCONST(clk) then ClockKind.toFlatString(clk); + case CLKCONST(clk) then ClockKind.toFlatString(clk, format); - case CREF() then ComponentRef.toFlatString(exp.cref); + case CREF() then ComponentRef.toFlatString(exp.cref, format); case TYPENAME() then Type.typenameString(Type.arrayElementType(exp.ty)); case ARRAY() then if arrayEmpty(exp.elements) then - "fill("+toFlatString(makeDefaultValue(Type.elementType(exp.ty)))+", " + Type.dimensionsToFlatString(exp.ty) + ")" + "fill("+toFlatString(makeDefaultValue(Type.elementType(exp.ty)), format)+", " + Type.dimensionsToFlatString(exp.ty, format) + ")" else - "{" + stringDelimitList(list(toFlatString(e) for e in exp.elements), ", ") + "}"; + "{" + stringDelimitList(list(toFlatString(e, format) for e in exp.elements), ", ") + "}"; - case MATRIX() then "[" + stringDelimitList(list(stringDelimitList(list(toFlatString(e) for e in el), ", ") for el in exp.elements), "; ") + "]"; + case MATRIX() then "[" + stringDelimitList(list(stringDelimitList(list(toFlatString(e, format) for e in el), ", ") for el in exp.elements), "; ") + "]"; - case RANGE() then operandFlatString(exp.start, exp, false) + + case RANGE() then operandFlatString(exp.start, exp, false, format) + ( if isSome(exp.step) - then ":" + operandFlatString(Util.getOption(exp.step), exp, false) + then ":" + operandFlatString(Util.getOption(exp.step), exp, false, format) else "" - ) + ":" + operandFlatString(exp.stop, exp, false); + ) + ":" + operandFlatString(exp.stop, exp, false, format); - case TUPLE() then "(" + stringDelimitList(list(toFlatString(e) for e in exp.elements), ", ") + ")"; - case RECORD() then List.toString(exp.elements, toFlatString, Type.toFlatString(exp.ty), "(", ", ", ")", true); - case CALL() then Call.toFlatString(exp.call); - case SIZE() then "size(" + toFlatString(exp.exp) + + case TUPLE() then "(" + stringDelimitList(list(toFlatString(e, format) for e in exp.elements), ", ") + ")"; + case RECORD() then List.toString(exp.elements, function toFlatString(format = format), Type.toFlatString(exp.ty, format), "(", ", ", ")", true); + case CALL() then Call.toFlatString(exp.call, format); + case SIZE() then "size(" + toFlatString(exp.exp, format) + ( if isSome(exp.dimIndex) - then ", " + toFlatString(Util.getOption(exp.dimIndex)) + then ", " + toFlatString(Util.getOption(exp.dimIndex), format) else "" ) + ")"; case END() then "end"; - case MULTARY() guard(listEmpty(exp.inv_arguments)) then multaryFlatString(exp.arguments, exp, exp.operator, false); + case MULTARY() guard(listEmpty(exp.inv_arguments)) then multaryFlatString(exp.arguments, exp, exp.operator, format, false); case MULTARY() guard(listEmpty(exp.arguments) and Operator.isDashClassification(Operator.getMathClassification(exp.operator))) - then "-" + multaryFlatString(exp.inv_arguments, exp, exp.operator); + then "-" + multaryFlatString(exp.inv_arguments, exp, exp.operator, format); - case MULTARY() guard(listEmpty(exp.arguments)) then "1/" + multaryFlatString(exp.inv_arguments, exp, exp.operator); + case MULTARY() guard(listEmpty(exp.arguments)) then "1/" + multaryFlatString(exp.inv_arguments, exp, exp.operator, format); - case MULTARY() then multaryFlatString(exp.arguments, exp, exp.operator) + + case MULTARY() then multaryFlatString(exp.arguments, exp, exp.operator, format) + Operator.symbol(Operator.invert(exp.operator)) + - multaryFlatString(exp.inv_arguments, exp, exp.operator); + multaryFlatString(exp.inv_arguments, exp, exp.operator, format); - case BINARY() then operandFlatString(exp.exp1, exp, true) + + case BINARY() then operandFlatString(exp.exp1, exp, true, format) + Operator.symbol(exp.operator) + - operandFlatString(exp.exp2, exp, false); + operandFlatString(exp.exp2, exp, false, format); case UNARY() then Operator.symbol(exp.operator, "") + - operandFlatString(exp.exp, exp, false); + operandFlatString(exp.exp, exp, false, format); - case LBINARY() then operandFlatString(exp.exp1, exp, true) + + case LBINARY() then operandFlatString(exp.exp1, exp, true, format) + Operator.symbol(exp.operator) + - operandFlatString(exp.exp2, exp, false); + operandFlatString(exp.exp2, exp, false, format); case LUNARY() then Operator.symbol(exp.operator, "") + " " + - operandFlatString(exp.exp, exp, false); + operandFlatString(exp.exp, exp, false, format); - case RELATION() then operandFlatString(exp.exp1, exp, true) + + case RELATION() then operandFlatString(exp.exp1, exp, true, format) + Operator.symbol(exp.operator) + - operandFlatString(exp.exp2, exp, false); + operandFlatString(exp.exp2, exp, false, format); - case IF() then "if " + toFlatString(exp.condition) + " then " + toFlatString(exp.trueBranch) + " else " + toFlatString(exp.falseBranch); + case IF() then "if " + toFlatString(exp.condition, format) + " then " + toFlatString(exp.trueBranch, format) + " else " + toFlatString(exp.falseBranch, format); - case CAST() then toFlatString(exp.exp); - case UNBOX() then "UNBOX(" + toFlatString(exp.exp) + ")"; - case BOX() then "BOX(" + toFlatString(exp.exp) + ")"; + case CAST() then toFlatString(exp.exp, format); + case UNBOX() then "UNBOX(" + toFlatString(exp.exp, format) + ")"; + case BOX() then "BOX(" + toFlatString(exp.exp, format) + ")"; - case SUBSCRIPTED_EXP() then "(" + toFlatString(exp.exp) + ")" + Subscript.toFlatStringList(exp.subscripts); - case TUPLE_ELEMENT() then toFlatString(exp.tupleExp) + "[" + intString(exp.index) + "]"; - case RECORD_ELEMENT() then toFlatString(exp.recordExp) + "[field: " + exp.fieldName + "]"; - case MUTABLE() then toFlatString(Mutable.access(exp.exp)); + case SUBSCRIPTED_EXP() then "(" + toFlatString(exp.exp, format) + ")" + Subscript.toFlatStringList(exp.subscripts, format); + case TUPLE_ELEMENT() then toFlatString(exp.tupleExp, format) + "[" + intString(exp.index) + "]"; + case RECORD_ELEMENT() then toFlatString(exp.recordExp, format) + "[field: " + exp.fieldName + "]"; + case MUTABLE() then toFlatString(Mutable.access(exp.exp), format); case SHARED_LITERAL() then "[literal: " + intString(exp.index) + ", " + toString(exp.exp) + "]"; case EMPTY() then "#EMPTY#"; case PARTIAL_FUNCTION_APPLICATION() - then "function " + ComponentRef.toFlatString(exp.fn) + "(" + stringDelimitList( - list(n + " = " + toFlatString(a) threaded for a in exp.args, n in exp.argNames), ", ") + ")"; + then "function " + ComponentRef.toFlatString(exp.fn, format) + "(" + stringDelimitList( + list(n + " = " + toFlatString(a, format) threaded for a in exp.args, n in exp.argNames), ", ") + ")"; case FILENAME() then "\"" + Util.escapeModelicaStringToCString(exp.filename) + "\""; else anyString(exp); @@ -2022,12 +2024,13 @@ public input Expression operand; input Expression operator; input Boolean lhs; + input BaseModelica.OutputFormat format; output String str; protected Integer operand_prio, operator_prio; Boolean parenthesize = false; algorithm - str := toFlatString(operand); + str := toFlatString(operand, format); operand_prio := priority(operand, lhs); if operand_prio == 4 then @@ -2065,10 +2068,11 @@ public input list arguments; input Expression exp; input Operator operator; + input BaseModelica.OutputFormat format; input Boolean parenthesize = true; output String str; algorithm - str := stringDelimitList(list(operandFlatString(e, exp, false) for e in arguments), Operator.symbol(operator)); + str := stringDelimitList(list(operandFlatString(e, exp, false, format) for e in arguments), Operator.symbol(operator)); if parenthesize and listLength(arguments) > 1 then str := "(" + str + ")"; end if; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFFlatModel.mo b/OMCompiler/Compiler/NFFrontEnd/NFFlatModel.mo index 588bd3da354..c0fb682cbac 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFFlatModel.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFFlatModel.mo @@ -232,20 +232,23 @@ public protected FlatModel flat_model = flatModel; String name = className(flatModel); + BaseModelica.OutputFormat format; algorithm + format := BaseModelica.formatFromFlags(); + s := IOStream.append(s, "//! base 0.1.0\n"); s := IOStream.append(s, "package '" + name + "'\n"); flat_model.variables := reconstructRecordInstances(flat_model.variables); for fn in functions loop if not (Function.isDefaultRecordConstructor(fn) or Function.isExternalObjectConstructorOrDestructor(fn)) then - s := Function.toFlatStream(fn, " ", s); + s := Function.toFlatStream(fn, format, " ", s); s := IOStream.append(s, ";\n\n"); end if; end for; for ty in collectFlatTypes(flat_model, functions) loop - s := Type.toFlatDeclarationStream(ty, " ", s); + s := Type.toFlatDeclarationStream(ty, format, " ", s); s := IOStream.append(s, ";\n\n"); end for; @@ -254,31 +257,31 @@ public s := IOStream.append(s, "\n"); for v in flat_model.variables loop - s := Variable.toFlatStream(v, " ", printBindingTypes, s); + s := Variable.toFlatStream(v, format, " ", printBindingTypes, s); s := IOStream.append(s, ";\n"); end for; if not listEmpty(flat_model.initialEquations) then s := IOStream.append(s, " initial equation\n"); - s := Equation.toFlatStreamList(flat_model.initialEquations, " ", s); + s := Equation.toFlatStreamList(flat_model.initialEquations, format, " ", s); end if; if not listEmpty(flat_model.equations) then s := IOStream.append(s, " equation\n"); - s := Equation.toFlatStreamList(flat_model.equations, " ", s); + s := Equation.toFlatStreamList(flat_model.equations, format, " ", s); end if; for alg in flat_model.initialAlgorithms loop if not listEmpty(alg.statements) then s := IOStream.append(s, " initial algorithm\n"); - s := Statement.toFlatStreamList(alg.statements, " ", s); + s := Statement.toFlatStreamList(alg.statements, format, " ", s); end if; end for; for alg in flat_model.algorithms loop if not listEmpty(alg.statements) then s := IOStream.append(s, " algorithm\n"); - s := Statement.toFlatStreamList(alg.statements, " ", s); + s := Statement.toFlatStreamList(alg.statements, format, " ", s); end if; end for; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFFunction.mo b/OMCompiler/Compiler/NFFrontEnd/NFFunction.mo index 01786e64f67..b4094c80909 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFFunction.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFFunction.mo @@ -859,6 +859,7 @@ uniontype Function function toFlatStream input Function fn; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; input String overrideName = ""; @@ -869,7 +870,7 @@ uniontype Function SCode.Mod annMod; algorithm if isDefaultRecordConstructor(fn) then - s := Record.toFlatDeclarationStream(fn.node, indent, s); + s := Record.toFlatDeclarationStream(fn.node, format, indent, s); elseif isPartialDerivative(fn) then fn_name := if stringEmpty(overrideName) then Util.makeQuotedIdentifier(AbsynUtil.pathString(fn.path)) else overrideName; @@ -894,23 +895,23 @@ uniontype Function s := IOStream.append(s, "\n"); for i in fn.inputs loop - s := IOStream.append(s, InstNode.toFlatString(i, indent + " ")); + s := IOStream.append(s, InstNode.toFlatString(i, format, indent + " ")); s := IOStream.append(s, ";\n"); end for; for o in fn.outputs loop - s := IOStream.append(s, InstNode.toFlatString(o, indent + " ")); + s := IOStream.append(s, InstNode.toFlatString(o, format, indent + " ")); s := IOStream.append(s, ";\n"); end for; if not listEmpty(fn.locals) then for l in fn.locals loop - s := IOStream.append(s, InstNode.toFlatString(l, indent + " ")); + s := IOStream.append(s, InstNode.toFlatString(l, format, indent + " ")); s := IOStream.append(s, ";\n"); end for; end if; - s := Sections.toFlatStream(InstNode.getSections(fn.node), fn.path, indent, s); + s := Sections.toFlatStream(InstNode.getSections(fn.node), fn.path, format, indent, s); if isSome(cmt.annotation_) then SOME(SCode.ANNOTATION(modification=annMod)) := cmt.annotation_; @@ -943,13 +944,14 @@ uniontype Function function toFlatString input Function fn; + input BaseModelica.OutputFormat format = BaseModelica.defaultFormat; input String indent = ""; output String str; protected IOStream.IOStream s; algorithm s := IOStream.create(getInstanceName(), IOStream.IOStreamType.LIST()); - s := toFlatStream(fn, indent, s); + s := toFlatStream(fn, format, indent, s); str := IOStream.string(s); IOStream.delete(s); end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFInstNode.mo b/OMCompiler/Compiler/NFFrontEnd/NFInstNode.mo index 2a47b4c0c70..c3e085021dc 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFInstNode.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFInstNode.mo @@ -31,6 +31,7 @@ encapsulated package NFInstNode +import BaseModelica; import Binding = NFBinding; import Component = NFComponent; import Class = NFClass; @@ -1588,25 +1589,27 @@ uniontype InstNode function toFlatString input InstNode node; + input BaseModelica.OutputFormat format; input String indent; output String name; algorithm name := match node - case COMPONENT_NODE() then Component.toFlatString(node.name, Pointer.access(node.component), indent); - case CLASS_NODE() then Class.toFlatString(Pointer.access(node.cls), node, indent); + case COMPONENT_NODE() then Component.toFlatString(node.name, Pointer.access(node.component), format, indent); + case CLASS_NODE() then Class.toFlatString(Pointer.access(node.cls), node, format, indent); else name(node); end match; end toFlatString; function toFlatStream input InstNode node; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; algorithm s := match node - case COMPONENT_NODE() then Component.toFlatStream(node.name, Pointer.access(node.component), indent, s); - case CLASS_NODE() then Class.toFlatStream(Pointer.access(node.cls), node, indent, s); - else IOStream.append(s, toFlatString(node, indent)); + case COMPONENT_NODE() then Component.toFlatStream(node.name, Pointer.access(node.component), format, indent, s); + case CLASS_NODE() then Class.toFlatStream(Pointer.access(node.cls), node, format, indent, s); + else IOStream.append(s, toFlatString(node, format, indent)); end match; end toFlatStream; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFModifier.mo b/OMCompiler/Compiler/NFFrontEnd/NFModifier.mo index 97bc06391f4..9dacd8db771 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFModifier.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFModifier.mo @@ -43,6 +43,7 @@ public import Absyn; import AbsynUtil; import BaseAvlTree; +import BaseModelica; import Binding = NFBinding; import NFInstNode.InstNode; import SCode; @@ -609,6 +610,7 @@ public function toFlatStreamList input list modifiers; + input BaseModelica.OutputFormat format; input output IOStream.IOStream s; input String delimiter = ", "; protected @@ -619,7 +621,7 @@ public end if; while true loop - s := toFlatStream(listHead(mods), s); + s := toFlatStream(listHead(mods), format, s); mods := listRest(mods); if listEmpty(mods) then @@ -632,6 +634,7 @@ public function toFlatStream input Modifier mod; + input BaseModelica.OutputFormat format; input output IOStream.IOStream s; input Boolean printName = true; protected @@ -648,14 +651,14 @@ public submods := ModTable.listValues(mod.subModifiers); if not listEmpty(submods) then s := IOStream.append(s, "("); - s := toFlatStreamList(submods, s); + s := toFlatStreamList(submods, format, s); s := IOStream.append(s, ")"); binding_sep := " = "; else binding_sep := if printName then " = " else "= "; end if; - s := IOStream.append(s, Binding.toFlatString(mod.binding, binding_sep)); + s := IOStream.append(s, Binding.toFlatString(mod.binding, format, binding_sep)); then (); @@ -665,13 +668,14 @@ public function toFlatString input Modifier mod; + input BaseModelica.OutputFormat format; input Boolean printName = true; output String str; protected IOStream.IOStream s; algorithm s := IOStream.create(getInstanceName(), IOStream.IOStreamType.LIST()); - s := toFlatStream(mod, s, printName); + s := toFlatStream(mod, format, s, printName); str := IOStream.string(s); IOStream.delete(s); end toFlatString; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFRecord.mo b/OMCompiler/Compiler/NFFrontEnd/NFRecord.mo index 53965ee030f..4ec7b04e60f 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFRecord.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFRecord.mo @@ -39,6 +39,7 @@ encapsulated package NFRecord " import Attributes = NFAttributes; +import BaseModelica; import Binding = NFBinding; import Class = NFClass; import Component = NFComponent; @@ -360,6 +361,7 @@ end foldInputFields; function toFlatDeclarationStream input InstNode recordNode; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -371,7 +373,7 @@ algorithm Typing.typeClass(node, NFInstContext.RELAXED); // Keep the node type from the original node to get the correct name. node := InstNode.setNodeType(node_ty, node); - s := IOStream.append(s, InstNode.toFlatString(node, indent)); + s := IOStream.append(s, InstNode.toFlatString(node, format, indent)); end toFlatDeclarationStream; annotation(__OpenModelica_Interface="frontend"); diff --git a/OMCompiler/Compiler/NFFrontEnd/NFSections.mo b/OMCompiler/Compiler/NFFrontEnd/NFSections.mo index dd4c931a610..89260d9f828 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFSections.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFSections.mo @@ -30,6 +30,7 @@ */ encapsulated uniontype NFSections + import BaseModelica; import Equation = NFEquation; import Algorithm = NFAlgorithm; import Statement = NFStatement; @@ -390,6 +391,7 @@ public function toFlatStream input Sections sections; input Absyn.Path scopeName; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -402,7 +404,7 @@ public for alg in sections.algorithms loop s := IOStream.append(s, indent); s := IOStream.append(s, "algorithm\n"); - s := Statement.toFlatStreamList(alg.statements, indent + " ", s); + s := Statement.toFlatStreamList(alg.statements, format, indent + " ", s); end for; then (); case EXTERNAL() @@ -414,13 +416,13 @@ public if sections.explicit then if not ComponentRef.isEmpty(sections.outputRef) then s := IOStream.append(s, " "); - s := IOStream.append(s, ComponentRef.toFlatString(sections.outputRef)); + s := IOStream.append(s, ComponentRef.toFlatString(sections.outputRef, format)); s := IOStream.append(s, " ="); end if; s := IOStream.append(s, " "); s := IOStream.append(s, sections.name); s := IOStream.append(s, "("); - s := IOStream.append(s, stringDelimitList(list(Expression.toFlatString(e) for e in sections.args), ", ")); + s := IOStream.append(s, stringDelimitList(list(Expression.toFlatString(e, format) for e in sections.args), ", ")); s := IOStream.append(s, ")"); end if; if isSome(sections.ann) then diff --git a/OMCompiler/Compiler/NFFrontEnd/NFStatement.mo b/OMCompiler/Compiler/NFFrontEnd/NFStatement.mo index 437749ccc82..86e9461b42d 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFStatement.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFStatement.mo @@ -907,6 +907,7 @@ public function toFlatStream input Statement stmt; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -917,9 +918,9 @@ public s := match stmt case ASSIGNMENT() algorithm - s := IOStream.append(s, Expression.toFlatString(stmt.lhs)); + s := IOStream.append(s, Expression.toFlatString(stmt.lhs, format)); s := IOStream.append(s, " := "); - s := IOStream.append(s, Expression.toFlatString(stmt.rhs)); + s := IOStream.append(s, Expression.toFlatString(stmt.rhs, format)); then s; @@ -937,11 +938,11 @@ public if isSome(stmt.range) then s := IOStream.append(s, " in "); - s := IOStream.append(s, Expression.toFlatString(Util.getOption(stmt.range))); + s := IOStream.append(s, Expression.toFlatString(Util.getOption(stmt.range), format)); end if; s := IOStream.append(s, " loop\n"); - s := toFlatStreamList(stmt.body, indent + " ", s); + s := toFlatStreamList(stmt.body, format, indent + " ", s); s := IOStream.append(s, indent); s := IOStream.append(s, "end for"); then @@ -953,9 +954,9 @@ public for b in stmt.branches loop s := IOStream.append(s, str); - s := IOStream.append(s, Expression.toFlatString(Util.tuple21(b))); + s := IOStream.append(s, Expression.toFlatString(Util.tuple21(b), format)); s := IOStream.append(s, " then\n"); - s := toFlatStreamList(Util.tuple22(b), indent + " ", s); + s := toFlatStreamList(Util.tuple22(b), format, indent + " ", s); s := IOStream.append(s, indent); str := "elseif "; end for; @@ -970,9 +971,9 @@ public for b in stmt.branches loop s := IOStream.append(s, str); - s := IOStream.append(s, Expression.toFlatString(Util.tuple21(b))); + s := IOStream.append(s, Expression.toFlatString(Util.tuple21(b), format)); s := IOStream.append(s, " then\n"); - s := toFlatStreamList(Util.tuple22(b), indent + " ", s); + s := toFlatStreamList(Util.tuple22(b), format, indent + " ", s); s := IOStream.append(s, indent); str := "elsewhen "; end for; @@ -984,11 +985,11 @@ public case ASSERT() algorithm s := IOStream.append(s, "assert("); - s := IOStream.append(s, Expression.toFlatString(stmt.condition)); + s := IOStream.append(s, Expression.toFlatString(stmt.condition, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(stmt.message)); + s := IOStream.append(s, Expression.toFlatString(stmt.message, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(stmt.level)); + s := IOStream.append(s, Expression.toFlatString(stmt.level, format)); s := IOStream.append(s, ")"); then s; @@ -996,7 +997,7 @@ public case TERMINATE() algorithm s := IOStream.append(s, "terminate("); - s := IOStream.append(s, Expression.toFlatString(stmt.message)); + s := IOStream.append(s, Expression.toFlatString(stmt.message, format)); s := IOStream.append(s, ")"); then s; @@ -1004,22 +1005,22 @@ public case REINIT() algorithm s := IOStream.append(s, "reinit("); - s := IOStream.append(s, Expression.toFlatString(stmt.cref)); + s := IOStream.append(s, Expression.toFlatString(stmt.cref, format)); s := IOStream.append(s, ", "); - s := IOStream.append(s, Expression.toFlatString(stmt.reinitExp)); + s := IOStream.append(s, Expression.toFlatString(stmt.reinitExp, format)); s := IOStream.append(s, ")"); then s; case NORETCALL() - then IOStream.append(s, Expression.toFlatString(stmt.exp)); + then IOStream.append(s, Expression.toFlatString(stmt.exp, format)); case WHILE() algorithm s := IOStream.append(s, "while "); - s := IOStream.append(s, Expression.toFlatString(stmt.condition)); + s := IOStream.append(s, Expression.toFlatString(stmt.condition, format)); s := IOStream.append(s, " loop\n"); - s := toFlatStreamList(stmt.body, indent + " ", s); + s := toFlatStreamList(stmt.body, format, indent + " ", s); s := IOStream.append(s, indent); s := IOStream.append(s, "end while"); then @@ -1035,6 +1036,7 @@ public function toFlatStreamList input list stmtl; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; protected @@ -1054,7 +1056,7 @@ public prev_multi_line := multi_line; - s := toFlatStream(stmt, indent, s); + s := toFlatStream(stmt, format, indent, s); s := IOStream.append(s, ";\n"); end for; end toFlatStreamList; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFSubscript.mo b/OMCompiler/Compiler/NFFrontEnd/NFSubscript.mo index 5d4fa918acc..16b192587f7 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFSubscript.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFSubscript.mo @@ -48,6 +48,7 @@ public import Expression = NFExpression; import Absyn; import AbsynUtil; + import BaseModelica; import Dimension = NFDimension; import NFPrefixes.{Variability, Purity}; import NFCeval.EvalTarget; @@ -820,13 +821,14 @@ public function toFlatString input Subscript subscript; + input BaseModelica.OutputFormat format; output String string; algorithm string := match subscript case RAW_SUBSCRIPT() then Dump.printSubscriptStr(subscript.subscript); - case UNTYPED() then Expression.toFlatString(subscript.exp); - case INDEX() then Expression.toFlatString(subscript.index); - case SLICE() then Expression.toFlatString(subscript.slice); + case UNTYPED() then Expression.toFlatString(subscript.exp, format); + case INDEX() then Expression.toFlatString(subscript.index, format); + case SLICE() then Expression.toFlatString(subscript.slice, format); case EXPANDED_SLICE() then List.toString(subscript.indices, toString, "", "{", ", ", "}", false); case WHOLE() then ":"; @@ -837,9 +839,10 @@ public function toFlatStringList input list subscripts; + input BaseModelica.OutputFormat format; output String string; algorithm - string := List.toString(subscripts, toFlatString, "", "[", ",", "]", false); + string := List.toString(subscripts, function toFlatString(format = format), "", "[", ",", "]", false); end toFlatStringList; function toJSON diff --git a/OMCompiler/Compiler/NFFrontEnd/NFType.mo b/OMCompiler/Compiler/NFFrontEnd/NFType.mo index bca2edc1390..6330d2e4f25 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFType.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFType.mo @@ -933,6 +933,7 @@ public function toFlatString input Type ty; + input BaseModelica.OutputFormat format; output String str; algorithm str := match ty @@ -942,17 +943,17 @@ public case Type.BOOLEAN() then "Boolean"; case Type.CLOCK() then "Clock"; case Type.ENUMERATION() then if listEmpty(ty.literals) then "enumeration(:)" else Util.makeQuotedIdentifier(AbsynUtil.pathString(ty.typePath)); - case Type.ARRAY() then List.toString(ty.dimensions, Dimension.toFlatString, toFlatString(ty.elementType), "[", ", ", "]", false); - case Type.TUPLE() then "(" + stringDelimitList(List.map(ty.types, toFlatString), ", ") + ")"; + case Type.ARRAY() then List.toString(ty.dimensions, function Dimension.toFlatString(format = format), toFlatString(ty.elementType, format), "[", ", ", "]", false); + case Type.TUPLE() then "(" + stringDelimitList(List.map(ty.types, function toFlatString(format = format)), ", ") + ")"; case Type.NORETCALL() then "()"; case Type.UNKNOWN() then "unknown()"; case Type.COMPLEX() then Util.makeQuotedIdentifier(AbsynUtil.pathString(InstNode.scopePath(ty.cls))); case Type.FUNCTION() then Function.typeString(ty.fn); - case Type.METABOXED() then "#" + toFlatString(ty.ty); + case Type.METABOXED() then "#" + toFlatString(ty.ty, format); case Type.POLYMORPHIC() then "<" + ty.name + ">"; case Type.ANY() then "$ANY$"; - case Type.CONDITIONAL_ARRAY() then toFlatString(ty.trueType) + "|" + toFlatString(ty.falseType); - case Type.UNTYPED() then List.toString(arrayList(ty.dimensions), Dimension.toFlatString, InstNode.name(ty.typeNode), "[", ", ", "]", false); + case Type.CONDITIONAL_ARRAY() then toFlatString(ty.trueType, format) + "|" + toFlatString(ty.falseType, format); + case Type.UNTYPED() then List.toString(arrayList(ty.dimensions), function Dimension.toFlatString(format = format), InstNode.name(ty.typeNode), "[", ", ", "]", false); else algorithm Error.assertion(false, getInstanceName() + " got unknown type: " + anyString(ty), sourceInfo()); @@ -963,10 +964,11 @@ public function dimensionsToFlatString input Type ty; + input BaseModelica.OutputFormat format; output String str; algorithm str := match ty - case Type.ARRAY() then stringDelimitList(List.map(ty.dimensions, Dimension.toFlatString), ", "); + case Type.ARRAY() then stringDelimitList(List.map(ty.dimensions, function Dimension.toFlatString(format = format)), ", "); else algorithm Error.assertion(false, getInstanceName() + " got unknown or not array type: " + anyString(ty), sourceInfo()); @@ -977,6 +979,7 @@ public function toFlatDeclarationStream input Type ty; + input BaseModelica.OutputFormat format; input String indent; input output IOStream.IOStream s; algorithm @@ -1010,7 +1013,7 @@ public s; case COMPLEX(complexTy = ComplexType.RECORD()) - then Record.toFlatDeclarationStream(ty.cls, indent, s); + then Record.toFlatDeclarationStream(ty.cls, format, indent, s); case COMPLEX(complexTy = complexTy as ComplexType.EXTERNAL_OBJECT()) algorithm @@ -1021,10 +1024,10 @@ public s := IOStream.append(s, name); s := IOStream.append(s, "\n extends ExternalObject;\n\n"); {f} := Function.typeNodeCache(complexTy.constructor); - s := Function.toFlatStream(f, indent + " ", s, overrideName="constructor"); + s := Function.toFlatStream(f, format, indent + " ", s, overrideName="constructor"); s := IOStream.append(s, ";\n\n"); {f} := Function.typeNodeCache(complexTy.destructor); - s := Function.toFlatStream(f, indent + " ", s, overrideName="destructor"); + s := Function.toFlatStream(f, format, indent + " ", s, overrideName="destructor"); s := IOStream.append(s, ";\n\nend "); s := IOStream.append(s, name); then s; diff --git a/OMCompiler/Compiler/NFFrontEnd/NFVariable.mo b/OMCompiler/Compiler/NFFrontEnd/NFVariable.mo index 03f25b19fa3..a7598723529 100644 --- a/OMCompiler/Compiler/NFFrontEnd/NFVariable.mo +++ b/OMCompiler/Compiler/NFFrontEnd/NFVariable.mo @@ -550,6 +550,7 @@ public function toFlatStream input Variable var; + input BaseModelica.OutputFormat format; input String indent = ""; input Boolean printBindingType = false; input output IOStream.IOStream s; @@ -561,23 +562,24 @@ public s := IOStream.append(s, indent); s := Attributes.toFlatStream(var.attributes, var.ty, s, ComponentRef.isSimple(var.name)); - s := IOStream.append(s, Type.toFlatString(var.ty)); + s := IOStream.append(s, Type.toFlatString(var.ty, format)); s := IOStream.append(s, " "); - s := IOStream.append(s, ComponentRef.toFlatString(var.name)); + s := IOStream.append(s, ComponentRef.toFlatString(var.name, format)); if not listEmpty(var.typeAttributes) then - s := Component.typeAttrsToFlatStream(var.typeAttributes, var.ty, s); + s := Component.typeAttrsToFlatStream(var.typeAttributes, var.ty, format, s); elseif not listEmpty(var.children) then - s := toFlatStreamModifier(var.children, Binding.isBound(var.binding), printBindingType, s); + s := toFlatStreamModifier(var.children, Binding.isBound(var.binding), printBindingType, format, s); end if; - s := toFlatStreamBinding(var.binding, printBindingType, s); + s := toFlatStreamBinding(var.binding, printBindingType, format, s); s := FlatModelicaUtil.appendComment(var.comment, NFFlatModelicaUtil.ElementType.COMPONENT, s); end toFlatStream; function toFlatStreamBinding input Binding binding; input Boolean printBindingType; + input BaseModelica.OutputFormat format; input output IOStream.IOStream s; algorithm if Binding.isBound(binding) then @@ -585,11 +587,11 @@ public if printBindingType then s := IOStream.append(s, "("); - s := IOStream.append(s, Type.toFlatString(Binding.getType(binding))); + s := IOStream.append(s, Type.toFlatString(Binding.getType(binding), format)); s := IOStream.append(s, ") "); end if; - s := IOStream.append(s, Binding.toFlatString(binding)); + s := IOStream.append(s, Binding.toFlatString(binding, format)); end if; end toFlatStreamBinding; @@ -597,6 +599,7 @@ public input list children; input Boolean overwrittenBinding; input Boolean printBindingType; + input BaseModelica.OutputFormat format; input output IOStream.IOStream s; protected Boolean empty = true; @@ -607,14 +610,14 @@ public ss := IOStream.create(getInstanceName(), IOStream.IOStreamType.LIST()); if not listEmpty(child.typeAttributes) then - ss := Component.typeAttrsToFlatStream(child.typeAttributes, child.ty, ss); + ss := Component.typeAttrsToFlatStream(child.typeAttributes, child.ty, format, ss); elseif not listEmpty(child.children) then overwritten_binding := overwrittenBinding or Binding.isBound(child.binding); - ss := toFlatStreamModifier(child.children, overwritten_binding, printBindingType, ss); + ss := toFlatStreamModifier(child.children, overwritten_binding, printBindingType, format, ss); end if; if not overwrittenBinding and Binding.source(child.binding) == NFBinding.Source.MODIFIER then - ss := toFlatStreamBinding(child.binding, printBindingType, ss); + ss := toFlatStreamBinding(child.binding, printBindingType, format, ss); end if; if not IOStream.empty(ss) then diff --git a/OMCompiler/Compiler/Util/Flags.mo b/OMCompiler/Compiler/Util/Flags.mo index d77ca9bb0eb..a39cffe4d49 100644 --- a/OMCompiler/Compiler/Util/Flags.mo +++ b/OMCompiler/Compiler/Util/Flags.mo @@ -1450,6 +1450,16 @@ constant ConfigFlag EXPOSE_LOCAL_IOS = CONFIG_FLAG(152, "exposeLocalIOs", "0 meaning top-level (standard Modelica), 1 inputs/outputs of top-level components, >1 going deeper. " + "This flag is particularly useful for FMI export.")); +constant ConfigFlag BASE_MODELICA_FORMAT = CONFIG_FLAG(153, "baseModelicaFormat", + NONE(), EXTERNAL(), STRING_LIST_FLAG({}), SOME(STRING_OPTION({ + "scalarized", + "partiallyScalarized", + "nonScalarized", + "withRecords", + "withoutRecords" + })), + Gettext.gettext("Formatting options for Base Modelica")); + function getFlags "Loads the flags with getGlobalRoot. Assumes flags have been loaded." input Boolean initialize = true; diff --git a/OMCompiler/Compiler/Util/FlagsUtil.mo b/OMCompiler/Compiler/Util/FlagsUtil.mo index 59cbaea382b..3f7dc732fca 100644 --- a/OMCompiler/Compiler/Util/FlagsUtil.mo +++ b/OMCompiler/Compiler/Util/FlagsUtil.mo @@ -410,7 +410,8 @@ constant list allConfigFlags = { Flags.OBFUSCATE, Flags.FMU_RUNTIME_DEPENDS, Flags.FRONTEND_INLINE, - Flags.EXPOSE_LOCAL_IOS + Flags.EXPOSE_LOCAL_IOS, + Flags.BASE_MODELICA_FORMAT }; public function new diff --git a/OMCompiler/Compiler/boot/LoadCompilerSources.mos b/OMCompiler/Compiler/boot/LoadCompilerSources.mos index 3fc16981238..12644d90d48 100644 --- a/OMCompiler/Compiler/boot/LoadCompilerSources.mos +++ b/OMCompiler/Compiler/boot/LoadCompilerSources.mos @@ -352,6 +352,7 @@ if true then /* Suppress output */ "../MidCode/HashTableMidVar.mo", // "NFFrontEnd"; + "../NFFrontEnd/BaseModelica.mo", "../NFFrontEnd/NFAlgorithm.mo", "../NFFrontEnd/NFArrayConnections.mo", "../NFFrontEnd/NFAttributes.mo", diff --git a/testsuite/flattening/modelica/scodeinst/CombineSubscripts3.mo b/testsuite/flattening/modelica/scodeinst/CombineSubscripts3.mo index e17f76ef0ef..6d406f8724a 100644 --- a/testsuite/flattening/modelica/scodeinst/CombineSubscripts3.mo +++ b/testsuite/flattening/modelica/scodeinst/CombineSubscripts3.mo @@ -23,12 +23,12 @@ end CombineSubscripts3; // //! base 0.1.0 // package 'CombineSubscripts3' // model 'CombineSubscripts3' -// Real[3] 'b.p'; -// Real[3, 4] 'b.x'; +// Real[3] 'b'.'p'; +// Real[3, 4] 'b'.'x'; // equation // for 'i' in 1:3 loop // for 'j' in 2:3 loop -// 'b.x'['i','j'] = 'b.x'['i','j' - 1] + 'b.p'['i']; +// 'b'.'x'['i','j'] = 'b'.'x'['i','j' - 1] + 'b'.'p'['i']; // end for; // end for; // end 'CombineSubscripts3'; diff --git a/testsuite/openmodelica/basemodelica/Makefile b/testsuite/openmodelica/basemodelica/Makefile index 88fff073c14..28b66c07ea6 100644 --- a/testsuite/openmodelica/basemodelica/Makefile +++ b/testsuite/openmodelica/basemodelica/Makefile @@ -14,9 +14,15 @@ TESTFILES = \ DoublePendulum.mos \ Expression1.mo \ InStreamNominalThreshold.mo \ + NonScalarizedWithRecords1.mo \ + NonScalarizedWithoutRecords1.mo \ + PartiallyScalarizedWithRecords1.mo \ + PartiallyScalarizedWithoutRecords1.mo \ Record1.mo \ Record2.mo \ Record3.mo \ + ScalarizedWithRecords1.mo \ + ScalarizedWithoutRecords1.mo \ SD.mo \ SimpleCoolingCycle.mo \ Tables.mos \ diff --git a/testsuite/openmodelica/basemodelica/NonScalarizedWithRecords1.mo b/testsuite/openmodelica/basemodelica/NonScalarizedWithRecords1.mo new file mode 100644 index 00000000000..d57ead980fc --- /dev/null +++ b/testsuite/openmodelica/basemodelica/NonScalarizedWithRecords1.mo @@ -0,0 +1,221 @@ +// name: NonScalarizedWithRecords1 +// status: correct +// cflags: -d=newInst -f --newBackend + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model NonScalarizedWithRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end NonScalarizedWithRecords1; + +// Result: +// //! base 0.1.0 +// package 'NonScalarizedWithRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// model 'NonScalarizedWithRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R2' 'cr2' = 'R2'('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}, 0.0); +// 'R1' 'r1'; +// 'R1'[3] 'ra1'; +// 'R2' 'r2'; +// 'R2'[3] 'ra2'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R2' 'm.cr2' = 'm.R2'('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}, 0.0); +// 'm.R1' 'm.r1'; +// 'm.R1'[3] 'm.ra1'; +// 'm.R2' 'm.r2'; +// 'm.R2'[3] 'm.ra2'; +// 'ma.R2'[3, 3] 'ma.ra2'; +// 'ma.R2'[3] 'ma.r2'; +// 'ma.R1'[3, 3] 'ma.ra1'; +// 'ma.R1'[3] 'ma.r1'; +// constant 'ma.R2'[3] 'ma.cr2' = {'ma.R2'('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3), 0.0) for '$ma1' in 1:3}; +// constant 'ma.R1'[3] 'ma.cr1' = fill('ma.R1'(0.0, 0.0, fill(0.0, 3)), 3); +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1'.'x' = 0.0; +// 'm.r1'.'z'[1] = 0.0; +// 'm.ra1'.'x' = fill(0.0, 3); +// 'm.ra1'.'z' = fill(0.0, 3, 3); +// 'm.ra1'.'z'[1] = fill(0.0, 3); +// 'm.ra1'[2] = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1'[1].'y' = 0.0; +// 'm.ra1'[1].'z' = fill(0.0, 3); +// 'm.ra1'[1].'z'[2] = 0.0; +// 'm.ra2'.'r' = fill('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'm.ra2'.'r'.'x' = fill(0.0, 3); +// 'm.ra2'.'ra'.'y' = fill(0.0, 3, 3); +// 'm.ra2'[2].'ra' = fill('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'm.ra2'[2].'ra'.'y' = fill(0.0, 3); +// 'm.ra2'[1].'ra'[2].'y' = 0.0; +// +// for '$i1' in 1:3 loop +// 'ma.r1'['$i1'] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.r1'['$i1'].'x' = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.r1'['$i1'].'z'[1] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'['$i1'].'x' = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'['$i1'].'z' = fill(0.0, 3, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'['$i1'].'z'[1] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'[2,'$i1'] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'[1,'$i1'].'y' = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'[1,'$i1'].'z' = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'[1,'$i1'].'z'[2] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'['$i1'].'r' = fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'['$i1'].'r'.'x' = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'['$i1'].'ra'.'y' = fill(0.0, 3, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'[2,'$i1'].'ra' = fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'[2,'$i1'].'ra'.'y' = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2'[1,'$i1'].'ra'[2].'y' = 0.0; +// end for; +// +// 'm.r1'.'x' = 0.0; +// 'm.ra1'[1].'x' = 0.0; +// 'ma.r1'[1].'x' = 0.0; +// 'ma.r1'[1].'z'[2] = 0.0; +// 'ma.r1'[1] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1'.'x' = 0.0; +// 'r1'.'z'[1] = 0.0; +// 'ra1'.'x' = fill(0.0, 3); +// 'ra1'.'z' = fill(0.0, 3, 3); +// 'ra1'.'z'[1] = fill(0.0, 3); +// 'ra1'[2] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1'[1].'y' = 0.0; +// 'ra1'[1].'z' = fill(0.0, 3); +// 'ra1'[1].'z'[2] = 0.0; +// 'ra2'.'r' = fill('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'ra2'.'r'.'x' = fill(0.0, 3); +// 'ra2'.'ra'.'y' = fill(0.0, 3, 3); +// 'ra2'[2].'ra' = fill('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'ra2'[2].'ra'.'y' = fill(0.0, 3); +// 'ra2'[1].'ra'[2].'y' = 0.0; +// end 'NonScalarizedWithRecords1'; +// end 'NonScalarizedWithRecords1'; +// endResult diff --git a/testsuite/openmodelica/basemodelica/NonScalarizedWithoutRecords1.mo b/testsuite/openmodelica/basemodelica/NonScalarizedWithoutRecords1.mo new file mode 100644 index 00000000000..a027f623547 --- /dev/null +++ b/testsuite/openmodelica/basemodelica/NonScalarizedWithoutRecords1.mo @@ -0,0 +1,221 @@ +// name: NonScalarizedWithRecords1 +// status: correct +// cflags: -d=newInst -f --newBackend --baseModelicaFormat=withoutRecords + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model NonScalarizedWithoutRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end NonScalarizedWithoutRecords1; + +// Result: +// //! base 0.1.0 +// package 'NonScalarizedWithoutRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// model 'NonScalarizedWithoutRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R2' 'cr2' = 'R2'('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}, 0.0); +// 'R1' 'r1'; +// 'R1'[3] 'ra1'; +// 'R2' 'r2'; +// 'R2'[3] 'ra2'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R2' 'm.cr2' = 'm.R2'('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}, 0.0); +// 'm.R1' 'm.r1'; +// 'm.R1'[3] 'm.ra1'; +// 'm.R2' 'm.r2'; +// 'm.R2'[3] 'm.ra2'; +// 'ma.R2'[3, 3] 'ma.ra2'; +// 'ma.R2'[3] 'ma.r2'; +// 'ma.R1'[3, 3] 'ma.ra1'; +// 'ma.R1'[3] 'ma.r1'; +// constant 'ma.R2'[3] 'ma.cr2' = {'ma.R2'('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3), 0.0) for '$ma1' in 1:3}; +// constant 'ma.R1'[3] 'ma.cr1' = fill('ma.R1'(0.0, 0.0, fill(0.0, 3)), 3); +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1.x' = 0.0; +// 'm.r1.z'[1] = 0.0; +// 'm.ra1.x' = fill(0.0, 3); +// 'm.ra1.z' = fill(0.0, 3, 3); +// 'm.ra1.z'[1] = fill(0.0, 3); +// 'm.ra1'[2] = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1.y'[1] = 0.0; +// 'm.ra1.z'[1] = fill(0.0, 3); +// 'm.ra1.z'[2,1] = 0.0; +// 'm.ra2.r' = fill('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'm.ra2.r.x' = fill(0.0, 3); +// 'm.ra2.ra.y' = fill(0.0, 3, 3); +// 'm.ra2.ra'[2] = fill('m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'm.ra2.ra.y'[2] = fill(0.0, 3); +// 'm.ra2.ra.y'[2,1] = 0.0; +// +// for '$i1' in 1:3 loop +// 'ma.r1'['$i1'] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.r1.x'['$i1'] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.r1.z'[1,'$i1'] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.x'['$i1'] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.z'['$i1'] = fill(0.0, 3, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.z'[1,'$i1'] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1'[2,'$i1'] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.y'[1,'$i1'] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.z'[1,'$i1'] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra1.z'[2,1,'$i1'] = 0.0; +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.r'['$i1'] = fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.r.x'['$i1'] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.ra.y'['$i1'] = fill(0.0, 3, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.ra'[2,'$i1'] = fill('ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.ra.y'[2,'$i1'] = fill(0.0, 3); +// end for; +// +// for '$i1' in 1:3 loop +// 'ma.ra2.ra.y'[2,1,'$i1'] = 0.0; +// end for; +// +// 'm.r1.x' = 0.0; +// 'm.ra1.x'[1] = 0.0; +// 'ma.r1.x'[1] = 0.0; +// 'ma.r1.z'[2,1] = 0.0; +// 'ma.r1'[1] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1.x' = 0.0; +// 'r1.z'[1] = 0.0; +// 'ra1.x' = fill(0.0, 3); +// 'ra1.z' = fill(0.0, 3, 3); +// 'ra1.z'[1] = fill(0.0, 3); +// 'ra1'[2] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1.y'[1] = 0.0; +// 'ra1.z'[1] = fill(0.0, 3); +// 'ra1.z'[2,1] = 0.0; +// 'ra2.r' = fill('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'ra2.r.x' = fill(0.0, 3); +// 'ra2.ra.y' = fill(0.0, 3, 3); +// 'ra2.ra'[2] = fill('R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 3); +// 'ra2.ra.y'[2] = fill(0.0, 3); +// 'ra2.ra.y'[2,1] = 0.0; +// end 'NonScalarizedWithoutRecords1'; +// end 'NonScalarizedWithoutRecords1'; +// endResult diff --git a/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithRecords1.mo b/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithRecords1.mo new file mode 100644 index 00000000000..7ab02bd194c --- /dev/null +++ b/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithRecords1.mo @@ -0,0 +1,496 @@ +// name: PartiallyScalarizedWithRecords1 +// status: correct +// cflags: -d=newInst -f + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model PartiallyScalarizedWithRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end PartiallyScalarizedWithRecords1; + +// Result: +// //! base 0.1.0 +// package 'PartiallyScalarizedWithRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// model 'PartiallyScalarizedWithRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R1' 'cr2'.'r' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'R2' 'cr2'; +// 'R1' 'r1'; +// Real[3] 'ra1[1]'.'z'; +// Real 'ra1[2]'.'x'; +// Real 'ra1[2]'.'y'; +// Real[3] 'ra1[2]'.'z'; +// Real 'ra1[3]'.'x'; +// Real 'ra1[3]'.'y'; +// Real[3] 'ra1[3]'.'z'; +// 'R1' 'r2'.'r'; +// Real 'r2'.'ra[1]'.'x'; +// Real 'r2'.'ra[1]'.'y'; +// Real[3] 'r2'.'ra[1]'.'z'; +// Real 'r2'.'ra[2]'.'x'; +// Real 'r2'.'ra[2]'.'y'; +// Real[3] 'r2'.'ra[2]'.'z'; +// Real 'r2'.'ra[3]'.'x'; +// Real 'r2'.'ra[3]'.'y'; +// Real[3] 'r2'.'ra[3]'.'z'; +// 'R2' 'r2'; +// 'R1' 'ra2[1]'.'r'; +// Real[3] 'ra2[1]'.'ra[1]'.'z'; +// Real 'ra2[1]'.'ra[2]'.'x'; +// Real 'ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ra2[1]'.'ra[2]'.'z'; +// Real 'ra2[1]'.'ra[3]'.'x'; +// Real 'ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ra2[1]'.'ra[3]'.'z'; +// Real 'ra2[1]'.'w'; +// 'R1' 'ra2[2]'.'r'; +// Real 'ra2[2]'.'ra[1]'.'x'; +// Real 'ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ra2[2]'.'ra[1]'.'z'; +// Real 'ra2[2]'.'ra[2]'.'x'; +// Real 'ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ra2[2]'.'ra[2]'.'z'; +// Real 'ra2[2]'.'ra[3]'.'x'; +// Real 'ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ra2[2]'.'ra[3]'.'z'; +// Real 'ra2[2]'.'w'; +// 'R1' 'ra2[3]'.'r'; +// Real 'ra2[3]'.'ra[1]'.'x'; +// Real 'ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ra2[3]'.'ra[1]'.'z'; +// Real 'ra2[3]'.'ra[2]'.'x'; +// Real 'ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ra2[3]'.'ra[2]'.'z'; +// Real 'ra2[3]'.'ra[3]'.'x'; +// Real 'ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ra2[3]'.'ra[3]'.'z'; +// Real 'ra2[3]'.'w'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R1' 'm.cr2'.'r' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'm.cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'm.R2' 'm.cr2'; +// 'm.R1' 'm.r1'; +// Real[3] 'm.ra1[1]'.'z'; +// Real 'm.ra1[2]'.'x'; +// Real 'm.ra1[2]'.'y'; +// Real[3] 'm.ra1[2]'.'z'; +// Real 'm.ra1[3]'.'x'; +// Real 'm.ra1[3]'.'y'; +// Real[3] 'm.ra1[3]'.'z'; +// 'm.R1' 'm.r2'.'r'; +// Real 'm.r2'.'ra[1]'.'x'; +// Real 'm.r2'.'ra[1]'.'y'; +// Real[3] 'm.r2'.'ra[1]'.'z'; +// Real 'm.r2'.'ra[2]'.'x'; +// Real 'm.r2'.'ra[2]'.'y'; +// Real[3] 'm.r2'.'ra[2]'.'z'; +// Real 'm.r2'.'ra[3]'.'x'; +// Real 'm.r2'.'ra[3]'.'y'; +// Real[3] 'm.r2'.'ra[3]'.'z'; +// 'm.R2' 'm.r2'; +// 'm.R1' 'm.ra2[1]'.'r'; +// Real[3] 'm.ra2[1]'.'ra[1]'.'z'; +// Real 'm.ra2[1]'.'ra[2]'.'x'; +// Real 'm.ra2[1]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[1]'.'ra[2]'.'z'; +// Real 'm.ra2[1]'.'ra[3]'.'x'; +// Real 'm.ra2[1]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[1]'.'ra[3]'.'z'; +// Real 'm.ra2[1]'.'w'; +// 'm.R1' 'm.ra2[2]'.'r'; +// Real 'm.ra2[2]'.'ra[1]'.'x'; +// Real 'm.ra2[2]'.'ra[1]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[1]'.'z'; +// Real 'm.ra2[2]'.'ra[2]'.'x'; +// Real 'm.ra2[2]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[2]'.'z'; +// Real 'm.ra2[2]'.'ra[3]'.'x'; +// Real 'm.ra2[2]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[3]'.'z'; +// Real 'm.ra2[2]'.'w'; +// 'm.R1' 'm.ra2[3]'.'r'; +// Real 'm.ra2[3]'.'ra[1]'.'x'; +// Real 'm.ra2[3]'.'ra[1]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[1]'.'z'; +// Real 'm.ra2[3]'.'ra[2]'.'x'; +// Real 'm.ra2[3]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[2]'.'z'; +// Real 'm.ra2[3]'.'ra[3]'.'x'; +// Real 'm.ra2[3]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[3]'.'z'; +// Real 'm.ra2[3]'.'w'; +// constant 'ma.R1' 'ma[1].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[1].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[1].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[1].cr2'; +// 'ma.R1' 'ma[1].r1'; +// Real[3] 'ma[1].ra1[1]'.'z'; +// Real 'ma[1].ra1[2]'.'x'; +// Real 'ma[1].ra1[2]'.'y'; +// Real[3] 'ma[1].ra1[2]'.'z'; +// Real 'ma[1].ra1[3]'.'x'; +// Real 'ma[1].ra1[3]'.'y'; +// Real[3] 'ma[1].ra1[3]'.'z'; +// 'ma.R1' 'ma[1].r2'.'r'; +// Real 'ma[1].r2'.'ra[1]'.'x'; +// Real 'ma[1].r2'.'ra[1]'.'y'; +// Real[3] 'ma[1].r2'.'ra[1]'.'z'; +// Real 'ma[1].r2'.'ra[2]'.'x'; +// Real 'ma[1].r2'.'ra[2]'.'y'; +// Real[3] 'ma[1].r2'.'ra[2]'.'z'; +// Real 'ma[1].r2'.'ra[3]'.'x'; +// Real 'ma[1].r2'.'ra[3]'.'y'; +// Real[3] 'ma[1].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[1].r2'; +// 'ma.R1' 'ma[1].ra2[1]'.'r'; +// Real[3] 'ma[1].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[1]'.'w'; +// 'ma.R1' 'ma[1].ra2[2]'.'r'; +// Real 'ma[1].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[2]'.'w'; +// 'ma.R1' 'ma[1].ra2[3]'.'r'; +// Real 'ma[1].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[3]'.'w'; +// constant 'ma.R1' 'ma[2].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[2].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[2].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[2].cr2'; +// 'ma.R1' 'ma[2].r1'; +// Real[3] 'ma[2].ra1[1]'.'z'; +// Real 'ma[2].ra1[2]'.'x'; +// Real 'ma[2].ra1[2]'.'y'; +// Real[3] 'ma[2].ra1[2]'.'z'; +// Real 'ma[2].ra1[3]'.'x'; +// Real 'ma[2].ra1[3]'.'y'; +// Real[3] 'ma[2].ra1[3]'.'z'; +// 'ma.R1' 'ma[2].r2'.'r'; +// Real 'ma[2].r2'.'ra[1]'.'x'; +// Real 'ma[2].r2'.'ra[1]'.'y'; +// Real[3] 'ma[2].r2'.'ra[1]'.'z'; +// Real 'ma[2].r2'.'ra[2]'.'x'; +// Real 'ma[2].r2'.'ra[2]'.'y'; +// Real[3] 'ma[2].r2'.'ra[2]'.'z'; +// Real 'ma[2].r2'.'ra[3]'.'x'; +// Real 'ma[2].r2'.'ra[3]'.'y'; +// Real[3] 'ma[2].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[2].r2'; +// 'ma.R1' 'ma[2].ra2[1]'.'r'; +// Real[3] 'ma[2].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[1]'.'w'; +// 'ma.R1' 'ma[2].ra2[2]'.'r'; +// Real 'ma[2].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[2]'.'w'; +// 'ma.R1' 'ma[2].ra2[3]'.'r'; +// Real 'ma[2].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[3]'.'w'; +// constant 'ma.R1' 'ma[3].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[3].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[3].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[3].cr2'; +// 'ma.R1' 'ma[3].r1'; +// Real[3] 'ma[3].ra1[1]'.'z'; +// Real 'ma[3].ra1[2]'.'x'; +// Real 'ma[3].ra1[2]'.'y'; +// Real[3] 'ma[3].ra1[2]'.'z'; +// Real 'ma[3].ra1[3]'.'x'; +// Real 'ma[3].ra1[3]'.'y'; +// Real[3] 'ma[3].ra1[3]'.'z'; +// 'ma.R1' 'ma[3].r2'.'r'; +// Real 'ma[3].r2'.'ra[1]'.'x'; +// Real 'ma[3].r2'.'ra[1]'.'y'; +// Real[3] 'ma[3].r2'.'ra[1]'.'z'; +// Real 'ma[3].r2'.'ra[2]'.'x'; +// Real 'ma[3].r2'.'ra[2]'.'y'; +// Real[3] 'ma[3].r2'.'ra[2]'.'z'; +// Real 'ma[3].r2'.'ra[3]'.'x'; +// Real 'ma[3].r2'.'ra[3]'.'y'; +// Real[3] 'ma[3].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[3].r2'; +// 'ma.R1' 'ma[3].ra2[1]'.'r'; +// Real[3] 'ma[3].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[1]'.'w'; +// 'ma.R1' 'ma[3].ra2[2]'.'r'; +// Real 'ma[3].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[2]'.'w'; +// 'ma.R1' 'ma[3].ra2[3]'.'r'; +// Real 'ma[3].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[3]'.'w'; +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1'.'x' = 0.0; +// 'm.r1'.'z'[1] = 0.0; +// 'm.ra1'.'x' = {0.0, 0.0, 0.0}; +// 'm.ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra1'.'z'[1] = {0.0, 0.0, 0.0}; +// 'm.ra1'[2] = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1[1]'.'y' = 0.0; +// 'm.ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'm.ra1[1]'.'z'[2] = 0.0; +// 'm.ra2'.'r' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'm.ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra2[2]'.'ra' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'm.ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[1].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].r1'.'x' = 0.0; +// 'ma[1].r1'.'z'[1] = 0.0; +// 'ma[1].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra1'.'z'[1] = {0.0, 0.0, 0.0}; +// 'ma[1].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].ra1[1]'.'y' = 0.0; +// 'ma[1].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[1]'.'z'[2] = 0.0; +// 'ma[1].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[2].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].r1'.'x' = 0.0; +// 'ma[2].r1'.'z'[1] = 0.0; +// 'ma[2].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra1'.'z'[1] = {0.0, 0.0, 0.0}; +// 'ma[2].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].ra1[1]'.'y' = 0.0; +// 'ma[2].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[1]'.'z'[2] = 0.0; +// 'ma[2].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[3].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].r1'.'x' = 0.0; +// 'ma[3].r1'.'z'[1] = 0.0; +// 'ma[3].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra1'.'z'[1] = {0.0, 0.0, 0.0}; +// 'ma[3].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].ra1[1]'.'y' = 0.0; +// 'ma[3].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[1]'.'z'[2] = 0.0; +// 'ma[3].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'm.r1'.'x' = 0.0; +// 'm.ra1[1]'.'x' = 0.0; +// 'ma[1].r1'.'x' = 0.0; +// 'ma[1].r1'.'z'[2] = 0.0; +// 'ma[1].r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1'.'x' = 0.0; +// 'r1'.'z'[1] = 0.0; +// 'ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra1'.'z'[1] = {0.0, 0.0, 0.0}; +// 'ra1'[2] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1[1]'.'y' = 0.0; +// 'ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ra1[1]'.'z'[2] = 0.0; +// 'ra2'.'r' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra2[2]'.'ra' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ra2[1]'.'ra[2]'.'y' = 0.0; +// end 'PartiallyScalarizedWithRecords1'; +// end 'PartiallyScalarizedWithRecords1'; +// endResult diff --git a/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithoutRecords1.mo b/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithoutRecords1.mo new file mode 100644 index 00000000000..ea8b3bc3083 --- /dev/null +++ b/testsuite/openmodelica/basemodelica/PartiallyScalarizedWithoutRecords1.mo @@ -0,0 +1,496 @@ +// name: PartiallyScalarizedWithRecords1 +// status: correct +// cflags: -d=newInst -f --baseModelicaFormat=withoutRecords + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model PartiallyScalarizedWithoutRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end PartiallyScalarizedWithoutRecords1; + +// Result: +// //! base 0.1.0 +// package 'PartiallyScalarizedWithoutRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// model 'PartiallyScalarizedWithoutRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R1' 'cr2.r' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'cr2.ra[1].x' = 0.0; +// constant Real 'cr2.ra[1].y' = 0.0; +// constant Real[3] 'cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2.ra[2].x' = 0.0; +// constant Real 'cr2.ra[2].y' = 0.0; +// constant Real[3] 'cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2.ra[3].x' = 0.0; +// constant Real 'cr2.ra[3].y' = 0.0; +// constant Real[3] 'cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'R2' 'cr2'; +// 'R1' 'r1'; +// Real[3] 'ra1[1].z'; +// Real 'ra1[2].x'; +// Real 'ra1[2].y'; +// Real[3] 'ra1[2].z'; +// Real 'ra1[3].x'; +// Real 'ra1[3].y'; +// Real[3] 'ra1[3].z'; +// 'R1' 'r2.r'; +// Real 'r2.ra[1].x'; +// Real 'r2.ra[1].y'; +// Real[3] 'r2.ra[1].z'; +// Real 'r2.ra[2].x'; +// Real 'r2.ra[2].y'; +// Real[3] 'r2.ra[2].z'; +// Real 'r2.ra[3].x'; +// Real 'r2.ra[3].y'; +// Real[3] 'r2.ra[3].z'; +// 'R2' 'r2'; +// 'R1' 'ra2[1].r'; +// Real[3] 'ra2[1].ra[1].z'; +// Real 'ra2[1].ra[2].x'; +// Real 'ra2[1].ra[2].y'; +// Real[3] 'ra2[1].ra[2].z'; +// Real 'ra2[1].ra[3].x'; +// Real 'ra2[1].ra[3].y'; +// Real[3] 'ra2[1].ra[3].z'; +// Real 'ra2[1].w'; +// 'R1' 'ra2[2].r'; +// Real 'ra2[2].ra[1].x'; +// Real 'ra2[2].ra[1].y'; +// Real[3] 'ra2[2].ra[1].z'; +// Real 'ra2[2].ra[2].x'; +// Real 'ra2[2].ra[2].y'; +// Real[3] 'ra2[2].ra[2].z'; +// Real 'ra2[2].ra[3].x'; +// Real 'ra2[2].ra[3].y'; +// Real[3] 'ra2[2].ra[3].z'; +// Real 'ra2[2].w'; +// 'R1' 'ra2[3].r'; +// Real 'ra2[3].ra[1].x'; +// Real 'ra2[3].ra[1].y'; +// Real[3] 'ra2[3].ra[1].z'; +// Real 'ra2[3].ra[2].x'; +// Real 'ra2[3].ra[2].y'; +// Real[3] 'ra2[3].ra[2].z'; +// Real 'ra2[3].ra[3].x'; +// Real 'ra2[3].ra[3].y'; +// Real[3] 'ra2[3].ra[3].z'; +// Real 'ra2[3].w'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R1' 'm.cr2.r' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'm.cr2.ra[1].x' = 0.0; +// constant Real 'm.cr2.ra[1].y' = 0.0; +// constant Real[3] 'm.cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2.ra[2].x' = 0.0; +// constant Real 'm.cr2.ra[2].y' = 0.0; +// constant Real[3] 'm.cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2.ra[3].x' = 0.0; +// constant Real 'm.cr2.ra[3].y' = 0.0; +// constant Real[3] 'm.cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'm.R2' 'm.cr2'; +// 'm.R1' 'm.r1'; +// Real[3] 'm.ra1[1].z'; +// Real 'm.ra1[2].x'; +// Real 'm.ra1[2].y'; +// Real[3] 'm.ra1[2].z'; +// Real 'm.ra1[3].x'; +// Real 'm.ra1[3].y'; +// Real[3] 'm.ra1[3].z'; +// 'm.R1' 'm.r2.r'; +// Real 'm.r2.ra[1].x'; +// Real 'm.r2.ra[1].y'; +// Real[3] 'm.r2.ra[1].z'; +// Real 'm.r2.ra[2].x'; +// Real 'm.r2.ra[2].y'; +// Real[3] 'm.r2.ra[2].z'; +// Real 'm.r2.ra[3].x'; +// Real 'm.r2.ra[3].y'; +// Real[3] 'm.r2.ra[3].z'; +// 'm.R2' 'm.r2'; +// 'm.R1' 'm.ra2[1].r'; +// Real[3] 'm.ra2[1].ra[1].z'; +// Real 'm.ra2[1].ra[2].x'; +// Real 'm.ra2[1].ra[2].y'; +// Real[3] 'm.ra2[1].ra[2].z'; +// Real 'm.ra2[1].ra[3].x'; +// Real 'm.ra2[1].ra[3].y'; +// Real[3] 'm.ra2[1].ra[3].z'; +// Real 'm.ra2[1].w'; +// 'm.R1' 'm.ra2[2].r'; +// Real 'm.ra2[2].ra[1].x'; +// Real 'm.ra2[2].ra[1].y'; +// Real[3] 'm.ra2[2].ra[1].z'; +// Real 'm.ra2[2].ra[2].x'; +// Real 'm.ra2[2].ra[2].y'; +// Real[3] 'm.ra2[2].ra[2].z'; +// Real 'm.ra2[2].ra[3].x'; +// Real 'm.ra2[2].ra[3].y'; +// Real[3] 'm.ra2[2].ra[3].z'; +// Real 'm.ra2[2].w'; +// 'm.R1' 'm.ra2[3].r'; +// Real 'm.ra2[3].ra[1].x'; +// Real 'm.ra2[3].ra[1].y'; +// Real[3] 'm.ra2[3].ra[1].z'; +// Real 'm.ra2[3].ra[2].x'; +// Real 'm.ra2[3].ra[2].y'; +// Real[3] 'm.ra2[3].ra[2].z'; +// Real 'm.ra2[3].ra[3].x'; +// Real 'm.ra2[3].ra[3].y'; +// Real[3] 'm.ra2[3].ra[3].z'; +// Real 'm.ra2[3].w'; +// constant 'ma.R1' 'ma[1].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[1].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[1].cr2.ra[1].x' = 0.0; +// constant Real 'ma[1].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2.ra[2].x' = 0.0; +// constant Real 'ma[1].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2.ra[3].x' = 0.0; +// constant Real 'ma[1].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[1].cr2'; +// 'ma.R1' 'ma[1].r1'; +// Real[3] 'ma[1].ra1[1].z'; +// Real 'ma[1].ra1[2].x'; +// Real 'ma[1].ra1[2].y'; +// Real[3] 'ma[1].ra1[2].z'; +// Real 'ma[1].ra1[3].x'; +// Real 'ma[1].ra1[3].y'; +// Real[3] 'ma[1].ra1[3].z'; +// 'ma.R1' 'ma[1].r2.r'; +// Real 'ma[1].r2.ra[1].x'; +// Real 'ma[1].r2.ra[1].y'; +// Real[3] 'ma[1].r2.ra[1].z'; +// Real 'ma[1].r2.ra[2].x'; +// Real 'ma[1].r2.ra[2].y'; +// Real[3] 'ma[1].r2.ra[2].z'; +// Real 'ma[1].r2.ra[3].x'; +// Real 'ma[1].r2.ra[3].y'; +// Real[3] 'ma[1].r2.ra[3].z'; +// 'ma.R2' 'ma[1].r2'; +// 'ma.R1' 'ma[1].ra2[1].r'; +// Real[3] 'ma[1].ra2[1].ra[1].z'; +// Real 'ma[1].ra2[1].ra[2].x'; +// Real 'ma[1].ra2[1].ra[2].y'; +// Real[3] 'ma[1].ra2[1].ra[2].z'; +// Real 'ma[1].ra2[1].ra[3].x'; +// Real 'ma[1].ra2[1].ra[3].y'; +// Real[3] 'ma[1].ra2[1].ra[3].z'; +// Real 'ma[1].ra2[1].w'; +// 'ma.R1' 'ma[1].ra2[2].r'; +// Real 'ma[1].ra2[2].ra[1].x'; +// Real 'ma[1].ra2[2].ra[1].y'; +// Real[3] 'ma[1].ra2[2].ra[1].z'; +// Real 'ma[1].ra2[2].ra[2].x'; +// Real 'ma[1].ra2[2].ra[2].y'; +// Real[3] 'ma[1].ra2[2].ra[2].z'; +// Real 'ma[1].ra2[2].ra[3].x'; +// Real 'ma[1].ra2[2].ra[3].y'; +// Real[3] 'ma[1].ra2[2].ra[3].z'; +// Real 'ma[1].ra2[2].w'; +// 'ma.R1' 'ma[1].ra2[3].r'; +// Real 'ma[1].ra2[3].ra[1].x'; +// Real 'ma[1].ra2[3].ra[1].y'; +// Real[3] 'ma[1].ra2[3].ra[1].z'; +// Real 'ma[1].ra2[3].ra[2].x'; +// Real 'ma[1].ra2[3].ra[2].y'; +// Real[3] 'ma[1].ra2[3].ra[2].z'; +// Real 'ma[1].ra2[3].ra[3].x'; +// Real 'ma[1].ra2[3].ra[3].y'; +// Real[3] 'ma[1].ra2[3].ra[3].z'; +// Real 'ma[1].ra2[3].w'; +// constant 'ma.R1' 'ma[2].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[2].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[2].cr2.ra[1].x' = 0.0; +// constant Real 'ma[2].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2.ra[2].x' = 0.0; +// constant Real 'ma[2].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2.ra[3].x' = 0.0; +// constant Real 'ma[2].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[2].cr2'; +// 'ma.R1' 'ma[2].r1'; +// Real[3] 'ma[2].ra1[1].z'; +// Real 'ma[2].ra1[2].x'; +// Real 'ma[2].ra1[2].y'; +// Real[3] 'ma[2].ra1[2].z'; +// Real 'ma[2].ra1[3].x'; +// Real 'ma[2].ra1[3].y'; +// Real[3] 'ma[2].ra1[3].z'; +// 'ma.R1' 'ma[2].r2.r'; +// Real 'ma[2].r2.ra[1].x'; +// Real 'ma[2].r2.ra[1].y'; +// Real[3] 'ma[2].r2.ra[1].z'; +// Real 'ma[2].r2.ra[2].x'; +// Real 'ma[2].r2.ra[2].y'; +// Real[3] 'ma[2].r2.ra[2].z'; +// Real 'ma[2].r2.ra[3].x'; +// Real 'ma[2].r2.ra[3].y'; +// Real[3] 'ma[2].r2.ra[3].z'; +// 'ma.R2' 'ma[2].r2'; +// 'ma.R1' 'ma[2].ra2[1].r'; +// Real[3] 'ma[2].ra2[1].ra[1].z'; +// Real 'ma[2].ra2[1].ra[2].x'; +// Real 'ma[2].ra2[1].ra[2].y'; +// Real[3] 'ma[2].ra2[1].ra[2].z'; +// Real 'ma[2].ra2[1].ra[3].x'; +// Real 'ma[2].ra2[1].ra[3].y'; +// Real[3] 'ma[2].ra2[1].ra[3].z'; +// Real 'ma[2].ra2[1].w'; +// 'ma.R1' 'ma[2].ra2[2].r'; +// Real 'ma[2].ra2[2].ra[1].x'; +// Real 'ma[2].ra2[2].ra[1].y'; +// Real[3] 'ma[2].ra2[2].ra[1].z'; +// Real 'ma[2].ra2[2].ra[2].x'; +// Real 'ma[2].ra2[2].ra[2].y'; +// Real[3] 'ma[2].ra2[2].ra[2].z'; +// Real 'ma[2].ra2[2].ra[3].x'; +// Real 'ma[2].ra2[2].ra[3].y'; +// Real[3] 'ma[2].ra2[2].ra[3].z'; +// Real 'ma[2].ra2[2].w'; +// 'ma.R1' 'ma[2].ra2[3].r'; +// Real 'ma[2].ra2[3].ra[1].x'; +// Real 'ma[2].ra2[3].ra[1].y'; +// Real[3] 'ma[2].ra2[3].ra[1].z'; +// Real 'ma[2].ra2[3].ra[2].x'; +// Real 'ma[2].ra2[3].ra[2].y'; +// Real[3] 'ma[2].ra2[3].ra[2].z'; +// Real 'ma[2].ra2[3].ra[3].x'; +// Real 'ma[2].ra2[3].ra[3].y'; +// Real[3] 'ma[2].ra2[3].ra[3].z'; +// Real 'ma[2].ra2[3].w'; +// constant 'ma.R1' 'ma[3].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[3].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[3].cr2.ra[1].x' = 0.0; +// constant Real 'ma[3].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2.ra[2].x' = 0.0; +// constant Real 'ma[3].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2.ra[3].x' = 0.0; +// constant Real 'ma[3].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[3].cr2'; +// 'ma.R1' 'ma[3].r1'; +// Real[3] 'ma[3].ra1[1].z'; +// Real 'ma[3].ra1[2].x'; +// Real 'ma[3].ra1[2].y'; +// Real[3] 'ma[3].ra1[2].z'; +// Real 'ma[3].ra1[3].x'; +// Real 'ma[3].ra1[3].y'; +// Real[3] 'ma[3].ra1[3].z'; +// 'ma.R1' 'ma[3].r2.r'; +// Real 'ma[3].r2.ra[1].x'; +// Real 'ma[3].r2.ra[1].y'; +// Real[3] 'ma[3].r2.ra[1].z'; +// Real 'ma[3].r2.ra[2].x'; +// Real 'ma[3].r2.ra[2].y'; +// Real[3] 'ma[3].r2.ra[2].z'; +// Real 'ma[3].r2.ra[3].x'; +// Real 'ma[3].r2.ra[3].y'; +// Real[3] 'ma[3].r2.ra[3].z'; +// 'ma.R2' 'ma[3].r2'; +// 'ma.R1' 'ma[3].ra2[1].r'; +// Real[3] 'ma[3].ra2[1].ra[1].z'; +// Real 'ma[3].ra2[1].ra[2].x'; +// Real 'ma[3].ra2[1].ra[2].y'; +// Real[3] 'ma[3].ra2[1].ra[2].z'; +// Real 'ma[3].ra2[1].ra[3].x'; +// Real 'ma[3].ra2[1].ra[3].y'; +// Real[3] 'ma[3].ra2[1].ra[3].z'; +// Real 'ma[3].ra2[1].w'; +// 'ma.R1' 'ma[3].ra2[2].r'; +// Real 'ma[3].ra2[2].ra[1].x'; +// Real 'ma[3].ra2[2].ra[1].y'; +// Real[3] 'ma[3].ra2[2].ra[1].z'; +// Real 'ma[3].ra2[2].ra[2].x'; +// Real 'ma[3].ra2[2].ra[2].y'; +// Real[3] 'ma[3].ra2[2].ra[2].z'; +// Real 'ma[3].ra2[2].ra[3].x'; +// Real 'ma[3].ra2[2].ra[3].y'; +// Real[3] 'ma[3].ra2[2].ra[3].z'; +// Real 'ma[3].ra2[2].w'; +// 'ma.R1' 'ma[3].ra2[3].r'; +// Real 'ma[3].ra2[3].ra[1].x'; +// Real 'ma[3].ra2[3].ra[1].y'; +// Real[3] 'ma[3].ra2[3].ra[1].z'; +// Real 'ma[3].ra2[3].ra[2].x'; +// Real 'ma[3].ra2[3].ra[2].y'; +// Real[3] 'ma[3].ra2[3].ra[2].z'; +// Real 'ma[3].ra2[3].ra[3].x'; +// Real 'ma[3].ra2[3].ra[3].y'; +// Real[3] 'ma[3].ra2[3].ra[3].z'; +// Real 'ma[3].ra2[3].w'; +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1.x' = 0.0; +// 'm.r1.z'[1] = 0.0; +// 'm.ra1.x' = {0.0, 0.0, 0.0}; +// 'm.ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra1.z'[1] = {0.0, 0.0, 0.0}; +// 'm.ra1'[2] = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1[1].y' = 0.0; +// 'm.ra1[1].z' = {0.0, 0.0, 0.0}; +// 'm.ra1[1].z'[2] = 0.0; +// 'm.ra2.r' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2.r.x' = {0.0, 0.0, 0.0}; +// 'm.ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra2[2].ra' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'm.ra2[1].ra[2].y' = 0.0; +// 'ma[1].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].r1.x' = 0.0; +// 'ma[1].r1.z'[1] = 0.0; +// 'ma[1].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra1.z'[1] = {0.0, 0.0, 0.0}; +// 'ma[1].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].ra1[1].y' = 0.0; +// 'ma[1].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[1].z'[2] = 0.0; +// 'ma[1].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2[1].ra[2].y' = 0.0; +// 'ma[2].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].r1.x' = 0.0; +// 'ma[2].r1.z'[1] = 0.0; +// 'ma[2].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra1.z'[1] = {0.0, 0.0, 0.0}; +// 'ma[2].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].ra1[1].y' = 0.0; +// 'ma[2].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[1].z'[2] = 0.0; +// 'ma[2].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2[1].ra[2].y' = 0.0; +// 'ma[3].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].r1.x' = 0.0; +// 'ma[3].r1.z'[1] = 0.0; +// 'ma[3].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra1.z'[1] = {0.0, 0.0, 0.0}; +// 'ma[3].ra1'[2] = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].ra1[1].y' = 0.0; +// 'ma[3].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[1].z'[2] = 0.0; +// 'ma[3].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2[1].ra[2].y' = 0.0; +// 'm.r1.x' = 0.0; +// 'm.ra1[1].x' = 0.0; +// 'ma[1].r1.x' = 0.0; +// 'ma[1].r1.z'[2] = 0.0; +// 'ma[1].r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1.x' = 0.0; +// 'r1.z'[1] = 0.0; +// 'ra1.x' = {0.0, 0.0, 0.0}; +// 'ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra1.z'[1] = {0.0, 0.0, 0.0}; +// 'ra1'[2] = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1[1].y' = 0.0; +// 'ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ra1[1].z'[2] = 0.0; +// 'ra2.r' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra2[2].ra' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ra2[1].ra[2].y' = 0.0; +// end 'PartiallyScalarizedWithoutRecords1'; +// end 'PartiallyScalarizedWithoutRecords1'; +// endResult diff --git a/testsuite/openmodelica/basemodelica/ScalarizedWithRecords1.mo b/testsuite/openmodelica/basemodelica/ScalarizedWithRecords1.mo new file mode 100644 index 00000000000..2cae01fd65b --- /dev/null +++ b/testsuite/openmodelica/basemodelica/ScalarizedWithRecords1.mo @@ -0,0 +1,496 @@ +// name: ScalarizedWithRecords1 +// status: correct +// cflags: -d=newInst -f --baseModelicaFormat=scalarized,withRecords + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model ScalarizedWithRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end ScalarizedWithRecords1; + +// Result: +// //! base 0.1.0 +// package 'ScalarizedWithRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// model 'ScalarizedWithRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R1' 'cr2'.'r' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'R2' 'cr2'; +// 'R1' 'r1'; +// Real[3] 'ra1[1]'.'z'; +// Real 'ra1[2]'.'x'; +// Real 'ra1[2]'.'y'; +// Real[3] 'ra1[2]'.'z'; +// Real 'ra1[3]'.'x'; +// Real 'ra1[3]'.'y'; +// Real[3] 'ra1[3]'.'z'; +// 'R1' 'r2'.'r'; +// Real 'r2'.'ra[1]'.'x'; +// Real 'r2'.'ra[1]'.'y'; +// Real[3] 'r2'.'ra[1]'.'z'; +// Real 'r2'.'ra[2]'.'x'; +// Real 'r2'.'ra[2]'.'y'; +// Real[3] 'r2'.'ra[2]'.'z'; +// Real 'r2'.'ra[3]'.'x'; +// Real 'r2'.'ra[3]'.'y'; +// Real[3] 'r2'.'ra[3]'.'z'; +// 'R2' 'r2'; +// 'R1' 'ra2[1]'.'r'; +// Real[3] 'ra2[1]'.'ra[1]'.'z'; +// Real 'ra2[1]'.'ra[2]'.'x'; +// Real 'ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ra2[1]'.'ra[2]'.'z'; +// Real 'ra2[1]'.'ra[3]'.'x'; +// Real 'ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ra2[1]'.'ra[3]'.'z'; +// Real 'ra2[1]'.'w'; +// 'R1' 'ra2[2]'.'r'; +// Real 'ra2[2]'.'ra[1]'.'x'; +// Real 'ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ra2[2]'.'ra[1]'.'z'; +// Real 'ra2[2]'.'ra[2]'.'x'; +// Real 'ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ra2[2]'.'ra[2]'.'z'; +// Real 'ra2[2]'.'ra[3]'.'x'; +// Real 'ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ra2[2]'.'ra[3]'.'z'; +// Real 'ra2[2]'.'w'; +// 'R1' 'ra2[3]'.'r'; +// Real 'ra2[3]'.'ra[1]'.'x'; +// Real 'ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ra2[3]'.'ra[1]'.'z'; +// Real 'ra2[3]'.'ra[2]'.'x'; +// Real 'ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ra2[3]'.'ra[2]'.'z'; +// Real 'ra2[3]'.'ra[3]'.'x'; +// Real 'ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ra2[3]'.'ra[3]'.'z'; +// Real 'ra2[3]'.'w'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R1' 'm.cr2'.'r' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'm.cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'm.cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'm.cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'm.R2' 'm.cr2'; +// 'm.R1' 'm.r1'; +// Real[3] 'm.ra1[1]'.'z'; +// Real 'm.ra1[2]'.'x'; +// Real 'm.ra1[2]'.'y'; +// Real[3] 'm.ra1[2]'.'z'; +// Real 'm.ra1[3]'.'x'; +// Real 'm.ra1[3]'.'y'; +// Real[3] 'm.ra1[3]'.'z'; +// 'm.R1' 'm.r2'.'r'; +// Real 'm.r2'.'ra[1]'.'x'; +// Real 'm.r2'.'ra[1]'.'y'; +// Real[3] 'm.r2'.'ra[1]'.'z'; +// Real 'm.r2'.'ra[2]'.'x'; +// Real 'm.r2'.'ra[2]'.'y'; +// Real[3] 'm.r2'.'ra[2]'.'z'; +// Real 'm.r2'.'ra[3]'.'x'; +// Real 'm.r2'.'ra[3]'.'y'; +// Real[3] 'm.r2'.'ra[3]'.'z'; +// 'm.R2' 'm.r2'; +// 'm.R1' 'm.ra2[1]'.'r'; +// Real[3] 'm.ra2[1]'.'ra[1]'.'z'; +// Real 'm.ra2[1]'.'ra[2]'.'x'; +// Real 'm.ra2[1]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[1]'.'ra[2]'.'z'; +// Real 'm.ra2[1]'.'ra[3]'.'x'; +// Real 'm.ra2[1]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[1]'.'ra[3]'.'z'; +// Real 'm.ra2[1]'.'w'; +// 'm.R1' 'm.ra2[2]'.'r'; +// Real 'm.ra2[2]'.'ra[1]'.'x'; +// Real 'm.ra2[2]'.'ra[1]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[1]'.'z'; +// Real 'm.ra2[2]'.'ra[2]'.'x'; +// Real 'm.ra2[2]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[2]'.'z'; +// Real 'm.ra2[2]'.'ra[3]'.'x'; +// Real 'm.ra2[2]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[2]'.'ra[3]'.'z'; +// Real 'm.ra2[2]'.'w'; +// 'm.R1' 'm.ra2[3]'.'r'; +// Real 'm.ra2[3]'.'ra[1]'.'x'; +// Real 'm.ra2[3]'.'ra[1]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[1]'.'z'; +// Real 'm.ra2[3]'.'ra[2]'.'x'; +// Real 'm.ra2[3]'.'ra[2]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[2]'.'z'; +// Real 'm.ra2[3]'.'ra[3]'.'x'; +// Real 'm.ra2[3]'.'ra[3]'.'y'; +// Real[3] 'm.ra2[3]'.'ra[3]'.'z'; +// Real 'm.ra2[3]'.'w'; +// constant 'ma.R1' 'ma[1].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[1].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[1].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[1].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[1].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[1].cr2'; +// 'ma.R1' 'ma[1].r1'; +// Real[3] 'ma[1].ra1[1]'.'z'; +// Real 'ma[1].ra1[2]'.'x'; +// Real 'ma[1].ra1[2]'.'y'; +// Real[3] 'ma[1].ra1[2]'.'z'; +// Real 'ma[1].ra1[3]'.'x'; +// Real 'ma[1].ra1[3]'.'y'; +// Real[3] 'ma[1].ra1[3]'.'z'; +// 'ma.R1' 'ma[1].r2'.'r'; +// Real 'ma[1].r2'.'ra[1]'.'x'; +// Real 'ma[1].r2'.'ra[1]'.'y'; +// Real[3] 'ma[1].r2'.'ra[1]'.'z'; +// Real 'ma[1].r2'.'ra[2]'.'x'; +// Real 'ma[1].r2'.'ra[2]'.'y'; +// Real[3] 'ma[1].r2'.'ra[2]'.'z'; +// Real 'ma[1].r2'.'ra[3]'.'x'; +// Real 'ma[1].r2'.'ra[3]'.'y'; +// Real[3] 'ma[1].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[1].r2'; +// 'ma.R1' 'ma[1].ra2[1]'.'r'; +// Real[3] 'ma[1].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[1]'.'w'; +// 'ma.R1' 'ma[1].ra2[2]'.'r'; +// Real 'ma[1].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[2]'.'w'; +// 'ma.R1' 'ma[1].ra2[3]'.'r'; +// Real 'ma[1].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[1].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[1].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[1].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[1].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[1].ra2[3]'.'w'; +// constant 'ma.R1' 'ma[2].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[2].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[2].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[2].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[2].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[2].cr2'; +// 'ma.R1' 'ma[2].r1'; +// Real[3] 'ma[2].ra1[1]'.'z'; +// Real 'ma[2].ra1[2]'.'x'; +// Real 'ma[2].ra1[2]'.'y'; +// Real[3] 'ma[2].ra1[2]'.'z'; +// Real 'ma[2].ra1[3]'.'x'; +// Real 'ma[2].ra1[3]'.'y'; +// Real[3] 'ma[2].ra1[3]'.'z'; +// 'ma.R1' 'ma[2].r2'.'r'; +// Real 'ma[2].r2'.'ra[1]'.'x'; +// Real 'ma[2].r2'.'ra[1]'.'y'; +// Real[3] 'ma[2].r2'.'ra[1]'.'z'; +// Real 'ma[2].r2'.'ra[2]'.'x'; +// Real 'ma[2].r2'.'ra[2]'.'y'; +// Real[3] 'ma[2].r2'.'ra[2]'.'z'; +// Real 'ma[2].r2'.'ra[3]'.'x'; +// Real 'ma[2].r2'.'ra[3]'.'y'; +// Real[3] 'ma[2].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[2].r2'; +// 'ma.R1' 'ma[2].ra2[1]'.'r'; +// Real[3] 'ma[2].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[1]'.'w'; +// 'ma.R1' 'ma[2].ra2[2]'.'r'; +// Real 'ma[2].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[2]'.'w'; +// 'ma.R1' 'ma[2].ra2[3]'.'r'; +// Real 'ma[2].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[2].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[2].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[2].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[2].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[2].ra2[3]'.'w'; +// constant 'ma.R1' 'ma[3].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[3].cr2'.'r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[3].cr2'.'ra[1]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[1]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[1]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2'.'ra[2]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[2]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[2]'.'z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2'.'ra[3]'.'x' = 0.0; +// constant Real 'ma[3].cr2'.'ra[3]'.'y' = 0.0; +// constant Real[3] 'ma[3].cr2'.'ra[3]'.'z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[3].cr2'; +// 'ma.R1' 'ma[3].r1'; +// Real[3] 'ma[3].ra1[1]'.'z'; +// Real 'ma[3].ra1[2]'.'x'; +// Real 'ma[3].ra1[2]'.'y'; +// Real[3] 'ma[3].ra1[2]'.'z'; +// Real 'ma[3].ra1[3]'.'x'; +// Real 'ma[3].ra1[3]'.'y'; +// Real[3] 'ma[3].ra1[3]'.'z'; +// 'ma.R1' 'ma[3].r2'.'r'; +// Real 'ma[3].r2'.'ra[1]'.'x'; +// Real 'ma[3].r2'.'ra[1]'.'y'; +// Real[3] 'ma[3].r2'.'ra[1]'.'z'; +// Real 'ma[3].r2'.'ra[2]'.'x'; +// Real 'ma[3].r2'.'ra[2]'.'y'; +// Real[3] 'ma[3].r2'.'ra[2]'.'z'; +// Real 'ma[3].r2'.'ra[3]'.'x'; +// Real 'ma[3].r2'.'ra[3]'.'y'; +// Real[3] 'ma[3].r2'.'ra[3]'.'z'; +// 'ma.R2' 'ma[3].r2'; +// 'ma.R1' 'ma[3].ra2[1]'.'r'; +// Real[3] 'ma[3].ra2[1]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[1]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[1]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[1]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[1]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[1]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[1]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[1]'.'w'; +// 'ma.R1' 'ma[3].ra2[2]'.'r'; +// Real 'ma[3].ra2[2]'.'ra[1]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[1]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[2]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[2]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[2]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[2]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[2]'.'w'; +// 'ma.R1' 'ma[3].ra2[3]'.'r'; +// Real 'ma[3].ra2[3]'.'ra[1]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[1]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[1]'.'z'; +// Real 'ma[3].ra2[3]'.'ra[2]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[2]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[2]'.'z'; +// Real 'ma[3].ra2[3]'.'ra[3]'.'x'; +// Real 'ma[3].ra2[3]'.'ra[3]'.'y'; +// Real[3] 'ma[3].ra2[3]'.'ra[3]'.'z'; +// Real 'ma[3].ra2[3]'.'w'; +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1'.'x' = 0.0; +// 'm.r1'.'z[1]' = 0.0; +// 'm.ra1'.'x' = {0.0, 0.0, 0.0}; +// 'm.ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra1'.'z[1]' = {0.0, 0.0, 0.0}; +// 'm.ra1[2]' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1[1]'.'y' = 0.0; +// 'm.ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'm.ra1[1]'.'z[2]' = 0.0; +// 'm.ra2'.'r' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'm.ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra2[2]'.'ra' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'm.ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[1].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].r1'.'x' = 0.0; +// 'ma[1].r1'.'z[1]' = 0.0; +// 'ma[1].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra1'.'z[1]' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].ra1[1]'.'y' = 0.0; +// 'ma[1].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[1]'.'z[2]' = 0.0; +// 'ma[1].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[2].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].r1'.'x' = 0.0; +// 'ma[2].r1'.'z[1]' = 0.0; +// 'ma[2].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra1'.'z[1]' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].ra1[1]'.'y' = 0.0; +// 'ma[2].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[1]'.'z[2]' = 0.0; +// 'ma[2].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'ma[3].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].r1'.'x' = 0.0; +// 'ma[3].r1'.'z[1]' = 0.0; +// 'ma[3].ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra1'.'z[1]' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].ra1[1]'.'y' = 0.0; +// 'ma[3].ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[1]'.'z[2]' = 0.0; +// 'ma[3].ra2'.'r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra2[2]'.'ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2[1]'.'ra[2]'.'y' = 0.0; +// 'm.r1'.'x' = 0.0; +// 'm.ra1[1]'.'x' = 0.0; +// 'ma[1].r1'.'x' = 0.0; +// 'ma[1].r1'.'z[2]' = 0.0; +// 'ma[1].r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1'.'x' = 0.0; +// 'r1'.'z[1]' = 0.0; +// 'ra1'.'x' = {0.0, 0.0, 0.0}; +// 'ra1'.'z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra1'.'z[1]' = {0.0, 0.0, 0.0}; +// 'ra1[2]' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1[1]'.'y' = 0.0; +// 'ra1[1]'.'z' = {0.0, 0.0, 0.0}; +// 'ra1[1]'.'z[2]' = 0.0; +// 'ra2'.'r' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2'.'r'.'x' = {0.0, 0.0, 0.0}; +// 'ra2'.'ra'.'y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra2[2]'.'ra' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2[2]'.'ra'.'y' = {0.0, 0.0, 0.0}; +// 'ra2[1]'.'ra[2]'.'y' = 0.0; +// end 'ScalarizedWithRecords1'; +// end 'ScalarizedWithRecords1'; +// endResult diff --git a/testsuite/openmodelica/basemodelica/ScalarizedWithoutRecords1.mo b/testsuite/openmodelica/basemodelica/ScalarizedWithoutRecords1.mo new file mode 100644 index 00000000000..896db7e237f --- /dev/null +++ b/testsuite/openmodelica/basemodelica/ScalarizedWithoutRecords1.mo @@ -0,0 +1,496 @@ +// name: ScalarizedWithoutRecords1 +// status: correct +// cflags: -d=newInst -f --baseModelicaFormat=scalarized,withoutRecords + +model M + record R1 + Real x; + Real y; + Real z[3]; + end R1; + + record R2 + R1 r; + R1 ra[3]; + Real w; + end R2; + + constant R1 cr1 = R1(0, 0, zeros(3)); + constant R2 cr2 = R2(cr1, fill(cr1, 3), 0); + R1 r1; + R1 ra1[3]; + R2 r2; + R2 ra2[3]; +equation + r1 = cr1; + r1.x = 0; + r1.z[1] = 0; + + ra1.x = zeros(3); + ra1.z = zeros(3, 3); + ra1.z[1] = zeros(3); + ra1[2] = cr1; + ra1[1].y = 0; + ra1[1].z = zeros(3); + ra1[1].z[2] = 0; + + ra2.r = fill(cr1, 3); + ra2.r.x = zeros(3); + ra2.ra.y = zeros(3, 3); + + ra2[2].ra = fill(cr1, 3); + ra2[2].ra.y = zeros(3); + ra2[1].ra[2].y = 0; +end M; + +model ScalarizedWithoutRecords1 + extends M; + M m; + M ma[3]; +equation + m.r1.x = 0; + m.ra1[1].x = 0; + ma[1].r1.x = 0; + ma[1].r1.z[2] = 0; + ma[1].r1 = cr1; +end ScalarizedWithoutRecords1; + +// Result: +// //! base 0.1.0 +// package 'ScalarizedWithoutRecords1' +// record 'R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'R1'; +// +// record 'R2' +// 'R1' 'r'; +// 'R1'[3] 'ra'; +// Real 'w'; +// end 'R2'; +// +// record 'm.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'm.R1'; +// +// record 'm.R2' +// 'm.R1' 'r'; +// 'm.R1'[3] 'ra'; +// Real 'w'; +// end 'm.R2'; +// +// record 'ma.R1' +// Real 'x'; +// Real 'y'; +// Real[3] 'z'; +// end 'ma.R1'; +// +// record 'ma.R2' +// 'ma.R1' 'r'; +// 'ma.R1'[3] 'ra'; +// Real 'w'; +// end 'ma.R2'; +// +// model 'ScalarizedWithoutRecords1' +// constant 'R1' 'cr1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'R1' 'cr2.r' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'cr2.ra[1].x' = 0.0; +// constant Real 'cr2.ra[1].y' = 0.0; +// constant Real[3] 'cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2.ra[2].x' = 0.0; +// constant Real 'cr2.ra[2].y' = 0.0; +// constant Real[3] 'cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'cr2.ra[3].x' = 0.0; +// constant Real 'cr2.ra[3].y' = 0.0; +// constant Real[3] 'cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'R2' 'cr2'; +// 'R1' 'r1'; +// Real[3] 'ra1[1].z'; +// Real 'ra1[2].x'; +// Real 'ra1[2].y'; +// Real[3] 'ra1[2].z'; +// Real 'ra1[3].x'; +// Real 'ra1[3].y'; +// Real[3] 'ra1[3].z'; +// 'R1' 'r2.r'; +// Real 'r2.ra[1].x'; +// Real 'r2.ra[1].y'; +// Real[3] 'r2.ra[1].z'; +// Real 'r2.ra[2].x'; +// Real 'r2.ra[2].y'; +// Real[3] 'r2.ra[2].z'; +// Real 'r2.ra[3].x'; +// Real 'r2.ra[3].y'; +// Real[3] 'r2.ra[3].z'; +// 'R2' 'r2'; +// 'R1' 'ra2[1].r'; +// Real[3] 'ra2[1].ra[1].z'; +// Real 'ra2[1].ra[2].x'; +// Real 'ra2[1].ra[2].y'; +// Real[3] 'ra2[1].ra[2].z'; +// Real 'ra2[1].ra[3].x'; +// Real 'ra2[1].ra[3].y'; +// Real[3] 'ra2[1].ra[3].z'; +// Real 'ra2[1].w'; +// 'R1' 'ra2[2].r'; +// Real 'ra2[2].ra[1].x'; +// Real 'ra2[2].ra[1].y'; +// Real[3] 'ra2[2].ra[1].z'; +// Real 'ra2[2].ra[2].x'; +// Real 'ra2[2].ra[2].y'; +// Real[3] 'ra2[2].ra[2].z'; +// Real 'ra2[2].ra[3].x'; +// Real 'ra2[2].ra[3].y'; +// Real[3] 'ra2[2].ra[3].z'; +// Real 'ra2[2].w'; +// 'R1' 'ra2[3].r'; +// Real 'ra2[3].ra[1].x'; +// Real 'ra2[3].ra[1].y'; +// Real[3] 'ra2[3].ra[1].z'; +// Real 'ra2[3].ra[2].x'; +// Real 'ra2[3].ra[2].y'; +// Real[3] 'ra2[3].ra[2].z'; +// Real 'ra2[3].ra[3].x'; +// Real 'ra2[3].ra[3].y'; +// Real[3] 'ra2[3].ra[3].z'; +// Real 'ra2[3].w'; +// constant 'm.R1' 'm.cr1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'm.R1' 'm.cr2.r' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'm.cr2.ra[1].x' = 0.0; +// constant Real 'm.cr2.ra[1].y' = 0.0; +// constant Real[3] 'm.cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2.ra[2].x' = 0.0; +// constant Real 'm.cr2.ra[2].y' = 0.0; +// constant Real[3] 'm.cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'm.cr2.ra[3].x' = 0.0; +// constant Real 'm.cr2.ra[3].y' = 0.0; +// constant Real[3] 'm.cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'm.R2' 'm.cr2'; +// 'm.R1' 'm.r1'; +// Real[3] 'm.ra1[1].z'; +// Real 'm.ra1[2].x'; +// Real 'm.ra1[2].y'; +// Real[3] 'm.ra1[2].z'; +// Real 'm.ra1[3].x'; +// Real 'm.ra1[3].y'; +// Real[3] 'm.ra1[3].z'; +// 'm.R1' 'm.r2.r'; +// Real 'm.r2.ra[1].x'; +// Real 'm.r2.ra[1].y'; +// Real[3] 'm.r2.ra[1].z'; +// Real 'm.r2.ra[2].x'; +// Real 'm.r2.ra[2].y'; +// Real[3] 'm.r2.ra[2].z'; +// Real 'm.r2.ra[3].x'; +// Real 'm.r2.ra[3].y'; +// Real[3] 'm.r2.ra[3].z'; +// 'm.R2' 'm.r2'; +// 'm.R1' 'm.ra2[1].r'; +// Real[3] 'm.ra2[1].ra[1].z'; +// Real 'm.ra2[1].ra[2].x'; +// Real 'm.ra2[1].ra[2].y'; +// Real[3] 'm.ra2[1].ra[2].z'; +// Real 'm.ra2[1].ra[3].x'; +// Real 'm.ra2[1].ra[3].y'; +// Real[3] 'm.ra2[1].ra[3].z'; +// Real 'm.ra2[1].w'; +// 'm.R1' 'm.ra2[2].r'; +// Real 'm.ra2[2].ra[1].x'; +// Real 'm.ra2[2].ra[1].y'; +// Real[3] 'm.ra2[2].ra[1].z'; +// Real 'm.ra2[2].ra[2].x'; +// Real 'm.ra2[2].ra[2].y'; +// Real[3] 'm.ra2[2].ra[2].z'; +// Real 'm.ra2[2].ra[3].x'; +// Real 'm.ra2[2].ra[3].y'; +// Real[3] 'm.ra2[2].ra[3].z'; +// Real 'm.ra2[2].w'; +// 'm.R1' 'm.ra2[3].r'; +// Real 'm.ra2[3].ra[1].x'; +// Real 'm.ra2[3].ra[1].y'; +// Real[3] 'm.ra2[3].ra[1].z'; +// Real 'm.ra2[3].ra[2].x'; +// Real 'm.ra2[3].ra[2].y'; +// Real[3] 'm.ra2[3].ra[2].z'; +// Real 'm.ra2[3].ra[3].x'; +// Real 'm.ra2[3].ra[3].y'; +// Real[3] 'm.ra2[3].ra[3].z'; +// Real 'm.ra2[3].w'; +// constant 'ma.R1' 'ma[1].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[1].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[1].cr2.ra[1].x' = 0.0; +// constant Real 'ma[1].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2.ra[2].x' = 0.0; +// constant Real 'ma[1].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[1].cr2.ra[3].x' = 0.0; +// constant Real 'ma[1].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[1].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[1].cr2'; +// 'ma.R1' 'ma[1].r1'; +// Real[3] 'ma[1].ra1[1].z'; +// Real 'ma[1].ra1[2].x'; +// Real 'ma[1].ra1[2].y'; +// Real[3] 'ma[1].ra1[2].z'; +// Real 'ma[1].ra1[3].x'; +// Real 'ma[1].ra1[3].y'; +// Real[3] 'ma[1].ra1[3].z'; +// 'ma.R1' 'ma[1].r2.r'; +// Real 'ma[1].r2.ra[1].x'; +// Real 'ma[1].r2.ra[1].y'; +// Real[3] 'ma[1].r2.ra[1].z'; +// Real 'ma[1].r2.ra[2].x'; +// Real 'ma[1].r2.ra[2].y'; +// Real[3] 'ma[1].r2.ra[2].z'; +// Real 'ma[1].r2.ra[3].x'; +// Real 'ma[1].r2.ra[3].y'; +// Real[3] 'ma[1].r2.ra[3].z'; +// 'ma.R2' 'ma[1].r2'; +// 'ma.R1' 'ma[1].ra2[1].r'; +// Real[3] 'ma[1].ra2[1].ra[1].z'; +// Real 'ma[1].ra2[1].ra[2].x'; +// Real 'ma[1].ra2[1].ra[2].y'; +// Real[3] 'ma[1].ra2[1].ra[2].z'; +// Real 'ma[1].ra2[1].ra[3].x'; +// Real 'ma[1].ra2[1].ra[3].y'; +// Real[3] 'ma[1].ra2[1].ra[3].z'; +// Real 'ma[1].ra2[1].w'; +// 'ma.R1' 'ma[1].ra2[2].r'; +// Real 'ma[1].ra2[2].ra[1].x'; +// Real 'ma[1].ra2[2].ra[1].y'; +// Real[3] 'ma[1].ra2[2].ra[1].z'; +// Real 'ma[1].ra2[2].ra[2].x'; +// Real 'ma[1].ra2[2].ra[2].y'; +// Real[3] 'ma[1].ra2[2].ra[2].z'; +// Real 'ma[1].ra2[2].ra[3].x'; +// Real 'ma[1].ra2[2].ra[3].y'; +// Real[3] 'ma[1].ra2[2].ra[3].z'; +// Real 'ma[1].ra2[2].w'; +// 'ma.R1' 'ma[1].ra2[3].r'; +// Real 'ma[1].ra2[3].ra[1].x'; +// Real 'ma[1].ra2[3].ra[1].y'; +// Real[3] 'ma[1].ra2[3].ra[1].z'; +// Real 'ma[1].ra2[3].ra[2].x'; +// Real 'ma[1].ra2[3].ra[2].y'; +// Real[3] 'ma[1].ra2[3].ra[2].z'; +// Real 'ma[1].ra2[3].ra[3].x'; +// Real 'ma[1].ra2[3].ra[3].y'; +// Real[3] 'ma[1].ra2[3].ra[3].z'; +// Real 'ma[1].ra2[3].w'; +// constant 'ma.R1' 'ma[2].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[2].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[2].cr2.ra[1].x' = 0.0; +// constant Real 'ma[2].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2.ra[2].x' = 0.0; +// constant Real 'ma[2].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[2].cr2.ra[3].x' = 0.0; +// constant Real 'ma[2].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[2].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[2].cr2'; +// 'ma.R1' 'ma[2].r1'; +// Real[3] 'ma[2].ra1[1].z'; +// Real 'ma[2].ra1[2].x'; +// Real 'ma[2].ra1[2].y'; +// Real[3] 'ma[2].ra1[2].z'; +// Real 'ma[2].ra1[3].x'; +// Real 'ma[2].ra1[3].y'; +// Real[3] 'ma[2].ra1[3].z'; +// 'ma.R1' 'ma[2].r2.r'; +// Real 'ma[2].r2.ra[1].x'; +// Real 'ma[2].r2.ra[1].y'; +// Real[3] 'ma[2].r2.ra[1].z'; +// Real 'ma[2].r2.ra[2].x'; +// Real 'ma[2].r2.ra[2].y'; +// Real[3] 'ma[2].r2.ra[2].z'; +// Real 'ma[2].r2.ra[3].x'; +// Real 'ma[2].r2.ra[3].y'; +// Real[3] 'ma[2].r2.ra[3].z'; +// 'ma.R2' 'ma[2].r2'; +// 'ma.R1' 'ma[2].ra2[1].r'; +// Real[3] 'ma[2].ra2[1].ra[1].z'; +// Real 'ma[2].ra2[1].ra[2].x'; +// Real 'ma[2].ra2[1].ra[2].y'; +// Real[3] 'ma[2].ra2[1].ra[2].z'; +// Real 'ma[2].ra2[1].ra[3].x'; +// Real 'ma[2].ra2[1].ra[3].y'; +// Real[3] 'ma[2].ra2[1].ra[3].z'; +// Real 'ma[2].ra2[1].w'; +// 'ma.R1' 'ma[2].ra2[2].r'; +// Real 'ma[2].ra2[2].ra[1].x'; +// Real 'ma[2].ra2[2].ra[1].y'; +// Real[3] 'ma[2].ra2[2].ra[1].z'; +// Real 'ma[2].ra2[2].ra[2].x'; +// Real 'ma[2].ra2[2].ra[2].y'; +// Real[3] 'ma[2].ra2[2].ra[2].z'; +// Real 'ma[2].ra2[2].ra[3].x'; +// Real 'ma[2].ra2[2].ra[3].y'; +// Real[3] 'ma[2].ra2[2].ra[3].z'; +// Real 'ma[2].ra2[2].w'; +// 'ma.R1' 'ma[2].ra2[3].r'; +// Real 'ma[2].ra2[3].ra[1].x'; +// Real 'ma[2].ra2[3].ra[1].y'; +// Real[3] 'ma[2].ra2[3].ra[1].z'; +// Real 'ma[2].ra2[3].ra[2].x'; +// Real 'ma[2].ra2[3].ra[2].y'; +// Real[3] 'ma[2].ra2[3].ra[2].z'; +// Real 'ma[2].ra2[3].ra[3].x'; +// Real 'ma[2].ra2[3].ra[3].y'; +// Real[3] 'ma[2].ra2[3].ra[3].z'; +// Real 'ma[2].ra2[3].w'; +// constant 'ma.R1' 'ma[3].cr1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant 'ma.R1' 'ma[3].cr2.r' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// constant Real 'ma[3].cr2.ra[1].x' = 0.0; +// constant Real 'ma[3].cr2.ra[1].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[1].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2.ra[2].x' = 0.0; +// constant Real 'ma[3].cr2.ra[2].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[2].z' = {0.0, 0.0, 0.0}; +// constant Real 'ma[3].cr2.ra[3].x' = 0.0; +// constant Real 'ma[3].cr2.ra[3].y' = 0.0; +// constant Real[3] 'ma[3].cr2.ra[3].z' = {0.0, 0.0, 0.0}; +// constant 'ma.R2' 'ma[3].cr2'; +// 'ma.R1' 'ma[3].r1'; +// Real[3] 'ma[3].ra1[1].z'; +// Real 'ma[3].ra1[2].x'; +// Real 'ma[3].ra1[2].y'; +// Real[3] 'ma[3].ra1[2].z'; +// Real 'ma[3].ra1[3].x'; +// Real 'ma[3].ra1[3].y'; +// Real[3] 'ma[3].ra1[3].z'; +// 'ma.R1' 'ma[3].r2.r'; +// Real 'ma[3].r2.ra[1].x'; +// Real 'ma[3].r2.ra[1].y'; +// Real[3] 'ma[3].r2.ra[1].z'; +// Real 'ma[3].r2.ra[2].x'; +// Real 'ma[3].r2.ra[2].y'; +// Real[3] 'ma[3].r2.ra[2].z'; +// Real 'ma[3].r2.ra[3].x'; +// Real 'ma[3].r2.ra[3].y'; +// Real[3] 'ma[3].r2.ra[3].z'; +// 'ma.R2' 'ma[3].r2'; +// 'ma.R1' 'ma[3].ra2[1].r'; +// Real[3] 'ma[3].ra2[1].ra[1].z'; +// Real 'ma[3].ra2[1].ra[2].x'; +// Real 'ma[3].ra2[1].ra[2].y'; +// Real[3] 'ma[3].ra2[1].ra[2].z'; +// Real 'ma[3].ra2[1].ra[3].x'; +// Real 'ma[3].ra2[1].ra[3].y'; +// Real[3] 'ma[3].ra2[1].ra[3].z'; +// Real 'ma[3].ra2[1].w'; +// 'ma.R1' 'ma[3].ra2[2].r'; +// Real 'ma[3].ra2[2].ra[1].x'; +// Real 'ma[3].ra2[2].ra[1].y'; +// Real[3] 'ma[3].ra2[2].ra[1].z'; +// Real 'ma[3].ra2[2].ra[2].x'; +// Real 'ma[3].ra2[2].ra[2].y'; +// Real[3] 'ma[3].ra2[2].ra[2].z'; +// Real 'ma[3].ra2[2].ra[3].x'; +// Real 'ma[3].ra2[2].ra[3].y'; +// Real[3] 'ma[3].ra2[2].ra[3].z'; +// Real 'ma[3].ra2[2].w'; +// 'ma.R1' 'ma[3].ra2[3].r'; +// Real 'ma[3].ra2[3].ra[1].x'; +// Real 'ma[3].ra2[3].ra[1].y'; +// Real[3] 'ma[3].ra2[3].ra[1].z'; +// Real 'ma[3].ra2[3].ra[2].x'; +// Real 'ma[3].ra2[3].ra[2].y'; +// Real[3] 'ma[3].ra2[3].ra[2].z'; +// Real 'ma[3].ra2[3].ra[3].x'; +// Real 'ma[3].ra2[3].ra[3].y'; +// Real[3] 'ma[3].ra2[3].ra[3].z'; +// Real 'ma[3].ra2[3].w'; +// equation +// 'm.r1' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.r1.x' = 0.0; +// 'm.r1.z[1]' = 0.0; +// 'm.ra1.x' = {0.0, 0.0, 0.0}; +// 'm.ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra1.z[1]' = {0.0, 0.0, 0.0}; +// 'm.ra1[2]' = 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'm.ra1[1].y' = 0.0; +// 'm.ra1[1].z' = {0.0, 0.0, 0.0}; +// 'm.ra1[1].z[2]' = 0.0; +// 'm.ra2.r' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2.r.x' = {0.0, 0.0, 0.0}; +// 'm.ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'm.ra2[2].ra' = {'m.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'm.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'm.ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'm.ra2[1].ra[2].y' = 0.0; +// 'ma[1].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].r1.x' = 0.0; +// 'ma[1].r1.z[1]' = 0.0; +// 'ma[1].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra1.z[1]' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[1].ra1[1].y' = 0.0; +// 'ma[1].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[1].ra1[1].z[2]' = 0.0; +// 'ma[1].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[1].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[1].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[1].ra2[1].ra[2].y' = 0.0; +// 'ma[2].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].r1.x' = 0.0; +// 'ma[2].r1.z[1]' = 0.0; +// 'ma[2].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra1.z[1]' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[2].ra1[1].y' = 0.0; +// 'ma[2].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[2].ra1[1].z[2]' = 0.0; +// 'ma[2].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[2].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[2].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[2].ra2[1].ra[2].y' = 0.0; +// 'ma[3].r1' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].r1.x' = 0.0; +// 'ma[3].r1.z[1]' = 0.0; +// 'ma[3].ra1.x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra1.z[1]' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[2]' = 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ma[3].ra1[1].y' = 0.0; +// 'ma[3].ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ma[3].ra1[1].z[2]' = 0.0; +// 'ma[3].ra2.r' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ma[3].ra2[2].ra' = {'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'ma.R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ma[3].ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ma[3].ra2[1].ra[2].y' = 0.0; +// 'm.r1.x' = 0.0; +// 'm.ra1[1].x' = 0.0; +// 'ma[1].r1.x' = 0.0; +// 'ma[1].r1.z[2]' = 0.0; +// 'ma[1].r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'r1.x' = 0.0; +// 'r1.z[1]' = 0.0; +// 'ra1.x' = {0.0, 0.0, 0.0}; +// 'ra1.z' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra1.z[1]' = {0.0, 0.0, 0.0}; +// 'ra1[2]' = 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}); +// 'ra1[1].y' = 0.0; +// 'ra1[1].z' = {0.0, 0.0, 0.0}; +// 'ra1[1].z[2]' = 0.0; +// 'ra2.r' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2.r.x' = {0.0, 0.0, 0.0}; +// 'ra2.ra.y' = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; +// 'ra2[2].ra' = {'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0}), 'R1'(0.0, 0.0, {0.0, 0.0, 0.0})}; +// 'ra2[2].ra.y' = {0.0, 0.0, 0.0}; +// 'ra2[1].ra[2].y' = 0.0; +// end 'ScalarizedWithoutRecords1'; +// end 'ScalarizedWithoutRecords1'; +// endResult