46 #include <Xyce_config.h>
52 #include <N_LAS_Vector.h>
53 #include <N_LAS_System.h>
54 #include <N_LAS_Builder.h>
56 #include <N_ERH_ErrorMgr.h>
57 #include <N_UTL_FeatureTest.h>
71 : constraintMinVector_(0),
72 constraintMaxVector_(0),
73 constraintChangeVector_(0),
74 constraintTempVector_(0)
137 (Linear::System * lasSysPtr,
const NLParams & nlParams)
140 constraintMinVector_ = lasSysPtr->builder().createVector();
141 constraintMaxVector_ = lasSysPtr->builder().createVector();
146 constraintChangeVector_ = lasSysPtr->builder().createVector();
150 constraintTempVector_ = lasSysPtr->builder().createVector();
152 constraintTempVector_->putScalar(0.0);
169 const Linear::Vector * solnUpdate)
172 Linear::Vector * solnPtr;
173 Linear::Vector * solnUpdatePtr;
176 solnPtr =
const_cast<Linear::Vector *
> (oldSoln);
177 solnUpdatePtr =
const_cast<Linear::Vector *
> (solnUpdate);
180 for (
int i = 0; i < solnPtr->localLength(); ++i)
182 if ((*(solnUpdatePtr))[i] < 0.0)
184 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
189 Xyce::dout() <<
"ConstraintBT::updateThetaBoundNeg: min: " << (*(
constraintMinVector_))[i] <<
"\n"
190 <<
"ConstraintBT::updateThetaBoundNeg: soln: " << (*(solnPtr))[i] <<
"\n"
191 <<
"ConstraintBT::updateThetaBoundNeg: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
199 Xyce::dout() <<
"ConstraintBT::updateThetaBoundNeg: thetaBoundNeg_: " <<
thetaBoundNeg_;
214 const Linear::Vector * solnUpdate)
217 Linear::Vector * solnPtr;
218 Linear::Vector * solnUpdatePtr;
221 solnPtr =
const_cast<Linear::Vector *
> (oldSoln);
222 solnUpdatePtr =
const_cast<Linear::Vector *
> (solnUpdate);
225 for (
int i = 0; i < solnPtr->localLength(); ++i)
227 if ((*(solnUpdatePtr))[i] > 0.0)
229 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
234 Xyce::dout() <<
"ConstraintBT::updateThetaBoundPos: max: " << (*(
constraintMaxVector_))[i] <<
"\n"
235 <<
"ConstraintBT::updateThetaBoundPos: soln: " << (*(solnPtr))[i] <<
"\n"
236 <<
"ConstraintBT::updateThetaBoundPos: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
244 Xyce::dout() <<
"ConstraintBT::updateThetaBoundPos: thetaBoundPos_: " <<
thetaBoundPos_;
264 const Linear::Vector * solnUpdate)
267 Linear::Vector * solnPtr;
268 Linear::Vector * solnUpdatePtr;
271 solnPtr =
const_cast<Linear::Vector *
> (oldSoln);
272 solnUpdatePtr =
const_cast<Linear::Vector *
> (solnUpdate);
275 for (
int i = 0; i < solnPtr->localLength(); ++i)
277 if (fabs((*(solnUpdatePtr))[i]) > Util::MachineDependentParams::DoubleMin() &&
278 fabs((*(solnPtr))[i]) > 0.0)
280 fabs((*(solnPtr))[i]) / fabs((*(solnUpdatePtr))[i]);
294 Xyce::dout() <<
"ConstraintBT::updateThetaChange: thetaChange_: " <<
thetaChange_;
int operator==(const ConstraintBT &right) const
Linear::Vector * constraintChangeVector_
Pure virtual class to augment a linear system.
Linear::Vector * constraintMaxVector_
double getGlobalBTChange() const
int operator!=(const ConstraintBT &right) const
double getGlobalBTMax() const
void updateThetaBoundNeg(const Linear::Vector *oldSoln, const Linear::Vector *solnUpdate)
Linear::Vector * constraintTempVector_
void updateThetaChange(const Linear::Vector *oldSoln, const Linear::Vector *solnUpdate)
void resetThetaBoundPos()
Linear::Vector * constraintMinVector_
double getGlobalBTMin() const
void resetThetaBoundNeg()
void updateThetaBoundPos(const Linear::Vector *oldSoln, const Linear::Vector *solnUpdate)
bool initializeAll(Linear::System *lasSysPtr, const NLParams &nlParams)