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>
75 : constraintMinVector_(0),
76 constraintMaxVector_(0),
77 constraintChangeVector_(0),
78 constraintTempVector_(0)
171 constraintMinVector_ = lasSysPtr->builder().createVector();
172 constraintMaxVector_ = lasSysPtr->builder().createVector();
177 constraintChangeVector_ = lasSysPtr->builder().createVector();
181 constraintTempVector_ = lasSysPtr->builder().createVector();
183 constraintTempVector_->putScalar(0.0);
200 const N_LAS_Vector * solnUpdate)
203 N_LAS_Vector * solnPtr;
204 N_LAS_Vector * solnUpdatePtr;
207 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
208 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
211 for (
int i = 0; i < solnPtr->localLength(); ++i)
213 if ((*(solnUpdatePtr))[i] < 0.0)
215 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
219 if (Xyce::DEBUG_NONLINEAR)
220 Xyce::dout() <<
"N_NLS_ConstraintBT::updateThetaBoundNeg: min: " << (*(
constraintMinVector_))[i] <<
"\n"
221 <<
"N_NLS_ConstraintBT::updateThetaBoundNeg: soln: " << (*(solnPtr))[i] <<
"\n"
222 <<
"N_NLS_ConstraintBT::updateThetaBoundNeg: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
229 if (Xyce::DEBUG_NONLINEAR)
230 Xyce::dout() <<
"N_NLS_ConstraintBT::updateThetaBoundNeg: thetaBoundNeg_: " <<
thetaBoundNeg_;
245 const N_LAS_Vector * solnUpdate)
248 N_LAS_Vector * solnPtr;
249 N_LAS_Vector * solnUpdatePtr;
252 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
253 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
256 for (
int i = 0; i < solnPtr->localLength(); ++i)
258 if ((*(solnUpdatePtr))[i] > 0.0)
260 (*(solnPtr))[i]) / (*(solnUpdatePtr))[i];
264 if (Xyce::DEBUG_NONLINEAR)
265 Xyce::dout() <<
"N_NLS_ConstraintBT::updateThetaBoundPos: max: " << (*(
constraintMaxVector_))[i] <<
"\n"
266 <<
"N_NLS_ConstraintBT::updateThetaBoundPos: soln: " << (*(solnPtr))[i] <<
"\n"
267 <<
"N_NLS_ConstraintBT::updateThetaBoundPos: solnUpdate: " << (*(solnUpdatePtr))[i] <<
"\n"
274 if (Xyce::DEBUG_NONLINEAR)
275 Xyce::dout() <<
"N_NLS_ConstraintBT::updateThetaBoundPos: thetaBoundPos_: " <<
thetaBoundPos_;
295 const N_LAS_Vector * solnUpdate)
298 N_LAS_Vector * solnPtr;
299 N_LAS_Vector * solnUpdatePtr;
302 solnPtr =
const_cast<N_LAS_Vector *
> (oldSoln);
303 solnUpdatePtr =
const_cast<N_LAS_Vector *
> (solnUpdate);
306 for (
int i = 0; i < solnPtr->localLength(); ++i)
308 if (fabs((*(solnUpdatePtr))[i]) > N_UTL_MachineDependentParams::DoubleMin() &&
309 fabs((*(solnPtr))[i]) > 0.0)
311 fabs((*(solnPtr))[i]) / fabs((*(solnUpdatePtr))[i]);
316 if (Xyce::DEBUG_NONLINEAR)
324 if (Xyce::DEBUG_NONLINEAR)
325 Xyce::dout() <<
"N_NLS_ConstraintBT::updateThetaChange: thetaChange_: " <<
thetaChange_;