47 #include <Xyce_config.h>
64 #include <N_UTL_Xyce.h>
65 #include <N_UTL_BreakPoint.h>
66 #include <N_UTL_Functors.h>
67 #include <N_UTL_SaveIOSState.h>
69 #include <N_PDS_Comm.h>
71 #include <N_ERH_ErrorMgr.h>
73 #include <N_IO_CmdParse.h>
88 startingTimeStep(1.0e-10),
89 currentTimeStep(1.0e-10),
90 lastAttemptedTimeStep(1.0e-10),
91 lastTimeStep(1.0e-10),
94 maxTimeStepUser(1.0e+99),
96 savedTimeStep(1.0e-10),
103 currentTimeStepRatio(0.0),
104 currentTimeStepSum(0.0),
105 lastTimeStepRatio(0.0),
106 lastTimeStepSum(0.0),
107 newtonConvergenceStatus(-1),
109 numberSuccessiveFailures(0),
110 stepAttemptStatus(true),
111 previousCallStepSuccessful(false),
113 initializeFlag_(false),
114 minStepPrecisionFac_(10.0),
115 newtonStepReduction_(0.25),
116 restartTimeStepScale_(0.005),
119 anaManager_(anaManager),
121 loader_( *(anaManager_.loaderPtr) ),
158 h0_max_factor_(0.005),
162 Tkm1_Tk_safety_(2.0),
163 Tkp1_Tk_safety_(0.5),
164 #ifndef Xyce_USE_Q_NORM
246 std::set<N_UTL_BreakPoint>::iterator lastBP =
breakPoints_.end();
378 #ifdef Xyce_DEBUG_TIME
381 Xyce::dout() << std::endl;
382 Xyce::dout() << Xyce::section_divider << std::endl;
384 " N_TIA_StepErrorControl::resetAll" << std::endl;
386 " before initializeBreakPoints( << std::endl" << std::endl;
388 Xyce::dout() <<
" currentPauseBP = " <<
currentPauseBP->value() << std::endl;
391 #endif // Xyce_DEBUG_TIME
395 #ifdef Xyce_DEBUG_TIME
399 " after initializeBreakPoints( << std::endl" << std::endl;
401 Xyce::dout() <<
" currentPauseBP = " <<
currentPauseBP->value() << std::endl;
403 #endif // Xyce_DEBUG_TIME
408 std::set<N_UTL_BreakPoint>::iterator lastBP =
breakPoints_.end();
416 #ifdef Xyce_DEBUG_TIME
420 " after updatePauseTime( << std::endl & setBreakPoint" << std::endl;
422 Xyce::dout() <<
" currentPauseBP = " <<
currentPauseBP->value() << std::endl;
423 Xyce::dout() << Xyce::section_divider << std::endl;
425 #endif // Xyce_DEBUG_TIME
447 #ifdef Xyce_VERBOSE_TIME
448 const std::string crMsg =
"\n";
449 const std::string startMsg = (
"* Initial Time Value:\t");
450 const std::string stopMsg = (
" * Ending Time Value:\t");
451 const std::string secondsMsg = (
" secs");
452 const std::string timeToStopMsg = (
" * Time to Stop Value:\t");
454 Xyce::dout() << crMsg + startMsg << currentTime << secondsMsg << std::endl
455 << stopMsg <<
stopTime << secondsMsg << std::endl
456 << timeToStopMsg << time_to_stop << secondsMsg << std::endl;
489 #ifdef Xyce_VERBOSE_TIME
490 const std::string stepMsg = (
" * Initial Step Size: \t");
492 Xyce::dout() << stepMsg <<
494 #endif // Xyce_VERBOSE_TIME
531 double diffStopTime(0.0);
535 std::set<N_UTL_BreakPoint>::iterator itBP;
536 std::set<N_UTL_BreakPoint>::iterator firstBP =
breakPoints_.begin();
537 std::set<N_UTL_BreakPoint>::iterator lastBP =
breakPoints_.end();
542 itBP = upper_bound(firstBP,lastBP,N_UTL_BreakPoint(
currentTime));
548 if (itBP->bptype() == Xyce::Util::PAUSE_BREAKPOINT)
558 diffStopTime = fabs(
stopTime-oldStopTime);
568 #ifdef Xyce_PARALLEL_MPI
574 comm->minAll ( &sT, &mST, 1);
576 #endif // Xyce_PARALLEL_MPI
594 #ifdef Xyce_DEBUG_TIME
597 Xyce::dout() << std::endl
598 <<
" stopTime = " <<
stopTime << std::endl
601 <<
" oldStopTime = " << oldStopTime << std::endl
602 <<
" finalTime = " <<
finalTime << std::endl
605 << Xyce::section_divider << std::endl;
607 #endif // Xyce_DEBUG_TIME
628 std::set<N_UTL_BreakPoint>::iterator itBP;
629 std::set<N_UTL_BreakPoint>::iterator firstBP =
breakPoints_.begin();
630 std::set<N_UTL_BreakPoint>::iterator lastBP =
breakPoints_.end();
635 itBP = upper_bound(firstBP,lastBP,N_UTL_BreakPoint(
currentTime));
641 #ifdef Xyce_PARALLEL_MPI
647 comm->minAll ( &nT, &mNT, 1);
649 #endif // Xyce_PARALLEL_MPI
671 bool sAStatus(
false);
672 bool errorOptionStatus(
true);
673 bool testTimeIntegrationError(
false);
697 testTimeIntegrationError =
true;
701 if (!step_attempt_status)
703 testTimeIntegrationError =
false;
707 if (testTimeIntegrationError)
728 errorOptionStatus =
true;
730 errorOptionStatus =
false;
732 #ifdef Xyce_VERBOSE_TIME
735 Xyce::dout() <<
"ERROROPTION=1: DOREJECTSTEP = ";
738 Xyce::dout() <<
"1" << std::endl;
742 Xyce::dout() <<
"0" << std::endl;
745 #endif // Xyce_VERBOSE_TIME
752 #ifdef Xyce_DEBUG_TIME
755 Xyce::dout() <<
"Trying to skip time integrator error checks: " <<
currentTimeStep
756 <<
" newton status " << step_attempt_status << std::endl;
767 step_attempt_status = step_attempt_status && errorOptionStatus;
769 step_attempt_status = step_attempt_status && sAStatus;
774 #ifdef Xyce_VERBOSE_TIME
775 #ifdef Xyce_DEBUG_TIME
802 os << (Xyce::DEBUG_TIME ?
commandLine_.getArgumentValue(
"netlist") :
"")
803 <<
" STEP STATUS: " << (step_attempt_status ?
" success" :
" fail")
820 os <<
"\n estOverTol = " <<
estOverTol_ << std::endl
823 <<
"\nSTEP ATTEMPT STATUS:" << std::endl
824 <<
"NOTE:" << std::endl;
830 os <<
" We are running in variable stepsize mode << " << std::endl
831 <<
" and we have NOT just passed a breakpoint. As such << " << std::endl
832 <<
" for an integration step to succeed << the " << std::endl
833 <<
" nonlinear solver must succeed << AND the predictor" << std::endl
834 <<
" and corrector need to be close within a tolerance." << std::endl;
838 os <<
"ADDENDUM: This is with erroption=1 so predictor-corrector is ignored for step error control." << std::endl;
843 os <<
" We are either running constant stepsize << " << std::endl
844 <<
" or we just passed a breakpoint. As such << " << std::endl
845 <<
" the only criteria we use in accepting/rejecting" << std::endl
846 <<
" an integration step is the nonlinear solver" << std::endl
847 <<
" success/failure." << std::endl;
850 if (step_attempt_status)
852 os <<
"\n This has been a successful step:" << std::endl;
856 os <<
"\n This has NOT been a successful step:" << std::endl;
874 os <<
" - predictor vs. corrector analysis succeeded." << std::endl;
878 os <<
" - predictor vs. corrector analysis failed." << std::endl;
881 os <<
" (compare estOverTol with error tolerance << above. << std::endl" << std::endl;
885 os <<
"If we had been using it << " << std::endl;
889 os <<
" - predictor vs. corrector analysis would have succeeded." << std::endl;
893 os <<
" - predictor vs. corrector analysis would have failed." << std::endl;
896 os <<
" (compare estOverTol with error tolerance << above. << std::endl" << std::endl;
901 os <<
" predictor vs. corrector was not tested" << std::endl;
904 os << Xyce::section_divider << std::endl;
918 bool bsuccess =
true;
961 bool bsuccess =
true;
963 #ifdef Xyce_DEBUG_TIME
966 Xyce::dout() << std::endl
967 << Xyce::section_divider << std::endl
968 <<
" N_TIA_StepErrorControl::updateBreakPoints. time = " <<
currentTime << std::endl
973 std::vector<N_UTL_BreakPoint> tmpBP;
979 std::vector<N_UTL_BreakPoint>::iterator iter;
980 std::vector<N_UTL_BreakPoint>::iterator first = tmpBP.begin();
981 std::vector<N_UTL_BreakPoint>::iterator last = tmpBP.end();
984 std::set<N_UTL_BreakPoint>::iterator itBP;
985 std::set<N_UTL_BreakPoint>::iterator itBP_2;
986 std::set<N_UTL_BreakPoint>::iterator firstBP =
breakPoints_.begin();
987 std::set<N_UTL_BreakPoint>::iterator lastBP =
breakPoints_.end();
990 for (iter=first; iter!=last; ++iter)
998 #ifdef Xyce_DEBUG_TIME
1005 std::string netListFile =
commandLine_.getArgumentValue(
"netlist");
1006 std::string msg = netListFile +
" breakPoints_ vector container, before any removals:";
1008 Xyce::dout() <<msg << std::endl;
1010 for (i=0, itBP=firstBP;itBP!=lastBP;++i,++itBP)
1014 sprintf(tmp,
"%4d %16.8e",i,itBP->value());
1018 sprintf(tmp,
"%4d %16.8e diff=%16.8e", i, itBP->value(),(itBP->value()-itBP_2->value()));
1021 Xyce::dout() <<tmp << std::endl;
1024 Xyce::dout() <<
"" << std::endl;
1029 LessThan<N_UTL_BreakPoint,double> LessFunct;
1030 itBP_2 = lower_bound(firstBP,lastBP,
lastTime,LessFunct);
1052 #ifdef Xyce_DEBUG_TIME
1055 Xyce::dout() <<
" bpTol = " << bpTol << std::endl;
1056 Xyce::dout() <<
" Must now eliminate new duplicates " << std::endl;
1060 bool doneRemove =
false;
1067 for (icount = 0, itBP=firstBP, itBP_2=firstBP;
1071 double diff = (itBP->value() - itBP_2->value());
1075 if (fabs(diff) < bpTol)
1078 if (itBP->bptype() == Xyce::Util::SIMPLE_BREAKPOINT &&
1079 itBP_2->bptype() == Xyce::Util::SIMPLE_BREAKPOINT)
1091 Xyce::Util::BreakpointType overridingType = itBP->bptype();
1092 double minTime=Xycemin(itBP->value(),itBP_2->value());
1097 if (itBP_2->bptype() != Xyce::Util::SIMPLE_BREAKPOINT)
1099 overridingType = itBP_2->bptype();
1103 N_UTL_BreakPoint tmpBP(minTime,overridingType);
1107 #ifdef Xyce_DEBUG_TIME
1108 Xyce::dout() <<
" Purging breakpoints, overriding with breakpoint of type " << tmpBP.bptype();
1122 #ifdef Xyce_DEBUG_TIME
1128 " breakPoints_ vector container << after:" << std::endl;
1130 for (i=0, itBP=firstBP;itBP!=lastBP;++i,++itBP)
1134 sprintf(tmp,
"%4d %16.8e type=%d",i,itBP->value(),itBP->bptype());
1138 sprintf(tmp,
"%4d %16.8e type=%d diff=%16.8e", i, itBP->value(),
1139 itBP->bptype(),(itBP->value()-itBP_2->value()));
1142 Xyce::dout() <<tmp << std::endl;
1146 Xyce::dout() <<
"" << std::endl;
1147 Xyce::dout() <<Xyce::section_divider << std::endl;
1165 bool bsuccess =
true;
1167 #ifdef Xyce_DEBUG_TIME
1170 Xyce::dout() << Xyce::section_divider << std::endl;
1172 " N_TIA_StepErrorControl::updateMaxTimeStep" << std::endl;
1176 double maxDevStep = 1.0e+99;
1179 maxDevStep =
loader_.getMaxTimeStepSize();
1193 if( suggestedMaxTimeStep > 0.0 )
1203 if (maxDevStep > 0.0)
1213 #ifdef Xyce_PARALLEL_MPI
1219 comm->minAll ( &mTS, &mMTS, 1);
1224 #ifdef Xyce_DEBUG_TIME
1230 " User did not specify a maximum time step." << std::endl;
1235 " User specified a maximum time step. = " <<
maxTimeStepUser << std::endl;
1239 " maxDevStep = " << maxDevStep << std::endl;
1242 Xyce::dout() <<Xyce::section_divider << std::endl;
1248 const std::string msg =
"Maximum Time step is invalid!\n";
1249 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
1265 bool bsuccess =
true;
1268 N_UTL_MachineDependentParams::MachinePrecision();
1283 if (theBP.bptype() == Xyce::Util::SIMPLE_BREAKPOINT)
1289 #ifdef Xyce_DEBUG_TIME
1290 Xyce::dout() <<
"In setBreakPoint, got non-simple breakpoint of type "
1291 << theBP.bptype() <<
" at time " << theBP.value() << std::endl;
1338 if ((BP.bptype() > 0) && (BP.value() == 0.0))
1358 #ifdef Xyce_DEBUG_TIME
1359 Xyce::dout() <<
"\n" <<
commandLine_.getArgumentValue(
"netlist")
1361 <<
" encountered breakpoint " << BP.value() <<
" current time is "
1396 std::set<N_UTL_BreakPoint>::const_iterator itBP;
1397 std::set<N_UTL_BreakPoint>::const_iterator itBP2;
1398 std::set<N_UTL_BreakPoint>::const_iterator firstBP =
breakPoints_.begin();
1399 std::set<N_UTL_BreakPoint>::const_iterator lastBP =
breakPoints_.end();
1404 for (i=0, itBP=firstBP;itBP!=lastBP;++i,++itBP)
1407 sprintf(tmp,
"%4d %16.8e type=%d",i,itBP->value(),itBP->bptype());
1409 sprintf(tmp,
"%4d %16.8e type=%d diff=%16.8e", i, itBP->value(),
1410 itBP->bptype(),(itBP->value()-itBP2->value()));
1412 os << std::string(tmp);
1441 int numdoubles = 21;
1443 int count =
sizeof(double) * (numdoubles);
1444 count +=
sizeof(int) * numints;
1454 count = 24*((numdoubles+numints) + (
breakPoints_.size()))
1458 int baseClassSize = count;
1464 totalSize = baseClassSize;
1465 totalSize +=
sizeof(double) * numdoubles;
1466 totalSize +=
sizeof(int) * numints;
1471 totalSize = baseClassSize + 24*(numdoubles+numints);
1490 (
char * buf,
int bsize,
int & pos, N_PDS_Comm * comm,
bool pack )
1504 for(
int i = pos; i < (newPos); ++i) buf[i] =
' ';
1507 #ifdef Xyce_DEBUG_RESTART
1508 std::string netListFile = commandLine_.getArgumentValue(
"netlist");
1509 Xyce::dout() <<
"TIA Restart Data DUMP! " << netListFile <<
"\n";
1510 Xyce::dout() << Xyce::section_divider << std::endl;
1511 Xyce::dout() <<
"startingTimeStep: " << startingTimeStep << std::endl;
1512 Xyce::dout() <<
"currentTimeStep: " << currentTimeStep << std::endl;
1513 Xyce::dout() <<
"lastAttemptedTimeStep: " << lastAttemptedTimeStep << std::endl;
1514 Xyce::dout() <<
"lastTimeStep: " << lastTimeStep << std::endl;
1515 Xyce::dout() <<
"minTimeStep: " << minTimeStep << std::endl;
1516 Xyce::dout() <<
"maxTimeStep: " << maxTimeStep << std::endl;
1517 Xyce::dout() <<
"maxTimeStepUser: " << maxTimeStepUser << std::endl;
1518 Xyce::dout() <<
"lastTime: " << lastTime << std::endl;
1519 Xyce::dout() <<
"currentTime: " << currentTime << std::endl;
1520 Xyce::dout() <<
"nextTime: " << nextTime << std::endl;
1521 Xyce::dout() <<
"initialTime: " << initialTime << std::endl;
1522 Xyce::dout() <<
"estOverTol_: " << estOverTol_ << std::endl;
1523 Xyce::dout() <<
"breakpts: ";
1525 for (std::set<N_UTL_BreakPoint>::iterator iterSD = breakPoints_.begin();
1526 iterSD != breakPoints_.end(); ++iterSD )
1527 Xyce::dout() << iterSD->value() <<
" ";
1528 Xyce::dout() << std::endl;
1529 Xyce::dout() <<
"integMethod: " << anaManager_.getIntegrationMethod() << std::endl;
1530 Xyce::dout() <<
"stepNumber: " << anaManager_.getStepNumber() << std::endl;
1531 Xyce::dout() <<
"transStepNumber: " << anaManager_.getTranStepNumber() << std::endl;
1532 Xyce::dout() <<
"breakPointRestartNumber: " << anaManager_.breakPointRestartStep << std::endl;
1533 Xyce::dout() << Xyce::section_divider << std::endl << std::endl;
1537 comm->pack( &startingTimeStep, 1, buf, bsize, pos );
1538 comm->pack( ¤tTimeStep, 1, buf, bsize, pos );
1539 comm->pack( &lastAttemptedTimeStep, 1, buf, bsize, pos );
1540 comm->pack( &lastTimeStep, 1, buf, bsize, pos );
1541 comm->pack( &minTimeStep, 1, buf, bsize, pos );
1542 comm->pack( &maxTimeStep, 1, buf, bsize, pos );
1543 comm->pack( &maxTimeStepUser, 1, buf, bsize, pos );
1544 comm->pack( &lastTime, 1, buf, bsize, pos );
1545 comm->pack( ¤tTime, 1, buf, bsize, pos );
1546 comm->pack( &nextTime, 1, buf, bsize, pos );
1547 comm->pack( &initialTime, 1, buf, bsize, pos );
1548 comm->pack( ¤tTimeStepRatio, 1, buf, bsize, pos );
1549 comm->pack( ¤tTimeStepSum, 1, buf, bsize, pos );
1550 comm->pack( &lastTimeStepRatio, 1, buf, bsize, pos );
1551 comm->pack( &lastTimeStepSum, 1, buf, bsize, pos );
1552 comm->pack( &newtonConvergenceStatus, 1, buf, bsize, pos );
1553 comm->pack( &numberSuccessiveFailures, 1, buf, bsize, pos );
1554 int flag = stepAttemptStatus;
1555 comm->pack( &flag, 1, buf, bsize, pos );
1556 comm->pack( &minStepPrecisionFac_, 1, buf, bsize, pos );
1557 comm->pack( &newtonStepReduction_, 1, buf, bsize, pos );
1558 comm->pack( &tolAimFac_, 1, buf, bsize, pos );
1559 comm->pack( &estOverTol_, 1, buf, bsize, pos );
1562 int size = breakPoints_.size() -1 ;
1563 std::set<N_UTL_BreakPoint>::iterator bpStart = breakPoints_.begin();
1564 std::set<N_UTL_BreakPoint>::iterator bpEnd = breakPoints_.end();
1565 comm->pack( &size, 1, buf, bsize, pos );
1569 for( std::set<N_UTL_BreakPoint>::iterator iterSD = bpStart;
1570 iterSD != bpEnd; ++iterSD)
1572 val=iterSD->value();
1573 bptype=iterSD->bptype();
1574 if (!(bptype == Xyce::Util::PAUSE_BREAKPOINT && val == finalTime))
1576 comm->pack( &(val), 1, buf, bsize, pos );
1577 comm->pack( &(bptype), 1, buf, bsize, pos );
1580 int im = anaManager_.getIntegrationMethod();
1581 comm->pack( &im, 1, buf, bsize, pos );
1582 int sN = anaManager_.getStepNumber();
1583 comm->pack( &sN, 1, buf, bsize, pos );
1584 int tSN = anaManager_.getTranStepNumber();
1585 comm->pack( &tSN, 1, buf, bsize, pos );
1586 int bPRS = anaManager_.breakPointRestartStep;
1587 comm->pack( &bPRS, 1, buf, bsize, pos );
1588 int beginFlag = (anaManager_.getBeginningIntegrationFlag())?1:0;
1589 comm->pack( &beginFlag, 1, buf, bsize, pos );
1596 int startIndex = pos;
1599 for(
int i = startIndex; i < (startIndex+count); ++i) buf[i] =
' ';
1601 std::ostringstream ost;
1602 ost.width(24);ost.precision(16);ost.setf(std::ios::scientific);
1603 ost << startingTimeStep <<
" ";
1604 ost << currentTimeStep <<
" ";
1605 ost << lastAttemptedTimeStep <<
" ";
1606 ost << lastTimeStep <<
" ";
1607 ost << minTimeStep <<
" ";
1608 ost << maxTimeStep <<
" ";
1609 ost << maxTimeStepUser <<
" ";
1610 ost << lastTime <<
" ";
1611 ost << currentTime <<
" ";
1612 ost << nextTime <<
" ";
1613 ost << initialTime <<
" ";
1614 ost << currentTimeStepRatio <<
" ";
1615 ost << currentTimeStepSum <<
" ";
1616 ost << lastTimeStepRatio <<
" ";
1617 ost << lastTimeStepSum <<
" ";
1618 ost << newtonConvergenceStatus <<
" ";
1619 ost << numberSuccessiveFailures <<
" ";
1620 int flag = (stepAttemptStatus)?1:0;
1622 ost << minStepPrecisionFac_ <<
" ";
1623 ost << newtonStepReduction_ <<
" ";
1624 ost << tolAimFac_ <<
" ";
1625 ost << estOverTol_ <<
" ";
1628 int size = breakPoints_.size() - 1;
1631 std::set<N_UTL_BreakPoint>::iterator bpStart = breakPoints_.begin();
1632 std::set<N_UTL_BreakPoint>::iterator bpEnd = breakPoints_.end();
1633 for( std::set<N_UTL_BreakPoint>::iterator iterSD = bpStart;
1634 iterSD != bpEnd; ++iterSD )
1636 if (!(iterSD->bptype() == Xyce::Util::PAUSE_BREAKPOINT &&
1637 iterSD->value() == finalTime))
1639 ost << iterSD->value() <<
" ";
1640 ost << iterSD->bptype() <<
" ";
1643 int im = anaManager_.getIntegrationMethod();
1645 int sN = anaManager_.getStepNumber();
1647 int tSN = anaManager_.getTranStepNumber();
1649 int bPRS = anaManager_.breakPointRestartStep;
1651 int beginFlag = (anaManager_.getBeginningIntegrationFlag())?1:0;
1652 ost << beginFlag <<
" ";
1654 std::string data( ost.str() );
1655 for(
unsigned int i = 0; i < data.length(); ++i ) buf[startIndex+i] = data[i];
1660 buf[startIndex+data.length()] =
'\0';
1661 pos += data.length();
1663 #ifdef Xyce_DEBUG_RESTART
1664 std::string outputString(buf);
1666 Xyce::dout() <<
"StepErrorControl UNPACKED output buffer:" << std::endl;
1667 Xyce::dout() << outputString << std::endl;
1671 #ifdef Xyce_DEBUG_RESTART
1672 Xyce::dout() <<
"TIA Restart Data DUMP (DAE)! " << netListFile <<
"\n";
1673 Xyce::dout() << Xyce::section_divider << std::endl<<std::endl;
1674 Xyce::dout() <<
"alphas_ = " <<alphas_<<std::endl;
1675 Xyce::dout() <<
"alpha0_ = " <<alpha0_<<std::endl;
1676 Xyce::dout() <<
"cj_ = " <<cj_<<std::endl;
1677 Xyce::dout() <<
"ck_ = " <<ck_<<std::endl;
1678 Xyce::dout() <<
"usedStep_ = " <<usedStep_<<std::endl;
1679 Xyce::dout() <<
"Ek_ = " <<Ek_<<std::endl;
1680 Xyce::dout() <<
"Ekm1_ = " <<Ekm1_<<std::endl;
1681 Xyce::dout() <<
"Ekm2_ = " <<Ekm2_<<std::endl;
1682 Xyce::dout() <<
"Ekp1_ = " <<Ekp1_<<std::endl;
1683 Xyce::dout() <<
"Est_ = " <<Est_<<std::endl;
1684 Xyce::dout() <<
"Tk_ = " <<Tk_<<std::endl;
1685 Xyce::dout() <<
"Tkm1_ = " <<Tkm1_<<std::endl;
1686 Xyce::dout() <<
"Tkm2_ = " <<Tkm2_<<std::endl;
1687 Xyce::dout() <<
"Tkp1_ = " <<Tkp1_<<std::endl;
1688 Xyce::dout() <<
"h0_safety_ = " <<h0_safety_<<std::endl;
1689 Xyce::dout() <<
"h0_max_factor_ = " <<h0_max_factor_<<std::endl;
1690 Xyce::dout() <<
"h_phase0_incr_ = " <<h_phase0_incr_<<std::endl;
1691 Xyce::dout() <<
"h_max_inv_ = " <<h_max_inv_<<std::endl;
1692 Xyce::dout() <<
"Tkm1_Tk_safety_ = " <<Tkm1_Tk_safety_<<std::endl;
1693 Xyce::dout() <<
"Tkp1_Tk_safety_ = " <<Tkp1_Tk_safety_<<std::endl;
1694 Xyce::dout() <<
"r_factor_ = " <<r_factor_<<std::endl;
1695 Xyce::dout() <<
"r_safety_ = " <<r_safety_<<std::endl;
1696 Xyce::dout() <<
"r_fudge_ = " <<r_fudge_<<std::endl;
1697 Xyce::dout() <<
"r_min_ = " <<r_min_<<std::endl;
1698 Xyce::dout() <<
"r_max_ = " <<r_max_<<std::endl;
1699 Xyce::dout() <<
"r_hincr_test_ = " <<r_hincr_test_<<std::endl;
1700 Xyce::dout() <<
"r_hincr_ = " <<r_hincr_<<std::endl;
1702 for (
int i=0;i<6;++i)
1704 Xyce::dout() <<
" alpha_["<<i<<
"] = " << alpha_[i]<<std::endl;
1705 Xyce::dout() <<
" sigma_["<<i<<
"] = " << sigma_[i]<<std::endl;
1706 Xyce::dout() <<
" gamma_["<<i<<
"] = " << gamma_[i]<<std::endl;
1707 Xyce::dout() <<
" beta_["<<i<<
"] = " << beta_[i]<<std::endl;
1708 Xyce::dout() <<
" psi_["<<i<<
"] = " << psi_[i]<<std::endl;
1711 Xyce::dout() << Xyce::section_divider << std::endl << std::endl << std::endl;
1717 comm->pack( &alphas_ , 1, buf, bsize, pos );
1718 comm->pack( &alpha0_ , 1, buf, bsize, pos );
1719 comm->pack( &cj_ , 1, buf, bsize, pos );
1720 comm->pack( &ck_ , 1, buf, bsize, pos );
1721 comm->pack( &usedStep_ , 1, buf, bsize, pos );
1722 comm->pack( &Ek_ , 1, buf, bsize, pos );
1723 comm->pack( &Ekm1_ , 1, buf, bsize, pos );
1724 comm->pack( &Ekm2_ , 1, buf, bsize, pos );
1725 comm->pack( &Ekp1_ , 1, buf, bsize, pos );
1726 comm->pack( &Est_ , 1, buf, bsize, pos );
1727 comm->pack( &Tk_ , 1, buf, bsize, pos );
1728 comm->pack( &Tkm1_ , 1, buf, bsize, pos );
1729 comm->pack( &Tkm2_ , 1, buf, bsize, pos );
1730 comm->pack( &Tkp1_ , 1, buf, bsize, pos );
1731 comm->pack( &h0_safety_ , 1, buf, bsize, pos );
1732 comm->pack( &h0_max_factor_ , 1, buf, bsize, pos );
1733 comm->pack( &h_phase0_incr_ , 1, buf, bsize, pos );
1734 comm->pack( &h_max_inv_ , 1, buf, bsize, pos );
1735 comm->pack( &Tkm1_Tk_safety_ , 1, buf, bsize, pos );
1736 comm->pack( &Tkp1_Tk_safety_ , 1, buf, bsize, pos );
1737 comm->pack( &r_factor_ , 1, buf, bsize, pos );
1738 comm->pack( &r_safety_ , 1, buf, bsize, pos );
1739 comm->pack( &r_fudge_ , 1, buf, bsize, pos );
1740 comm->pack( &r_min_ , 1, buf, bsize, pos );
1741 comm->pack( &r_max_ , 1, buf, bsize, pos );
1742 comm->pack( &r_hincr_test_ , 1, buf, bsize, pos );
1743 comm->pack( &r_hincr_ , 1, buf, bsize, pos );
1746 for (
int i=0;i<6;++i)
1748 comm->pack( &alpha_[i], 1, buf, bsize, pos );
1749 comm->pack( &sigma_[i], 1, buf, bsize, pos );
1750 comm->pack( &gamma_[i], 1, buf, bsize, pos );
1751 comm->pack( &beta_[i], 1, buf, bsize, pos );
1752 comm->pack( &psi_[i], 1, buf, bsize, pos );
1756 comm->pack ( ¤tOrder_, 1, buf, bsize, pos);
1757 comm->pack ( &oldOrder_, 1, buf, bsize, pos);
1758 comm->pack ( &maxOrder_, 1, buf, bsize, pos);
1759 comm->pack ( &minOrder_, 1, buf, bsize, pos);
1760 comm->pack ( &usedOrder_, 1, buf, bsize, pos);
1761 comm->pack ( &numberOfSteps_, 1, buf, bsize, pos);
1762 comm->pack ( &nef_, 1, buf, bsize, pos);
1763 comm->pack ( &nscsco_, 1, buf, bsize, pos);
1764 comm->pack ( &newOrder_, 1, buf, bsize, pos);
1765 comm->pack ( &max_LET_fail_, 1, buf, bsize, pos);
1768 int iP = (initialPhase_)?1:0;
1769 comm->pack ( &iP, 1, buf, bsize, pos);
1773 std::ostringstream ost;
1774 ost.width(24);ost.precision(16);ost.setf(std::ios::scientific);
1777 ost << alphas_ <<
" ";
1778 ost << alpha0_ <<
" ";
1781 ost << usedStep_ <<
" ";
1783 ost << Ekm1_ <<
" ";
1784 ost << Ekm2_ <<
" ";
1785 ost << Ekp1_ <<
" ";
1788 ost << Tkm1_ <<
" ";
1789 ost << Tkm2_ <<
" ";
1790 ost << Tkp1_ <<
" ";
1791 ost << h0_safety_ <<
" ";
1792 ost << h0_max_factor_ <<
" ";
1793 ost << h_phase0_incr_ <<
" ";
1794 ost << h_max_inv_ <<
" ";
1795 ost << Tkm1_Tk_safety_ <<
" ";
1796 ost << Tkp1_Tk_safety_ <<
" ";
1797 ost << r_factor_ <<
" ";
1798 ost << r_safety_ <<
" ";
1799 ost << r_fudge_ <<
" ";
1800 ost << r_min_ <<
" ";
1801 ost << r_max_ <<
" ";
1802 ost << r_hincr_test_ <<
" ";
1803 ost << r_hincr_ <<
" ";
1806 for (
int i=0;i<6;++i)
1808 ost << alpha_[i]<<
" " ;
1809 ost << sigma_[i]<<
" " ;
1810 ost << gamma_[i]<<
" " ;
1811 ost << beta_[i]<<
" " ;
1812 ost << psi_[i]<<
" " ;
1816 ost << currentOrder_ <<
" ";
1817 ost << oldOrder_ <<
" ";
1818 ost << maxOrder_ <<
" ";
1819 ost << minOrder_ <<
" ";
1820 ost << usedOrder_ <<
" ";
1821 ost << numberOfSteps_ <<
" ";
1823 ost << nscsco_ <<
" ";
1824 ost << newOrder_ <<
" ";
1825 ost << max_LET_fail_ <<
" ";
1828 int iP = (initialPhase_)?1:0;
1831 std::string data( ost.str() );
1832 for(
unsigned int i = 0; i < data.length(); ++i ) buf[pos+i] = data[i];
1835 buf[pos+data.length()] =
'\0';
1837 #ifdef Xyce_DEBUG_RESTART
1838 std::string outputString(buf);
1840 Xyce::dout() <<
"StepErrorControlDAE UNPACKED output buffer:" << std::endl;
1841 Xyce::dout() << outputString << std::endl;
1863 (
char * buf,
int bsize,
int & pos, N_PDS_Comm * comm,
bool pack)
1869 comm->unpack(buf, bsize, pos, &startingTimeStep, 1);
1870 comm->unpack(buf, bsize, pos, ¤tTimeStep, 1);
1871 comm->unpack(buf, bsize, pos, &lastAttemptedTimeStep, 1);
1872 comm->unpack(buf, bsize, pos, &lastTimeStep, 1);
1873 comm->unpack(buf, bsize, pos, &minTimeStep, 1);
1874 comm->unpack(buf, bsize, pos, &maxTimeStep, 1);
1875 comm->unpack(buf, bsize, pos, &maxTimeStepUser, 1);
1876 comm->unpack(buf, bsize, pos, &lastTime, 1);
1877 comm->unpack(buf, bsize, pos, ¤tTime, 1);
1878 comm->unpack(buf, bsize, pos, &nextTime, 1);
1879 comm->unpack(buf, bsize, pos, &initialTime, 1);
1880 comm->unpack(buf, bsize, pos, ¤tTimeStepRatio, 1);
1881 comm->unpack(buf, bsize, pos, ¤tTimeStepSum, 1);
1882 comm->unpack(buf, bsize, pos, &lastTimeStepRatio, 1);
1883 comm->unpack(buf, bsize, pos, &lastTimeStepSum, 1);
1884 comm->unpack(buf, bsize, pos, &newtonConvergenceStatus, 1);
1885 comm->unpack(buf, bsize, pos, &numberSuccessiveFailures, 1);
1887 comm->unpack(buf, bsize, pos, &flag, 1);
1888 stepAttemptStatus = flag;
1889 comm->unpack(buf, bsize, pos, &minStepPrecisionFac_, 1);
1890 comm->unpack(buf, bsize, pos, &newtonStepReduction_, 1);
1891 comm->unpack(buf, bsize, pos, &tolAimFac_, 1);
1892 comm->unpack(buf, bsize, pos, &estOverTol_, 1);
1894 double bpTol = 2.0 * minTimeStep;
1895 anaManager_.setBreakpointTol(bpTol);
1896 tiaParams_.initialTime=initialTime;
1897 tiaParams_.pauseTime=initialTime;
1898 std::set<N_UTL_BreakPoint> tmpSet = breakPoints_;
1899 breakPoints_.clear();
1900 std::set<N_UTL_BreakPoint>::iterator iterSD;
1901 std::set<N_UTL_BreakPoint>::iterator firstSD = tmpSet.begin();
1902 std::set<N_UTL_BreakPoint>::iterator lastSD = tmpSet.end();
1903 for (iterSD = firstSD; iterSD != lastSD; ++iterSD)
1905 if (iterSD->value() > currentTime)
1907 breakPoints_.insert(*iterSD);
1908 if (iterSD->bptype() == Xyce::Util::PAUSE_BREAKPOINT)
1909 updatePauseTime(*iterSD);
1916 N_UTL_BreakPoint TmpBP;
1917 comm->unpack(buf, bsize, pos, &size, 1);
1919 for (
int i = 0; i < size; ++i)
1921 comm->unpack(buf, bsize, pos, &val, 1);
1922 comm->unpack(buf, bsize, pos, &bptype, 1);
1923 if (val > currentTime)
1925 TmpBP.set(val,bptype);
1926 breakPoints_.insert(TmpBP);
1927 if (TmpBP.bptype() == Xyce::Util::PAUSE_BREAKPOINT)
1929 updatePauseTime(TmpBP);
1935 comm->unpack(buf, bsize, pos, &im, 1);
1936 anaManager_.setIntegrationMethod(im);
1937 comm->unpack(buf, bsize, pos, &im, 1);
1938 anaManager_.setStepNumber(im);
1939 comm->unpack(buf, bsize, pos, &im, 1);
1940 anaManager_.setTranStepNumber(im);
1941 comm->unpack(buf, bsize, pos, &im, 1);
1942 anaManager_.breakPointRestartStep = im;
1943 comm->unpack(buf, bsize, pos, &im, 1);
1944 anaManager_.setBeginningIntegrationFlag(im==1);
1948 std::string str1(buf);
1949 int length = str1.size() - pos;
1950 std::string str2(str1,pos,length);
1952 std::istringstream ist( str2 );
1967 ist >> startingTimeStep;
1968 ist >> currentTimeStep;
1969 ist >> lastAttemptedTimeStep;
1970 ist >> lastTimeStep;
1973 ist >> maxTimeStepUser;
1978 ist >> currentTimeStepRatio;
1979 ist >> currentTimeStepSum;
1980 ist >> lastTimeStepRatio;
1981 ist >> lastTimeStepSum;
1982 ist >> newtonConvergenceStatus;
1983 ist >> numberSuccessiveFailures;
1986 stepAttemptStatus = flag;
1987 ist >> minStepPrecisionFac_;
1988 ist >> newtonStepReduction_;
1992 double bpTol = 2.0 * minTimeStep;
1993 anaManager_.setBreakpointTol(bpTol);
1994 tiaParams_.initialTime=initialTime;
1995 tiaParams_.pauseTime=initialTime;
1997 std::set<N_UTL_BreakPoint> tmpSet = breakPoints_;
1998 breakPoints_.clear();
1999 std::set<N_UTL_BreakPoint>::iterator iterSD;
2000 std::set<N_UTL_BreakPoint>::iterator firstSD = tmpSet.begin();
2001 std::set<N_UTL_BreakPoint>::iterator lastSD = tmpSet.end();
2002 for (iterSD = firstSD; iterSD != lastSD; ++iterSD)
2004 if (iterSD->value() > currentTime)
2006 breakPoints_.insert(*iterSD);
2007 if (iterSD->bptype() == Xyce::Util::PAUSE_BREAKPOINT)
2008 updatePauseTime(*iterSD);
2015 N_UTL_BreakPoint TmpBP;
2018 for(
int i = 0; i < size; ++i )
2022 if (val > currentTime)
2024 TmpBP.set(val,bptype);
2025 breakPoints_.insert( TmpBP );
2026 if (TmpBP.bptype() == Xyce::Util::PAUSE_BREAKPOINT)
2028 updatePauseTime(TmpBP);
2035 anaManager_.setIntegrationMethod(tmpInt);
2037 anaManager_.setStepNumber(tmpInt);
2039 anaManager_.setTranStepNumber(tmpInt);
2041 anaManager_.breakPointRestartStep = tmpInt;
2043 anaManager_.setBeginningIntegrationFlag(tmpInt==1);
2048 #ifdef Xyce_DEBUG_RESTART
2049 std::string netListFile = commandLine_.getArgumentValue(
"netlist");
2050 Xyce::dout() <<
"TIA Restart Data RESTORE! " << netListFile <<
"\n";
2051 Xyce::dout() << Xyce::section_divider << std::endl;
2052 Xyce::dout() <<
"startingTimeStep: " << startingTimeStep << std::endl;
2053 Xyce::dout() <<
"currentTimeStep: " << currentTimeStep << std::endl;
2054 Xyce::dout() <<
"lastAttemptedTimeStep: " << lastAttemptedTimeStep << std::endl;
2055 Xyce::dout() <<
"lastTimeStep: " << lastTimeStep << std::endl;
2056 Xyce::dout() <<
"minTimeStep: " << minTimeStep << std::endl;
2057 Xyce::dout() <<
"maxTimeStep: " << maxTimeStep << std::endl;
2058 Xyce::dout() <<
"maxTimeStepUser: " << maxTimeStepUser << std::endl;
2059 Xyce::dout() <<
"lastTime: " << lastTime << std::endl;
2060 Xyce::dout() <<
"currentTime: " << currentTime << std::endl;
2061 Xyce::dout() <<
"nextTime: " << nextTime << std::endl;
2062 Xyce::dout() <<
"initialTime: " << initialTime << std::endl;
2063 Xyce::dout() <<
"estOverTol_: " << estOverTol_ << std::endl;
2064 Xyce::dout() <<
"breakpts: ";
2065 for (std::set<N_UTL_BreakPoint>::iterator iterSD = breakPoints_.begin();
2066 iterSD != breakPoints_.end(); ++iterSD)
2068 Xyce::dout() << iterSD->value() <<
" " << iterSD->bptype() << std::endl;
2070 Xyce::dout() << std::endl;
2071 Xyce::dout() <<
"integMethod: " << anaManager_.getIntegrationMethod() << std::endl;
2072 Xyce::dout() <<
"stepNumber: " << anaManager_.getStepNumber() << std::endl;
2073 Xyce::dout() <<
"tranStepNumber: " << anaManager_.getTranStepNumber() << std::endl;
2074 Xyce::dout() <<
"breakPointRestartStep: " << anaManager_.breakPointRestartStep <<
2076 Xyce::dout() << Xyce::section_divider << std::endl << std::endl;
2083 comm->unpack(buf, bsize, pos, &alphas_ , 1);
2084 comm->unpack(buf, bsize, pos, &alpha0_ , 1);
2085 comm->unpack(buf, bsize, pos, &cj_ , 1);
2086 comm->unpack(buf, bsize, pos, &ck_ , 1);
2087 comm->unpack(buf, bsize, pos, &usedStep_ , 1);
2088 comm->unpack(buf, bsize, pos, &Ek_ , 1);
2089 comm->unpack(buf, bsize, pos, &Ekm1_ , 1);
2090 comm->unpack(buf, bsize, pos, &Ekm2_ , 1);
2091 comm->unpack(buf, bsize, pos, &Ekp1_ , 1);
2092 comm->unpack(buf, bsize, pos, &Est_ , 1);
2093 comm->unpack(buf, bsize, pos, &Tk_ , 1);
2094 comm->unpack(buf, bsize, pos, &Tkm1_ , 1);
2095 comm->unpack(buf, bsize, pos, &Tkm2_ , 1);
2096 comm->unpack(buf, bsize, pos, &Tkp1_ , 1);
2097 comm->unpack(buf, bsize, pos, &h0_safety_ , 1);
2098 comm->unpack(buf, bsize, pos, &h0_max_factor_ , 1);
2099 comm->unpack(buf, bsize, pos, &h_phase0_incr_ , 1);
2100 comm->unpack(buf, bsize, pos, &h_max_inv_ , 1);
2101 comm->unpack(buf, bsize, pos, &Tkm1_Tk_safety_ , 1);
2102 comm->unpack(buf, bsize, pos, &Tkp1_Tk_safety_ , 1);
2103 comm->unpack(buf, bsize, pos, &r_factor_ , 1);
2104 comm->unpack(buf, bsize, pos, &r_safety_ , 1);
2105 comm->unpack(buf, bsize, pos, &r_fudge_ , 1);
2106 comm->unpack(buf, bsize, pos, &r_min_ , 1);
2107 comm->unpack(buf, bsize, pos, &r_max_ , 1);
2108 comm->unpack(buf, bsize, pos, &r_hincr_test_ , 1);
2109 comm->unpack(buf, bsize, pos, &r_hincr_ , 1);
2112 for (
int i=0;i<6;++i)
2114 comm->unpack(buf, bsize, pos, &alpha_[i], 1);
2115 comm->unpack(buf, bsize, pos, &sigma_[i], 1);
2116 comm->unpack(buf, bsize, pos, &gamma_[i], 1);
2117 comm->unpack(buf, bsize, pos, &beta_[i], 1);
2118 comm->unpack(buf, bsize, pos, &psi_[i], 1);
2122 comm->unpack(buf, bsize, pos, ¤tOrder_, 1);
2123 comm->unpack(buf, bsize, pos, &oldOrder_, 1);
2124 comm->unpack(buf, bsize, pos, &maxOrder_, 1);
2125 comm->unpack(buf, bsize, pos, &minOrder_, 1);
2126 comm->unpack(buf, bsize, pos, &usedOrder_, 1);
2127 comm->unpack(buf, bsize, pos, &numberOfSteps_, 1);
2128 comm->unpack(buf, bsize, pos, &nef_, 1);
2129 comm->unpack(buf, bsize, pos, &nscsco_, 1);
2130 comm->unpack(buf, bsize, pos, &newOrder_, 1);
2131 comm->unpack(buf, bsize, pos, &max_LET_fail_, 1);
2135 comm->unpack (buf, bsize, pos, &iP, 1);
2136 if (iP == 0) initialPhase_ =
false;
2137 else initialPhase_ =
true;
2143 std::string str1(buf);
2144 int length = str1.size() - pos;
2145 std::string str2(str1,pos,length);
2147 std::istringstream ist( str2 );
2168 ist >> h0_max_factor_;
2169 ist >> h_phase0_incr_;
2171 ist >> Tkm1_Tk_safety_;
2172 ist >> Tkp1_Tk_safety_;
2178 ist >> r_hincr_test_;
2182 for (
int i=0;i<6;++i)
2192 ist >> currentOrder_;
2197 ist >> numberOfSteps_;
2201 ist >> max_LET_fail_;
2206 if (iP == 0) initialPhase_ =
false;
2207 else initialPhase_ =
true;
2210 #ifdef Xyce_DEBUG_RESTART
2211 Xyce::dout() <<
"TIA Restart Data RESTORE (DAE)! " << netListFile <<
"\n";
2212 Xyce::dout() << Xyce::section_divider << std::endl<<std::endl;
2213 Xyce::dout() <<
"alphas_ = " <<alphas_<<std::endl;
2214 Xyce::dout() <<
"alpha0_ = " <<alpha0_<<std::endl;
2215 Xyce::dout() <<
"cj_ = " <<cj_<<std::endl;
2216 Xyce::dout() <<
"ck_ = " <<ck_<<std::endl;
2217 Xyce::dout() <<
"usedStep_ = " <<usedStep_<<std::endl;
2218 Xyce::dout() <<
"Ek_ = " <<Ek_<<std::endl;
2219 Xyce::dout() <<
"Ekm1_ = " <<Ekm1_<<std::endl;
2220 Xyce::dout() <<
"Ekm2_ = " <<Ekm2_<<std::endl;
2221 Xyce::dout() <<
"Ekp1_ = " <<Ekp1_<<std::endl;
2222 Xyce::dout() <<
"Est_ = " <<Est_<<std::endl;
2223 Xyce::dout() <<
"Tk_ = " <<Tk_<<std::endl;
2224 Xyce::dout() <<
"Tkm1_ = " <<Tkm1_<<std::endl;
2225 Xyce::dout() <<
"Tkm2_ = " <<Tkm2_<<std::endl;
2226 Xyce::dout() <<
"Tkp1_ = " <<Tkp1_<<std::endl;
2227 Xyce::dout() <<
"h0_safety_ = " <<h0_safety_<<std::endl;
2228 Xyce::dout() <<
"h0_max_factor_ = " <<h0_max_factor_<<std::endl;
2229 Xyce::dout() <<
"h_phase0_incr_ = " <<h_phase0_incr_<<std::endl;
2230 Xyce::dout() <<
"h_max_inv_ = " <<h_max_inv_<<std::endl;
2231 Xyce::dout() <<
"Tkm1_Tk_safety_ = " <<Tkm1_Tk_safety_<<std::endl;
2232 Xyce::dout() <<
"Tkp1_Tk_safety_ = " <<Tkp1_Tk_safety_<<std::endl;
2233 Xyce::dout() <<
"r_factor_ = " <<r_factor_<<std::endl;
2234 Xyce::dout() <<
"r_safety_ = " <<r_safety_<<std::endl;
2235 Xyce::dout() <<
"r_fudge_ = " <<r_fudge_<<std::endl;
2236 Xyce::dout() <<
"r_min_ = " <<r_min_<<std::endl;
2237 Xyce::dout() <<
"r_max_ = " <<r_max_<<std::endl;
2238 Xyce::dout() <<
"r_hincr_test_ = " <<r_hincr_test_<<std::endl;
2239 Xyce::dout() <<
"r_hincr_ = " <<r_hincr_<<std::endl;
2241 for (
int i=0;i<6;++i)
2243 Xyce::dout() <<
" alpha_["<<i<<
"] = " << alpha_[i]<<std::endl;
2244 Xyce::dout() <<
" sigma_["<<i<<
"] = " << sigma_[i]<<std::endl;
2245 Xyce::dout() <<
" gamma_["<<i<<
"] = " << gamma_[i]<<std::endl;
2246 Xyce::dout() <<
" beta_["<<i<<
"] = " << beta_[i]<<std::endl;
2247 Xyce::dout() <<
" psi_["<<i<<
"] = " << psi_[i]<<std::endl;
2250 Xyce::dout() << Xyce::section_divider << std::endl << std::endl << std::endl;
2299 Xyce::ios_flags_saver flagsave(os);
2301 os <<
" " << (Xyce::DEBUG_TIME ?
commandLine_.getArgumentValue(
"netlist") :
" ") <<
" "
2302 <<
"Current,Next,Step: "
2303 << std::setw(Xyce::DEBUG_TIME ? 14 : 16) << std::setprecision(Xyce::DEBUG_TIME ? 7 : 9)
2320 os <<
"\n\n-----------------------------------------" << std::endl
2321 <<
"\tStepErrorControl:\n"
2325 <<
"\t\tlastTimeStep = " << sec.
lastTimeStep << std::endl
2326 <<
"\t\tminTimeStep = " << sec.
minTimeStep << std::endl
2327 <<
"\t\tmaxTimeStep = " << sec.
maxTimeStep << std::endl
2329 <<
"\t\tlastTime = " << sec.
lastTime << std::endl
2330 <<
"\t\tcurrentTime = " << sec.
currentTime << std::endl
2331 <<
"\t\tnextTime = " << sec.
nextTime << std::endl
2332 <<
"\t\tstopTime = " << sec.
stopTime << std::endl
2333 <<
"\t\tinitialTime = " << sec.
initialTime << std::endl
2334 <<
"\t\tfinalTime = " << sec.
finalTime << std::endl
2336 <<
"\t\tBreak Points:" << std::endl;
2341 os << Xyce::section_divider << std::endl;