47 #include <Xyce_config.h>
55 #include "N_LAS_Vector.h"
56 #include "N_LAS_Matrix.h"
57 #include "Epetra_MapColoring.h"
58 #include "N_ERH_ErrorMgr.h"
74 IO::InitialConditionsData::NodeNamePairMap & op_in,
75 const Teuchos::RCP <Epetra_MapColoring>& ICcolor_map,
76 const std::vector<int>& vnodeGIDVec,
77 Linear::Vector* cloneVector,
78 double scaledEndValue,
83 node_list_type_(NLT_VoltageNodes),
84 vnodeGIDVec_(vnodeGIDVec),
85 scaled_end_value_(scaledEndValue),
86 residualConductance_(resCond)
88 ICcolor_map_ = ICcolor_map;
89 vecptr1_ =
new Linear::Vector(*cloneVector);
90 vecptr2_ =
new Linear::Vector(*cloneVector);
102 IO::InitialConditionsData::NodeNamePairMap & op_in,
103 const Teuchos::RCP <Epetra_MapColoring>& ICcolor_map,
104 const Teuchos::RCP <Epetra_MapColoring>& GMINcolor_map,
105 Linear::Vector* cloneVector,
106 double scaledEndValue,
111 node_list_type_(NLT_VoltageNodes),
112 scaled_end_value_(scaledEndValue),
113 residualConductance_(resCond)
115 ICcolor_map_ = ICcolor_map;
116 GMINcolor_map_ = GMINcolor_map;
117 vecptr1_ =
new Linear::Vector(*cloneVector);
118 vecptr2_ =
new Linear::Vector(*cloneVector);
161 (
const Linear::Vector * solution, Linear::Vector * residual_vector)
163 #ifdef Xyce_DEBUG_IC_Gmin
164 dout() <<
"Inside AugmentLinSysIC_Gmin::augmentResidual:" << std::endl;
168 if (node_list_type_ == NLT_VoltageNodes)
170 std::vector<int>::const_iterator i = vnodeGIDVec_.begin();
171 std::vector<int>::const_iterator stop = vnodeGIDVec_.end();
172 for ( ; i < stop; ++i)
174 double value = conductance_ *
175 (
const_cast<Linear::Vector*
>(solution))->getElementByGlobalIndex(*i);
177 residual_vector->sumElementByGlobalIndex(*i, value);
182 for (std::size_t i = 0; i < vecptr1_->localLength(); ++i)
184 if ( (*GMINcolor_map_)[i] == 0)
186 (*residual_vector)[i] += conductance_ * (
const_cast<Linear::Vector&
>(*solution))[i];
192 IO::InitialConditionsData::NodeNamePairMap::iterator op_i = op_.begin();
193 IO::InitialConditionsData::NodeNamePairMap::iterator op_end = op_.end();
194 for ( ; op_i != op_end ; ++op_i)
196 int row = (*op_i).second.first;
199 if ( (*ICcolor_map_)[row] == 0)
201 (*residual_vector)[row] = 0.0;
220 #ifdef Xyce_DEBUG_IC_Gmin
221 dout() <<
"Inside AugmentLinSysIC_Gmin::augmentJacobian:" << std::endl;
228 std::vector<int>::const_iterator i =
vnodeGIDVec_.begin();
229 std::vector<int>::const_iterator stop =
vnodeGIDVec_.end();
230 for ( ; i < stop; ++i)
237 for (std::size_t i = 0; i <
vecptr1_->localLength(); ++i)
245 jacobian->replaceDiagonal(*
vecptr1_);
248 std::vector<int> col;
249 std::vector<double> val;
250 IO::InitialConditionsData::NodeNamePairMap::iterator op_i =
op_.begin();
251 IO::InitialConditionsData::NodeNamePairMap::iterator op_end =
op_.end();
255 for ( ; op_i != op_end ; ++op_i)
257 int row = (*op_i).second.first;
263 rowLen = jacobian->getLocalRowLength(row);
265 col.resize(rowLen,0);
266 val.resize(rowLen,0.0);
267 jacobian->getLocalRowCopy(row, rowLen, numEntries, &val[0], &col[0]);
270 for (
int i=0;i<val.size();++i) val[i] = 0.0;
272 jacobian->putLocalRow(row, rowLen, &val[0], &col[0]);
275 (*vecptr2_)[row] = 1.0;
279 jacobian->replaceDiagonal(*
vecptr2_);
double conductance_
Conductance.
Xyce::IO::InitialConditionsData::NodeNamePairMap & op_
map of specified variables
Pure virtual class to augment a linear system.
void augmentResidual(const Xyce::Linear::Vector *solution, Xyce::Linear::Vector *residual_vector)
Augments the Residual.
Xyce::Linear::Vector * vecptr2_
Xyce::Linear::Vector * vecptr1_
Temporary vectors used to store diagonal.
const T & value(const ParameterBase &entity, const Descriptor &descriptor)
Returns the value of the parameter for the entity.
double residualConductance_
residual value of the conductance. Should almost always be zero
NodeListType node_list_type_
Type of list we are using.
const std::vector< int > vnodeGIDVec_
List of voltage node GIDs.
Teuchos::RCP< Epetra_MapColoring > GMINcolor_map_
AugmentLinSysIC_Gmin(Xyce::IO::InitialConditionsData::NodeNamePairMap &op_in, const Teuchos::RCP< Epetra_MapColoring > &ICcolor_map, const std::vector< int > &vnodeGIDVec, Xyce::Linear::Vector *cloneVector, double scaledEndValue, double resCond)
Ctor.
double scaled_end_value_
low end of the exponential term.
Teuchos::RCP< Epetra_MapColoring > ICcolor_map_
Color 0 are the voltage unknowns.
~AugmentLinSysIC_Gmin()
Dtor.
void augmentJacobian(Xyce::Linear::Matrix *jacobian)
Augments the Jacobian.
void setProgressVariable(double dummy)
Set the progress variable (time step size for pseudo transient).