@@ -349,10 +349,10 @@ algorithm
349349 SimCode . JacobianMatrix jacmatrix;
350350 list< SimCodeVar . SimVar > simcodevars;
351351 list< tuple< Integer ,list< Integer >>> var_dependencytree,eq_dependencytree;
352- BackendDAE . Variables outDiffVars,outResidualVars,outOtherVars;
352+ BackendDAE . Variables outDiffVars,outResidualVars,outOtherVars,tmpdatavars ;
353353 BackendDAE . EquationArray outResidualEqns,outOtherEqns;
354354 list< BackendDAE . InnerEquation > sets_inner_equations;
355-
355+ String str;
356356 case (dae)
357357 equation
358358 BackendDAE . DAE (currentSystem::eqsyslist,shared ) = dae;
@@ -430,15 +430,14 @@ algorithm
430430
431431 BackendDump . dumpEquationList(setC_eq,"SET_C" );
432432 BackendDump . dumpEquationList(setS_eq,"SET_S" );
433-
434- VerifyDataReconciliation (tempsetC,tempsetS,knowns,unknowns,mExt,var ,constantvars,approximatedEquations,allVars,allEqs);
435-
433+ VerifyDataReconciliation (tempsetC,tempsetS,knowns,unknowns,mExt,var ,constantvars,approximatedEquations,allVars,allEqs,mapIncRowEqn);
436434 // outDae = BackendDAE.DAE({currentSystem}, shared);
437435
438436 /* Prepare Torn systems for Jacobians */
439437 // create the Set-S equation to BackendDae innerequation structure
440- sets_inner_equations= createInnerEquations(tempsetS,var );
441- (outDiffVars,outResidualVars,outOtherVars,outResidualEqns,outOtherEqns)= SymbolicJacobian . prepareTornStrongComponentData(allVars,allEqs,listReverse(knowns),tempsetC,sets_inner_equations,shared . functionTree);
438+ sets_inner_equations= createInnerEquations(tempsetS,var ,setS);
439+ // sets_inner_equations={BackendDAE.INNEREQUATION(eqn = 56, vars = {48}), BackendDAE.INNEREQUATION(eqn = 3, vars = {70}), BackendDAE.INNEREQUATION(eqn = 6, vars = {77}),BackendDAE.INNEREQUATION(eqn = 23, vars = {55}), BackendDAE.INNEREQUATION(eqn = 20, vars = {42}), BackendDAE.INNEREQUATION(eqn = 50, vars = {20})};
440+ (outDiffVars,outResidualVars,outOtherVars,outResidualEqns,outOtherEqns)= SymbolicJacobian . prepareTornStrongComponentData(allVars,allEqs,listReverse(knowns),setC,sets_inner_equations,shared . functionTree);
442441 // Dump the torn systems
443442 /*
444443 BackendDump.dumpVariables(outDiffVars,"Jacobian_knownVariables");
@@ -452,33 +451,59 @@ algorithm
452451 setcVars= BackendVariable . listVar(List . map1r(getRemovedEquationSolvedVariables(tempsetC,var ),BackendVariable . getVarAt,allVars));
453452 shared . dataReconciliationData = SOME (BackendDAE . DATA_RECON (symbolicJacobian= simcodejacobian,setcVars= outResidualVars));
454453 // BackendDump.dumpVariables(setcVars,"SET_C_SOLVEDVARS");
454+
455455 // Prepare the final DAE System with Set-c equations as residual equations
456456 currentSystem= BackendDAEUtil . setEqSystVars(currentSystem,BackendVariable . mergeVariables(outResidualVars, outOtherVars));
457457 currentSystem= BackendDAEUtil . setEqSystEqs(currentSystem,BackendEquation . merge(outResidualEqns,outOtherEqns));
458+
458459 // set the variables of interest as INPUTS
459460 tempvar= BackendVariable . varList(outDiffVars);
460461 tempvar1= List . map1r(inputvarlist,BackendVariable . getVarAt,allVars);
461462 tmpglobalKnownVars= BackendVariable . listVar(List . map1(listAppend(tempvar,tempvar1),BackendVariable . setVarDirection,DAE . INPUT ()));
462463 shared = BackendDAEUtil . setSharedGlobalKnownVars(shared ,BackendVariable . mergeVariables(globalKnownVars, tmpglobalKnownVars));
463- // BackendDump.dumpVariables(tmpglobalKnownVars,"input_vars");
464+ // BackendDump.dumpVariables(tmpglobalKnownVars,"inputvars");
465+
466+ // write the variables to the csv file
467+ str = "Variable Names,Measured Value-x,HalfWidthConfidenceInterval,xi,xk,rx_ik \n " ;
468+ str = dumpToCsv(str,tempvar);
469+ System . writeFile(modelname+ "_Inputs.csv" , str);
464470 outDae= BackendDAE . DAE ({currentSystem}, shared );
465471 then
466472 outDae;
467473 case (_) then inDae;
468474 end match;
469475end dataReconciliation;
470476
477+ /* function which dumps the variable names to csv file */
478+ public function dumpToCsv
479+ input String instring;
480+ input list< BackendDAE . Var > invar;
481+ output String outstring= "" ;
482+ protected
483+ DAE . ComponentRef cr;
484+ algorithm
485+ for i in invar loop
486+ cr:= BackendVariable . varCref(i);
487+ outstring:= outstring + ComponentReference . crefStr(cr) + " \n " ;
488+ end for ;
489+ outstring:= instring+ outstring;
490+ end dumpToCsv;
491+
471492/* creates list of equations from SET-S needed for jacobian calculation */
472493public function createInnerEquations
473- input list< Integer > sets ;
494+ input list< Integer > tempsets ;
474495 input list< tuple< Integer ,Integer >> solvedeqvar;
496+ input list< Integer > sets;
475497 output BackendDAE . InnerEquations outequations= {};
476498protected
477499 Integer eqnumber,varnumber;
500+ Integer count= 1 ;
478501algorithm
479- for i in sets loop
502+ for i in tempsets loop
480503 (eqnumber,varnumber):= getSolvedVariableNumber(i,solvedeqvar);
481- outequations:= BackendDAE . INNEREQUATION (eqnumber,{varnumber})::outequations;
504+ // map the tempsets with setS, to get the correct equation index for example (26/37) in ordered equation list
505+ outequations:= BackendDAE . INNEREQUATION (listGet(sets, count),{varnumber})::outequations;
506+ count:= count+ 1 ;
482507 end for ;
483508 outequations:= listReverse(outequations);
484509end createInnerEquations;
@@ -491,6 +516,7 @@ public function dumpDependencyTree
491516 input list< Integer > constantvars;
492517 input BackendDAE . Variables allVars;
493518 input BackendDAE . EquationArray allEqs;
519+ input array< Integer > mapIncRowEqn;
494520protected
495521 Integer varnumber,count= 1 ;
496522 list< Integer > eqs,varlist;
@@ -503,7 +529,7 @@ algorithm
503529 (varnumber,varlist):= i;
504530 (_,eqs):= listGet(ineqtree,count);
505531 var := List . map1r({varnumber},BackendVariable . getVarAt,allVars);
506- depeqs:= List . map1r(eqs, BackendEquation . get, allEqs);
532+ depeqs:= List . map1r(List . map1r( eqs, listGet, arrayList(mapIncRowEqn)) , BackendEquation . get, allEqs);
507533 (kn1,kn2,kn3):= List . intersection1OnTrue(varlist,listAppend(knowns,constantvars),intEq);
508534 // (c1,c2,c3):=List.intersection1OnTrue(varlist,constantvars,intEq);
509535
@@ -599,6 +625,7 @@ public function VerifyDataReconciliation
599625 input list< Integer > approximatedEquations;
600626 input BackendDAE . Variables allVars;
601627 input BackendDAE . EquationArray allEqs;
628+ input array< Integer > mapIncRowEqn;
602629protected
603630 list< Integer > matchedeq,matchedknownssetc,matchedunknownssetc,matchedknownssets,matchedunknownssets;
604631 list< Integer > tmpunknowns,tmpknowns,tmplist1,tmplist2,tmplist3,tmplist1sets,setstmp;
@@ -698,14 +725,14 @@ algorithm
698725 (tmplist1,tmplist2,tmplist3):= List . intersection1OnTrue(sets_eqs,sets,intEq);
699726 if (listEmpty(tmplist2)) then
700727 BackendDump . dumpVarList(List . map1r(matchedunknownssetc,BackendVariable . getVarAt,allVars),"-SET_C has intermediate variables:" + dumplistInteger(matchedunknownssetc));
701- BackendDump . dumpEquationList(List . map1r(sets_eqs, BackendEquation . get, allEqs),"-SET_S has equations which can compute above intermediate variable" );
728+ BackendDump . dumpEquationList(List . map1r(List . map1r( sets_eqs, listGet, arrayList(mapIncRowEqn)) , BackendEquation . get, allEqs),"-SET_S has equations which can compute above intermediate variable" );
702729 else
703730 BackendDump . dumpVarList(List . map1r(tmplistvar2,BackendVariable . getVarAt,allVars),"SET_S cannot compute intermediate variables :" + dumplistInteger(tmplistvar2));
704731 Error . addMessage(Error . INTERNAL_ERROR , {": Condition 5-Failed : The system is ill-posed." });
705732 return ;
706733 end if ;
707734 (_,extractedeqs,var_dependencytree,eq_dependencytree):= BuildSquareSubSet (sets_eqs,sets_vars,knowns,mExt,solvedvar,constantvars,approximatedEquations);
708- dumpDependencyTree(var_dependencytree,eq_dependencytree,knowns,constantvars,allVars,allEqs);
735+ dumpDependencyTree(var_dependencytree,eq_dependencytree,knowns,constantvars,allVars,allEqs,mapIncRowEqn );
709736 end if ;
710737end VerifyDataReconciliation ;
711738
0 commit comments