Changeset c3cf1e92 in OpenModelica
- Timestamp:
- 2016-04-07T14:45:44+02:00 (8 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- 2c7da6d
- Parents:
- f6051a17
- git-author:
- Martin Sjölund <martin.sjolund@…> (04/07/16 14:45:44)
- git-committer:
- hudson <openmodelica@…> (04/07/16 14:45:44)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/SimCode/SimCodeUtil.mo
r41d4cef rc3cf1e92 6284 6284 BackendDAE.EqSystems systs1, systs2; 6285 6285 DAE.FunctionTree funcTree; 6286 HashSet.HashSet hs = HashSet.emptyHashSet();6286 array<HashSet.HashSet> hs = arrayCreate(1, HashSet.emptyHashSet()); 6287 6287 algorithm 6288 6288 BackendDAE.DAE(eqs=systs1, shared=BackendDAE.SHARED(knownVars=knvars1, externalObjects=extvars1, aliasVars=aliasVars1, functionTree=funcTree)) := inSimDAE; 6289 6289 BackendDAE.DAE(eqs=systs2, shared=BackendDAE.SHARED(knownVars=knvars2, externalObjects=extvars2, aliasVars=aliasVars2)) := inInitDAE; 6290 6291 systs1 := List.filterOnFalse(systs1, BackendDAEUtil.isClockedSyst);6292 systs2 := List.filterOnFalse(systs2, BackendDAEUtil.isClockedSyst);6293 6290 6294 6291 if not Flags.isSet(Flags.NO_START_CALC) then … … 6300 6297 // ### simulation ### 6301 6298 // Extract from variable list 6302 ((outVars, _, _, hs)) := List.fold1(List.map(systs1, BackendVariable.daeVars), BackendVariable.traverseBackendDAEVars, extractVarsFromList, (SimCodeVar.emptySimVars, aliasVars1, knvars1, hs));6299 outVars := List.fold1(list(BackendVariable.daeVars(syst) for syst guard not BackendDAEUtil.isClockedSyst(syst) in systs1), BackendVariable.traverseBackendDAEVars, function extractVarsFromList(aliasVars=aliasVars1, vars=knvars1, hs=hs), SimCodeVar.emptySimVars); 6303 6300 6304 6301 // Extract from known variable list 6305 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(knvars1, extractVarsFromList, (outVars, aliasVars1, knvars1, hs));6302 outVars := BackendVariable.traverseBackendDAEVars(knvars1, function extractVarsFromList(aliasVars=aliasVars1, vars=knvars1, hs=hs), outVars); 6306 6303 6307 6304 // Extract from removed variable list 6308 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(aliasVars1, extractVarsFromList, (outVars, aliasVars1, knvars1, hs));6305 outVars := BackendVariable.traverseBackendDAEVars(aliasVars1, function extractVarsFromList(aliasVars=aliasVars1, vars=knvars1, hs=hs), outVars); 6309 6306 6310 6307 // Extract from external object list 6311 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(extvars1, extractVarsFromList, (outVars, aliasVars1, knvars1, hs));6308 outVars := BackendVariable.traverseBackendDAEVars(extvars1, function extractVarsFromList(aliasVars=aliasVars1, vars=knvars1, hs=hs), outVars); 6312 6309 6313 6310 6314 6311 // ### initialization ### 6315 6312 // Extract from variable list 6316 ((outVars, _, _, hs)) := List.fold1(List.map(systs2, BackendVariable.daeVars), BackendVariable.traverseBackendDAEVars, extractVarsFromList, (outVars, aliasVars2, knvars2, hs));6313 outVars := List.fold1(list(BackendVariable.daeVars(syst) for syst guard not BackendDAEUtil.isClockedSyst(syst) in systs2), BackendVariable.traverseBackendDAEVars, function extractVarsFromList(aliasVars=aliasVars2, vars=knvars2, hs=hs), outVars); 6317 6314 6318 6315 // Extract from known variable list 6319 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(knvars2, extractVarsFromList, (outVars, aliasVars2, knvars2, hs));6316 outVars := BackendVariable.traverseBackendDAEVars(knvars2, function extractVarsFromList(aliasVars=aliasVars2, vars=knvars2, hs=hs), outVars); 6320 6317 6321 6318 // Extract from removed variable list 6322 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(aliasVars2, extractVarsFromList, (outVars, aliasVars2, knvars2, hs));6319 outVars := BackendVariable.traverseBackendDAEVars(aliasVars2, function extractVarsFromList(aliasVars=aliasVars2, vars=knvars2, hs=hs), outVars); 6323 6320 6324 6321 // Extract from external object list 6325 ((outVars, _, _, hs)) := BackendVariable.traverseBackendDAEVars(extvars2, extractVarsFromList, (outVars, aliasVars2, knvars2, hs));6322 outVars := BackendVariable.traverseBackendDAEVars(extvars2, function extractVarsFromList(aliasVars=aliasVars2, vars=knvars2, hs=hs), outVars); 6326 6323 6327 6324 //BaseHashSet.printHashSet(hs); … … 6447 6444 6448 6445 protected function extractVarsFromList 6449 input BackendDAE.Var inVar; 6450 input tuple<SimCodeVar.SimVars, BackendDAE.Variables, BackendDAE.Variables, HashSet.HashSet /*all processed crefs*/> inTpl; 6451 output BackendDAE.Var outVar = inVar; 6452 output tuple<SimCodeVar.SimVars, BackendDAE.Variables, BackendDAE.Variables, HashSet.HashSet /*all processed crefs*/> outTpl; 6453 protected 6454 SimCodeVar.SimVars vars; 6455 BackendDAE.Variables aliasVars, v; 6456 HashSet.HashSet hs; 6457 algorithm 6458 (vars, aliasVars, v, hs) := inTpl; 6459 6460 if not BaseHashSet.has(inVar.varName, hs) and not ComponentReference.isPreCref(inVar.varName) then 6461 (vars, hs) := extractVarFromVar(inVar, aliasVars, v, vars, hs); 6446 input output BackendDAE.Var var; 6447 input output SimCodeVar.SimVars simVars; 6448 input BackendDAE.Variables aliasVars, vars; 6449 input array<HashSet.HashSet> hs; 6450 algorithm 6451 if if ComponentReference.isPreCref(var.varName) then false else not BaseHashSet.has(var.varName, arrayGet(hs,1)) then 6452 simVars := extractVarFromVar(var, aliasVars, vars, simVars, hs); 6462 6453 // print("Added " + ComponentReference.printComponentRefStr(inVar.varName) + "\n"); 6463 6454 //else 6464 6455 // print("Skiped " + ComponentReference.printComponentRefStr(inVar.varName) + "\n"); 6465 6456 end if; 6466 6467 outTpl := (vars, aliasVars, v, hs);6468 6457 end extractVarsFromList; 6469 6458 … … 6475 6464 input BackendDAE.Variables inVars; 6476 6465 input SimCodeVar.SimVars varsIn; 6477 input HashSet.HashSet inHS"all processed crefs";6466 input array<HashSet.HashSet> hs "all processed crefs"; 6478 6467 output SimCodeVar.SimVars varsOut; 6479 output HashSet.HashSet outHS = inHS;6480 6468 protected 6481 6469 list<SimCodeVar.SimVar> stateVars; … … 6518 6506 // extract the sim var 6519 6507 simvar := dlowvarToSimvar(dlowVar, SOME(inAliasVars), inVars); 6520 derivSimvar := derVarFromStateVar(simvar);6521 6508 isalias := isAliasVar(simvar); 6522 6509 6523 6510 6524 6511 // update HashSet 6525 outHS := BaseHashSet.add(simvar.name, outHS);6512 arrayUpdate(hs, 1, BaseHashSet.add(simvar.name, arrayGet(hs,1))); 6526 6513 if (not isalias) and (BackendVariable.isStateVar(dlowVar) or BackendVariable.isAlgState(dlowVar)) then 6527 outHS := BaseHashSet.add(derivSimvar.name, outHS); 6514 derivSimvar := derVarFromStateVar(simvar); 6515 arrayUpdate(hs, 1, BaseHashSet.add(derivSimvar.name, arrayGet(hs,1))); 6516 else 6517 derivSimvar := simvar; // Just in case 6528 6518 end if; 6529 6519
Note: See TracChangeset
for help on using the changeset viewer.