46 #include <Xyce_config.h>
52 #include <N_UTL_Misc.h>
57 #include <N_LAS_Vector.h>
58 #include <N_LAS_Matrix.h>
59 #include <N_LAS_System.h>
60 #include <N_LAS_Builder.h>
61 #include <N_ERH_ErrorMgr.h>
62 #include <N_LOA_Loader.h>
63 #include <N_IO_OutputMgr.h>
67 #include <Teuchos_ParameterList.hpp>
68 #include <NOX_Abstract_Vector.H>
69 #include <LOCA_Parameter_Vector.H>
71 using namespace N_NLS_NOX;
73 namespace N_NLS_LOCA {
87 LOCA::Abstract::
Group(gd),
94 useAugmentLinSys_(false),
100 nonContinuationSolve_(true)
114 N_NLS_NOX::
Group(source, type),
115 LOCA::Abstract::
Group(source, type),
116 loader(source.loader),
117 outputMgr(source.outputMgr),
118 anaInt(source.anaInt),
119 params(source.params),
120 derivUtils(source.derivUtils),
122 scalingVecPtr(source.scalingVecPtr),
123 useAugmentLinSys_(source.useAugmentLinSys_),
124 outputLinear_(source.outputLinear_),
125 serialNumber_(source.serialNumber_),
126 oldSol_(source.oldSol_),
128 allNodes_(source.allNodes_),
129 #ifdef Xyce_PARALLEL_MPI
130 pdsCommPtr_(source.pdsCommPtr_),
132 augmentLSStrategy_(source.augmentLSStrategy_),
133 nonContinuationSolve_(source.nonContinuationSolve_)
159 NOX::Abstract::Group&
162 return operator=(dynamic_cast<const Group&>(source));
176 return operator=(dynamic_cast<const Group&>(source));
187 LOCA::Abstract::Group&
190 return operator=(dynamic_cast<const Group&>(source));
235 Teuchos::RefCountPtr<NOX::Abstract::Group>
Group::
238 Teuchos::RefCountPtr<Group> ptr =
239 Teuchos::rcp(
new Group(*
this, type));
259 for (
int i = 0; i <
params.length(); ++i) {
260 std::string label =
params.getLabel(i);
294 for (
int i = 0; i <
params.length(); ++i) {
295 std::string label =
params.getLabel(i);
304 NOX::Abstract::Group::ReturnType status =
309 N_LAS_Matrix& jacobian =
316 N_LAS_Matrix& jacobian =
318 Xyce::dout() <<
"After computeJacobian, linear system is:" << std::endl;
323 #ifdef Xyce_DEBUG_NONLINEAR
324 N_LAS_Matrix& jacobian =
342 Xyce::NodeNamePairMap * allNodes,
343 N_PDS_Comm * pdsCommPtr)
361 N_LAS_Vector* solPtr_,
362 N_LAS_Vector* resPtr_)
364 Xyce::NodeNamePairMap::iterator op_i;
365 Xyce::NodeNamePairMap::iterator op_end;
366 int i, row, global_row;
368 std::vector<int> col;
369 std::vector<double> val;
370 std::map<int,std::string> rowOut;
376 #ifdef Xyce_PARALLEL_MPI
377 N_PDS_ParMap * pmap_;
378 pmap_ = resPtr_->pmap();
383 for ( ; op_i != op_end ; ++op_i)
385 std::ostringstream s;
386 row = (*op_i).second.first;
387 #ifdef Xyce_PARALLEL_MPI
388 global_row = pmap_->localToGlobalIndex(row);
392 s <<
"Global: " << global_row <<
" : " << (*op_i).first <<
" Row: " << global_row;
393 s <<
" Value: " << (*solPtr_)[row];
397 s <<
" Delta Value: " << (*solPtr_)[row] -
oldSol_[row];
400 oldSol_[row] = (*solPtr_)[row];
401 s <<
" Residual: " << (*resPtr_)[row];
402 #ifdef Xyce_PARALLEL_MPI
403 s <<
" proc: " << procID;
406 rowLen = jacobian->getLocalRowLength(row);
409 jacobian->getRowCopy(global_row, rowLen, rowLen, &val[0], &col[0]);
410 for (i=0 ; i<rowLen ; i++)
412 if (i>1 && i%10 == 0)
415 s <<
" " << GID <<
"(" << val[i] <<
")";
417 rowOut[global_row] = s.str();
420 std::map<int,std::string>::iterator row_i;
421 std::map<int,std::string>::iterator row_end = rowOut.end();
422 row_i = rowOut.begin();
424 #ifdef Xyce_PARALLEL_MPI
433 if (row_i == row_end)
440 str = (*row_i).second;
441 num = (*row_i).first;
443 #ifdef Xyce_PARALLEL_MPI
462 Xyce::dout() << buf << std::endl;
465 Xyce::dout() << str << std::endl;
467 else if (procID == posG)
477 Xyce::dout() << str << std::endl;
523 params.setValue(paramID, value);
537 return params.getValue(paramID);
551 params.setValue(paramID, value);
565 return params.getValue(paramID);
592 const std::string message =
"Group::getScaleVec() - scaling vector not set!";
593 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, message);
607 NOX::Abstract::Group::ReturnType
611 N_LAS_Matrix& jacobian =
615 jacobian.scale(conParamValue);
617 (*tmpVectorPtr).addScalar(1.0 - conParamValue);
621 return NOX::Abstract::Group::Ok;
661 const double conParam)
const
694 #ifdef Xyce_DEBUG_NONLINEAR
695 Xyce::dout() <<
"In Group::stepFailed" << std::endl;
710 #ifdef Xyce_DEBUG_NONLINEAR
711 Xyce::dout() <<
"In Group::stepSucceeded" << std::endl;
713 #ifdef Xyce_UPDATED_LOCA
718 const std::string message =
"Group::stepSucceeded is not fully supported yet! Recompile without Xyce_UPDATED_LOCA defined\n";
719 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, message);
732 const Teuchos::RefCountPtr<N_NLS_NOX::AugmentLinSys>& ls)