Skip to content

Commit

Permalink
- changed sparsity pattern translation
Browse files Browse the repository at this point in the history
  - moved mapping (BackendVar->SimVar) from runtime to compile time
  - added FMI 2.0 modelStructure to SimCode


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24572 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Feb 13, 2015
1 parent 06ee0c2 commit b14d6d1
Show file tree
Hide file tree
Showing 15 changed files with 516 additions and 376 deletions.
2 changes: 2 additions & 0 deletions Compiler/BackEnd/BackendDAE.mo
Expand Up @@ -622,6 +622,8 @@ public constant String derivativeNamePrefix = "$DERAlias";
public constant String partialDerivativeNamePrefix = "$pDER";
public constant String functionDerivativeNamePrefix = "$funDER";

public constant String optimizationMayerTermName = "$OMC$objectMayerTerm";
public constant String optimizationLagrangeTermName = "$OMC$objectLagrangeTerm";

type FullJacobian = Option<list<tuple<Integer, Integer, Equation>>>;

Expand Down
5 changes: 3 additions & 2 deletions Compiler/BackEnd/BackendQSS.mo
Expand Up @@ -1020,12 +1020,13 @@ algorithm
Option<SimCode.BackendMapping> backendMapping;
Option<HpcOmSimCode.MemoryMap> hpOmMemoryMap;
list<SimCode.SimEqSystem> equationsForConditions;
Option<SimCode.FmiModelStructure> modelStruct;

case (SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,
algebraicEquations,useSymbolicInitialization,useHomotopy,initialEquations,removedInitialEquations,startValueEquations,nominalValueEquations,minValueEquations,maxValueEquations,
parameterEquations,removedEquations,algorithmAndEquationAsserts,equationsForZeroCrossings,jacobianEquations,stateSets,constraints,classAttributes,zeroCrossings,relations,
timeEvents,whenClauses,discreteModelVars,extObjInfo,makefileParams,
delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,hpcOmSchedule,hpOmMemoryMap,equationsForConditions,crefToSimVarHT,backendMapping),_)
delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,hpcOmSchedule,hpOmMemoryMap,equationsForConditions,crefToSimVarHT,backendMapping, modelStruct),_)
equation
{eqs} = odeEquations;
eqs = List.map1(eqs,replaceZC,zc_exps);
Expand All @@ -1034,7 +1035,7 @@ algorithm
initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations, parameterEquations,
removedEquations, algorithmAndEquationAsserts, equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes,
zeroCrossings, relations, timeEvents, whenClauses, discreteModelVars, extObjInfo,
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpOmMemoryMap, equationsForConditions, crefToSimVarHT,backendMapping);
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpOmMemoryMap, equationsForConditions, crefToSimVarHT,backendMapping, modelStruct);

end match;
end replaceDiscontsInOde;
Expand Down
4 changes: 2 additions & 2 deletions Compiler/BackEnd/DynamicOptimization.mo
Expand Up @@ -94,8 +94,8 @@ algorithm

inVarsAndknvars := BackendVariable.addVariables(inVars, BackendVariable.copyVariables(knvars));
varlst := BackendVariable.varList(inVarsAndknvars);
(v, e, mayer) := joinObjectFun(makeObject("$OMC$objectMayerTerm", findMayerTerm, varlst, mayer), inVars, inEqns);
(v, e, lagrange) := joinObjectFun(makeObject("$OMC$objectLagrangeTerm", findLagrangeTerm, varlst, lagrange), v, e);
(v, e, mayer) := joinObjectFun(makeObject(BackendDAE.optimizationMayerTermName, findMayerTerm, varlst, mayer), inVars, inEqns);
(v, e, lagrange) := joinObjectFun(makeObject(BackendDAE.optimizationLagrangeTermName, findLagrangeTerm, varlst, lagrange), v, e);
(v, e) := joinConstraints(inConstraint, "$OMC$constarintTerm", BackendDAE.OPT_CONSTR(), knvars, varlst ,v, e, BackendVariable.hasConTermAnno);
(outVars, outEqns) := joinConstraints({}, "$OMC$finalConstarintTerm", BackendDAE.OPT_FCONSTR(), knvars, varlst, v, e, BackendVariable.hasFinalConTermAnno);
Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true);
Expand Down
13 changes: 7 additions & 6 deletions Compiler/BackEnd/HpcOmScheduler.mo
Expand Up @@ -3301,11 +3301,12 @@ protected
list<String> labels;
Integer numZeroCrossings, numTimeEvents, numRelations, numMathEventFunctions, numStateVars, numAlgVars, numDiscreteReal, numIntAlgVars, numBoolAlgVars, numAlgAliasVars, numIntAliasVars, numBoolAliasVars, numParams, numIntParams, numBoolParams, numOutVars, numInVars, numExternalObjects, numStringAlgVars, numStringParamVars,
numStringAliasVars, numEquations, numLinearSystems, numNonLinearSystems, numMixedSystems, numStateSets, numJacobians, numOptimizeConstraints, numOptimizeFinalConstraints;
Option<SimCode.FmiModelStructure> modelStruct;
algorithm
SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy,
initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations, parameterEquations, removedEquations,
algorithmAndEquationAsserts,equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses, discreteModelVars, extObjInfo,
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpcOmMemory, equationsForConditions, crefToSimVarHT, backendMapping):=simCodeIn;
makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpcOmMemory, equationsForConditions, crefToSimVarHT, backendMapping, modelStruct):=simCodeIn;
SimCode.MODELINFO(name=name,description=description,directory=directory,varInfo=varInfo,vars=vars,functions=functions,labels=labels) := modelInfo;
SimCode.VARINFO(numZeroCrossings=numZeroCrossings, numTimeEvents=numTimeEvents, numRelations=numRelations, numMathEventFunctions=numMathEventFunctions, numStateVars=numStateVars,
numAlgVars=numAlgVars, numDiscreteReal=numDiscreteReal, numIntAlgVars=numIntAlgVars, numBoolAlgVars=numBoolAlgVars, numAlgAliasVars=numAlgAliasVars, numIntAliasVars=numIntAliasVars,
Expand Down Expand Up @@ -3340,7 +3341,7 @@ algorithm
modelInfo := SimCode.MODELINFO(name,description,directory,varInfo,vars,functions,labels);
simCodeOut := SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, equationsForZeroCrossings, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpcOmMemory, equationsForConditions, crefToSimVarHT,backendMapping);
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, hpcOmSchedule, hpcOmMemory, equationsForConditions, crefToSimVarHT,backendMapping, modelStruct);
idxAssOut := ass;
end TDS_assignNewSimEqSysIdxs;

Expand Down Expand Up @@ -3455,8 +3456,8 @@ algorithm
list<SimCode.JacobianColumn> jacCols;
list<SimCodeVar.SimVar> vars;
String name;
tuple<list<tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,list<tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,tuple<list<SimCodeVar.SimVar>,list<SimCodeVar.SimVar>>> sparsePatt;
list<list<DAE.ComponentRef>> colCols;
tuple<list< tuple<Integer, list<Integer>>>,list< tuple<Integer, list<Integer>>>> sparsePatt;
list<list<Integer>> colCols;
array<Integer> ass;
Integer newIdx;
case(SOME((jacCols,vars,name,sparsePatt,colCols,maxCol,jacIdx)),(newIdx,ass))
Expand Down Expand Up @@ -3503,8 +3504,8 @@ algorithm
list<SimCode.JacobianColumn> jacCols;
list<SimCodeVar.SimVar> vars;
String name;
tuple<list<tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,list<tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,tuple<list<SimCodeVar.SimVar>,list<SimCodeVar.SimVar>>> sparsePatt;
list<list<DAE.ComponentRef>> colCols;
tuple<list< tuple<Integer, list<Integer>>>,list< tuple<Integer, list<Integer>>>> sparsePatt;
list<list<Integer>> colCols;
array<Integer> ass;
Integer newIdx;
case(SOME((jacCols,vars,name,sparsePatt,colCols,maxCol,jacIdx)),_)
Expand Down
20 changes: 20 additions & 0 deletions Compiler/BackEnd/SymbolicJacobian.mo
Expand Up @@ -1876,6 +1876,26 @@ algorithm
end try;
end checkObjectIsSet;

public function getJacobianMatrixbyName
input BackendDAE.SymbolicJacobians injacobianMatrixes;
input String inJacobianName;
output Option<tuple<Option<BackendDAE.SymbolicJacobian>, BackendDAE.SparsePattern, BackendDAE.SparseColoring>> outMatrix;
algorithm
outMatrix := matchcontinue(injacobianMatrixes, inJacobianName)
local
tuple<Option<BackendDAE.SymbolicJacobian>, BackendDAE.SparsePattern, BackendDAE.SparseColoring> matrix;
BackendDAE.SymbolicJacobians rest;
String name;
case ( (matrix as (SOME((_,name,_,_,_)), _, _))::_, _)
equation
true = stringEq(name, inJacobianName);
then SOME(matrix);
case ( _::rest, _)
then getJacobianMatrixbyName(rest, inJacobianName);
else NONE();
end matchcontinue;
end getJacobianMatrixbyName;

// =============================================================================
// Module for to calculate strong component Jacobains
//
Expand Down
5 changes: 3 additions & 2 deletions Compiler/SimCode/HpcOmSimCodeMain.mo
Expand Up @@ -178,6 +178,7 @@ algorithm
array<Option<SimCode.SimEqSystem>> simEqIdxSimEqMapping;

array<list<SimCodeVar.SimVar>> simVarMapping; //maps each backend variable to a list of simVars
Option<SimCode.FmiModelStructure> modelStruct;
case (BackendDAE.DAE(eqs=eqs), _, _, _, _,_, _, _, _, _, _, _, _) equation

//Initial System
Expand Down Expand Up @@ -322,7 +323,7 @@ algorithm

SimCode.SIMCODE(modelInfo, simCodeLiterals, simCodeRecordDecls, simCodeExternalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, zeroCrossingsEquations, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, _, _, crefToSimVarHT, backendMapping) = simCode;
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, _, _, _, crefToSimVarHT, backendMapping, modelStruct) = simCode;

//(schedule,numProc) = repeatScheduleWithOtherNumProc(taskGraphSimplified,taskGraphDataSimplified,sccSimEqMapping,filenamePrefix,cpCostsWoC,schedule,numProc,numFixed);
numProc = Flags.getConfigInt(Flags.NUM_PROC);
Expand Down Expand Up @@ -357,7 +358,7 @@ algorithm

simCode = SimCode.SIMCODE(modelInfo, simCodeLiterals, simCodeRecordDecls, simCodeExternalFunctionIncludes, allEquations, odeEquations, algebraicEquations, useSymbolicInitialization, useHomotopy, initialEquations, removedInitialEquations, startValueEquations, nominalValueEquations, minValueEquations, maxValueEquations,
parameterEquations, removedEquations, algorithmAndEquationAsserts, zeroCrossingsEquations, jacobianEquations, stateSets, constraints, classAttributes, zeroCrossings, relations, timeEvents, whenClauses,
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, SOME(schedule), optTmpMemoryMap, equationsForConditions, crefToSimVarHT, backendMapping);
discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, SOME(schedule), optTmpMemoryMap, equationsForConditions, crefToSimVarHT, backendMapping, modelStruct);

//print("Number of literals post: " + intString(listLength(simCodeLiterals)) + "\n");

Expand Down
8 changes: 5 additions & 3 deletions Compiler/SimCode/SimCode.mo
Expand Up @@ -65,10 +65,10 @@ type ExtDestructor = tuple<String, DAE.ComponentRef>;
type ExtAlias = tuple<DAE.ComponentRef, DAE.ComponentRef>;
type JacobianColumn = tuple<list<SimEqSystem>, list<SimCodeVar.SimVar>, String>; // column equations, column vars, column length
type JacobianMatrix = tuple<list<JacobianColumn>, // column
list<SimCodeVar.SimVar>, // seed vars
list<SimCodeVar.SimVar>, // seed vars
String, // matrix name
tuple<list< tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,list< tuple<DAE.ComponentRef,list<DAE.ComponentRef>>>,tuple<list<SimCodeVar.SimVar>,list<SimCodeVar.SimVar>>>, // sparse pattern
list<list<DAE.ComponentRef>>, // colored cols
tuple<list< tuple<Integer, list<Integer>>>,list< tuple<Integer, list<Integer>>>>, // sparse pattern
list<list<Integer>>, // colored cols
Integer, // max color used
Integer>; // jacobian index

Expand Down Expand Up @@ -121,6 +121,8 @@ uniontype SimCode
//*** a protected section *** not exported to SimCodeTV
HashTableCrefToSimVar crefToSimVarHT "hidden from typeview - used by cref2simvar() for cref -> SIMVAR lookup available in templates.";
Option<BackendMapping> backendMapping;
//FMI 2.0 data for model structure
Option<FmiModelStructure> modelStructure;
end SIMCODE;
end SimCode;

Expand Down

0 comments on commit b14d6d1

Please sign in to comment.