diff --git a/modeq/daelow.rml b/modeq/daelow.rml index 2648a48a092..4eb88b90e4d 100644 --- a/modeq/daelow.rml +++ b/modeq/daelow.rml @@ -66,6 +66,7 @@ module DAELow: * Variables (* Known variables, i.e. constants and parameters*) * EquationArray (* ordered Equations *) * EquationArray (* Removed equations a=b*) + * EquationArray (* Initial equations *) * Algorithm.Algorithm array (* Algorithms *) datatype Variables = VARIABLES of CrefIndex list array (* HashTB, cref->indx*) @@ -204,7 +205,7 @@ val empty_bintree = TREENODE(NONE,NONE,NONE) relation lower: (DAE.DAElist) => DAELow = rule states(lst,empty_bintree) => s & - lower2(lst,s) => (vars,knvars,eqns,reqns,algs) & + lower2(lst,s) => (vars,knvars,eqns,reqns,ieqns,algs) & (* print "lowered dae:" & dump low &*) lower_algorithms(vars,algs) => algeqns & list_append(algeqns,eqns) => eqns & @@ -213,6 +214,7 @@ relation lower: (DAE.DAElist) => DAELow = sort_eqn(eqns) => eqns' & list_equation(eqns') => eqnarr & list_equation(reqns) => reqnarr & + list_equation(ieqns) => ieqnarr & list_array(algs) => algarr (* & print "removed simple equations, dae:" & dump low' *) @@ -225,7 +227,7 @@ relation lower: (DAE.DAElist) => DAELow = print st & print "\n" & print es & print " equations\n" *) -------------------- - lower(lst) => DAELOW(vars,knvars,eqnarr,reqnarr,algarr) + lower(lst) => DAELOW(vars,knvars,eqnarr,reqnarr,ieqnarr,algarr) end (** relation sort_eqn @@ -365,7 +367,7 @@ relation check_component_for_statevars:(int, int list, DAELow,int vector, int ve list_nth(varlst,v') => (v as VAR(cr,kind,_,_,_,_,_,_,_,origname,_)) & not is_non_state(kind) ------------------------------------------------------------- - check_component_for_statevars(i,component,dae as DAELOW(vars,_,_,_,_),ass1,ass2) => true + check_component_for_statevars(i,component,dae as DAELOW(vars,_,_,_,_,_),ass1,ass2) => true rule (* If this variable is nt state variable, try the next one *) list_nth(component,i) => variable_index_to_check & @@ -379,7 +381,7 @@ relation check_component_for_statevars:(int, int list, DAELow,int vector, int ve int_add(i,1) => next_i & check_component_for_statevars(next_i,component,dae,ass1,ass2) => result ------------------------------------------------------------- - check_component_for_statevars(i,component,dae as DAELOW(vars,_,_,_,_),ass1,ass2) + check_component_for_statevars(i,component,dae as DAELOW(vars,_,_,_,_,_),ass1,ass2) => result rule print "check_component_for_statevars failed" @@ -434,9 +436,16 @@ relation dump: DAELow => () = int_string(eqnlen) => eqnlen_str & print eqnlen_str & print ")\n" & print "=========\n" & - dump_eqns reqnsl + dump_eqns reqnsl & + print "Initial Equations (" & + equation_list(ieqns) => ieqnsl & + list_length(ieqnsl) => eqnlen & + int_string(eqnlen) => eqnlen_str & + print eqnlen_str & print ")\n" & + print "=========\n" & + dump_eqns ieqnsl ----------------- - dump(DAELOW(vars1,vars2,eqns,reqns,algs)) + dump(DAELOW(vars1,vars2,eqns,reqns,ieqns,algs)) end (** relation: var_list @@ -949,60 +958,69 @@ relation lower2: (DAE.DAElist, BinTree (* states *)) Variables, Equation list, Equation list, + Equation list, Algorithm.Algorithm list) = rule empty_vars() => v1 & empty_vars() => v2 ------------------ - lower2 (DAE.DAE([]),_) => (v1,v2,[],[],[]) + lower2 (DAE.DAE([]),_) => (v1,v2,[],[],[],[]) rule lower2(DAE.DAE(xs),states) - => (vars,knvars,eqns,reqns,algs) & + => (vars,knvars,eqns,reqns,ieqns,algs) & lower_var (v,states) => v' & add_var(v',vars) => vars' -------------------------------- lower2 (DAE.DAE((v as DAE.VAR(_,_,_,_,_,_,_,_,_))::xs),states) - => (vars',knvars,eqns,reqns,algs) + => (vars',knvars,eqns,reqns,ieqns,algs) rule lower2(DAE.DAE(xs),states) - => (vars,knvars,eqns,reqns,algs) & + => (vars,knvars,eqns,reqns,ieqns,algs) & (* in previous rule, lower_var failed. *) lower_known_var (v) => v' & add_var(v',knvars) => knvars' -------------------------------- lower2 (DAE.DAE((v as DAE.VAR(_,_,_,_,_,_,_,_,_))::xs),states) - => (vars,knvars',eqns,reqns,algs) + => (vars,knvars',eqns,reqns,ieqns,algs) rule lower2(DAE.DAE(xs),states) - => (vars,knvars,eqns,reqns,algs) & + => (vars,knvars,eqns,reqns,ieqns,algs) & lower_eqn(e) => e' -------------------------------- lower2 (DAE.DAE((e as DAE.EQUATION(e1,e2))::xs),states) - => (vars,knvars,e'::eqns,reqns,algs) + => (vars,knvars,e'::eqns,reqns,ieqns,algs) + + rule lower2(DAE.DAE(xs),states) + => (vars,knvars,eqns,reqns,ieqns,algs) & + lower_eqn(e) => e' + -------------------------------- + lower2 (DAE.DAE((e as DAE.INITIALEQUATION(e1,e2))::xs),states) + => (vars,knvars,eqns,reqns,e'::ieqns,algs) rule lower2(DAE.DAE(xs),states) - => (vars,knvars,eqns,reqns,algs) + => (vars,knvars,eqns,reqns,ieqns,algs) -------------------------------- lower2 (DAE.DAE((DAE.ALGORITHM(a))::xs),states) - => (vars,knvars,eqns,reqns,a::algs) + => (vars,knvars,eqns,reqns,ieqns,a::algs) rule lower2(dae,states) - => (vars1,knvars1,eqns1,reqns1,algs1) & + => (vars1,knvars1,eqns1,reqns1,ieqns1,algs1) & lower2(DAE.DAE(xs),states) - => (vars2,knvars2,eqns2,reqns2,algs2) & + => (vars2,knvars2,eqns2,reqns2,ieqns2,algs2) & merge_vars(vars1,vars2) => vars & list_append(eqns1,eqns2) => eqns & + list_append(ieqns1,ieqns2) => ieqns & list_append(reqns1,reqns2) => reqns & merge_vars(knvars1,knvars2) => knvars & list_append(algs1,algs2) => algs -------------------------------- lower2(DAE.DAE(DAE.COMP(_,dae)::xs),states) - => (vars,knvars,eqns,reqns,algs) + => (vars,knvars,eqns,reqns,ieqns,algs) rule lower2(DAE.DAE(xs),states) - => (v,kv,e,re,al) + => (v,kv,e,re,ie,al) --------------------- - lower2 (DAE.DAE(_::xs),states) => (v,kv,e,re,al) + lower2 (DAE.DAE(_::xs),states) => (v,kv,e,re,ie,al) rule print "-lower2 failed\n" ------------------------ @@ -1313,7 +1331,7 @@ relation incidence_matrix: (DAELow) incidence_matrix2(vars,eqnsl) => lstlst & list_array(lstlst) => arr ------------------- - incidence_matrix(DAELOW(vars,knvars,eqns,reqns,_)) => arr + incidence_matrix(DAELOW(vars,knvars,eqns,reqns,_,_)) => arr rule print "incidence_matrix failed\n" ---------------------- @@ -2081,7 +2099,7 @@ relation matching_algorithm2: (DAELow,IncidenceMatrix, IncidenceMatrixT the original equation is removed from the system. *) reduce_index_dummy_der(dae,m,mt,nv,nf,i) - => (dae as DAELOW(VARIABLES(_,_,_,nv'),VARIABLES(_,_,_,nkv),eqns,_,_),m,mt) & + => (dae as DAELOW(VARIABLES(_,_,_,nv'),VARIABLES(_,_,_,nkv),eqns,_,_,_),m,mt) & print "Reduced index by differentiating equation\n" & (* and try again, restarting. This could be optimized later. It should not @@ -2214,7 +2232,7 @@ relation update_incidence_matrix2: (DAELow, vars_in_eqn(m',e) => changedvars1 & update_incidence_matrix2(dae,m',eqns) => (m'',changedvars2) --------------------------------------------------- - update_incidence_matrix2(dae as DAELOW(vars,knvars,daeeqns,daeseqns,_),m,e::eqns) + update_incidence_matrix2(dae as DAELOW(vars,knvars,daeeqns,daeseqns,_,_),m,e::eqns) => (m'',changedvars1::changedvars2) rule print "-update_incididence_matrix2 failed\n" @@ -2256,7 +2274,8 @@ relation make_algebraic: (DAELow, rule get_var(cr,vars) => (VAR(cr,kind,d,t,b,value,dim,start,idx,name,class) ,indx) & add_var(VAR(cr,DUMMY_STATE,d,t,b,value,dim,start,idx,name,class),vars) => vars' ------------------------------------------------------------------------- - make_algebraic(DAELOW(vars,kv,e,se,al),cr) => DAELOW(vars',kv,e,se,al) + make_algebraic(DAELOW(vars,kv,e,se,ie,al),cr) + => DAELOW(vars',kv,e,se,ie,al) rule print "-make_algebraic failed\n" -------------------------------- @@ -2287,10 +2306,10 @@ relation replace_dummy_der: (Exp.ComponentRef, (* state *) Util.list_replaceat(row',e',m) => m' & transpose_matrix(m') => mt' &*) equation_setnth(eqns,e',eqn') => eqns' & - replace_dummy_der(state,dummyder,DAELOW(v',kv,eqns',seqns,al),m,mt,rest) + replace_dummy_der(state,dummyder,DAELOW(v',kv,eqns',seqns,ie,al),m,mt,rest) => (dae,m,mt) ------------------------------- - replace_dummy_der(state,dummyder,DAELOW(v,kv,eqns,seqns,al),m,mt,e::rest) + replace_dummy_der(state,dummyder,DAELOW(v,kv,eqns,seqns,ie,al),m,mt,e::rest) => (dae,m,mt) rule print "-replace_dummy_der failed\n" @@ -2465,8 +2484,8 @@ relation new_dummy_var:(Exp.ComponentRef,DAELow) => (Exp.ComponentRef,DAELow) = add_var(VAR(dummyvar,DUMMY_DER,dir,tp,NONE,NONE,dim,NONE,0,"dummyvar",class),vars) => vars' ----------------------------------- - new_dummy_var(var,DAELOW(vars,kv,eqns,seqns,al)) - => (dummyvar, DAELOW(vars',kv,eqns,seqns,al)) + new_dummy_var(var,DAELOW(vars,kv,eqns,seqns,ie,al)) + => (dummyvar, DAELOW(vars',kv,eqns,seqns,ie,al)) end (** relation: create_dummy_var @@ -2525,7 +2544,7 @@ relation states_in_eqns: (int list (* eqns *), axiom states_in_eqns([],_,_,_) => ([],[]) - rule states_in_eqns(rest,DAELOW(vars,kv,eqns,seqns,al),m,mt) => (res1,res2) & + rule states_in_eqns(rest,DAELOW(vars,kv,eqns,seqns,ie,al),m,mt) => (res1,res2) & int_sub(e,1) => e' & equation_nth(eqns,e') => eqn & states_in_eqn(eqn,vars) => vars2 & @@ -2534,7 +2553,7 @@ relation states_in_eqns: (int list (* eqns *), list_append(res11,res1) => res1' & list_append(res22,res2) => res2' -------------------------------- - states_in_eqns(e::rest,DAELOW(vars,kv,eqns,seqns,al),m,mt) => (res1',res2') + states_in_eqns(e::rest,DAELOW(vars,kv,eqns,seqns,ie,al),m,mt) => (res1',res2') rule print "-states_in_eqns failed\n" ------------------------- @@ -2603,10 +2622,10 @@ relation differentiate_eqns: (DAELow, Debug.fprint("bltdump", "\n") & equation_add(eqns,eqn') => eqns' & equation_size(eqns') => leneqns & (* length gives index of new equation *) - differentiate_eqns(DAELOW(v,kv,eqns',seqns,al),m,mt,nv,nf,es) + differentiate_eqns(DAELOW(v,kv,eqns',seqns,ie,al),m,mt,nv,nf,es) => (dae,m,mt,nv,nf,reqns) ---------------------------- - differentiate_eqns(dae as DAELOW(v,kv,eqns,seqns,al),m,mt,nv,nf,e::es) + differentiate_eqns(dae as DAELOW(v,kv,eqns,seqns,ie,al),m,mt,nv,nf,e::es) => (dae,m,mt,nv,nf,leneqns::e::reqns) rule print "-differentiate_eqns failed\n" @@ -3358,8 +3377,8 @@ relation translate_dae: DAELow => DAELow = add_vars(knvarlst'',knvars') => knvars'' & list_equation(eqnsl') => eqns' ------------------------------------ - translate_dae(DAELOW(vars,knvars,eqns,seqns,al)) - => DAELOW(vars'',knvars'',eqns',seqns,al) + translate_dae(DAELOW(vars,knvars,eqns,seqns,ie,al)) + => DAELOW(vars'',knvars'',eqns',seqns,ie,al) end (** relation: add_vars @@ -3386,7 +3405,7 @@ relation calculate_sizes: DAELow => (int, (* nx *) calculate_param_sizes(knvarlst) => np & calculate_var_sizes(varlst,0,0) => (nx,ny) ----------------------------------- - calculate_sizes(DAELOW(vars,knvars,_,_,_)) => (nx,ny,np) + calculate_sizes(DAELOW(vars,knvars,_,_,_,_)) => (nx,ny,np) end (** relation: calculate_param_sizes @@ -3482,8 +3501,8 @@ relation calculate_values: (DAELow) => DAELow = empty_vars() => knvars & add_vars(knvarlst',knvars) => knvars' -------------------------------------- - calculate_values(DAELOW(vars,knvars,eqns,seqns,al)) - => DAELOW(vars,knvars',eqns,seqns,al) + calculate_values(DAELOW(vars,knvars,eqns,seqns,ie,al)) + => DAELOW(vars,knvars',eqns,seqns,ie,al) end (** relation: add_variables_to_env @@ -3854,7 +3873,7 @@ relation print_equation_no: (int, DAELow) => () = equation_nth(eqns,eqno') => eq & print_equation eq => () ---------------- - print_equation_no(eqno,DAELOW(_,_,eqns,_,_)) => () + print_equation_no(eqno,DAELOW(_,_,eqns,_,_,_)) => () end (** relation: print_equation diff --git a/modeq/runtime/tornadoext.cpp b/modeq/runtime/tornadoext.cpp index abd38af559a..11454aecae9 100644 --- a/modeq/runtime/tornadoext.cpp +++ b/modeq/runtime/tornadoext.cpp @@ -266,7 +266,7 @@ extern "C" string str_key = string(class_name); - //cout << "adding var: " << variable_name_str << " to class " << str_key << endl; + cout << "adding var: " << variable_name_str << " to class " << str_key << endl; map >::iterator search; search = generated_classes.find(str_key); diff --git a/modeq/simcodegen.rml b/modeq/simcodegen.rml index 34484c2ff88..daff1450ca4 100644 --- a/modeq/simcodegen.rml +++ b/modeq/simcodegen.rml @@ -129,7 +129,7 @@ end Util.string_append_list([simple_eqn_str,coutput2]) => coutput ------------------------------------------------------------- generate_compute_output(cname, - dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvars,_,_),eqn,seqn,_), + dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvars,_,_),eqn,seqn,_,_), ass1,ass2,blocks) => coutput end @@ -237,7 +237,7 @@ end Exp.simplify(expr) => simplify_exp & build_assignment(cr,simplify_exp,origname) => assigment_string -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => assigment_string + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => assigment_string rule (* Solving the state s means solving for der(s) *) @@ -271,7 +271,7 @@ end Exp.simplify(expr) => simplify_exp & build_assignment(new_cr ,simplify_exp,origname) => assigment_string -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => assigment_string + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => assigment_string rule int_sub(e,1) => e' & DAELow.equation_nth(eqns,e') => DAELow.EQUATION(e1,e2) & @@ -282,7 +282,7 @@ end not Exp.solve(e1,e2,varexp) => _ & print "nonlinear equation not implemented yet\n" -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => fail + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => fail rule print "-build_equation failed\n" -------------------------------- diff --git a/modeq/taskgraph.rml b/modeq/taskgraph.rml index ac05c718af3..f772ce282ee 100644 --- a/modeq/taskgraph.rml +++ b/modeq/taskgraph.rml @@ -55,7 +55,7 @@ relation build_taskgraph: (DAELow.DAELow, int vector, int vector, int list list build_inits(dae) & print "leaving build_taskgraph\n" ---------------------------------- - build_taskgraph(dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),_,_,_),ass1,ass2,blocks) + build_taskgraph(dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),_,_,_,_),ass1,ass2,blocks) rule print "-build_taskgraph failed\n" ----------------------- @@ -74,7 +74,7 @@ relation build_inits:(DAELow.DAELow) => () = build_inits2(vars) & build_inits2(kvars) -------------------- - build_inits(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,kvararr,_,_),_,_,_)) => () + build_inits(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,kvararr,_,_),_,_,_,_)) => () end @@ -217,7 +217,7 @@ relation build_equation:(DAELow.DAELow, int vector, int vector, int) => () = Exp.print_exp_str expr => s2 & print s2 & print "\n" &*) build_assignment(cr,expr,origname) => () -------------------------------- - build_equation(DAELow.DAELOW(vars,_,eqns,_,_),ass1,ass2,e) + build_equation(DAELow.DAELOW(vars,_,eqns,_,_,_),ass1,ass2,e) rule (* Solving the state s means solving for der(s) *) @@ -242,7 +242,7 @@ relation build_equation:(DAELow.DAELow, int vector, int vector, int) => () = Exp.print_exp_str expr => s2 & print s2 & print "\n" &*) build_assignment(cr' ,expr,origname) => () -------------------------------- - build_equation(DAELow.DAELOW(vars,_,eqns,_,_),ass1,ass2,e) + build_equation(DAELow.DAELOW(vars,_,eqns,_,_,_),ass1,ass2,e) rule int_sub(e,1) => e' & DAELow.equation_nth(eqns,e') => DAELow.EQUATION(e1,e2) & @@ -253,7 +253,7 @@ relation build_equation:(DAELow.DAELow, int vector, int vector, int) => () = not Exp.solve(e1,e2,varexp) => _ & print "nonlinear equation not implemented yet\n" -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => fail + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => fail rule print "-build_equation failed\n" -------------------------------- @@ -296,7 +296,7 @@ relation build_system2: (DAELow.DAELow, int vector, int vector, int list,int) => build_system2(dae,ass1,ass2,rest,tid) => crs2 & Util.list_union(crs'',crs2) => res ------------------------------------- - build_system2(dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e::rest,tid) => res + build_system2(dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e::rest,tid) => res rule print "build_system2 failed\n" ------------------ diff --git a/modeq/tornado.rml b/modeq/tornado.rml index e0cdfe944b5..8add75e3e7a 100644 --- a/modeq/tornado.rml +++ b/modeq/tornado.rml @@ -261,7 +261,7 @@ with "simcodegen.rml" rule print "lalalalalalalalalala" ------------------------------------------ - generate_code_from_elements(class_path,_,dae,program,a_program,env) => "" + generate_code_from_elements(class_path,_,dae,program,a_program,env) => "" rule print "generate_code_from_elements failed\n" ------------------------------------------- @@ -423,7 +423,7 @@ relation find_dae_var:(string, string,DAELow.DAELow) => DAELow.Var = class_name, DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), DAELow.VARIABLES(_,knvararr,_,_), - eqn,seqn,_)) + eqn,seqn,_,_)) => var rule (*print "find_dae_var failed\n " *) @@ -479,27 +479,21 @@ relation get_componentitems_name: Absyn.ComponentItem list => string list = get_componentitems_name(rest) => lst & string_append(c1,"[1]") => c1' ---------------------------- - get_componentitems_name(Absyn.COMPONENTITEM(Absyn.COMPONENT(c1,_::_,_), - SOME(Absyn.COMMENT(_,SOME(s2))))::rest) + get_componentitems_name(Absyn.COMPONENTITEM(Absyn.COMPONENT(c1,_::_,_),_)::rest) => c1'::lst rule (* .. otherwise if no dimensions *) get_componentitems_name(rest) => lst ---------------------------- get_componentitems_name(Absyn.COMPONENTITEM(Absyn.COMPONENT(c1,_,_), - SOME(Absyn.COMMENT(_,SOME(s2))))::rest) - => c1::lst - - rule get_componentitems_name(rest) => lst - ---------------------------- - get_componentitems_name(Absyn.COMPONENTITEM(Absyn.COMPONENT(c1,_,_),NONE)::rest) + _)::rest) => c1::lst rule get_componentitems_name(rest) => res ------------------------------------ get_componentitems_name(_::rest) => res - axiom get_componentitems_name([_]) => [] + axiom get_componentitems_name([]) => [] end (** relation: generate_header ** Generate the content of the header file. It only needs the name of the Modelica model. @@ -653,7 +647,7 @@ end Util.string_append_list(res_lst) => res ------------------------------------------- generate_links(DAELow.DAELOW(vars as DAELow.VARIABLES(_,vararr,_,_), - vars2 as DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_), + vars2 as DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_), comp_name_list) => (res,no_alg_values) axiom generate_links(_,_) => ("/* generation of variables linking has failed */",42) @@ -1148,7 +1142,7 @@ relation generate_constructor_inputvars:(DAELow.DAELow) => (string, string) = ------------------------------------------- generate_constructor_inputvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) => + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => ("","") rule array_list(vararr) => vars & @@ -1163,7 +1157,7 @@ relation generate_constructor_inputvars:(DAELow.DAELow) => (string, string) = Util.string_append_list([prefix1,res,"\n"]) => res' ------------------------------------------- generate_constructor_inputvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) => (res',prefix2) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => (res',prefix2) end @@ -1225,7 +1219,7 @@ relation generate_constructor_algvars:(DAELow.DAELow) => (string, string,int) = no_of_vars = 0 ------------------------------------------- generate_constructor_algvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => ("","",0) rule array_list(vararr) => vars & @@ -1242,7 +1236,7 @@ relation generate_constructor_algvars:(DAELow.DAELow) => (string, string,int) = Util.string_append_list([prefix1,res,"\n"]) => res' ------------------------------------------- generate_constructor_algvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => (res',prefix2,no_of_vars) end @@ -1305,7 +1299,7 @@ relation generate_constructor_outputvars:(DAELow.DAELow) => (string, string) = no_of_vars = 0 ------------------------------------------- generate_constructor_outputvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => ("","") rule array_list(vararr) => vars & @@ -1324,7 +1318,7 @@ relation generate_constructor_outputvars:(DAELow.DAELow) => (string, string) = Util.string_append_list([prefix1,res,"\n"]) => res' ------------------------------------------- generate_constructor_outputvars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => (res',prefix2) end @@ -1402,7 +1396,7 @@ relation generate_constructor_outputvars2:(DAELow.Var list,int) => (string list, Util.string_append_list([" SetNoDerStateVarValues(",lenstr,");\n"]) => prefix2 & Util.string_append_list([prefix1,res,"\n"]) => res' ---------------------- - generate_constructor_statevars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + generate_constructor_statevars(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => (res',prefix2) end @@ -1472,7 +1466,7 @@ relation generate_constructor_parameters:(DAELow.DAELow) => (string, string) = no_of_vars = 0 ------------------------------------------- generate_constructor_parameters(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => ("","") rule array_list(vararr) => vars & @@ -1488,7 +1482,7 @@ relation generate_constructor_parameters:(DAELow.DAELow) => (string, string) = Util.string_append_list([prefix1,res,"\n"]) => res' ------------------------------------------- generate_constructor_parameters(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), - DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_)) => (res',prefix2) + DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_)) => (res',prefix2) end relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, int) = @@ -1563,7 +1557,7 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, --------------------- generate_var_defines(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_), DAELow.VARIABLES(_,knvararr,_,_), - eqn,seqn,_)) => vdefs + eqn,seqn,_,_)) => vdefs rule print "-generate_var_defines failed\n" -------------------------------------- @@ -1966,8 +1960,8 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, replace_exp_in_eqns(eqn_list,from_list,to_list) => res_eqns & DAELow.list_equation(res_eqns) => eqns' ------------------------------------------------------------- - translate_dae(dae as DAELow.DAELOW(vars as DAELow.VARIABLES(_,vararr,_,_),a,eqns,b,c)) - => DAELow.DAELOW(vars,a,eqns',b,c) + translate_dae(dae as DAELow.DAELOW(vars as DAELow.VARIABLES(_,vararr,_,_),a,eqns,b,c,d)) + => DAELow.DAELOW(vars,a,eqns',b,c,d) @@ -2069,7 +2063,7 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, Util.string_append_list(eqn_str_list) => coutput ------------------------------------------------------------- generate_compute_output(cname, - dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_), + dae as DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),DAELow.VARIABLES(_,knvararr,_,_),eqn,seqn,_,_), p,ass1,ass2,blocks) => coutput end @@ -2223,7 +2217,7 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, Exp.simplify(expr) => simplify_exp & build_assignment(cr,simplify_exp,origname) => assigment_string -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => assigment_string + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => assigment_string rule (* Solving the state s means solving for der(s) *) @@ -2257,7 +2251,7 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, Exp.simplify(expr) => simplify_exp & build_assignment(new_cr ,simplify_exp,origname) => assigment_string -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => assigment_string + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => assigment_string rule int_sub(e,1) => e' & DAELow.equation_nth(eqns,e') => DAELow.EQUATION(e1,e2) & @@ -2268,7 +2262,7 @@ relation generate_constructor_parameters2:(DAELow.Var list,int) => (string list, not Exp.solve(e1,e2,varexp) => _ & print "nonlinear equation not implemented yet\n" -------------------------------- - build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_),ass1,ass2,e) => fail + build_equation(DAELow.DAELOW(DAELow.VARIABLES(_,vararr,_,_),_,eqns,_,_,_),ass1,ass2,e) => fail rule print "-build_equation failed\n" --------------------------------