40 #include <Xyce_config.h>
51 #include <N_LOA_Loader.h>
52 #include <N_LAS_Matrix.h>
53 #include <N_LAS_System.h>
54 #include <N_MPDE_Manager.h>
55 #include <N_IO_OutputMgr.h>
57 #include <N_UTL_Timer.h>
58 #include <N_UTL_LogStream.h>
60 #include <N_IO_CmdParse.h>
64 #include <N_UTL_Misc.h>
65 #include <N_LAS_MultiVector.h>
66 #include <N_LAS_BlockMatrix.h>
67 #include <N_LAS_BlockVector.h>
68 #include <N_LAS_BlockSystemHelpers.h>
70 #include <N_PDS_ParMap.h>
71 #ifdef Xyce_PARALLEL_MPI
72 #include <N_PDS_ParComm.h>
75 #include <N_PDS_SerialComm.h>
78 #include <Epetra_SerialComm.h>
79 #include <Epetra_Map.h>
80 #include <Epetra_BlockMap.h>
81 #include <Epetra_CrsMatrix.h>
82 #include <Epetra_CrsGraph.h>
83 #include <Epetra_MultiVector.h>
84 #include <Epetra_Vector.h>
85 #include <Epetra_Export.h>
86 #include <Epetra_LinearProblem.h>
89 #include<N_UTL_ExpressionData.h>
149 std::list<N_UTL_Param>::const_iterator it_tp;
150 std::list<N_UTL_Param>::const_iterator first = paramsBlock.getParams().begin();
151 std::list<N_UTL_Param>::const_iterator last = paramsBlock.getParams().end();
152 for (it_tp = first; it_tp != last; ++it_tp)
154 if (it_tp->uTag() ==
"TYPE")
159 else if (it_tp->uTag() ==
"NP")
163 else if (it_tp->uTag() ==
"FSTART")
167 else if (it_tp->uTag() ==
"FSTOP")
176 dout() << section_divider << std::endl
177 <<
"AC simulation parameters"
180 <<
"number of points = " <<
tiaParams.
np << std::endl
200 bool bsuccess =
true;
202 bsuccess = bsuccess &
init();
209 bsuccess = bsuccess &
finish();
225 bool bsuccess =
true;
265 if (
secRCPtr_->newtonConvergenceStatus <= 0)
268 "Solving for DC operating point failed! Cannot continue AC analysis.";
269 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
305 bool bsuccess =
true;
360 Xyce::dout() <<
"dQdxMatrixPtr:" << std::endl;
361 anaManagerRCPtr_->getTIADataStore()->dQdxMatrixPtr->printPetraObject( Xyce::dout() );
363 Xyce::dout() <<
"dFdxMatrixPtr:" << std::endl;
364 anaManagerRCPtr_->getTIADataStore()->dFdxMatrixPtr->printPetraObject( Xyce::dout() );
366 Xyce::dout() << std::endl;
374 bool stepAttemptStatus;
376 while (currentStep < finalStep)
386 if (stepAttemptStatus)
412 bool bsuccess =
true;
414 RCP<N_PDS_Manager> pdsMgrPtr_;
417 RCP<N_PDS_ParMap> baseMap;
418 RCP<Epetra_CrsGraph> BaseFullGraph_;
420 baseMap = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
421 BaseFullGraph_ = rcp( pdsMgrPtr_->getMatrixGraph(
"JACOBIAN"), false );
425 RCP<N_PDS_ParMap> blockMap = createBlockParMap(numBlocks, *baseMap);
428 BPtr_ = rcp (
new N_LAS_BlockVector ( numBlocks, blockMap, baseMap ) );
434 std::vector<std::vector<int> > blockPattern(2);
435 blockPattern[0].resize(2);
436 blockPattern[0][0] = 0; blockPattern[0][1] = 1;
437 blockPattern[1].resize(2);
438 blockPattern[1][0] = 0; blockPattern[1][1] = 1;
440 int offset = generateOffset( *baseMap );
442 RCP<Epetra_CrsGraph> blockGraph = createBlockGraph( offset, blockPattern, *blockMap, *BaseFullGraph_);
444 ACMatrixPtr_ = rcp (
new N_LAS_BlockMatrix( numBlocks, offset, blockPattern, *blockGraph, *BaseFullGraph_) );
452 BPtr_->putScalar( 0.0 );
456 Amesos amesosFactory;
458 XPtr_ = rcp (
new N_LAS_BlockVector (numBlocks, blockMap, baseMap) );
459 XPtr_->putScalar( 0.0 );
466 Teuchos::ParameterList params;
467 params.set(
"Reindex",
true );
471 int linearStatus =
blockSolver->SymbolicFactorization();
473 if (linearStatus != 0)
475 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
524 bool bsuccess =
true;
527 int linearStatus =
blockSolver->NumericFactorization();
529 if (linearStatus != 0)
531 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus;
536 if (linearStatus != 0)
538 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus;
578 bool bsuccess =
true;
609 bool bsuccess =
true;
614 secRCPtr_->numberSuccessiveFailures += 1;
629 bool bsuccess =
true;
631 #ifdef Xyce_DEBUG_ANALYSIS
632 Xyce::dout() <<
"Calling AC::finish() outputs!" << std::endl;
693 "AC::updateCurrentFreq_: unsupported STEP type";
694 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
700 Xyce::dout() <<
"currentFreq_ = " <<
currentFreq_ << std::endl;
716 double fstart, fstop;
722 #ifdef Xyce_DEBUG_ANALYSIS
725 Xyce::dout() << std::endl << std::endl;
726 Xyce::dout() << section_divider << std::endl;
727 Xyce::dout() <<
"AC::setupSweepParam_" << std::endl;
741 #ifdef Xyce_DEBUG_ANALYSIS
744 Xyce::dout() <<
"fstep = " <<
fstep_ << std::endl;
751 fcount = floor(fabs(log10(fstart) - log10(fstop)) *
tiaParams.
np + 1);
752 #ifdef Xyce_DEBUG_ANALYSIS
755 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
767 fcount = floor(fabs(log(fstart) - log(fstop))/ln2 *
tiaParams.
np + 1);
768 #ifdef Xyce_DEBUG_ANALYSIS
771 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
778 "AC::setupSweepParam: unsupported type";
779 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL_0, msg);
785 return static_cast<int> (fcount);