Browse Source

ExportIterations, mtbdd: fix iteration export when transpose==true

If we are solving the transposed equation system, the solution vector
is over the column vars, not the row vars. This has to be taken into
account when exporting the iterations using -exportiterations.
master
Joachim Klein 8 years ago
parent
commit
2c906bf54d
  1. 4
      prism/src/mtbdd/PM_JOR.cc
  2. 8
      prism/src/mtbdd/PM_JORInterval.cc
  3. 4
      prism/src/mtbdd/PM_Power.cc
  4. 8
      prism/src/mtbdd/PM_PowerInterval.cc

4
prism/src/mtbdd/PM_JOR.cc

@ -131,7 +131,7 @@ jdouble omega // omega (jor parameter)
title += ")"; title += ")";
iterationExport.reset(new ExportIterations(title.c_str())); iterationExport.reset(new ExportIterations(title.c_str()));
iterationExport->exportVector(sol, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol, (transpose?cvars:rvars), num_rvars, odd, 0);
} }
// get setup time // get setup time
@ -163,7 +163,7 @@ jdouble omega // omega (jor parameter)
} }
if (iterationExport) if (iterationExport)
iterationExport->exportVector(tmp, rvars, num_rvars, odd, 0);
iterationExport->exportVector(tmp, (transpose?cvars:rvars), num_rvars, odd, 0);
// check convergence // check convergence
switch (term_crit) { switch (term_crit) {

8
prism/src/mtbdd/PM_JORInterval.cc

@ -146,8 +146,8 @@ jint flags
title += "), interval"; title += "), interval";
iterationExport.reset(new ExportIterations(title.c_str())); iterationExport.reset(new ExportIterations(title.c_str()));
iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1);
iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0);
iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1);
} }
// get setup time // get setup time
@ -211,8 +211,8 @@ jint flags
sol_above = tmp; sol_above = tmp;
if (iterationExport) { if (iterationExport) {
iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1);
iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0);
iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1);
} }
// check convergence // check convergence

4
prism/src/mtbdd/PM_Power.cc

@ -100,7 +100,7 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?)
std::unique_ptr<ExportIterations> iterationExport; std::unique_ptr<ExportIterations> iterationExport;
if (PM_GetFlagExportIterations()) { if (PM_GetFlagExportIterations()) {
iterationExport.reset(new ExportIterations("PM_Power")); iterationExport.reset(new ExportIterations("PM_Power"));
iterationExport->exportVector(sol, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol, (transpose?cvars:rvars), num_rvars, odd, 0);
} }
// get setup time // get setup time
@ -127,7 +127,7 @@ jboolean transpose // transpose A? (i.e. solve xA=b not Ax=b?)
tmp = DD_Apply(ddman, APPLY_PLUS, tmp, b); tmp = DD_Apply(ddman, APPLY_PLUS, tmp, b);
if (iterationExport) if (iterationExport)
iterationExport->exportVector(tmp, rvars, num_rvars, odd, 0);
iterationExport->exportVector(tmp, (transpose?cvars:rvars), num_rvars, odd, 0);
// check convergence // check convergence
switch (term_crit) { switch (term_crit) {

8
prism/src/mtbdd/PM_PowerInterval.cc

@ -110,8 +110,8 @@ jint flags
std::unique_ptr<ExportIterations> iterationExport; std::unique_ptr<ExportIterations> iterationExport;
if (PM_GetFlagExportIterations()) { if (PM_GetFlagExportIterations()) {
iterationExport.reset(new ExportIterations("PM_Power (interval)")); iterationExport.reset(new ExportIterations("PM_Power (interval)"));
iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1);
iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0);
iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1);
} }
// get setup time // get setup time
@ -166,8 +166,8 @@ jint flags
if (iterationExport) { if (iterationExport) {
iterationExport->exportVector(sol_below, rvars, num_rvars, odd, 0);
iterationExport->exportVector(sol_above, rvars, num_rvars, odd, 1);
iterationExport->exportVector(sol_below, (transpose?cvars:rvars), num_rvars, odd, 0);
iterationExport->exportVector(sol_above, (transpose?cvars:rvars), num_rvars, odd, 1);
} }
// check convergence // check convergence

Loading…
Cancel
Save