From ed5eb02f3d79b9745885c0665b786321c446b412 Mon Sep 17 00:00:00 2001 From: Jens Frenkel Date: Thu, 21 Jun 2012 18:37:08 +0000 Subject: [PATCH] - bugfix dynamic state selection git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@12188 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- Compiler/BackEnd/IndexReduction.mo | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Compiler/BackEnd/IndexReduction.mo b/Compiler/BackEnd/IndexReduction.mo index be2292590bc..7e559d8df85 100644 --- a/Compiler/BackEnd/IndexReduction.mo +++ b/Compiler/BackEnd/IndexReduction.mo @@ -3334,6 +3334,19 @@ algorithm then ((DAE.CALL(Absyn.IDENT("der"),{e},DAE.callAttrBuiltinReal), (vars,eqns,so,i::ilst))); + case ((DAE.CALL(path = Absyn.IDENT(name = "der"),expLst = {DAE.CALL(path = Absyn.IDENT(name = "der"),expLst = {DAE.CREF(componentRef = cr)})}),(vars,eqns,so,ilst))) + equation + ((BackendDAE.VAR(_,BackendDAE.STATE(),a,prl,b,c,d,lstSubs,g,source,dae_var_attr,comment,flowPrefix,streamPrefix) :: _),_::_) = BackendVariable.getVar(cr, vars) "der(der(s)) s is state => der_der_s" ; + // do not use the normal derivative prefix for the name + //dummyder = ComponentReference.crefPrefixDer(cr); + dummyder = ComponentReference.makeCrefQual("$_DER",DAE.T_REAL_DEFAULT,{},cr); + (eqns_1,so1) = addDummyStateEqn(vars,eqns,cr,dummyder,so); + vars_1 = BackendVariable.addVar(BackendDAE.VAR(dummyder, BackendDAE.STATE(), a, prl, b, NONE(), NONE(), lstSubs, 0, source, SOME(DAE.VAR_ATTR_REAL(NONE(),NONE(),NONE(),(NONE(),NONE()),NONE(),NONE(),NONE(),SOME(DAE.NEVER()),NONE(),NONE(),NONE(),NONE(),NONE())), comment, flowPrefix, streamPrefix), vars); + e = Expression.makeCrefExp(dummyder,DAE.T_REAL_DEFAULT); + i = BackendVariable.varsSize(vars_1); + then + ((DAE.CALL(Absyn.IDENT("der"),{e},DAE.callAttrBuiltinReal), (vars_1,eqns_1,so1,i::ilst))); + case ((e as DAE.CALL(path = Absyn.IDENT(name = "der"),expLst = {DAE.CREF(componentRef = cr)}),(vars,eqns,so,ilst))) equation ((BackendDAE.VAR(_,BackendDAE.DUMMY_DER(),a,prl,b,c,d,lstSubs,g,source,SOME(DAE.VAR_ATTR_REAL(quantity,unit,displayUnit,min,initial_,fixed,nominal,_,unc,distribution,equationBound,isProtected,finalPrefix)),comment,flowPrefix,streamPrefix) :: _),i::_) = BackendVariable.getVar(cr, vars) "der(v) v is alg var => der_v" ;