46 #include <Xyce_config.h>
51 #include <N_UTL_Misc.h>
57 #include <N_LAS_Vector.h>
58 #include <N_LAS_System.h>
59 #include <N_LAS_Builder.h>
62 #ifdef Xyce_DEBUG_NONLINEAR
63 #include <N_ERH_ErrorMgr.h>
78 : constraintMinVector_(0),
79 constraintMaxVector_(0),
80 constraintChangeVector_(0),
81 constraintTempVector_(0)
171 (N_LAS_System * lasSysPtr,
const NLParams & nlParams)
174 constraintMinVector_ = lasSysPtr->builder().createVector();
175 constraintMaxVector_ = lasSysPtr->builder().createVector();
180 constraintChangeVector_ = lasSysPtr->builder().createVector();
184 constraintTempVector_ = lasSysPtr->builder().createVector();
186 constraintTempVector_->putScalar(0.0);
203 const N_LAS_Vector * solnUpdate)
206 N_LAS_Vector * solnPtr;
207 N_LAS_Vector * solnUpdatePtr;
210 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
211 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
214 for (
int i = 0; i < solnPtr->localLength(); ++i)
216 if ((*(solnUpdatePtr))[i] < 0.0)
218 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
222 if (Xyce::DEBUG_NONLINEAR)
223 Xyce::dout() <<
"ConstraintBT::updateThetaBoundNeg: min: " << (*(
constraintMinVector_))[i] <<
"\n"
224 <<
"ConstraintBT::updateThetaBoundNeg: soln: " << (*(solnPtr))[i] <<
"\n"
225 <<
"ConstraintBT::updateThetaBoundNeg: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
232 if (Xyce::DEBUG_NONLINEAR)
233 Xyce::dout() <<
"ConstraintBT::updateThetaBoundNeg: thetaBoundNeg_: " <<
thetaBoundNeg_;
248 const N_LAS_Vector * solnUpdate)
251 N_LAS_Vector * solnPtr;
252 N_LAS_Vector * solnUpdatePtr;
255 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
256 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
259 for (
int i = 0; i < solnPtr->localLength(); ++i)
261 if ((*(solnUpdatePtr))[i] > 0.0)
263 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
267 if (Xyce::DEBUG_NONLINEAR)
268 Xyce::dout() <<
"ConstraintBT::updateThetaBoundPos: max: " << (*(
constraintMaxVector_))[i] <<
"\n"
269 <<
"ConstraintBT::updateThetaBoundPos: soln: " << (*(solnPtr))[i] <<
"\n"
270 <<
"ConstraintBT::updateThetaBoundPos: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
277 if (Xyce::DEBUG_NONLINEAR)
278 Xyce::dout() <<
"ConstraintBT::updateThetaBoundPos: thetaBoundPos_: " <<
thetaBoundPos_;
298 const N_LAS_Vector * solnUpdate)
301 N_LAS_Vector * solnPtr;
302 N_LAS_Vector * solnUpdatePtr;
305 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
306 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
309 for (
int i = 0; i < solnPtr->localLength(); ++i)
311 if (fabs((*(solnUpdatePtr))[i]) > N_UTL_MachineDependentParams::DoubleMin() &&
312 fabs((*(solnPtr))[i]) > 0.0)
314 fabs((*(solnPtr))[i]) / fabs((*(solnUpdatePtr))[i]);
319 if (Xyce::DEBUG_NONLINEAR)
327 if (Xyce::DEBUG_NONLINEAR)
328 Xyce::dout() <<
"ConstraintBT::updateThetaChange: thetaChange_: " <<
thetaChange_;