@@ -780,7 +780,7 @@ protected function selectInitializationVariablesDAE "author: lochel
780780 This function wraps selectInitializationVariables.
781781 All primary parameters get removed from the dae."
782782 input output BackendDAE . BackendDAE dae;
783- output BackendDAE . Variables outVars ;
783+ output BackendDAE . Variables outInitVars ;
784784 output list< BackendDAE . Var > outPrimaryParameters = {};
785785 output list< BackendDAE . Var > outAllPrimaryParameters = {};
786786protected
@@ -797,15 +797,16 @@ protected
797797 BackendDAE . Var p;
798798 DAE . Exp bindExp;
799799algorithm
800- outVars := selectInitializationVariables(dae. eqs);
801- outVars := BackendVariable . traverseBackendDAEVars(dae. shared . globalKnownVars, selectInitializationVariables2, outVars );
802- outVars := BackendVariable . traverseBackendDAEVars(dae. shared . aliasVars, selectInitializationVariables2, outVars );
800+ outInitVars := selectInitializationVariables(dae. eqs);
801+ outInitVars := BackendVariable . traverseBackendDAEVars(dae. shared . globalKnownVars, selectInitializationVariables2, outInitVars );
802+ outInitVars := BackendVariable . traverseBackendDAEVars(dae. shared . aliasVars, selectInitializationVariables2, outInitVars );
803803
804804 // select all parameters
805805 allParameters := BackendVariable . emptyVars();
806806 allParameterEqns := BackendEquation . emptyEqns();
807807 otherVariables := BackendVariable . emptyVars();
808808 (allParameters, allParameterEqns, otherVariables) := BackendVariable . traverseBackendDAEVars(dae. shared . globalKnownVars, selectParameter2, (allParameters, allParameterEqns, otherVariables));
809+ (allParameters, allParameterEqns, otherVariables) := BackendVariable . traverseBackendDAEVars(dae. shared . externalObjects, selectParameter2, (allParameters, allParameterEqns, otherVariables));
809810 nParam := BackendVariable . varsSize(allParameters);
810811
811812 if nParam > 0 then
@@ -843,11 +844,11 @@ algorithm
843844 if 1 == secondary[i] then
844845 otherVariables := BackendVariable . addVar(p, otherVariables);
845846 p := BackendVariable . setVarFixed(p, false );
846- outVars := BackendVariable . addVar(p, outVars );
847+ outInitVars := BackendVariable . addVar(p, outInitVars );
847848 else
848849 outAllPrimaryParameters := p::outAllPrimaryParameters;
849850 bindExp := BackendVariable . varBindExpStartValueNoFail(p);
850- if (not Expression . isConst(bindExp)) or BackendVariable . isFinalOrProtectedVar(p) then
851+ if (not Expression . isConst(bindExp)) or BackendVariable . isFinalOrProtectedVar(p) or BackendVariable . isExtObj(p) then
851852 outPrimaryParameters := p::outPrimaryParameters "this is used in SimCode to generate parameter equations" ;
852853 end if ;
853854 end if ;
@@ -857,6 +858,10 @@ algorithm
857858 outPrimaryParameters := listReverse(outPrimaryParameters);
858859 outAllPrimaryParameters := listReverse(outAllPrimaryParameters);
859860 dae := BackendDAEUtil . setKnownVars(dae, otherVariables);
861+
862+ // BackendDump.dumpVarList(outPrimaryParameters, "outPrimaryParameters");
863+ // BackendDump.dumpVarList(outAllPrimaryParameters, "outAllPrimaryParameters");
864+ // BackendDump.dumpVariables(otherVariables, "otherVariables");
860865 end if ;
861866end selectInitializationVariablesDAE;
862867
@@ -985,6 +990,17 @@ algorithm
985990 eqns = BackendEquation . addEquation(eqn, eqns);
986991 then ((vars, eqns, otherVars));
987992
993+ // external object with binding
994+ case (BackendDAE . VAR (varKind= BackendDAE . EXTOBJ (), bindExp= SOME (bindExp)), (vars, eqns, otherVars)) equation
995+ var = BackendVariable . setVarFixed(inVar, true );
996+ vars = BackendVariable . addVar(var , vars);
997+
998+ cref = BackendVariable . varCref(inVar);
999+ crefExp = Expression . crefExp(cref);
1000+ eqn = BackendDAE . EQUATION (crefExp, bindExp, DAE . emptyElementSource, BackendDAE . EQ_ATTR_DEFAULT_INITIAL );
1001+ eqns = BackendEquation . addEquation(eqn, eqns);
1002+ then ((vars, eqns, otherVars));
1003+
9881004 else equation
9891005 (vars, eqns, otherVars) = inTpl;
9901006 otherVars = BackendVariable . addVar(inVar, otherVars);
0 commit comments