Xyce  6.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
N_NLS_LOCA_Group.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Copyright Notice
3 //
4 // Copyright 2002 Sandia Corporation. Under the terms
5 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
6 // Government retains certain rights in this software.
7 //
8 // Xyce(TM) Parallel Electrical Simulator
9 // Copyright (C) 2002-2014 Sandia Corporation
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //-----------------------------------------------------------------------------
24 
25 //-------------------------------------------------------------------------
26 // Filename : $RCSfile: N_NLS_LOCA_Group.C,v $
27 //
28 // Purpose : Interface to Xyce for LOCA continuation routines.
29 //
30 // Special Notes :
31 //
32 // Creator : Roger Pawlowski, SNL 9233
33 //
34 // Creation Date : 02/17/03
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.51 $
40 //
41 // Revision Date : $Date: 2014/02/24 23:49:25 $
42 //
43 // Current Owner : $Author: tvrusso $
44 //-------------------------------------------------------------------------
45 
46 #include <Xyce_config.h>
47 
48 
49 // ---------- Standard Includes ----------
50 
51 // ---------- Xyce Includes ----------
52 #include <N_UTL_Misc.h>
53 
54 #include "N_NLS_LOCA_Group.h"
55 //#include "N_NLS_NOX.h"
56 //#include "N_NLS_NOX_Vector.h"
57 #include "N_NLS_NOX_SharedSystem.h"
59 #include "N_LAS_Vector.h"
60 #include "N_LAS_Matrix.h"
61 #include "N_LAS_System.h"
62 #include "N_LAS_Builder.h"
63 #include "N_ERH_ErrorMgr.h"
64 #include "N_LOA_Loader.h"
65 #include "N_IO_OutputMgr.h"
67 
68 // ---------- NOX Includes ----------
69 #include "Teuchos_ParameterList.hpp"
70 #include "NOX_Abstract_Vector.H"
71 #include "LOCA_Parameter_Vector.H"
72 
73 //using namespace N_NLS_LOCA;
74 using namespace N_NLS_NOX;
75 
76 //-----------------------------------------------------------------------------
77 // Function : N_NLS_LOCA::Group::Group
78 // Purpose : constructor
79 // Special Notes :
80 // Scope : public
81 // Creator :
82 // Creation Date :
83 //-----------------------------------------------------------------------------
84 N_NLS_LOCA::Group::Group(Teuchos::RefCountPtr<LOCA::GlobalData> gd,
85  N_NLS_NOX::SharedSystem& s, N_LOA_Loader& l,
86  N_IO_OutputMgr& o, N_ANP_AnalysisInterface & t) :
87  N_NLS_NOX::Group(s),
88  LOCA::Abstract::Group(gd),
89  loader(l),
90  outputMgr(o),
91  anaInt(t),
92  derivUtils(gd),
93  tmpVectorPtr(0),
94  scalingVecPtr(0),
95  useAugmentLinSys_(false),
96  outputLinear_(false),
97  serialNumber_(0),
98  op_(0),
99  allNodes_(0),
100 #ifdef Xyce_PARALLEL_MPI
101  pdsCommPtr_(0),
102 #endif
103  nonContinuationSolve_(true)
104 {
105  tmpVectorPtr = sharedSystemPtr_->getLasSystem()->builder().createVector();
106 }
107 
108 //-----------------------------------------------------------------------------
109 // Function : N_NLS_LOCA::Group::Group
110 // Purpose : constructor
111 // Special Notes :
112 // Scope : public
113 // Creator :
114 // Creation Date :
115 //-----------------------------------------------------------------------------
116 N_NLS_LOCA::Group::Group(const Group& source, NOX::CopyType type) :
117  N_NLS_NOX::Group(source, type),
118  LOCA::Abstract::Group(source, type),
119  loader(source.loader),
120  outputMgr(source.outputMgr),
121  anaInt(source.anaInt),
122  params(source.params),
123  derivUtils(source.derivUtils),
124  tmpVectorPtr(0),
125  scalingVecPtr(source.scalingVecPtr),
126  useAugmentLinSys_(source.useAugmentLinSys_),
127  outputLinear_(source.outputLinear_),
128  serialNumber_(source.serialNumber_),
129  oldSol_(source.oldSol_),
130  op_(source.op_),
131  allNodes_(source.allNodes_),
132 #ifdef Xyce_PARALLEL_MPI
133  pdsCommPtr_(source.pdsCommPtr_),
134 #endif
135  augmentLSStrategy_(source.augmentLSStrategy_),
136  nonContinuationSolve_(source.nonContinuationSolve_)
137 {
138  tmpVectorPtr = sharedSystemPtr_->getLasSystem()->builder().createVector();
139 }
140 
141 //-----------------------------------------------------------------------------
142 // Function : N_NLS_LOCA::Group::~Group
143 // Purpose : destructor
144 // Special Notes :
145 // Scope : public
146 // Creator :
147 // Creation Date :
148 //-----------------------------------------------------------------------------
150 {
151  delete tmpVectorPtr;
152 }
153 
154 //-----------------------------------------------------------------------------
155 // Function : N_NLS_LOCA::Group::operator=
156 // Purpose :
157 // Special Notes :
158 // Scope : public
159 // Creator :
160 // Creation Date :
161 //-----------------------------------------------------------------------------
162 NOX::Abstract::Group&
163 N_NLS_LOCA::Group::operator=(const NOX::Abstract::Group& source)
164 {
165  return operator=(dynamic_cast<const N_NLS_LOCA::Group&>(source));
166 }
167 
168 //-----------------------------------------------------------------------------
169 // Function : N_NLS_LOCA::Group::operator=
170 // Purpose :
171 // Special Notes :
172 // Scope : public
173 // Creator :
174 // Creation Date :
175 //-----------------------------------------------------------------------------
178 {
179  return operator=(dynamic_cast<const N_NLS_LOCA::Group&>(source));
180 }
181 
182 //-----------------------------------------------------------------------------
183 // Function : N_NLS_LOCA::Group::operator=
184 // Purpose :
185 // Special Notes :
186 // Scope : public
187 // Creator :
188 // Creation Date :
189 //-----------------------------------------------------------------------------
190 LOCA::Abstract::Group&
191 N_NLS_LOCA::Group::operator=(const LOCA::Abstract::Group& source)
192 {
193  return operator=(dynamic_cast<const N_NLS_LOCA::Group&>(source));
194 }
195 
196 //-----------------------------------------------------------------------------
197 // Function : N_NLS_LOCA::Group::operator=
198 // Purpose :
199 // Special Notes :
200 // Scope : public
201 // Creator :
202 // Creation Date :
203 //-----------------------------------------------------------------------------
206 {
208  params = source.params;
209  derivUtils = source.derivUtils;
210  if (source.scalingVecPtr != 0)
211  scalingVecPtr = source.scalingVecPtr;
212  useAugmentLinSys_ = source.useAugmentLinSys_;
213  augmentLSStrategy_ = source.augmentLSStrategy_;
214  return *this;
215 }
216 
217 //-----------------------------------------------------------------------------
218 // Function : N_NLS_LOCA::Group::copy
219 // Purpose :
220 // Special Notes :
221 // Scope : public
222 // Creator :
223 // Creation Date :
224 //-----------------------------------------------------------------------------
225 void N_NLS_LOCA::Group::copy(const NOX::Abstract::Group &source)
226 {
227  *this = source;
228 }
229 
230 //-----------------------------------------------------------------------------
231 // Function : N_NLS_LOCA::Group::clone
232 // Purpose :
233 // Special Notes :
234 // Scope : public
235 // Creator :
236 // Creation Date :
237 //-----------------------------------------------------------------------------
238 Teuchos::RefCountPtr<NOX::Abstract::Group> N_NLS_LOCA::Group::
239 clone(NOX::CopyType type) const
240 {
241  Teuchos::RefCountPtr<N_NLS_LOCA::Group> ptr =
242  Teuchos::rcp(new Group(*this, type));
243  return ptr;
244 }
245 
246 //-----------------------------------------------------------------------------
247 // Function : N_NLS_LOCA::Group::computeF()
248 // Purpose :
249 // Special Notes :
250 // Scope : public
251 // Creator :
252 // Creation Date :
253 //-----------------------------------------------------------------------------
254 NOX::Abstract::Group::ReturnType N_NLS_LOCA::Group::computeF()
255 {
256  // Set continuation parameters, if neccessary
257  // Note: If the tranOP solve was a continuation, but the
258  // transient is traditional Newton, make SURE that the
259  // setParam calls are not happening for transient!
260  if (!nonContinuationSolve_)
261  {
262  for (int i = 0; i < params.length(); ++i) {
263  std::string label = params.getLabel(i);
264  loader.setParam(label, params.getValue(i));
265 
266  if (label == "GSTEPPING" && useAugmentLinSys_)
267  augmentLSStrategy_->setProgressVariable(params.getValue(i));
268 
269  }
270  }
271 
272  NOX::Abstract::Group::ReturnType status = N_NLS_NOX::Group::computeF();
273 
274  if (useAugmentLinSys_)
275  augmentLSStrategy_->augmentResidual(xVec_.getNativeVectorPtr(),
276  fVec_.getNativeVectorPtr());
277 
278  return status;
279 }
280 
281 //-----------------------------------------------------------------------------
282 // Function : N_NLS_LOCA::Group::computeJacobian()
283 // Purpose :
284 // Special Notes :
285 // Scope : public
286 // Creator :
287 // Creation Date :
288 //-----------------------------------------------------------------------------
289 NOX::Abstract::Group::ReturnType N_NLS_LOCA::Group::computeJacobian()
290 {
291  // Set continuation parameters, if neccessary
292  // Note: If the tranOP solve was a continuation, but the
293  // transient is traditional Newton, make SURE that the
294  // setParam calls are not happening for transient!
295  if (!nonContinuationSolve_)
296  {
297  for (int i = 0; i < params.length(); ++i) {
298  std::string label = params.getLabel(i);
299  loader.setParam(label, params.getValue(i));
300 
301  if (label == "GSTEPPING" && useAugmentLinSys_)
302  augmentLSStrategy_->setProgressVariable(params.getValue(i));
303 
304  }
305  }
306 
307  NOX::Abstract::Group::ReturnType status =
309 
310  // Augment jacobian for pseudo transient if enabled
311  if (useAugmentLinSys_) {
312  N_LAS_Matrix& jacobian =
313  const_cast<N_LAS_Matrix&>(sharedSystemPtr_->getJacobian());
314  augmentLSStrategy_->augmentJacobian(&jacobian);
315  }
316 
317  if (outputLinear_)
318  {
319  N_LAS_Matrix& jacobian =
320  const_cast<N_LAS_Matrix&>(sharedSystemPtr_->getJacobian());
321  Xyce::dout() << "After computeJacobian, linear system is:" << std::endl;
322  outputLinearSystem_ (&jacobian, xVec_.getNativeVectorPtr(),
323  fVec_.getNativeVectorPtr());
324  }
325 
326 #ifdef Xyce_DEBUG_NONLINEAR
327  N_LAS_Matrix& jacobian =
328  const_cast<N_LAS_Matrix&>(sharedSystemPtr_->getJacobian());
329  sharedSystemPtr_->debugOutput1( jacobian,
330  (*(fVec_.getNativeVectorPtr())));
331 #endif
332 
333  return status;
334 }
335 
336 //-----------------------------------------------------------------------------
337 // Function : N_NLS_LOCA::Group::setOutputLinear
338 // Purpose :
339 // Special Notes : for DCOP restart (debugging)
340 // Scope : public
341 // Creator : Dave Shirley
342 // Creation Date : 2006
343 //-----------------------------------------------------------------------------
344 void N_NLS_LOCA::Group::setOutputLinear (Xyce::NodeNamePairMap * op,
345  Xyce::NodeNamePairMap * allNodes
346 #ifdef Xyce_PARALLEL_MPI
347  , N_PDS_Comm * pdsCommPtr)
348 #else
349  )
350 #endif
351 {
352  op_ = op;
353  allNodes_ = allNodes;
354 #ifdef Xyce_PARALLEL_MPI
355  pdsCommPtr_ = pdsCommPtr;
356 #endif
357  outputLinear_ = true;
358  serialNumber_ = 0;
359 }
360 
361 //-----------------------------------------------------------------------------
362 // Function : N_NLS_LOCA::Group::outputLinearSystem_
363 // Purpose :
364 // Special Notes : for DCOP restart (debugging)
365 // Scope : private
366 // Creator : Dave Shirly
367 // Creation Date : 2006
368 //-----------------------------------------------------------------------------
369 void N_NLS_LOCA::Group::outputLinearSystem_ (N_LAS_Matrix* jacobian,
370  N_LAS_Vector* solPtr_,
371  N_LAS_Vector* resPtr_)
372 {
373  Xyce::NodeNamePairMap::iterator op_i;
374  Xyce::NodeNamePairMap::iterator op_end;
375  int i, row, global_row;
376  int num;
377  std::vector<int> col;
378  std::vector<double> val;
379  std::map<int,std::string> rowOut;
380  int rowLen, GID;
381 
382  if (!outputLinear_)
383  return;
384 
385 #ifdef Xyce_PARALLEL_MPI
386  N_PDS_ParMap * pmap_;
387  pmap_ = resPtr_->pmap();
388  int procID = pdsCommPtr_->procID();
389 #endif
390  op_i = allNodes_->begin();
391  op_end = allNodes_->end();
392  for ( ; op_i != op_end ; ++op_i)
393  {
394  std::ostringstream s;
395  row = (*op_i).second.first;
396 #ifdef Xyce_PARALLEL_MPI
397  global_row = pmap_->localToGlobalIndex(row);
398 #else
399  global_row = row;
400 #endif
401  s << "Global: " << global_row << " : " << (*op_i).first << " Row: " << global_row;
402  s << " Value: " << (*solPtr_)[row];
403  if (serialNumber_ > 0)
404  {
405  s << std::endl;
406  s << " Delta Value: " << (*solPtr_)[row] - oldSol_[row];
407  s << std::endl;
408  }
409  oldSol_[row] = (*solPtr_)[row];
410  s << " Residual: " << (*resPtr_)[row];
411 #ifdef Xyce_PARALLEL_MPI
412  s << " proc: " << procID;
413 #endif
414  s << std::endl;
415  rowLen = jacobian->getLocalRowLength(row);
416  col.resize(rowLen);
417  val.resize(rowLen);
418  jacobian->getRowCopy(global_row, rowLen, rowLen, &val[0], &col[0]);
419  for (i=0 ; i<rowLen ; i++)
420  {
421  if (i>1 && i%10 == 0)
422  s << std::endl;
423  GID = col[i];
424  s << " " << GID << "(" << val[i] << ")";
425  }
426  rowOut[global_row] = s.str();
427  }
428  serialNumber_++;
429  std::map<int,std::string>::iterator row_i;
430  std::map<int,std::string>::iterator row_end = rowOut.end();
431  row_i = rowOut.begin();
432  std::string str;
433 #ifdef Xyce_PARALLEL_MPI
434  int numG;
435  int pos, posG;
436  int len;
437  std::string buf;
438 #endif
439  int big=2000000000;
440  for ( ; ; ++row_i )
441  {
442  if (row_i == row_end)
443  {
444  str = "";
445  num = big;
446  }
447  else
448  {
449  str = (*row_i).second;
450  num = (*row_i).first;
451  }
452 #ifdef Xyce_PARALLEL_MPI
453  numG = -1;
454  while (numG != num)
455  {
456  pdsCommPtr_->minAll (&num, &numG, 1);
457  if (numG == big)
458  break;
459  if (num == numG)
460  pos = procID;
461  else
462  pos = 0;
463  pdsCommPtr_->sumAll (&pos, &posG, 1);
464  if (procID == 0)
465  {
466  if (posG != 0)
467  {
468  pdsCommPtr_->recv(&len, 1, posG);
469  buf.resize(len);
470  pdsCommPtr_->recv(&buf[0], len, posG);
471  Xyce::dout() << buf << std::endl;
472  }
473  else
474  Xyce::dout() << str << std::endl;
475  }
476  else if (procID == posG)
477  {
478  len = str.size();
479  pdsCommPtr_->send(&len, 1, 0);
480  pdsCommPtr_->send(str.c_str(), len, 0);
481  }
482  }
483  if (numG == big)
484  break;
485 #else
486  Xyce::dout() << str << std::endl;
487  if (num == big)
488  break;
489 #endif
490  }
491 }
492 
493 //-----------------------------------------------------------------------------
494 // Function : N_NLS_LOCA::Group::setParams
495 // Purpose :
496 // Special Notes :
497 // Scope : public
498 // Creator :
499 // Creation Date :
500 //-----------------------------------------------------------------------------
501 void N_NLS_LOCA::Group::setParams(const LOCA::ParameterVector& p)
502 {
504  params = p;
505  return;
506 }
507 
508 //-----------------------------------------------------------------------------
509 // Function : N_NLS_LOCA::Group::getParams
510 // Purpose :
511 // Special Notes :
512 // Scope : public
513 // Creator :
514 // Creation Date :
515 //-----------------------------------------------------------------------------
516 const LOCA::ParameterVector& N_NLS_LOCA::Group::getParams() const
517 {
518  return params;
519 }
520 
521 //-----------------------------------------------------------------------------
522 // Function : N_NLS_LOCA::Group::setParam
523 // Purpose :
524 // Special Notes :
525 // Scope : public
526 // Creator :
527 // Creation Date :
528 //-----------------------------------------------------------------------------
529 void N_NLS_LOCA::Group::setParam(int paramID, double value)
530 {
532  params.setValue(paramID, value);
533  return;
534 }
535 
536 //-----------------------------------------------------------------------------
537 // Function : N_NLS_LOCA::Group::getParam
538 // Purpose :
539 // Special Notes :
540 // Scope : public
541 // Creator :
542 // Creation Date :
543 //-----------------------------------------------------------------------------
544 double N_NLS_LOCA::Group::getParam(int paramID) const
545 {
546  return params.getValue(paramID);
547 }
548 
549 //-----------------------------------------------------------------------------
550 // Function : N_NLS_LOCA::Group::setParam
551 // Purpose :
552 // Special Notes :
553 // Scope : public
554 // Creator :
555 // Creation Date :
556 //-----------------------------------------------------------------------------
557 void N_NLS_LOCA::Group::setParam(std::string paramID, double value)
558 {
560  params.setValue(paramID, value);
561  return;
562 }
563 
564 //-----------------------------------------------------------------------------
565 // Function : N_NLS_LOCA::Group::getParam
566 // Purpose :
567 // Special Notes :
568 // Scope : public
569 // Creator :
570 // Creation Date :
571 //-----------------------------------------------------------------------------
572 double N_NLS_LOCA::Group::getParam(std::string paramID) const
573 {
574  return params.getValue(paramID);
575 }
576 
577 //-----------------------------------------------------------------------------
578 // Function : N_NLS_LOCA::Group::setScaleVec
579 // Purpose :
580 // Special Notes :
581 // Scope : public
582 // Creator :
583 // Creation Date :
584 //-----------------------------------------------------------------------------
585 void N_NLS_LOCA::Group::setScaleVec(const NOX::Abstract::Vector& s)
586 {
587  scalingVecPtr = &s;
588 }
589 
590 //-----------------------------------------------------------------------------
591 // Function : N_NLS_LOCA::Group::getScaleVec()
592 // Purpose :
593 // Special Notes :
594 // Scope : public
595 // Creator :
596 // Creation Date :
597 //-----------------------------------------------------------------------------
598 const NOX::Abstract::Vector& N_NLS_LOCA::Group::getScaleVec() const
599 {
600  if (scalingVecPtr == 0) {
601  const std::string message = "N_NLS_LOCA::Group::getScaleVec() - scaling vector not set!";
602  N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, message);
603  }
604 
605  return (*scalingVecPtr);
606 }
607 
608 //-----------------------------------------------------------------------------
609 // Function : N_NLS_LOCA::Group::augmentJacobianForHomotopy
610 // Purpose :
611 // Special Notes :
612 // Scope : public
613 // Creator :
614 // Creation Date :
615 //-----------------------------------------------------------------------------
616 NOX::Abstract::Group::ReturnType
618 {
619 
620  N_LAS_Matrix& jacobian =
621  const_cast<N_LAS_Matrix&>(sharedSystemPtr_->getJacobian());
622 
623  //jacobian.printPetraObject();
624  jacobian.scale(conParamValue);
625  jacobian.getDiagonal(*tmpVectorPtr);
626  (*tmpVectorPtr).addScalar(1.0 - conParamValue);
627  jacobian.replaceDiagonal(*tmpVectorPtr);
628  //jacobian.printPetraObject();
629 
630  return NOX::Abstract::Group::Ok;
631 }
632 
633 //-----------------------------------------------------------------------------
634 // Function : N_NLS_LOCA::Group::printSolution
635 // Purpose :
636 // Special Notes :
637 // Scope : public
638 // Creator :
639 // Creation Date :
640 //-----------------------------------------------------------------------------
641 void N_NLS_LOCA::Group::printSolution (const double conParam) const
642 {
643  // ERK: This is a KLUDGE! I put it here because the "printSolution"
644  // functions were the only place in this class that were called
645  // only after a continuation step was successful.
646  //
647  // Note: homotopy output is now called from the time integrator,
648  // so it is this function still results in the the solution being
649  // printed.
650  //
651  // Note: This will be replaced by "stepSuccess" (see below), once
652  // stepSuccess completely works.
653  anaInt.completeHomotopyStep
654  (params.getNamesVector(),
655  params.getValuesVector(),
656  xVec_.getNativeVectorPtr());
657 
658  return;
659 }
660 
661 //-----------------------------------------------------------------------------
662 // Function : N_NLS_LOCA::Group::printSolution
663 // Purpose :
664 // Special Notes :
665 // Scope : public
666 // Creator :
667 // Creation Date :
668 //-----------------------------------------------------------------------------
669 void N_NLS_LOCA::Group::printSolution (const NOX::Abstract::Vector &x,
670  const double conParam) const
671 {
672  const N_NLS_NOX::Vector& noxVector =
673  dynamic_cast<const N_NLS_NOX::Vector&>(x);
674 
675  // ERK: This is a KLUDGE! I put it here because the "printSolution"
676  // functions were the only place in this class that were called
677  // only after a continuation step was successful.
678  //
679  // Note: homotopy output is now called from the time integrator,
680  // so it is this function still results in the the solution being
681  // printed.
682  //
683  // Note: This will be replaced by "stepSuccess" (see below), once
684  // stepSuccess completely works.
685  anaInt.completeHomotopyStep
686  (params.getNamesVector(),
687  params.getValuesVector(),
688  xVec_.getNativeVectorPtr());
689 
690  return;
691 }
692 
693 //-----------------------------------------------------------------------------
694 // Function : N_NLS_LOCA::Group::stepFailed
695 // Purpose :
696 // Special Notes :
697 // Scope : public
698 // Creator :
699 // Creation Date :
700 //-----------------------------------------------------------------------------
702 {
703 #ifdef Xyce_DEBUG_NONLINEAR
704  Xyce::dout() << "In N_NLS_LOCA::Group::stepFailed" << std::endl;
705 #endif
706  anaInt.failHomotopyStep ();
707 }
708 
709 //-----------------------------------------------------------------------------
710 // Function : N_NLS_LOCA::Group::stepSucceeded
711 // Purpose :
712 // Special Notes :
713 // Scope : public
714 // Creator :
715 // Creation Date :
716 //-----------------------------------------------------------------------------
718 {
719 #ifdef Xyce_DEBUG_NONLINEAR
720  Xyce::dout() << "In N_NLS_LOCA::Group::stepSucceeded" << std::endl;
721 #endif
722 #ifdef Xyce_UPDATED_LOCA
723  // Do nothing. Unfortunately, this function doesn't get called
724  // on the initial solve. (for continuation param = initial value)
725  // So, for now, still have to use the printSolution function, which
726  // is called every time.
727  const std::string message = "N_NLS_LOCA::Group::stepSucceeded is not fully supported yet! Recompile without Xyce_UPDATED_LOCA defined\n";
728  N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, message);
729 #endif
730 }
731 
732 //-----------------------------------------------------------------------------
733 // Function : N_NLS_LOCA::Group::setAugmentLinearSystem
734 // Purpose :
735 // Special Notes :
736 // Scope : public
737 // Creator :
738 // Creation Date :
739 //-----------------------------------------------------------------------------
741  const Teuchos::RefCountPtr<N_NLS_NOX::AugmentLinSys>& ls)
742 {
743  useAugmentLinSys_ = enable_value;
744  augmentLSStrategy_ = ls;
745 }
746 
747 //-----------------------------------------------------------------------------
748 // Function : N_NLS_LOCA::Group::setNonContinuationFlag
749 // Purpose :
750 // Special Notes :
751 // Scope : public
752 // Creator :
753 // Creation Date :
754 //-----------------------------------------------------------------------------
756 {
757  nonContinuationSolve_ = value;
758 }
759 
760 //-----------------------------------------------------------------------------
761 // Function : N_NLS_LOCA::Group::getNonContinuationFlag
762 // Purpose :
763 // Special Notes :
764 // Scope : public
765 // Creator :
766 // Creation Date :
767 //-----------------------------------------------------------------------------
769 {
770  return nonContinuationSolve_;
771 }