Skip to content

Commit

Permalink
Changes for event handling.
Browse files Browse the repository at this point in the history
  - From now as zero-crossing functions are used the conditions instead of single relations.
  - main changes in BackendDAECreate.findZeroCrossings.
    - it collects now samples, relations and zerocrossings in different lists.
  - relations are still collected for cpp-runtime.
  - fixed also #1866 


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@13555 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Oct 22, 2012
1 parent 89bd92d commit f8d8971
Show file tree
Hide file tree
Showing 18 changed files with 1,063 additions and 762 deletions.
6 changes: 5 additions & 1 deletion Compiler/BackEnd/BackendDAE.mo
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,11 @@ public
uniontype EventInfo "- EventInfo"
record EVENT_INFO
list<WhenClause> whenClauseLst "List of when clauses. The WhenEquation datatype refer to this list by position" ;
list<ZeroCrossing> zeroCrossingLst "zeroCrossingLst" ;
list<ZeroCrossing> zeroCrossingLst "List of zero crossing coditions";
list<ZeroCrossing> sampleLst "List of sample as before, used by cpp runtime";
// TODO: relationsLst could be removed if cpp runtime is prepared to handle zero-crossing conditions
list<ZeroCrossing> relationsLst "List of zero crossing function as before, used by cpp runtime";
Integer relationsNumber "stores the number of relation in all zero-crossings";
end EVENT_INFO;

end EventInfo;
Expand Down
1,218 changes: 710 additions & 508 deletions Compiler/BackEnd/BackendDAECreate.mo

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions Compiler/BackEnd/BackendDAEOptimize.mo
Original file line number Diff line number Diff line change
Expand Up @@ -114,15 +114,14 @@ algorithm
BackendDAE.EventInfo einfo;
BackendDAE.ExternalObjectClasses eoc;
BackendDAE.SymbolicJacobians symjacs;
list<BackendDAE.WhenClause> whenClauseLst,whenClauseLst1;
list<BackendDAE.ZeroCrossing> zeroCrossingLst;
BackendDAE.EventInfo ev;
BackendDAE.BackendDAEType btp;
BackendDAE.EqSystems systs,systs1;
BackendDAE.Shared shared;
list<BackendDAE.Var> ordvarslst;
list<BackendDAE.Equation> eqnslst;
case (_) then inDAE;
case (BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst,zeroCrossingLst),eoc,btp,symjacs)))
case (BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,ev,eoc,btp,symjacs)))
equation
eqnslst = BackendDAEUtil.equationList(inieqns);
eqnslst = getScalarArrayEqns(eqnslst,{});
Expand All @@ -131,7 +130,7 @@ algorithm
eqnslst = getScalarArrayEqns(eqnslst,{});
remeqns = BackendDAEUtil.listEquation(eqnslst);
then
BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst,zeroCrossingLst),eoc,btp,symjacs));
BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,ev,eoc,btp,symjacs));
end match;
end inlineArrayEqnShared;

Expand Down Expand Up @@ -1587,12 +1586,13 @@ algorithm
BackendDAE.ExternalObjectClasses eoc;
BackendDAE.SymbolicJacobians symjacs;
list<BackendDAE.WhenClause> whenClauseLst,whenClauseLst1;
list<BackendDAE.ZeroCrossing> zeroCrossingLst;
list<BackendDAE.ZeroCrossing> zeroCrossingLst, relationsLst,sampleLst;
Integer numberOfRealtions;
BackendDAE.BackendDAEType btp;
BackendDAE.EqSystems systs,systs1;
list<BackendDAE.Var> ordvarslst,varlst;
case (false,_,_) then inDAE;
case (true,BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst,zeroCrossingLst),eoc,btp,symjacs)),_)
case (true,BackendDAE.DAE(systs,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst,zeroCrossingLst,sampleLst,relationsLst,numberOfRealtions),eoc,btp,symjacs)),_)
equation
// replace moved vars in knvars,ineqns,remeqns
(aliasVars,(_,varlst)) = BackendVariable.traverseBackendDAEVarsWithUpdate(aliasVars,replaceAliasVarTraverser,(repl,{}));
Expand All @@ -1605,7 +1605,7 @@ algorithm
// remove asserts with condition=true from removed equations
remeqns1 = BackendDAEUtil.listEquation(List.select(BackendDAEUtil.equationList(remeqns1),assertWithCondTrue));
then
BackendDAE.DAE(systs1,BackendDAE.SHARED(knvars1,exobj,aliasVars,inieqns1,remeqns1,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst1,zeroCrossingLst),eoc,btp,symjacs));
BackendDAE.DAE(systs1,BackendDAE.SHARED(knvars1,exobj,aliasVars,inieqns1,remeqns1,constrs,clsAttrs,cache,env,funcTree,BackendDAE.EVENT_INFO(whenClauseLst1,zeroCrossingLst,sampleLst,relationsLst,numberOfRealtions),eoc,btp,symjacs));
end match;
end removeSimpleEquationsShared;

Expand Down Expand Up @@ -4516,7 +4516,7 @@ algorithm
emptyEqns = BackendDAEUtil.listEquation({});
emptyVars = BackendDAEUtil.emptyVars();
eqSystem = BackendDAE.EQSYSTEM(variables,eqArray,NONE(),NONE(),BackendDAE.NO_MATCHING());
shared = BackendDAE.SHARED(knownVars,externalObjects,aliasVars,emptyEqns,removedEqs,constraints,classAttrs,cache,env,functionTree,BackendDAE.EVENT_INFO({},{}),{},BackendDAE.SIMULATION(),{});
shared = BackendDAE.SHARED(knownVars,externalObjects,aliasVars,emptyEqns,removedEqs,constraints,classAttrs,cache,env,functionTree,BackendDAE.EVENT_INFO({},{},{},{},0),{},BackendDAE.SIMULATION(),{});
(m_new,mT_new) = BackendDAEUtil.incidenceMatrix(eqSystem,BackendDAE.NORMAL());
match1 = arrayCreate(l,1);
matching = BackendDAE.MATCHING(match1,match1,{});
Expand Down Expand Up @@ -7212,7 +7212,7 @@ algorithm
constrs = listArray({});
clsAttrs = listArray({});
functions = DAEUtil.avlTreeNew();
jacEventInfo = BackendDAE.EVENT_INFO({},{});
jacEventInfo = BackendDAE.EVENT_INFO({}, {}, {}, {}, 0);
jacExtObjClasses = {};

jacobian = BackendDAE.DAE({BackendDAE.EQSYSTEM(jacOrderedVars, jacOrderedEqs, NONE(), NONE(), BackendDAE.NO_MATCHING())}, BackendDAE.SHARED(jacKnownVars, jacExternalObjects, jacAliasVars, jacInitialEqs, jacRemovedEqs, constrs, clsAttrs, cache, env, functions, jacEventInfo, jacExtObjClasses,BackendDAE.JACOBIAN(),{}));
Expand Down Expand Up @@ -7253,7 +7253,7 @@ algorithm
constrs = listArray({});
clsAttrs = listArray({});
functions = DAEUtil.avlTreeNew();
jacEventInfo = BackendDAE.EVENT_INFO({}, {});
jacEventInfo = BackendDAE.EVENT_INFO({}, {}, {}, {}, 0);
jacExtObjClasses = {};

jacobian = BackendDAE.DAE(BackendDAE.EQSYSTEM(jacOrderedVars, jacOrderedEqs, NONE(), NONE(), BackendDAE.NO_MATCHING())::{}, BackendDAE.SHARED(jacKnownVars, jacExternalObjects, jacAliasVars, jacInitialEqs, jacRemovedEqs, constrs, clsAttrs, cache, env, functions, jacEventInfo, jacExtObjClasses, BackendDAE.JACOBIAN(),{}));
Expand Down
9 changes: 4 additions & 5 deletions Compiler/BackEnd/BackendDAETransform.mo
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,7 @@ algorithm
eeqns = BackendDAEUtil.listEquation({});
evars = BackendDAEUtil.listVar1({});
syst = BackendDAE.EQSYSTEM(vars_1,eqns_1,NONE(),NONE(),BackendDAE.NO_MATCHING());
shared = BackendDAE.SHARED(evars,evars,av,eeqns,eeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO({},{}),{},BackendDAE.ALGEQSYSTEM(),{});
shared = BackendDAE.SHARED(evars,evars,av,eeqns,eeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO({},{},{},{},0),{},BackendDAE.ALGEQSYSTEM(),{});
(m,mt) = BackendDAEUtil.incidenceMatrix(syst,BackendDAE.ABSOLUTE());
// calculate jacobian. If constant, linear system of equations. Otherwise nonlinear
jac = BackendDAEUtil.calculateJacobian(vars_1, eqns_1, m, true,shared);
Expand Down Expand Up @@ -2977,8 +2977,6 @@ algorithm
Env.Cache cache;
Env.Env env;
DAE.FunctionTree funcs;
list<BackendDAE.WhenClause> wclst;
list<BackendDAE.ZeroCrossing> zeroCrossingLst;
list<Integer> rest;
BackendDAE.ExternalObjectClasses eoc;
BackendDAE.SymbolicJacobians symjacs;
Expand All @@ -2987,15 +2985,16 @@ algorithm
BackendDAE.Matching matching;
BackendDAE.EqSystem syst;
BackendDAE.Shared shared;
BackendDAE.EventInfo einfo;

list<DAE.ComponentRef> crlst;

case (stateexpcall,dummyderexp,BackendDAE.EQSYSTEM(v,eqns,m,mt,matching),BackendDAE.SHARED(kv,ev,av,ie,seqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst,zeroCrossingLst),eoc,btp,symjacs),{})
case (stateexpcall,dummyderexp,BackendDAE.EQSYSTEM(v,eqns,m,mt,matching),BackendDAE.SHARED(kv,ev,av,ie,seqns,constrs,clsAttrs,cache,env,funcs,einfo,eoc,btp,symjacs),{})
equation
(av,(_, _)) = BackendVariable.traverseBackendDAEVarsWithUpdate(av,traverseReplaceAliasVarsBindExp,(stateexpcall, dummyderexp));
(ie1,(_,_)) = BackendEquation.traverseBackendDAEEqnsWithUpdate(ie,traversereplaceDummyDer,(replaceDummyDer2Exp,(stateexpcall,dummyderexp)));
(seqns1,(_,_)) = BackendEquation.traverseBackendDAEEqnsWithUpdate(seqns,traversereplaceDummyDer,(replaceDummyDer2Exp,(stateexpcall,dummyderexp)));
then (BackendDAE.EQSYSTEM(v,eqns,m,mt,matching),BackendDAE.SHARED(kv,ev,av,ie1,seqns1,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst,zeroCrossingLst),eoc,btp,symjacs));
then (BackendDAE.EQSYSTEM(v,eqns,m,mt,matching),BackendDAE.SHARED(kv,ev,av,ie1,seqns1,constrs,clsAttrs,cache,env,funcs,einfo,eoc,btp,symjacs));

case (stateexpcall,dummyderexp,BackendDAE.EQSYSTEM(v,eqns,m,mt,matching),shared,(e :: rest))
equation
Expand Down
46 changes: 30 additions & 16 deletions Compiler/BackEnd/BackendDAEUtil.mo
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ algorithm
();
case (BackendDAE.DAE(eqs = BackendDAE.EQSYSTEM(orderedVars = BackendDAE.VARIABLES(numberOfVars = i1),orderedEqs = BackendDAE.EQUATION_ARRAY(size = i2))::{}))
equation
true = Flags.isSet(Flags.CHECK_BACKEND_DAE);
//true = Flags.isSet(Flags.CHECK_BACKEND_DAE);
//Check for correct size
samesize = i1 == i2;
Debug.fcall(Flags.CHECK_BACKEND_DAE,print,"No. of Equations: " +& intString(i1) +& " No. of BackendDAE.Variables: " +& intString(i2) +& " Samesize: " +& boolString(samesize) +& "\n");
Expand Down Expand Up @@ -431,9 +431,6 @@ public function expandAlgorithmsbyInitStmts
- A discrete variable v is initialized with pre(v)."
input BackendDAE.BackendDAE inDAE;
output BackendDAE.BackendDAE outDAE;
protected
list<BackendDAE.EqSystem> systs;
BackendDAE.Shared shared;
algorithm
outDAE := mapEqSystem(inDAE,expandAlgorithmsbyInitStmts1);
end expandAlgorithmsbyInitStmts;
Expand Down Expand Up @@ -592,7 +589,7 @@ algorithm
cache,
{},
funcTree,
BackendDAE.EVENT_INFO({},{}),
BackendDAE.EVENT_INFO({},{},{},{},0),
{},
inBDAEType,
{}
Expand Down Expand Up @@ -1021,10 +1018,11 @@ algorithm
BackendDAE.Variables vars,knvars,extvars;
list<WhenClause> wc;
list<ZeroCrossing> zc;
Integer numberOfRelations;

case (BackendDAE.DAE(eqs=BackendDAE.EQSYSTEM(orderedVars = vars)::{},shared=BackendDAE.SHARED(knownVars = knvars, externalObjects = extvars,
eventInfo = BackendDAE.EVENT_INFO(whenClauseLst = wc,
zeroCrossingLst = zc))))
zeroCrossingLst = zc,relationsNumber=numberOfRelations ))))
equation
// input variables are put in the known var list, but they should be counted by the ny counter
next = BackendVariable.varsSize(extvars);
Expand All @@ -1033,7 +1031,7 @@ algorithm
((nx,ny,ny_string,ny_int, ny_bool)) = BackendVariable.traverseBackendDAEVars(vars,calculateVarSizes,(0, 0, 0, 0, 0));
((nx_1,ny_1,ny_1_string,ny_1_int, ny_1_bool)) = BackendVariable.traverseBackendDAEVars(knvars,calculateVarSizes,(nx, ny, ny_string, ny_int, ny_bool));
then
(nx_1,ny_1,np,ng,nsam,next,ny_1_string, np_string, ny_1_int, np_int, ny_1_bool, np_bool);
(nx_1,ny_1,np,numberOfRelations,nsam,next,ny_1_string, np_string, ny_1_int, np_int, ny_1_bool, np_bool);
end match;
end calculateSizes;

Expand All @@ -1042,17 +1040,19 @@ public function numberOfZeroCrossings "function: numberOfZeroCrossings
input BackendDAE.BackendDAE inBackendDAE;
output Integer outng "number of zerocrossings";
output Integer outng_sample "number of zerocrossings that are samples";
output Integer outng_rel "number of relation in zerocrossings";
algorithm
(outng,outng_sample):=
(outng,outng_sample,outng_rel):=
match (inBackendDAE)
local
Integer ng,nsam;
list<ZeroCrossing> zc;
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo = BackendDAE.EVENT_INFO(zeroCrossingLst = zc))))
Integer ng,nsam, ngrel;
list<ZeroCrossing> zc, samples;
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo = BackendDAE.EVENT_INFO(zeroCrossingLst = zc, sampleLst =samples, relationsNumber=ngrel))))
equation
(ng,nsam) = calculateNumberZeroCrossings(zc, 0, 0);
ng = listLength(zc);
nsam = listLength(samples);
then
(ng,nsam);
(ng,nsam,ngrel);
end match;
end numberOfZeroCrossings;

Expand Down Expand Up @@ -1083,6 +1083,19 @@ algorithm
(zc,sample) = calculateNumberZeroCrossings(xs,zc_index,sample_index);
then (zc,sample);

case (BackendDAE.ZERO_CROSSING(relation_ = DAE.LBINARY(operator = _), occurEquLst = _) :: xs,zc_index,sample_index)
equation
zc_index = zc_index + 1;
(zc,sample) = calculateNumberZeroCrossings(xs,zc_index,sample_index);
then (zc,sample);

case (BackendDAE.ZERO_CROSSING(relation_ = DAE.LUNARY(operator = _), occurEquLst = _) :: xs,zc_index,sample_index)
equation
zc_index = zc_index + 1;
(zc,sample) = calculateNumberZeroCrossings(xs,zc_index,sample_index);
then (zc,sample);


case (_,_,_)
equation
print("- BackendDAEUtil.calculateNumberZeroCrossings failed\n");
Expand Down Expand Up @@ -2789,14 +2802,15 @@ algorithm
Env.Env env;
DAE.FunctionTree funcs;
list<WhenClause> wclst,wclst1;
list<ZeroCrossing> zc;
list<ZeroCrossing> zc, rellst, smplLst;
Integer numberOfRelations;
ExternalObjectClasses eoc;
BackendDAE.SymbolicJacobians symjacs;
BackendDAEType btp;
case (_,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst,zc),eoc,btp,symjacs))
case (_,BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst,zc,smplLst,rellst,numberOfRelations),eoc,btp,symjacs))
equation
wclst1 = listAppend(wclst,inWcLst);
then BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst1,zc),eoc,btp,symjacs);
then BackendDAE.SHARED(knvars,exobj,aliasVars,inieqns,remeqns,constrs,clsAttrs,cache,env,funcs,BackendDAE.EVENT_INFO(wclst1,zc,smplLst,rellst,numberOfRelations),eoc,btp,symjacs);
end match;
end whenClauseAddDAE;

Expand Down
78 changes: 56 additions & 22 deletions Compiler/BackEnd/BackendDump.mo
Original file line number Diff line number Diff line change
Expand Up @@ -470,28 +470,57 @@ public function dumpZcStr
algorithm
outString:=
match (inZeroCrossing)
local
list<String> eq_s_list,wc_s_list;
String eq_s,wc_s,str,str2,str_index;
DAE.Exp e;
Integer index_;
list<Integer> eq,wc;
case BackendDAE.ZERO_CROSSING(relation_ = e as DAE.RELATION(index=index_),occurEquLst = eq,occurWhenLst = wc)
equation
eq_s_list = List.map(eq, intString);
eq_s = stringDelimitList(eq_s_list, ",");
wc_s_list = List.map(wc, intString);
wc_s = stringDelimitList(wc_s_list, ",");
str = ExpressionDump.printExpStr(e);
str_index=intString(index_);
str2 = stringAppendList({str," with index = ",str_index," in equations [",eq_s,"] and when conditions [",wc_s,"]"});
then
str2;
else then "";
local
list<String> eq_s_list,wc_s_list;
String eq_s,wc_s,str,str2,str_index;
DAE.Exp e;
Integer index_;
list<Integer> eq,wc;
case BackendDAE.ZERO_CROSSING(relation_ = e as DAE.RELATION(index=index_),occurEquLst = eq,occurWhenLst = wc)
equation
eq_s_list = List.map(eq, intString);
eq_s = stringDelimitList(eq_s_list, ",");
wc_s_list = List.map(wc, intString);
wc_s = stringDelimitList(wc_s_list, ",");
str = ExpressionDump.printExpStr(e);
str_index=intString(index_);
str2 = stringAppendList({str," with index = ",str_index," in equations [",eq_s,"] and when conditions [",wc_s,"]"});
then
str2;
case BackendDAE.ZERO_CROSSING(relation_ = e as DAE.LBINARY(operator=_),occurEquLst = eq,occurWhenLst = wc)
equation
eq_s_list = List.map(eq, intString);
eq_s = stringDelimitList(eq_s_list, ",");
wc_s_list = List.map(wc, intString);
wc_s = stringDelimitList(wc_s_list, ",");
str = ExpressionDump.printExpStr(e);
str2 = stringAppendList({str," in equations [",eq_s,"] and when conditions [",wc_s,"]"});
then
str2;
case BackendDAE.ZERO_CROSSING(relation_ = e as DAE.LUNARY(operator=_),occurEquLst = eq,occurWhenLst = wc)
equation
eq_s_list = List.map(eq, intString);
eq_s = stringDelimitList(eq_s_list, ",");
wc_s_list = List.map(wc, intString);
wc_s = stringDelimitList(wc_s_list, ",");
str = ExpressionDump.printExpStr(e);
str2 = stringAppendList({str," in equations [",eq_s,"] and when conditions [",wc_s,"]"});
then
str2;
case BackendDAE.ZERO_CROSSING(relation_ = e as DAE.CALL(path = Absyn.IDENT(name = "sample")),occurEquLst = eq,occurWhenLst = wc)
equation
eq_s_list = List.map(eq, intString);
eq_s = stringDelimitList(eq_s_list, ",");
wc_s_list = List.map(wc, intString);
wc_s = stringDelimitList(wc_s_list, ",");
str = ExpressionDump.printExpStr(e);
str2 = stringAppendList({str," in equations [",eq_s,"] and when conditions [",wc_s,"]"});
then
str2;
else then "";
end match;
end dumpZcStr;


public function dumpWcStr
"function: dumpWcStr
Dumps a whenclause into a string, for debugging purposes."
Expand Down Expand Up @@ -694,14 +723,15 @@ algorithm
BackendDAE.Variables vars2,vars3,av;
BackendDAE.EquationArray reqns,ieqns;
array<DAE.Constraint> constrs;
list<BackendDAE.ZeroCrossing> zc;
list<BackendDAE.ZeroCrossing> zc, samples;
list<BackendDAE.WhenClause> wc;
Integer numberOfRelations;
BackendDAE.ExternalObjectClasses extObjCls;
BackendDAE.BackendDAEType btp;
BackendDAE.SymbolicJacobians symjacs;
DAE.FunctionTree funcs;
case (BackendDAE.SHARED(knownVars=vars2,externalObjects=vars3,aliasVars=av,initialEqs=ieqns,removedEqs=reqns,constraints=constrs,
functionTree=funcs,eventInfo=BackendDAE.EVENT_INFO(zeroCrossingLst = zc,whenClauseLst=wc),extObjClasses=extObjCls,backendDAEType=btp,symjacs=symjacs))
functionTree=funcs,eventInfo=BackendDAE.EVENT_INFO(zeroCrossingLst = zc,sampleLst=samples,whenClauseLst=wc,relationsNumber=numberOfRelations),extObjClasses=extObjCls,backendDAEType=btp,symjacs=symjacs))
equation
print("BackendDAEType: ");
dumpBackendDAEType(btp);
Expand Down Expand Up @@ -750,10 +780,14 @@ algorithm
print(")\n");
print("=========\n");
dumpEqns(ieqnsl);
print("Zero Crossings :\n");
print("Zero Crossings (numberOfRelations = " +& intString(numberOfRelations) +&") : \n");
print("===============\n");
s = dumpZcStr1(zc);
print(s);
print("Samples : \n");
print("===============\n");
s = dumpZcStr1(samples);
print(s);
print("\n");
print("When Clauses :\n");
print("===============\n");
Expand Down

0 comments on commit f8d8971

Please sign in to comment.