Skip to content

Commit

Permalink
- removed linear flag for SimCode.createEquation
Browse files Browse the repository at this point in the history
   - allow also no-linear for jacobians
 - fixed function for linearization


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19129 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Feb 16, 2014
1 parent 413a0d9 commit 83335f9
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 197 deletions.
15 changes: 11 additions & 4 deletions Compiler/BackEnd/BackendDAEOptimize.mo
Expand Up @@ -3269,22 +3269,24 @@ algorithm

// Differentiate the System w.r.t states for matrices A
(linearModelMatrix, sparsePattern, sparseColoring, functionTree) = createJacobian(backendDAE2,states,statesarr,inputvarsarr,paramvarsarr,statesarr,varlst,"A");
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = {(SOME(linearModelMatrix),sparsePattern,sparseColoring)};
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix A time: " +& realString(clock()) +& "\n");



// Differentiate the System w.r.t inputs for matrices B
(linearModelMatrix, sparsePattern, sparseColoring, funcs) = createJacobian(backendDAE2,inputvars2,statesarr,inputvarsarr,paramvarsarr,statesarr,varlst,"B");
functionTree = DAEUtil.joinAvlTrees(functionTree, funcs);
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = listAppend(linearModelMatrices,{(SOME(linearModelMatrix),sparsePattern,sparseColoring)});
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix B time: " +& realString(clock()) +& "\n");

// Differentiate the System w.r.t states for matrices C
(linearModelMatrix, sparsePattern, sparseColoring, funcs) = createJacobian(backendDAE2,states,statesarr,inputvarsarr,paramvarsarr,outputvarsarr,varlst,"C");
functionTree = DAEUtil.joinAvlTrees(functionTree, funcs);
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = listAppend(linearModelMatrices,{(SOME(linearModelMatrix),sparsePattern,sparseColoring)});
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix C time: " +& realString(clock()) +& "\n");


// Differentiate the System w.r.t inputs for matrices D
(linearModelMatrix, sparsePattern, sparseColoring, funcs) = createJacobian(backendDAE2,inputvars2,statesarr,inputvarsarr,paramvarsarr,outputvarsarr,varlst,"D");
functionTree = DAEUtil.joinAvlTrees(functionTree, funcs);
Expand Down Expand Up @@ -3330,17 +3332,21 @@ algorithm

// Differentiate the System w.r.t states for matrices A
(linearModelMatrix, sparsePattern, sparseColoring, functionTree) = createJacobian(backendDAE2,states,statesarr,inputvarsarr,paramvarsarr,statesarr,varlst,"A");
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = {(SOME(linearModelMatrix),sparsePattern,sparseColoring)};
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix A time: " +& realString(clock()) +& "\n");

// Differentiate the System w.r.t states&inputs for matrices B
(linearModelMatrix, sparsePattern, sparseColoring, funcs) = createJacobian(backendDAE2,states_inputs,statesarr,inputvarsarr,paramvarsarr,BackendVariable.mergeVariables(statesarr, conVars),varlst,"B");
functionTree = DAEUtil.joinAvlTrees(functionTree, funcs);
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = listAppend(linearModelMatrices,{(SOME(linearModelMatrix),sparsePattern,sparseColoring)});
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix B time: " +& realString(clock()) +& "\n");

// Differentiate the System w.r.t states for matrices C
(linearModelMatrix, sparsePattern, sparseColoring, funcs) = createJacobian(backendDAE2,states_inputs,statesarr,inputvarsarr,paramvarsarr,object,varlst,"C");
functionTree = DAEUtil.joinAvlTrees(functionTree, funcs);
backendDAE2 = BackendDAEUtil.addBackendDAEFunctionTree(functionTree, backendDAE2);
linearModelMatrices = listAppend(linearModelMatrices,{(SOME(linearModelMatrix),sparsePattern,sparseColoring)});
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated system for matrix C time: " +& realString(clock()) +& "\n");

Expand Down Expand Up @@ -3410,7 +3416,7 @@ algorithm
// Differentiate the ODE system w.r.t states for jacobian
(backendDAE as BackendDAE.DAE(shared=shared), funcs) = generateSymbolicJacobian(inBackendDAE, inDiffVars, inDifferentiatedVars, BackendVariable.listVar1(seedlst), inStateVars, inInputVars, inParameterVars, inName);
Debug.fcall(Flags.JAC_DUMP2, print, "analytical Jacobians -> generated equations for Jacobian " +& inName +& " time: " +& realString(clock()) +& "\n");

Debug.execStat("analytical Jacobians -> generated jacobian equations", GlobalScript.RT_CLOCK_EXECSTAT_JACOBIANS);

knvars1 = BackendVariable.daeKnVars(shared);
knvarsTmp = BackendVariable.varList(knvars1);
Expand All @@ -3430,6 +3436,7 @@ algorithm

// generate sparse pattern
(sparsepattern,colsColors) = generateSparsePattern(inBackendDAE, inDiffVars, diffedVars);
Debug.execStat("analytical Jacobians -> generated generateSparsePattern", GlobalScript.RT_CLOCK_EXECSTAT_JACOBIANS);
then
((backendDAE, inName, inDiffVars, diffedVars, inVars), sparsepattern, colsColors, funcs);
else
Expand Down

0 comments on commit 83335f9

Please sign in to comment.