40 #include <Xyce_config.h>
47 #include <N_IO_CmdParse.h>
48 #include <N_IO_OutputMgr.h>
49 #include <N_LAS_BlockMatrix.h>
50 #include <N_LAS_BlockSystemHelpers.h>
51 #include <N_LAS_BlockVector.h>
52 #include <N_LAS_Builder.h>
53 #include <N_LAS_Matrix.h>
54 #include <N_LAS_MultiVector.h>
55 #include <N_LAS_System.h>
56 #include <N_LOA_Loader.h>
57 #include <N_MPDE_Manager.h>
61 #include <N_UTL_LogStream.h>
62 #include <N_UTL_Misc.h>
63 #include <N_UTL_Timer.h>
65 #include <N_PDS_ParMap.h>
66 #ifdef Xyce_PARALLEL_MPI
67 #include <N_PDS_ParComm.h>
70 #include <N_PDS_SerialComm.h>
73 #include <Epetra_SerialComm.h>
74 #include <Epetra_Map.h>
75 #include <Epetra_BlockMap.h>
76 #include <Epetra_CrsMatrix.h>
77 #include <Epetra_CrsGraph.h>
78 #include <Epetra_MultiVector.h>
79 #include <Epetra_Vector.h>
80 #include <Epetra_Export.h>
81 #include <Epetra_LinearProblem.h>
84 #include<N_UTL_ExpressionData.h>
100 Util::ListenerAutoSubscribe<
StepEvent>(&analysis_manager),
155 Util::ParameterList::const_iterator it_tp;
156 Util::ParameterList::const_iterator first = paramsBlock.getParams().begin();
157 Util::ParameterList::const_iterator last = paramsBlock.getParams().end();
158 for (it_tp = first; it_tp != last; ++it_tp)
160 if (it_tp->uTag() ==
"TYPE")
165 else if (it_tp->uTag() ==
"NP")
169 else if (it_tp->uTag() ==
"FSTART")
173 else if (it_tp->uTag() ==
"FSTOP")
182 dout() << section_divider << std::endl
183 <<
"AC simulation parameters"
219 bool bsuccess =
true;
221 bsuccess = bsuccess &
init();
228 bsuccess = bsuccess &
finish();
244 bool bsuccess =
true;
285 Report::UserError() <<
"Solving for DC operating point failed! Cannot continue AC analysis";
375 Xyce::dout() <<
"dQdxMatrixPtr:" << std::endl;
378 Xyce::dout() <<
"dFdxMatrixPtr:" << std::endl;
381 Xyce::dout() << std::endl;
388 for (
int currentStep = 0; currentStep <
acLoopSize_; ++currentStep)
398 if (stepAttemptStatus)
426 bool bsuccess =
true;
428 RCP<N_PDS_Manager> pdsMgrPtr_;
431 RCP<N_PDS_ParMap> baseMap;
432 RCP<Epetra_CrsGraph> BaseFullGraph_;
434 baseMap = rcp(pdsMgrPtr_->getParallelMap(
"SOLUTION" ),
false);
435 BaseFullGraph_ = rcp( pdsMgrPtr_->getMatrixGraph(
"JACOBIAN"), false );
439 RCP<N_PDS_ParMap> blockMap = createBlockParMap(numBlocks, *baseMap);
442 BPtr_ = rcp (
new N_LAS_BlockVector ( numBlocks, blockMap, baseMap ) );
448 std::vector<std::vector<int> > blockPattern(2);
449 blockPattern[0].resize(2);
450 blockPattern[0][0] = 0; blockPattern[0][1] = 1;
451 blockPattern[1].resize(2);
452 blockPattern[1][0] = 0; blockPattern[1][1] = 1;
454 int offset = generateOffset( *baseMap );
456 RCP<Epetra_CrsGraph> blockGraph = createBlockGraph( offset, blockPattern, *blockMap, *BaseFullGraph_);
458 ACMatrixPtr_ = rcp (
new N_LAS_BlockMatrix( numBlocks, offset, blockPattern, *blockGraph, *BaseFullGraph_) );
466 BPtr_->putScalar( 0.0 );
470 Amesos amesosFactory;
472 XPtr_ = rcp (
new N_LAS_BlockVector (numBlocks, blockMap, baseMap) );
473 XPtr_->putScalar( 0.0 );
480 Teuchos::ParameterList params;
481 params.set(
"Reindex",
true );
485 int linearStatus =
blockSolver->SymbolicFactorization();
487 if (linearStatus != 0)
489 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
538 bool bsuccess =
true;
541 int linearStatus =
blockSolver->NumericFactorization();
543 if (linearStatus != 0)
545 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus;
550 if (linearStatus != 0)
552 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus;
569 bool bsuccess =
true;
600 bool bsuccess =
true;
620 bool bsuccess =
true;
622 #ifdef Xyce_DEBUG_ANALYSIS
623 Xyce::dout() <<
"Calling AC::finish() outputs!" << std::endl;
683 Report::DevelFatal().in(
"AC::updateCurrentFreq_") <<
"AC::updateCurrentFreq_: unsupported STEP type";
688 Xyce::dout() <<
"currentFreq_ = " <<
currentFreq_ << std::endl;
704 double fstart, fstop;
710 #ifdef Xyce_DEBUG_ANALYSIS
713 Xyce::dout() << std::endl << std::endl;
714 Xyce::dout() << section_divider << std::endl;
715 Xyce::dout() <<
"AC::setupSweepParam_" << std::endl;
729 #ifdef Xyce_DEBUG_ANALYSIS
732 Xyce::dout() <<
"fstep = " <<
fstep_ << std::endl;
739 fcount = floor(fabs(log10(fstart) - log10(fstop)) *
tiaParams_.
np + 1);
740 #ifdef Xyce_DEBUG_ANALYSIS
743 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
755 fcount = floor(fabs(log(fstart) - log(fstop))/ln2 *
tiaParams_.
np + 1);
756 #ifdef Xyce_DEBUG_ANALYSIS
759 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
765 Report::DevelFatal().in(
"AC::setupSweepParam") <<
"Unsupported type";
770 return static_cast<int> (fcount);