40 #include <Xyce_config.h>
51 #include <N_ERH_Message.h>
52 #include <N_ERH_ErrorMgr.h>
53 #include <N_IO_CmdParse.h>
54 #include <N_IO_PkgOptionsMgr.h>
55 #include <N_LAS_BlockMatrix.h>
56 #include <N_LAS_BlockSystemHelpers.h>
57 #include <N_LAS_BlockVector.h>
58 #include <N_LAS_Builder.h>
59 #include <N_LAS_Matrix.h>
60 #include <N_LAS_MultiVector.h>
61 #include <N_LAS_System.h>
70 #include <N_UTL_Diagnostic.h>
71 #include <N_UTL_FeatureTest.h>
72 #include <N_UTL_LogStream.h>
73 #include <N_UTL_Math.h>
74 #include <N_UTL_Timer.h>
75 #include <N_PDS_Comm.h>
76 #include <N_PDS_MPI.h>
77 #include <N_PDS_Manager.h>
78 #include <N_PDS_Serial.h>
80 #include <N_PDS_ParMap.h>
82 #include <N_TOP_Topology.h>
84 #include <Epetra_SerialComm.h>
85 #include <Epetra_Map.h>
86 #include <Epetra_BlockMap.h>
87 #include <Epetra_CrsMatrix.h>
88 #include <Epetra_CrsGraph.h>
89 #include <Epetra_MultiVector.h>
90 #include <Epetra_Vector.h>
91 #include <Epetra_Export.h>
92 #include <Epetra_LinearProblem.h>
95 #include<N_UTL_ExtendedString.h>
96 #include<N_UTL_ExpressionData.h>
99 #include <Teuchos_RCP.hpp>
104 #define N_MINLOG 1E-38
105 #define N_MINGAIN 1E-20 // the smallest input-output gain we can tolerate
109 #define N_INTFTHRESH 1E-10 // the largest slope (of a log-log noise spectral
113 #define N_INTUSELOG 1E-10 // decides which expression to use for the integral of
131 const Util::OptionBlock & option_block)
133 for (Util::ParamList::const_iterator it = option_block.begin(),
134 end = option_block.end(); it != end; ++it)
136 const Util::Param ¶m = *it;
138 if (param.uTag() ==
"DEBUGLEVEL" )
156 Report::UserError() << param.uTag()
157 <<
" is not a recognized time integration option";
174 N_LAS_System & linear_system,
176 Topo::Topology & topology)
180 loader_(analysis_manager.getLoader()),
184 outputManagerAdapter_(analysis_manager.getOutputManagerAdapter()),
189 hackOutputCalledBefore_(false),
191 outputNodeSingle_(true),
194 specifiedSource_(
""),
210 pts_per_summary_Given(false),
219 totalOutputNoise_(0.0),
220 totalInputNoise_(0.0),
221 totalOutputNoiseDens_(0.0),
222 totalInputNoiseDens_(0.0)
252 for (
int i=0;i<size;++i)
293 for (Util::ParamList::const_iterator it = paramsBlock.begin(),
294 end = paramsBlock.end(); it != end; ++it)
296 if ((*it).uTag() ==
"V")
298 if ((*it).getImmutableValue<
double>()==1.0)
301 Util::ParamList::const_iterator itNode = it;
305 else if ((*it).getImmutableValue<
double>()==2.0)
308 Util::ParamList::const_iterator itNode = it;
315 else if ((*it).uTag() ==
"SOURCE")
319 else if ((*it).uTag() ==
"TYPE")
321 type_ = (*it).stringValue();
323 else if ((*it).uTag() ==
"NP")
325 np_ = (*it).getImmutableValue<
double>();
327 else if ((*it).uTag() ==
"FSTART")
329 fStart_ = (*it).getImmutableValue<
double>();
331 else if ((*it).uTag() ==
"FSTOP")
333 fStop_ = (*it).getImmutableValue<
double>();
335 else if ((*it).uTag() ==
"PTS_PER_SUMMARY")
341 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
343 dout() << section_divider << std::endl
344 <<
"NOISE simulation parameters"
349 dout() <<
"Output Node: V(" <<
outputNode1_ <<
")" <<std::endl;
357 <<
"number of points = " <<
np_ << std::endl
358 <<
"starting frequency = " <<
fStart_ << std::endl
359 <<
"stop frequency = " <<
fStop_ << std::endl
403 bool bsuccess =
true;
415 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
446 Report::UserError() <<
"Solving for DC operating point failed! Cannot continue NOISE analysis";
473 Xyce::dout() <<
"bVecReal:" <<std::endl;
475 Xyce::dout() <<
"bVecImag:" <<std::endl;
479 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
552 if (DEBUG_TIME && isActive(Diag::TIME_PARAMETERS))
554 Xyce::dout() <<
"dQdxMatrixPtr:" << std::endl;
557 Xyce::dout() <<
"dFdxMatrixPtr:" << std::endl;
560 Xyce::dout() << std::endl;
565 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
570 for (
int i=0;i<numNoiseDevices;++i)
578 for (
int i=0;i<numNoiseDevices;++i)
581 for (
int j=0;j<numNoiseThisDevice;++j)
595 N_PDS_Comm & comm = *(pds_manager.getPDSComm());
596 int myPID = comm.procID();
600 for (
int currentStep = 0; currentStep <
noiseLoopSize_; ++currentStep)
607 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
610 bool stepAttemptStatus;
612 Stats::StatTop _nonlinearStat(
"Nonlinear Solve");
613 Stats::TimeBlock _nonlinearTimer(_nonlinearStat);
619 Xyce::dout()<<
"AC X vector:"<<std::endl;
620 X_->printPetraObject(Xyce::dout());
628 N_LAS_Vector & Xreal =
X_->block( 0 );
629 N_LAS_Vector & Ximag =
X_->block( 1 );
646 Xyce::Parallel::AllReduce(comm.comm(), MPI_MAX, &root, 1);
647 comm.bcast( &v1r, 1, root );
648 comm.bcast( &v1i, 1, root );
660 Xyce::Parallel::AllReduce(comm.comm(), MPI_MAX, &root, 1);
661 comm.bcast( &v2r, 1, root );
662 comm.bcast( &v2i, 1, root );
666 double realVal = v1r-v2r;
667 double imagVal = v1i-v2i;
674 <<
"\tv1r = "<< v1r <<
"\tv2r = " << v2r
675 <<
"\tv1i = "<< v1i <<
"\tv2i = " << v2i
676 <<
"\trealVal = "<< realVal <<
"\timagVal = " << imagVal
685 for (
int j=0;j<numNoiseThisDevice;++j)
703 if (currentStep != 0)
708 for (
int j=0;j<numNoiseThisDevice;++j)
714 double tempOutNoise =
noiseIntegral( noizDens, lnDens, lnlastDens,
729 <<
"\t" << tempOutNoise
731 <<
"\t" << tempInNoise
732 <<
"\t" <<
noiseDataVec_[i]->inputNoiseTotal[j] << std::endl;
742 if (stepAttemptStatus)
744 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
750 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
761 Xyce::lout() <<
"Total Output Noise = " << totalOutputNoise_ <<std::endl;
762 Xyce::lout() <<
"Total Input Noise = " << totalInputNoise_ <<std::endl;
764 static_cast<Xyce::Util::Notifier<AnalysisEvent> &
>(
analysisManager_).publish
780 bool bsuccess =
true;
784 RCP<N_PDS_ParMap> baseMap = rcp(pds_manager.getParallelMap( Parallel::SOLUTION ),
false);
785 Epetra_CrsGraph &baseFullGraph = *pds_manager.getMatrixGraph(Parallel::JACOBIAN);
789 RCP<N_PDS_ParMap> blockMap = Linear::createBlockParMap(numBlocks, *baseMap);
793 B_ =
new N_LAS_BlockVector(numBlocks, blockMap, baseMap);
799 std::vector<std::vector<int> > blockPattern(2);
800 blockPattern[0].resize(2);
801 blockPattern[0][0] = 0; blockPattern[0][1] = 1;
802 blockPattern[1].resize(2);
803 blockPattern[1][0] = 0; blockPattern[1][1] = 1;
805 int offset = Linear::generateOffset( *baseMap );
807 RCP<Epetra_CrsGraph> blockGraph = Linear::createBlockGraph( offset, blockPattern, *blockMap, baseFullGraph);
810 ACMatrix_ =
new N_LAS_BlockMatrix( numBlocks, offset, blockPattern, *blockGraph, baseFullGraph);
819 B_->putScalar( 0.0 );
824 Xyce::dout()<<
"original AC B vector:"<<std::endl;
825 B_->printPetraObject(Xyce::dout());
828 Amesos amesosFactory;
831 X_ =
new N_LAS_BlockVector (numBlocks, blockMap, baseMap);
832 X_->putScalar( 0.0 );
835 saved_AC_X_ =
new N_LAS_BlockVector (numBlocks, blockMap, baseMap);
842 blockSolver_ = amesosFactory.Create(
"Klu", *
blockProblem_ );
845 Teuchos::ParameterList params;
846 params.set(
"Reindex",
true );
847 blockSolver_->SetParameters( params );
851 int linearStatus = blockSolver_->SymbolicFactorization();
852 if (linearStatus != 0)
854 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
889 B_->putScalar( 0.0 );
894 X_->putScalar( 0.0 );
897 Xyce::dout()<<
"G matrix:"<<std::endl;
898 G_->printPetraObject(Xyce::dout());
900 Xyce::dout()<<
"C matrix:"<<std::endl;
901 C_->printPetraObject(Xyce::dout());
903 Xyce::dout()<<
"AC matrix:"<<std::endl;
904 ACMatrix_->printPetraObject(Xyce::dout());
906 Xyce::dout()<<
"AC B vector:"<<std::endl;
907 B_->printPetraObject(Xyce::dout());
923 bool bsuccess =
true;
926 int linearStatus =
blockSolver_->SymbolicFactorization();
927 if (linearStatus != 0)
929 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
934 if (linearStatus != 0)
936 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus;
941 if (linearStatus != 0)
943 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus;
974 bool foundLocal(
false);
975 bool foundLocal2(
false);
978 N_PDS_Comm & comm = *(pds_manager.getPDSComm());
979 int myPID = comm.procID();
982 for (
int iout = 0; iout < numOutVars; ++iout)
984 std::vector<int> svGIDList1, dummyList;
987 svGIDList1, dummyList, type1);
989 found =
static_cast<int>(foundLocal);
990 Xyce::Parallel::AllReduce(comm.comm(), MPI_LOR, &found, 1);
996 svGIDList1, dummyList, type1);
998 found2 =
static_cast<int>(foundLocal2);
999 Xyce::Parallel::AllReduce(comm.comm(), MPI_LOR, &found2, 1);
1001 if (!found && !found2)
1003 Report::UserError() <<
"Output function variable " <<
outputVarNames_[iout] <<
" not found";
1006 if (found || found2)
1009 if(svGIDList1.size()==1)
1011 tmpGID = svGIDList1.front();
1028 bool bsuccess =
true;
1074 N_PDS_Comm & comm = *(pds_manager.getPDSComm());
1075 int myPID = comm.procID();
1082 for (
int iout=0;iout<numOutVars;++iout)
1088 if (iout>0) val=-1.0;
1110 B_->putScalar( 0.0 );
1137 bool bsuccess =
true;
1140 int linearStatus =
blockSolver_->SymbolicFactorization();
1141 if (linearStatus != 0)
1143 Xyce::dout() <<
"Amesos symbolic factorization exited with error: " << linearStatus;
1148 if (linearStatus != 0)
1150 Xyce::dout() <<
"Amesos numeric factorization exited with error: " << linearStatus;
1155 if (linearStatus != 0)
1157 Xyce::dout() <<
"Amesos solve exited with error: " << linearStatus;
1163 Xyce::dout()<<
"transImpedance(gain):"<<std::endl;
1164 X_->printPetraObject(Xyce::dout());
1171 for (
int i=0;i<numNoiseDevices;++i)
1179 std::vector< Teuchos::RCP<N_LAS_Vector> > outputVectors;
1180 outputVectors.push_back( rcp(
linearSystem_.builder().createVector()) );
1181 outputVectors.push_back( rcp(
linearSystem_.builder().createVector()) );
1183 copyFromBlockVector( *
X_, outputVectors );
1184 N_LAS_Vector & Xreal = *(outputVectors[0]);
1185 N_LAS_Vector & Ximag = *(outputVectors[1]);
1189 Xyce::dout()<<
"Xreal:"<<std::endl;
1190 Xreal.printPetraObject(Xyce::dout());
1191 Xyce::dout()<<
"Ximag:"<<std::endl;
1192 Ximag.printPetraObject(Xyce::dout());
1197 N_PDS_Comm & comm = *(pds_manager.getPDSComm());
1198 int myPID = comm.procID();
1202 for (
int i=0;i<numNoiseDevices;++i)
1208 for (
int j=0;j<numNoiseThisDevice;++j)
1213 double realVal = Xreal[li_Pos] - Xreal[li_Neg];
1214 double imagVal = Ximag[li_Pos] - Ximag[li_Neg];
1215 double gain = (realVal*realVal) + (imagVal*imagVal);
1233 if (comm.isSerial() )
1255 std::ofstream output_stream(fileName.c_str(),
1261 output_stream <<
"TITLE=\"noise output\"\tVARIABLES=\"frequency\" "<<std::endl;
1262 output_stream <<
"\t\"Re(V(" <<
outputNode1_ <<
"))\""<<std::endl;
1263 output_stream <<
"\t\"Im(V(" <<
outputNode1_ <<
"))\""<<std::endl;
1267 output_stream <<
"\t\"Re(V(" <<
outputNode2_ <<
"))\""<<std::endl;
1268 output_stream <<
"\t\"Im(V(" <<
outputNode2_ <<
"))\""<<std::endl;
1270 output_stream <<
"\t\"onoise_spectrum \""<<std::endl;
1271 output_stream <<
"\t\"inoise_spectrum \""<<std::endl;
1275 for (
int i=0;i<numNoiseDevices;++i)
1278 for (
int j=0;j<numNoiseThisDevice;++j)
1281 std::transform(namestring.begin(), namestring.end(), namestring.begin(), ::tolower);
1282 output_stream <<
"\t\"" << namestring <<
"\"";
1286 if (numNoiseThisDevice > 1)
1288 std::string totalOutputNoiseName =
"onoise_" +
noiseDataVec_[i]->deviceName;
1290 std::transform(totalOutputNoiseName.begin(), totalOutputNoiseName.end(), totalOutputNoiseName.begin(), ::tolower);
1292 output_stream <<
"\t\""<<totalOutputNoiseName<<
"\"";
1297 output_stream << std::endl;
1298 output_stream <<
"ZONE F=POINT"<<std::endl;
1303 output_stream.setf(std::ios::scientific);
1311 output_stream <<
currentFreq_ <<
"\t" << v1r <<
"\t" << v1i;
1319 output_stream <<
"\t" << v2r <<
"\t" << v2i;
1326 for (
int i=0;i<numNoiseDevices;++i)
1329 for (
int j=0;j<numNoiseThisDevice;++j)
1331 output_stream <<
"\t" <<
noiseDataVec_[i]->outputNoiseDens[j];
1334 if (numNoiseThisDevice > 1)
1336 output_stream <<
"\t" <<
noiseDataVec_[i]->totalOutputNoise;
1338 output_stream << std::endl;
1341 output_stream << std::endl;
1364 double delLnFreq,
double delFreq,
double lnFreq,
double lnLastFreq)
1369 exponent = (lnNdens - lnNlstDens) / delLnFreq;
1372 return (noizDens * delFreq);
1375 a = std::exp(lnNdens - exponent*lnFreq);
1379 return (a * (lnFreq - lnLastFreq));
1383 return (a * ((std::exp(exponent * lnFreq) - std::exp(exponent * lnLastFreq)) /
1399 bool bsuccess =
true;
1432 bool bsuccess =
true;
1452 bool bsuccess =
true;
1456 Xyce::dout() <<
"Calling NOISE::doFinish() outputs!" << std::endl;
1515 Report::DevelFatal().in(
"NOISE::updateCurrentFreq_")
1516 <<
"NOISE::updateCurrentFreq_: unsupported STEP type";
1526 if (isActive(Diag::TIME_PARAMETERS))
1528 Xyce::dout() <<
"currentFreq_ = " <<
currentFreq_ << std::endl;
1529 Xyce::dout() <<
"lastFreq_ = " << lastFreq_ << std::endl;
1530 Xyce::dout() <<
"delFreq_ = " <<
delFreq_ << std::endl;
1547 double fstart, fstop;
1548 double fcount = 0.0;
1553 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
1555 Xyce::dout() << std::endl << std::endl;
1556 Xyce::dout() << section_divider << std::endl;
1557 Xyce::dout() <<
"NOISE::setupSweepParam_" << std::endl;
1562 int np =
static_cast<int>(
np_);
1570 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
1572 Xyce::dout() <<
"fstep = " <<
fstep_ << std::endl;
1575 else if (
type_ ==
"DEC")
1578 fcount = floor(fabs(std::log10(fstart) - std::log10(fstop)) *
np_ + 1.0);
1579 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
1581 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
1584 else if (
type_ ==
"OCT")
1591 double ln2 = std::log(2.0);
1592 fcount = floor(fabs(std::log(fstart) - std::log(fstop))/ln2 *
np_ + 1.0);
1593 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
1595 Xyce::dout() <<
"stepMult_ = " <<
stepMult_ << std::endl;
1600 Report::DevelFatal().in(
"NOISE::setupSweepParam") <<
"Unsupported type";
1605 return static_cast<int> (fcount);
1621 class NOISEFactory :
public Factory<NOISE>
1649 Linear::System & linear_system,
1651 Topo::Topology & topology)
1659 virtual ~NOISEFactory()
1675 NOISE *create()
const
1700 void setNOISEAnalysisOptionBlock(
const Util::OptionBlock &option_block)
1720 void setTimeIntegratorOptionBlock(
const Util::OptionBlock &option_block)
1737 struct TimeIntegratorOptionsReg :
public IO::PkgOptionsReg
1739 TimeIntegratorOptionsReg(
1740 NOISEFactory & factory )
1744 bool operator()(
const Util::OptionBlock &option_block)
1746 factory_.setTimeIntegratorOptionBlock(option_block);
1755 struct NOISEAnalysisReg :
public IO::PkgOptionsReg
1758 NOISEFactory & factory )
1762 bool operator()(
const Util::OptionBlock &option_block)
1764 factory_.setNOISEAnalysisOptionBlock(option_block);
1782 const std::string & netlist_filename,
1783 IO::PkgOptionsMgr & options_manager,
1785 Linear::System & linear_system,
1787 Topo::Topology & topology)
1789 NOISEFactory *factory =
new NOISEFactory(analysis_manager, linear_system, nonlinear_manager, topology);
1793 options_manager.submitRegistration(
"NOISE", netlist_filename,
new NOISEAnalysisReg(*factory));
1794 options_manager.submitRegistration(
"TIMEINT", netlist_filename,
new TimeIntegratorOptionsReg(*factory));
Util::OptionBlock noiseAnalysisOptionBlock_
Linear::Vector * lastSolutionPtr
bool doProcessSuccessfulStep()
N_LAS_BlockVector * saved_AC_X_
Linear::Vector * nextLeadCurrentQPtr
unsigned int successStepsThisParameter_
unsigned int successfulStepsTaken_
Number of consecutive successful time-integration steps.
std::vector< double > dOdpVec_
int newtonConvergenceStatus
virtual bool setInitialGuess(Linear::Vector *solVectorPtr)
Nonlinear::Manager & nonlinearManager_
Linear::Vector * lastLeadDeltaVPtr
Nonlinear::Manager & nonlinearManager_
std::vector< double > scaled_dOdpAdjVec_
bool setTimeIntegratorOption(const Util::Param ¶m)
double totalInputNoiseDens_
TimeIntg::TIAParams tiaParams_
Linear::System & linearSystem_
N_LAS_BlockMatrix * ACMatrix_
void outputAC(double freq, const Linear::Vector &solnVecRealPtr, const Linear::Vector &solnVecImaginaryPtr)
Pure virtual class to augment a linear system.
int doubleDCOPStep_
current step in the DCOP loop.
double totalOutputNoiseDens_
void dcOutput(int dcStepNumber, Linear::Vector &currSolutionPtr, Linear::Vector &stateVecPtr, Linear::Vector &storeVecPtr, Linear::Vector &lead_current_vector, Linear::Vector &junction_voltage_vector, std::vector< double > &objectiveVec_, std::vector< double > &dOdpVec_, std::vector< double > &dOdpAdjVec_, std::vector< double > &scaled_dOdpVec_, std::vector< double > &scaled_dOdpAdjVec_)
virtual bool loadDAEVectors(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *StaDerivVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr, Linear::Vector *stoLeadCurrQVectorPtr, Linear::Vector *nextLeadFVectorPtr, Linear::Vector *currLeadFVectorPtr, Linear::Vector *lastLeadFVectorPtr, Linear::Vector *nextLeadQVectorPtr, Linear::Vector *nextJunctionVVectorPtr, Linear::Vector *currJunctionVVectorPtr, Linear::Vector *lastJunctionVVectorPtr, Linear::Vector *QVectorPtr, Linear::Vector *FVectorPtr, Linear::Vector *BVectorPtr, Linear::Vector *dFdxdVpVectorPtr, Linear::Vector *dQdxdVpVectorPtr)
bool resetForStepAnalysis()
virtual int getNumNoiseDevices()
unsigned int stepNumber
Time-integration step number counter.
NOISE(AnalysisManager &analysis_manager, Linear::System &linear_system, Nonlinear::Manager &nonlinear_manager, Topo::Topology &topology)
virtual bool loadBVectorsforAC(Linear::Vector *bVecRealPtr, Linear::Vector *bVecImagPtr)
bool registerNOISEFactory(const std::string &netlist_filename, IO::PkgOptionsMgr &options_manager, AnalysisManager &analysis_manager, Linear::System &linear_system, Nonlinear::Manager &nonlinear_manager, Topo::Topology &topology)
Linear::Vector * currStorePtr
Linear::Vector * lastStatePtr
Epetra_LinearProblem * blockProblem_
void gatherStepStatistics(StatCounts &stats, Nonlinear::NonLinearSolver &nonlinear_solver, int newton_convergence_status)
void createTimeIntegratorMethod(const TimeIntg::TIAParams &tia_params, const unsigned int integration_method)
bool setupInitialConditions(Linear::Vector &solnVec, Linear::Vector &flagVec)
std::vector< double > objectiveVec_
bool resetAll(const TIAParams &tia_params)
std::string specifiedSource_
std::vector< int > noiseSweepFailures_
Util::ListenerAutoSubscribe< StepEvent > StepEventListener
Linear::Vector * nextLeadDeltaVPtr
Linear::Vector * currStatePtr
unsigned int failedStepsAttempted_
Total number of failed time-integration steps.
void obtainCorrectorDeriv()
Parallel::Manager * getPDSManager() const
bool setDCOPOption(const Util::Param ¶m)
TimeIntg::StepErrorControl & getStepErrorControl()
const std::string & getNetlistFilename() const
void computeDividedDifferences()
NonLinearSolver & getNonlinearSolver()
Linear::Vector * daeQVectorPtr
void setConstantHistory()
AnalysisManager & analysisManager_
AnalysisManager & analysisManager_
Linear::Vector * lastLeadCurrentPtr
virtual bool startTimeStep()
void setErrorWtVector(const TIAParams &tia_params)
Linear::Vector * daeFVectorPtr
void processOutputNodes()
bool hackOutputCalledBefore_
bool processSuccessfulStep()
Linear::Matrix * dFdxMatrixPtr
virtual bool updateSources()
N_LAS_System & linearSystem_
Linear::Vector * nextStatePtr
bool solveACLinearSystem_()
Linear::Vector * dFdxdVpVectorPtr
bool updateCurrentFreq_(int stepNumber)
virtual bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
virtual bool updateState(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr)
Linear::Vector * currLeadDeltaVPtr
int numberSuccessiveFailures
bool solveAdjointNOISE_()
N_LAS_Vector * bVecImagPtr
std::vector< Xyce::Analysis::NoiseData * > noiseDataVec_
void addAnalysisFactory(Factory< void > *factory)
virtual void getNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
Linear::Vector * nextSolutionPtr
bool resetACLinearSystem_()
std::vector< double > scaled_dOdpVec_
Topo::Topology & topology_
void notify(const StepEvent &event)
virtual bool getDoubleDCOPFlag() const
virtual void setupNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
Linear::Vector * nextStorePtr
bool setTimeIntegratorOptions(const Util::OptionBlock &option_block)
bool createACLinearSystem_()
The analysis factory template defines an interface for analysis type testing and analysis creation...
Amesos_BaseSolver * blockSolver_
Linear::Vector * dQdxdVpVectorPtr
N_LAS_Vector * bVecRealPtr
Topo::Topology & topology_
bool setAnalysisParams(const N_UTL_OptionBlock ¶msBlock)
std::vector< std::string > outputVarNames_
Linear::Vector * currLeadCurrentPtr
Linear::Vector * lastStorePtr
void setInputOPFlag(bool initial_conditions_loaded)
TimeIntg::WorkingIntegrationMethod & getWorkingIntegrationMethod()
bool firstDoubleDCOPStep()
const IO::CmdParse & getCommandLine() const
void obtainPredictorDeriv()
N_LAS_Vector * bNoiseVecImagPtr
std::vector< int > outputVarGIDs_
OutputMgrAdapter & outputManagerAdapter_
int getIntegrationMethod() const
Linear::Vector * currSolutionPtr
TimeIntg::DataStore * getDataStore()
void evaluateStepError(const TIAParams &tia_params)
bool doProcessFailedStep()
bool doubleDCOPFlag_
true if doing a double-DCOP is possible.
unsigned int baseIntegrationMethod_
Current time-integration method flag.
void resetAdjointNOISELinearSystem_()
Linear::Vector * nextStoreLeadCurrQPtr
Util::OptionBlock timeIntegratorOptionBlock_
Linear::Vector * nextStateDerivPtr
void outputNoise(double freq, double totalOutputNoiseDens_, double totalInputNoiseDens_, const std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec_)
void outputDCOP(const Linear::Vector &solution)
double noiseIntegral(double noizDens, double lnNdens, double lnNlstDens, double delLnFreq, double delFreq, double lnFreq, double lnLastFreq)
Linear::Matrix * dQdxMatrixPtr
Linear::Vector * flagSolutionPtr
std::vector< double > dOdpAdjVec_
Linear::Vector * daeBVectorPtr
bool setReturnCodeOption(const Util::Param ¶m)
N_LAS_Vector * bNoiseVecRealPtr
virtual bool output() const
Linear::Vector * nextLeadCurrentPtr