Skip to content

Commit af510b4

Browse files
author
Peter Aronsson
committed
-Added generation of covariance matrix to openturns python script. Currently there is a limitation due to insufficient support of records inside vectors, so the covariance matrix must be defined using an algorithm section and the size must be declared as a constant, like this:
Correlation correlation[1]; algorithm correlation := {Correlation(a,b,0.1)}; (Due to the limitation, this declaration and the algorithm section is stripped from the model before building the simulator) This also means that the Correlation record is now a built in class in OpenModelica. git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@12032 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 357d5dc commit af510b4

File tree

5 files changed

+348
-75
lines changed

5 files changed

+348
-75
lines changed

Compiler/BackEnd/BackendDAEUtil.mo

Lines changed: 91 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ algorithm
639639
EqSystems eqns;
640640
BackendDAE.Shared shared,shared1;
641641
BackendDAE.BackendDAE bDAE;
642-
case (bDAE as BackendDAE.DAE(shared=shared))
642+
case (bDAE as BackendDAE.DAE(eqs=eqns, shared=shared))
643643
equation
644644
BackendDAE.DAE(eqs=eqns) = mapEqSystem(bDAE, copyBackendDAEEqSystem);
645645
shared1 = copyBackendDAEShared(shared);
@@ -893,6 +893,7 @@ algorithm
893893
Variables vars, knvars, extVars;
894894
AliasVariables av;
895895
EquationArray eqns,seqns,ieqns;
896+
BackendDAE.BackendDAE trans_dae;
896897
ExternalObjectClasses extObjCls;
897898
Option<BackendDAE.IncidenceMatrix> m,mT;
898899
BackendDAEType btp;
@@ -2541,6 +2542,7 @@ algorithm
25412542
BackendDAE.Value size;
25422543
array<BackendDAE.Value> arr,arr_1;
25432544
BackendDAE.StrongComponents comps,blt_states,blt_no_states;
2545+
BackendDAE.BackendDAE dae;
25442546
Variables v,kv;
25452547
EquationArray e,se,ie;
25462548
array<BackendDAE.MultiDimEquation> ae;
@@ -2658,6 +2660,7 @@ algorithm
26582660
matchcontinue (syst,inIntegerArray2,inIntegerArray5,inIntegerArray6)
26592661
local
26602662
list<Var> statevar_lst;
2663+
BackendDAE.BackendDAE dae;
26612664
array<BackendDAE.Value> arr_1,arr;
26622665
array<list<BackendDAE.Value>> m,mt;
26632666
array<BackendDAE.Value> a1,a2;
@@ -4718,6 +4721,7 @@ public function updateIncidenceMatrix
47184721
algorithm
47194722
osyst := matchcontinue (syst,shared,inIntegerLst)
47204723
local
4724+
BackendDAE.BackendDAE dae;
47214725
BackendDAE.IncidenceMatrix m,m_1,m_2;
47224726
BackendDAE.IncidenceMatrixT mt,mt_1,mt_2,mt_3;
47234727
BackendDAE.Value e_1,e,abse;
@@ -4758,6 +4762,7 @@ algorithm
47584762
(outIncidenceMatrix,outIncidenceMatrixT):=
47594763
matchcontinue (vars,daeeqns,wc,inIncidenceMatrix,inIncidenceMatrixT,inIntegerLst)
47604764
local
4765+
BackendDAE.BackendDAE dae;
47614766
BackendDAE.IncidenceMatrix m,m_1,m_2;
47624767
BackendDAE.IncidenceMatrixT mt,mt_1,mt_2,mt_3;
47634768
BackendDAE.Value e_1,e,abse;
@@ -6054,6 +6059,7 @@ algorithm
60546059
outJacobianType:=
60556060
matchcontinue (inBackendDAE,inTplIntegerIntegerEquationLstOption)
60566061
local
6062+
BackendDAE.BackendDAE daelow;
60576063
Variables vars;
60586064
array<BackendDAE.MultiDimEquation> arreqn;
60596065
list<tuple<BackendDAE.Value, BackendDAE.Value, BackendDAE.Equation>> jac;
@@ -6084,6 +6090,7 @@ algorithm
60846090
matchcontinue (inBackendDAE)
60856091
local
60866092
Boolean res;
6093+
BackendDAE.BackendDAE dae;
60876094
EquationArray eqns;
60886095
BackendDAE.Variables vars;
60896096
array<BackendDAE.MultiDimEquation> arreqn;
@@ -6111,6 +6118,7 @@ algorithm
61116118
DAE.Exp new_exp,rhs_exp,e1,e2,e;
61126119
Boolean b,res;
61136120
BackendDAE.Equation eqn;
6121+
BackendDAE.BackendDAE dae;
61146122
Variables vars;
61156123
BackendDAE.Value indx;
61166124
array<BackendDAE.MultiDimEquation> arreqn;
@@ -6906,58 +6914,58 @@ author: Peter Aronsson (paronsson@wolfram.com)
69066914
output Option<DAE.VariableAttributes> outAttr;
69076915
output ExtraArgType outExtraArg;
69086916
algorithm
6909-
(outAttr,outExtraArg) := matchcontinue(attr,func,iextraArg)
6917+
(outAttr,outExtraArg) := matchcontinue(attr,func,extraArg)
69106918
local Option<DAE.Exp> q,u,du,min,max,i,f,n,eqbound;
69116919
Option<DAE.StateSelect> ss;
69126920
Option<DAE.Uncertainty> unc;
69136921
Option<DAE.Distribution> dist;
69146922
Option<Boolean> p,fin;
69156923
ExtraArgType extraArg;
6916-
case(NONE(),_,_) then (NONE(),iextraArg);
6924+
case(NONE(),_,_) then (NONE(),extraArg);
69176925
case(SOME(DAE.VAR_ATTR_REAL(q,u,du,(min,max),i,f,n,ss,unc,dist,eqbound,p,fin)),func,extraArg) equation
6918-
((q,extraArg)) = Expression.traverseExpOpt(q,func,iextraArg);
6919-
((u,extraArg)) = Expression.traverseExpOpt(u,func,extraArg);
6920-
((du,extraArg)) = Expression.traverseExpOpt(du,func,extraArg);
6921-
((min,extraArg)) = Expression.traverseExpOpt(min,func,extraArg);
6922-
((max,extraArg)) = Expression.traverseExpOpt(max,func,extraArg);
6923-
((i,extraArg)) = Expression.traverseExpOpt(i,func,extraArg);
6924-
((f,extraArg)) = Expression.traverseExpOpt(f,func,extraArg);
6925-
((n,extraArg)) = Expression.traverseExpOpt(n,func,extraArg);
6926-
((eqbound,extraArg)) = Expression.traverseExpOpt(eqbound,func,extraArg);
6927-
(dist,extraArg) = traverseBackendDAEAttrDistribution(dist,func,extraArg);
6928-
then (SOME(DAE.VAR_ATTR_REAL(q,u,du,(min,max),i,f,n,ss,unc,dist,eqbound,p,fin)),extraArg);
6926+
((q,outExtraArg)) = Expression.traverseExpOpt(q,func,extraArg);
6927+
((u,outExtraArg)) = Expression.traverseExpOpt(u,func,outExtraArg);
6928+
((du,outExtraArg)) = Expression.traverseExpOpt(du,func,outExtraArg);
6929+
((min,outExtraArg)) = Expression.traverseExpOpt(min,func,outExtraArg);
6930+
((max,outExtraArg)) = Expression.traverseExpOpt(max,func,outExtraArg);
6931+
((i,outExtraArg)) = Expression.traverseExpOpt(i,func,outExtraArg);
6932+
((f,outExtraArg)) = Expression.traverseExpOpt(f,func,outExtraArg);
6933+
((n,outExtraArg)) = Expression.traverseExpOpt(n,func,outExtraArg);
6934+
((eqbound,outExtraArg)) = Expression.traverseExpOpt(eqbound,func,outExtraArg);
6935+
(dist,outExtraArg) = traverseBackendDAEAttrDistribution(dist,func,outExtraArg);
6936+
then (SOME(DAE.VAR_ATTR_REAL(q,u,du,(min,max),i,f,n,ss,unc,dist,eqbound,p,fin)),outExtraArg);
69296937

6930-
case(SOME(DAE.VAR_ATTR_INT(q,(min,max),i,f,unc,dist,eqbound,p,fin)),_,_) equation
6931-
((q,extraArg)) = Expression.traverseExpOpt(q,func,iextraArg);
6932-
((min,extraArg)) = Expression.traverseExpOpt(min,func,extraArg);
6933-
((max,extraArg)) = Expression.traverseExpOpt(max,func,extraArg);
6934-
((i,extraArg)) = Expression.traverseExpOpt(i,func,extraArg);
6935-
((f,extraArg)) = Expression.traverseExpOpt(f,func,extraArg);
6936-
((eqbound,extraArg)) = Expression.traverseExpOpt(eqbound,func,extraArg);
6937-
(dist,extraArg) = traverseBackendDAEAttrDistribution(dist,func,extraArg);
6938-
then (SOME(DAE.VAR_ATTR_INT(q,(min,max),i,f,unc,dist,eqbound,p,fin)),extraArg);
6938+
case(SOME(DAE.VAR_ATTR_INT(q,(min,max),i,f,unc,dist,eqbound,p,fin)),func,extraArg) equation
6939+
((q,outExtraArg)) = Expression.traverseExpOpt(q,func,extraArg);
6940+
((min,outExtraArg)) = Expression.traverseExpOpt(min,func,outExtraArg);
6941+
((max,outExtraArg)) = Expression.traverseExpOpt(max,func,outExtraArg);
6942+
((i,outExtraArg)) = Expression.traverseExpOpt(i,func,outExtraArg);
6943+
((f,outExtraArg)) = Expression.traverseExpOpt(f,func,outExtraArg);
6944+
((eqbound,outExtraArg)) = Expression.traverseExpOpt(eqbound,func,outExtraArg);
6945+
(dist,outExtraArg) = traverseBackendDAEAttrDistribution(dist,func,outExtraArg);
6946+
then (SOME(DAE.VAR_ATTR_INT(q,(min,max),i,f,unc,dist,eqbound,p,fin)),outExtraArg);
69396947

6940-
case(SOME(DAE.VAR_ATTR_BOOL(q,i,f,eqbound,p,fin)),_,_) equation
6941-
((q,extraArg)) = Expression.traverseExpOpt(q,func,iextraArg);
6942-
((i,extraArg)) = Expression.traverseExpOpt(i,func,extraArg);
6943-
((f,extraArg)) = Expression.traverseExpOpt(f,func,extraArg);
6944-
((eqbound,extraArg)) = Expression.traverseExpOpt(eqbound,func,extraArg);
6945-
then (SOME(DAE.VAR_ATTR_BOOL(q,i,f,eqbound,p,fin)),extraArg);
6948+
case(SOME(DAE.VAR_ATTR_BOOL(q,i,f,eqbound,p,fin)),func,extraArg) equation
6949+
((q,outExtraArg)) = Expression.traverseExpOpt(q,func,extraArg);
6950+
((i,outExtraArg)) = Expression.traverseExpOpt(i,func,outExtraArg);
6951+
((f,outExtraArg)) = Expression.traverseExpOpt(f,func,outExtraArg);
6952+
((eqbound,outExtraArg)) = Expression.traverseExpOpt(eqbound,func,outExtraArg);
6953+
then (SOME(DAE.VAR_ATTR_BOOL(q,i,f,eqbound,p,fin)),outExtraArg);
69466954

6947-
case(SOME(DAE.VAR_ATTR_STRING(q,i,eqbound,p,fin)),_,_) equation
6948-
((q,extraArg)) = Expression.traverseExpOpt(q,func,iextraArg);
6949-
((i,extraArg)) = Expression.traverseExpOpt(i,func,extraArg);
6950-
((eqbound,extraArg)) = Expression.traverseExpOpt(eqbound,func,extraArg);
6951-
then (SOME(DAE.VAR_ATTR_STRING(q,i,eqbound,p,fin)),extraArg);
6955+
case(SOME(DAE.VAR_ATTR_STRING(q,i,eqbound,p,fin)),func,extraArg) equation
6956+
((q,outExtraArg)) = Expression.traverseExpOpt(q,func,extraArg);
6957+
((i,outExtraArg)) = Expression.traverseExpOpt(i,func,outExtraArg);
6958+
((eqbound,outExtraArg)) = Expression.traverseExpOpt(eqbound,func,outExtraArg);
6959+
then (SOME(DAE.VAR_ATTR_STRING(q,i,eqbound,p,fin)),outExtraArg);
69526960

6953-
case(SOME(DAE.VAR_ATTR_ENUMERATION(q,(min,max),i,f,eqbound,p,fin)),_,_) equation
6954-
((q,extraArg)) = Expression.traverseExpOpt(q,func,iextraArg);
6955-
((min,extraArg)) = Expression.traverseExpOpt(min,func,iextraArg);
6956-
((max,extraArg)) = Expression.traverseExpOpt(max,func,extraArg);
6957-
((i,extraArg)) = Expression.traverseExpOpt(i,func,extraArg);
6958-
((f,extraArg)) = Expression.traverseExpOpt(f,func,extraArg);
6959-
((eqbound,extraArg)) = Expression.traverseExpOpt(eqbound,func,extraArg);
6960-
then (SOME(DAE.VAR_ATTR_ENUMERATION(q,(min,max),i,f,eqbound,p,fin)),extraArg);
6961+
case(SOME(DAE.VAR_ATTR_ENUMERATION(q,(min,max),i,f,eqbound,p,fin)),func,extraArg) equation
6962+
((q,outExtraArg)) = Expression.traverseExpOpt(q,func,extraArg);
6963+
((min,outExtraArg)) = Expression.traverseExpOpt(min,func,outExtraArg);
6964+
((max,outExtraArg)) = Expression.traverseExpOpt(max,func,outExtraArg);
6965+
((i,outExtraArg)) = Expression.traverseExpOpt(i,func,outExtraArg);
6966+
((f,outExtraArg)) = Expression.traverseExpOpt(f,func,outExtraArg);
6967+
((eqbound,outExtraArg)) = Expression.traverseExpOpt(eqbound,func,outExtraArg);
6968+
then (SOME(DAE.VAR_ATTR_ENUMERATION(q,(min,max),i,f,eqbound,p,fin)),outExtraArg);
69616969

69626970
end matchcontinue;
69636971
end traverseBackendDAEVarAttr;
@@ -6968,7 +6976,7 @@ author: Peter Aronsson (paronsson@wolfram.com)
69686976
"
69696977
input Option<DAE.Distribution> distOpt;
69706978
input funcType func;
6971-
input ExtraArgType iextraArg;
6979+
input ExtraArgType extraArg;
69726980
replaceable type ExtraArgType subtypeof Any;
69736981
partial function funcType
69746982
input tuple<DAE.Exp,ExtraArgType> inTpl;
@@ -6977,20 +6985,19 @@ author: Peter Aronsson (paronsson@wolfram.com)
69776985
output Option<DAE.Distribution> outDistOpt;
69786986
output ExtraArgType outExtraArg;
69796987
algorithm
6980-
(outDistOpt,outExtraArg) := matchcontinue(distOpt,func,iextraArg)
6988+
(outDistOpt,outExtraArg) := matchcontinue(distOpt,func,extraArg)
69816989
local
69826990
DAE.Exp name,arr,sarr;
6983-
ExtraArgType extraArg;
69846991

6985-
case(NONE(),_,_) then (NONE(),iextraArg);
6992+
case(NONE(),func,outExtraArg) then (NONE(),outExtraArg);
69866993

69876994
case(SOME(DAE.DISTRIBUTION(name,arr,sarr)),_,_) equation
69886995
((arr,_)) = extendArrExp((arr,(NONE(),false)));
69896996
((sarr,_)) = extendArrExp((sarr,(NONE(),false)));
6990-
((name,extraArg)) = Expression.traverseExp(name,func,iextraArg);
6991-
((arr,extraArg)) = Expression.traverseExp(arr,func,extraArg);
6992-
((sarr,extraArg)) = Expression.traverseExp(sarr,func,extraArg);
6993-
then (SOME(DAE.DISTRIBUTION(name,arr,sarr)),extraArg);
6997+
((name,outExtraArg)) = Expression.traverseExp(name,func,extraArg);
6998+
((arr,outExtraArg)) = Expression.traverseExp(arr,func,outExtraArg);
6999+
((sarr,outExtraArg)) = Expression.traverseExp(sarr,func,outExtraArg);
7000+
then (SOME(DAE.DISTRIBUTION(name,arr,sarr)),outExtraArg);
69947001
end matchcontinue;
69957002
end traverseBackendDAEAttrDistribution;
69967003

@@ -8545,4 +8552,38 @@ algorithm
85458552
varLst := List.flatten(List.map(listAppend({knvars},List.map(eqs,BackendVariable.daeVars)),varList));
85468553
end getAllVarLst;
85478554

8555+
public function getAlgorithms "return all algorithms from BackendDAE"
8556+
input BackendDAE.BackendDAE dae;
8557+
output array<DAE.Algorithm> algs;
8558+
algorithm
8559+
BackendDAE.DAE(shared=BackendDAE.SHARED(algorithms=algs)) := dae;
8560+
end getAlgorithms;
8561+
8562+
public function setAlgorithms "set algorithms in BackendDAE"
8563+
input BackendDAE.BackendDAE dae;
8564+
input array<DAE.Algorithm> algs;
8565+
output BackendDAE.BackendDAE outDae;
8566+
algorithm
8567+
outDAE := matchcontinue(dae,algs)
8568+
local
8569+
Variables kv,eo;
8570+
AliasVariables av;
8571+
EquationArray ieqns;
8572+
EquationArray reqns;
8573+
array< .BackendDAE.MultiDimEquation> aeqns ;
8574+
array< .DAE.Algorithm> algs;
8575+
array< .DAE.Constraint> constraints;
8576+
array< .BackendDAE.ComplexEquation> complEqs;
8577+
.DAE.FunctionTree functionTree;
8578+
.BackendDAE.EventInfo eventInfo;
8579+
.BackendDAE.ExternalObjectClasses extObjClasses;
8580+
.BackendDAE.BackendDAEType tp;
8581+
.BackendDAE.SymbolicJacobians jac;
8582+
.BackendDAE.EqSystems eqs;
8583+
8584+
case(BackendDAE.DAE(eqs,BackendDAE.SHARED(kv,eo,av,ieqns,reqns,aeqns,_,constraints,complEqs,functionTree,eventInfo,extObjClasses,tp,jac)),algs)
8585+
then (BackendDAE.DAE(eqs,BackendDAE.SHARED(kv,eo,av,ieqns,reqns,aeqns,algs,constraints,complEqs,functionTree,eventInfo,extObjClasses,tp,jac)));
8586+
end matchcontinue;
8587+
end setAlgorithms;
8588+
85488589
end BackendDAEUtil;

0 commit comments

Comments
 (0)