39 #include <Xyce_config.h>
49 #include <N_LOA_Loader.h>
50 #include <N_LAS_Matrix.h>
51 #include <N_LAS_System.h>
52 #include <N_IO_CmdParse.h>
54 #include <N_UTL_Timer.h>
55 #include <N_UTL_ExpressionData.h>
58 #include <N_UTL_Misc.h>
59 #include <N_LAS_MultiVector.h>
60 #include <N_LAS_BlockMatrix.h>
61 #include <N_LAS_BlockVector.h>
62 #include <N_LAS_BlockSystemHelpers.h>
66 #include <N_LAS_MOROperators.h>
68 #include <N_PDS_ParMap.h>
69 #include <N_PDS_Comm.h>
71 #ifdef Xyce_PARALLEL_MPI
72 #include <N_PDS_ParComm.h>
75 #include <N_PDS_SerialComm.h>
80 #include <Epetra_CrsMatrix.h>
81 #include <Epetra_Operator.h>
82 #include <Epetra_CrsGraph.h>
83 #include <Epetra_MultiVector.h>
84 #include <Epetra_LinearProblem.h>
88 #include <BelosLinearProblem.hpp>
89 #include <BelosBlockGmresIter.hpp>
90 #include <BelosDGKSOrthoManager.hpp>
91 #include <BelosStatusTestMaxIters.hpp>
92 #include <BelosOutputManager.hpp>
93 #include <BelosEpetraAdapter.hpp>
96 #include <Teuchos_SerialDenseMatrix.hpp>
97 #include <Teuchos_ScalarTraits.hpp>
98 #include <Teuchos_LAPACK.hpp>
99 #include <Teuchos_BLAS.hpp>
146 std::list<N_UTL_Param>::const_iterator it_tp;
147 std::list<N_UTL_Param>::const_iterator first = paramsBlock.getParams().begin();
148 std::list<N_UTL_Param>::const_iterator last = paramsBlock.getParams().end();
149 for (it_tp = first; it_tp != last; ++it_tp)
151 if (it_tp->uTag() ==
"SIZE")
155 else if (it_tp->uTag() ==
"PORTLIST")
157 portList_ = it_tp->getValue<std::vector<std::string> >();
162 #ifdef Xyce_DEBUG_ANALYSIS
166 << section_divider << std::endl
167 <<
" MOR simulation parameters" << std::endl
185 bool bsuccess =
true;
187 bsuccess = bsuccess &
init();
210 bsuccess = bsuccess &
finish();
226 bool bsuccess =
true;
274 if (
secRCPtr_->newtonConvergenceStatus <= 0)
277 "Solving for DC operating point failed! Cannot continue MOR analysis.";
278 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
282 std::vector<int> tempVec;
289 int hsize = tempVec.size();
290 N_PDS_Comm * pdsComm = (
lasSystemRCPtr_->getPDSManager())->getPDSComm();
291 pdsComm->sumAll( &hsize, &
numPorts_, 1 );
297 "Number of specified ports in .MOR line is inconsistent with number of voltage sources.";
298 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
303 std::vector<int> gidPosEntries( hsize );
304 for (
int i=0; i<hsize; ++i)
306 std::list<int> svGIDList1, dummyList;
311 gidPosEntries[i] = svGIDList1.front();
316 RCP<N_PDS_Manager> pdsMgrPtr_ = rcp(
lasSystemRCPtr_->getPDSManager(),
false);
317 RCP<N_PDS_ParMap> BaseMap_ = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
321 for (
int i=0; i<hsize; ++i)
323 int gid = gidPosEntries[i];
325 for (
int j=0; j<hsize; ++j)
336 "Did not find voltage source corresponding to port.";
337 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
412 int length=1, numEntries=0;
413 std::vector<int> colIndices(length);
414 std::vector<double> coeffs(length);
420 if ( numEntries != 1 )
423 "Supposed voltage source row has too many entries! Cannot continue MOR analysis.";
424 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
428 GPtr_->getLocalRowCopy(
bMatEntriesVec_[i], length, numEntries, &coeffs[0], &colIndices[0]);
431 if ( coeffs[0] > 0.0 )
434 GPtr_->putLocalRow(
bMatEntriesVec_[i], length, &coeffs[0], &colIndices[0]);
459 bool bsuccess =
true;
462 RCP<N_PDS_Manager> pdsMgrPtr_;
465 RCP<N_PDS_ParMap> BaseMap_;
466 BaseMap_ = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
483 RPtr_->putScalar( 0.0 );
500 Amesos amesosFactory;
505 int linearStatus =
origSolver_->SymbolicFactorization();
506 if (linearStatus != 0)
508 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus << std::endl;
513 linearStatus =
origSolver_->NumericFactorization();
514 if (linearStatus != 0)
516 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus << std::endl;
522 if (linearStatus != 0)
524 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus << std::endl;
532 RCP<Epetra_Operator> COpPtr_ = rcp( &
CPtr_->epetraObj(), false );
533 RCP<N_LAS_AmesosGenOp> AOp = rcp(
new N_LAS_AmesosGenOp(
origSolver_, COpPtr_ ) );
541 UserWarning(*
this) <<
"Requested reduced-order model dimension is larger than original system dimension, resizing to original system dimension";
552 redB_.shape(k, numPorts_);
553 redL_.shape(k, numPorts_);
562 typedef Epetra_MultiVector MV;
563 typedef Epetra_Operator OP;
564 typedef Belos::MultiVecTraits<ST,MV> MVT;
567 Belos::OutputManager<ST> printer;
570 Belos::StatusTestMaxIters<ST, MV, OP> maxIterTest( kblock );
573 Belos::DGKSOrthoManager<ST, MV, OP> orthoMgr;
577 N_LAS_MultiVector temp( *BaseMap_, numPorts_ );
578 Belos::LinearProblem<ST, MV, OP > problem( AOp,
579 rcp( &temp.epetraObj(), false ),
580 rcp( &
RPtr_->epetraObj(), false ));
581 problem.setProblem();
584 Teuchos::ParameterList params;
585 params.set(
"Num Blocks", kblock);
586 params.set(
"Block Size", numPorts_ );
589 Belos::BlockGmresIter<ST, MV, OP> krylovIter( rcp( &problem,
false ),
590 rcp( &printer,
false ),
591 rcp( &maxIterTest,
false ),
592 rcp( &orthoMgr,
false ),
596 RCP<Teuchos::SerialDenseMatrix<int,ST> > z
597 = rcp(
new Teuchos::SerialDenseMatrix<int,ST>( numPorts_, numPorts_ ) );
600 RCP<MV> V = rcp(
new Epetra_MultiVector(
RPtr_->epetraObj() ) );
601 orthoMgr.normalize( *V, z );
604 Belos::GmresIterationState<ST,MV> initState;
607 initState.curDim = 0;
608 krylovIter.initializeGmres(initState);
612 krylovIter.iterate();
614 catch (
const Belos::GmresIterationOrthoFailure &e) {
617 catch (
const std::exception &e) {
622 Belos::GmresIterationState<ST,MV> newState = krylovIter.getState();
625 std::vector<int> indices( k );
626 for (
int i=0; i<k; ++i) { indices[i] = i; }
627 V = rcp(
new Epetra_MultiVector( View, *newState.V, &indices[0], k ) );
629 RCP<MV>
W = rcp(
new Epetra_MultiVector( V->Map(), k ) );
642 N_LAS_MultiVector xyceV( &*V,
false );
643 N_LAS_MultiVector temp2( *BaseMap_, k );
646 GPtr_->matvec(
false, xyceV, temp2 );
648 MVT::MvTransMv( 1.0, xyceV.epetraObj(), temp2.epetraObj(),
redG_ );
652 CPtr_->matvec(
false, xyceV, temp2 );
654 MVT::MvTransMv( 1.0, xyceV.epetraObj(), temp2.epetraObj(),
redC_ );
658 MVT::MvTransMv( 1.0, xyceV.epetraObj(),
BPtr_->epetraObj(),
redB_ );
669 Teuchos::SerialDenseMatrix<int,ST> Xhatscale( k, 1 );
673 if ( scaleType == 1 )
675 for (
int i=0; i<k; ++i)
686 if ( scaleType == 2 || scaleType == 3 || scaleType ==4)
688 Epetra_MultiVector Xmag( V->Map(), 1 );
690 if ( scaleType == 2 )
696 MVT::MvTransMv( 1.0, *V, Xmag, Xhatscale );
699 for (
int i=0; i<k; ++i)
702 if ( scaleType == 2 )
714 if ( scaleType == 3 )
717 if ( scaleType == 4 )
719 if ( fabs(Xhatscale( i, 0 )) > 1.0 )
736 Teuchos::SerialDenseMatrix<int,ST> D(k,k);
737 if ( scaleType != 0 )
739 RCP<MV> Vtemp = rcp(
new Epetra_MultiVector( V->Map(), k ) );
741 for (
int i=0; i<k; ++i)
743 if (Xhatscale( i, 0 ) != 0.0)
744 D(i,i) = 1.0/Xhatscale( i, 0 );
748 Xyce::dout() <<
" the scaling matrix " << std::endl;
752 MVT::MvTimesMatAddMv( 1.0, *V, D, 0.0, *Vtemp );
765 N_LAS_MultiVector xyceV( &*V,
false );
766 N_LAS_MultiVector xyceW( &*W,
false );
767 N_LAS_MultiVector temp2( *BaseMap_, k );
776 GPtr_->matvec(
false, xyceV, temp2 );
778 MVT::MvTransMv( 1.0, xyceW.epetraObj(), temp2.epetraObj(),
redG_ );
782 CPtr_->matvec(
false, xyceV, temp2 );
784 MVT::MvTransMv( 1.0, xyceW.epetraObj(), temp2.epetraObj(),
redC_ );
788 MVT::MvTransMv( 1.0, xyceW.epetraObj(),
BPtr_->epetraObj(),
redB_ );
791 MVT::MvTransMv( 1.0, xyceV.epetraObj(),
BPtr_->epetraObj(),
redL_ );
805 if ( scaleType <= 1 )
819 "MOR::reduceSystem: MOR options sparsificationType=1 can only be used with scaletype=1. Other scale types have not been supported for sparsification!";
820 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
868 "Belos is necessary to compute a reduced-order model! Please recompile Xyce with Belos enabled!";
869 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
886 bool bsuccess =
true;
893 bool stepAttemptStatus;
895 while (currentStep < finalStep)
905 if (stepAttemptStatus)
929 bool bsuccess =
true;
936 bool stepAttemptStatus;
938 while (currentStep < finalStep)
948 if (stepAttemptStatus)
971 bool bsuccess =
true;
973 RCP<N_PDS_Manager> pdsMgrPtr_;
976 RCP<N_PDS_ParMap> BaseMap_, oBaseMap_;
977 RCP<Epetra_CrsGraph> BaseFullGraph_;
979 BaseMap_ = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
980 oBaseMap_ = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION_OVERLAP_GND"),
false);
981 BaseFullGraph_ = rcp( pdsMgrPtr_->getMatrixGraph(
"JACOBIAN"), false );
985 std::vector<RCP<N_PDS_ParMap> > blockMaps = createBlockParMaps(numBlocks, *BaseMap_, *oBaseMap_);
988 REFBPtr_ = rcp (
new N_LAS_BlockVector ( numBlocks, blockMaps[0], BaseMap_ ) );
990 std::vector<std::vector<int> > blockPattern(2);
991 blockPattern[0].resize(2);
992 blockPattern[0][0] = 0; blockPattern[0][1] = 1;
993 blockPattern[1].resize(2);
994 blockPattern[1][0] = 0; blockPattern[1][1] = 1;
996 int MaxGID = BaseMap_->maxGlobalEntity();
998 while ( offset <= MaxGID ) offset *= 10;
1000 RCP<Epetra_CrsGraph> blockGraph = createBlockGraph( offset, blockPattern, *blockMaps[0], *BaseFullGraph_);
1002 sCpG_REFMatrixPtr_ = rcp (
new N_LAS_BlockMatrix( numBlocks, offset, blockPattern, *blockGraph, *BaseFullGraph_) );
1020 Amesos amesosFactory;
1022 REFXPtr_ = rcp (
new N_LAS_BlockVector ( numBlocks, blockMaps[0], BaseMap_ ) );
1029 int linearStatus =
blockSolver_->SymbolicFactorization();
1031 if (linearStatus != 0)
1033 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
1052 int k =
redG_.numRows();
1061 Teuchos::SerialDenseMatrix<int, double> subMtx( Teuchos::View,
sCpG_tmpMatrix_, k, k, 0, 0 );
1062 subMtx.assign(
redC_ );
1063 subMtx.scale( -
s0_ );
1067 Teuchos::SerialDenseMatrix<int, double> subMtx2( Teuchos::View,
sCpG_tmpMatrix_, k, k, k, k );
1068 subMtx2.assign(
redC_ );
1069 subMtx2.scale( -
s0_ );
1110 int k =
redG_.numRows();
1118 Teuchos::SerialDenseMatrix<int, double> subMtx( Teuchos::View,
sCpG_redMatrix_, k, k, 0, k );
1119 subMtx.assign(
redC_ );
1120 subMtx.scale( -omega );
1122 Teuchos::SerialDenseMatrix<int, double> subMtx2( Teuchos::View,
sCpG_redMatrix_, k, k, k, 0 );
1123 subMtx2.assign(
redC_ );
1124 subMtx2.scale( omega );
1141 bool bsuccess =
true;
1144 int linearStatus =
blockSolver_->NumericFactorization();
1146 if (linearStatus != 0)
1148 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus;
1159 if (linearStatus != 0)
1161 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus;
1189 bool bsuccess =
true;
1191 int k =
redG_.numRows();
1193 Teuchos::LAPACK<int, double> lapack;
1196 Teuchos::SerialDenseMatrix<int, double> tmpRedB( Teuchos::View,
ref_redB_,
redB_.numRows(),
redB_.numCols(), 0, 0 );
1197 tmpRedB.assign(
redB_ );
1206 Xyce::dout() <<
"LAPACK::GETRF: LU factorization failed with error: " << info << std::endl;
1211 const char trans =
'N';
1216 Xyce::dout() <<
"LAPACK::GETRS: LU solve failed with error: " << info << std::endl;
1220 Teuchos::SerialDenseMatrix<int, double> tmpRedImag( numPorts, numPorts ), tmpRedReal( numPorts, numPorts );
1223 tmpRedReal.multiply( Teuchos::TRANS, Teuchos::NO_TRANS, 1.0,
redB_, tmpRedB, 0.0 );
1226 Teuchos::SerialDenseMatrix<int, double> tmpRedB2( Teuchos::View,
ref_redB_,
redB_.numRows(),
redB_.numCols(), k, 0 );
1227 tmpRedImag.multiply( Teuchos::TRANS, Teuchos::NO_TRANS, 1.0,
redB_, tmpRedB2, 0.0 );
1234 redH_(i,j) = std::complex<double>(tmpRedReal(i,j), tmpRedImag(i,j));
1251 bool bsuccess =
true;
1253 int k =
redB_.numRows();
1256 Teuchos::SerialDenseMatrix<int, double> R(
redB_);
1257 Teuchos::SerialDenseMatrix<int, double> A(
redC_);
1260 Teuchos::LAPACK<int, double> lapack;
1261 Teuchos::SerialDenseMatrix<int, double> tmp_Ghat(
redG_ );
1264 std::vector<int> ipiv( tmp_Ghat.numRows() );
1265 lapack.GETRF( tmp_Ghat.numRows(), tmp_Ghat.numCols(), tmp_Ghat.values(),
1266 tmp_Ghat.stride(), &ipiv[0], &
info );
1269 Xyce::dout() <<
"LAPACK::GETRF: LU factorization of Ghat failed with error: " << info << std::endl;
1274 const char norm =
'1';
1275 double condGhat = 0.0;
1276 std::vector<double> condWork( 4*k );
1277 std::vector<int> condIWork( k );
1278 lapack.GECON( norm, tmp_Ghat.numRows(), tmp_Ghat.values(), tmp_Ghat.stride(), tmp_Ghat.normOne(), &condGhat, &condWork[0], &condIWork[0], &
info );
1282 Xyce::dout() <<
"LAPACK::GECON: Computing condition estimate of Ghat failed with error: " << info << std::endl;
1287 const char trans =
'N';
1288 lapack.GETRS( trans, tmp_Ghat.numRows(), A.numCols(), tmp_Ghat.values(),
1289 tmp_Ghat.stride(), &ipiv[0], A.values(), A.stride(), &
info );
1292 Xyce::dout() <<
"LAPACK::GETRS: LU solve failed with error: " << info << std::endl;
1299 lapack.GETRS( trans, tmp_Ghat.numRows(), R.numCols(), tmp_Ghat.values(),
1300 tmp_Ghat.stride(), &ipiv[0], R.values(), R.stride(), &
info );
1303 Xyce::dout() <<
"LAPACK::GETRS: LU solve failed with error: " << info << std::endl;
1316 std::vector<double> work( lwork );
1317 std::vector<double> revals( k );
1318 std::vector<double> ievals( k );
1319 Teuchos::SerialDenseMatrix<int, double> Q(k, k);
1324 std::vector<double> beta( k );
1325 Teuchos::SerialDenseMatrix<int, double> tmpB( k, k );
1326 for (
int i=0; i<k; i++)
1328 lapack.GGEV(
'N',
'V', k, A.values(), A.stride(), tmpB.values(), tmpB.stride(),
1329 &revals[0], &ievals[0], &beta[0], &vl[0], ldvl, Q.values(), Q.stride(),
1330 &work[0], lwork, &
info );
1333 Xyce::dout() <<
"LAPACK::GGEV: Computing eigenvectors and values of A = inv(Ghat)*Chat failed with error: " << info << std::endl;
1339 Teuchos::BLAS<int, double> blas;
1340 std::vector<int> rowIndex( k );
1344 if ( ievals[i] != 0.0 )
1350 double norm_r = blas.NRM2( k, Q[i], 1 );
1351 double norm_i = blas.NRM2( k, Q[i+1], 1 );
1352 double norm = lapack.LAPY2( norm_r, norm_i );
1355 for (
int j=0; j<k; j++)
1367 double norm = blas.NRM2( k, Q[i], 1 );
1370 for (
int j=0; j<k; j++)
1386 Teuchos::SerialDenseMatrix<int, std::complex<double> > V(k, k);
1387 for (
int i=0; i<k; i++)
1389 if (rowIndex[i] == 1)
1391 for (
int j=0; j<k; j++)
1394 V(j,i) = std::complex<double>( Q(j,i), Q(j,i+1) );
1395 V(j,i+1) = std::complex<double>( Q(j,i), -Q(j,i+1) );
1401 for (
int j=0; j<k; j++)
1403 V(j,i) = std::complex<double>( Q(j,i), 0.0 );
1409 Teuchos::LAPACK<int, std::complex<double> > lapack_complex;
1410 lapack_complex.GETRF( V.numRows(), V.numCols(), V.values(), V.stride(), &ipiv[0], &
info );
1413 Xyce::dout() <<
"LAPACK::GETRF: LU factorization of eigenvectors failed with error: " << info << std::endl;
1419 std::vector<std::complex<double> > condCWork( 2*k );
1420 lapack_complex.GECON( norm, V.numRows(), V.values(), V.stride(), V.normOne(), &condV, &condCWork[0], &condWork[0], &
info );
1424 Xyce::dout() <<
"LAPACK::GECON: Computing condition estimate of V failed with error: " << info << std::endl;
1429 std::vector<std::complex<double> > cwork( lwork );
1430 lapack_complex.GETRI( V.numRows(), V.values(), V.stride(), &ipiv[0], &cwork[0], lwork, &
info );
1433 Xyce::dout() <<
"LAPACK::GETRI: Computing inverse of V failed with error: " << info << std::endl;
1438 Teuchos::SerialDenseMatrix<int, std::complex<double> > tmpR( k,
numPorts_ );
1440 for (
int i=0; i<k; i++)
1441 tmpR(i,j) = std::complex<double>( R(i,j), 0.0 );
1444 Teuchos::SerialDenseMatrix<int, std::complex<double> > tmp_redB(k ,numPorts_);
1445 tmp_redB.multiply(Teuchos::NO_TRANS, Teuchos::NO_TRANS, 1.0, V, tmpR, 0.0);
1449 Teuchos::SerialDenseMatrix<int, double> invV(k, k);
1450 for (
int i=0; i<k; i++)
1452 if (rowIndex[i] == 1)
1454 for (
int j=0; j<k; j++)
1456 invV(i, j) = V(i,j).real();
1457 invV(i+1, j) = V(i,j).imag();
1461 redB_(i, j) = tmp_redB(i, j).real();
1462 redB_(i+1, j) = tmp_redB(i, j).imag();
1468 for (
int j=0; j<k; j++)
1469 invV(i, j) = V(i,j).real();
1471 redB_(i, j) = tmp_redB(i, j).real();
1476 lapack.GETRF( invV.numRows(), invV.numCols(), invV.values(), invV.stride(), &ipiv[0], &
info );
1479 Xyce::dout() <<
"LAPACK::GETRF: LU factorization of inv(V) failed with error: " << info << std::endl;
1484 const char trans2 =
'T';
1485 lapack.GETRS( trans2, invV.numRows(),
redL_.numCols(), invV.values(),
1486 invV.stride(), &ipiv[0],
redL_.values(),
redL_.stride(), &
info );
1489 Xyce::dout() <<
"LAPACK::GETRS: LU solve for Lhat failed with error: " << info << std::endl;
1500 RCP<N_PDS_Manager> pdsMgrPtr_ = Teuchos::rcp(
lasSystemRCPtr_->getPDSManager(),
false);
1501 RCP<N_PDS_ParMap> BaseMap_ = Teuchos::rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
1502 RCP<Epetra_Map> serialRedMap;
1503 if (BaseMap_->petraMap()->Comm().MyPID() == 0)
1504 serialRedMap = Teuchos::rcp(
new Epetra_Map( k, k, 0, BaseMap_->petraMap()->Comm() ) );
1506 serialRedMap = Teuchos::rcp(
new Epetra_Map( k, 0, 0, BaseMap_->petraMap()->Comm() ) );
1508 Epetra_CrsMatrix* tmpRedG =
new Epetra_CrsMatrix( Copy, *serialRedMap, 1 );
1509 Epetra_CrsMatrix* tmpRedC =
new Epetra_CrsMatrix( Copy, *serialRedMap, 2 );
1512 if (BaseMap_->petraMap()->Comm().MyPID() == 0)
1514 std::vector<int> index(2);
1515 std::vector<double> val(2);
1516 for (
int i=0; i<k; i++)
1519 index[0] = i; val[0] = 1.0;
1520 tmpRedG->InsertGlobalValues( i, 1, &val[0], &index[0] );
1523 if (rowIndex[i] == 1)
1525 index[0] = i; index[1] = i+1;
1526 val[0] = revals[i]; val[1] = -ievals[i];
1527 tmpRedC->InsertGlobalValues( i, 2, &val[0], &index[0] );
1529 else if (rowIndex[i] == -1)
1531 index[0] = i-1; index[1] = i;
1532 val[0] = ievals[i-1]; val[1] = revals[i-1];
1533 tmpRedC->InsertGlobalValues( i, 2, &val[0], &index[0] );
1537 index[0] = i; val[0] = revals[i];
1538 tmpRedC->InsertGlobalValues( i, 1, &val[0], &index[0] );
1543 tmpRedC->FillComplete();
1544 tmpRedG->FillComplete();
1547 redGPtr_ = rcp(
new N_LAS_Matrix( tmpRedG ) );
1548 redCPtr_ = rcp(
new N_LAS_Matrix( tmpRedC ) );
1563 bool bsuccess =
true;
1596 bool bsuccess =
true;
1601 secRCPtr_->numberSuccessiveFailures += 1;
1616 bool bsuccess =
true;
1618 #ifdef Xyce_DEBUG_ANALYSIS
1619 Xyce::dout() <<
"Calling MOR::finish() outputs!" << std::endl;
1675 "MOR::updateCurrentFreq_: unsupported STEP type";
1676 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
1696 #ifdef Xyce_DEBUG_ANALYSIS
1699 Xyce::dout() << std::endl << std::endl;
1700 Xyce::dout() << section_divider << std::endl;
1701 Xyce::dout() <<
"MOR::setupSweepParam_" << std::endl;
1713 #ifdef Xyce_DEBUG_ANALYSIS
1716 Xyce::dout() <<
"fStep = " <<
fStep_ << std::endl;
1724 #ifdef Xyce_DEBUG_ANALYSIS
1727 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
1738 double ln2=log(2.0);
1740 #ifdef Xyce_DEBUG_ANALYSIS
1743 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
1750 "MOR::setupSweepParam: unsupported type";
1751 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);