Xyce  6.1
N_NLS_Manager.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-2015 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_Manager.C,v $
27 //
28 // Purpose : Body for the nonlinear solver manager class implementation
29 // which will allow for the creation and selection of NLS
30 // algorithms.
31 //
32 // Special Notes : GOF Strategy Pattern
33 //
34 // Creator : Scott A. Hutchinson, SNL, Parallel Computational Sciences
35 //
36 // Creation Date : 04/28/00
37 //
38 // Revision Information:
39 // ---------------------
40 //
41 // Revision Number: $Revision: 1.231 $
42 //
43 // Revision Date : $Date $
44 //
45 // Current Owner : $Author: erkeite $
46 //-------------------------------------------------------------------------
47 
48 #include <Xyce_config.h>
49 
50 // ---------- Xyce Includes ----------
51 
52 #include <N_ERH_ErrorMgr.h>
53 #include <N_IO_CmdParse.h>
54 #include <N_IO_OutputMgr.h>
55 #include <N_IO_PkgOptionsMgr.h>
57 #include <N_NLS_DampedNewton.h>
58 #include <N_NLS_Manager.h>
59 #include <N_NLS_NOX_Interface.h>
60 #include <N_NLS_NonLinInfo.h>
61 #include <N_NLS_Sensitivity.h>
62 #include <N_NLS_TwoLevelNewton.h>
63 #include <N_TIA_DataStore.h>
64 #include <N_UTL_Expression.h>
65 #include <N_UTL_FeatureTest.h>
66 
67 // ---------- Trilinos Includes ----------
68 
69 namespace Xyce {
70 namespace Nonlinear {
71 
72 enum {
87 };
88 
89 
90 //-----------------------------------------------------------------------------
91 // Function : Manager::Manager
92 // Purpose : constructor
93 // Special Notes :
94 // Scope : public
95 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
96 // Creation Date : 5/01/00
97 //-----------------------------------------------------------------------------
99  const IO::CmdParse & command_line)
100  : commandLine_(command_line),
101  nonlinearSolver_(0),
102  conductanceExtractorPtr_(0),
103  nlsSensitivityPtr_(0),
104  lasPrecPtr_(0),
105  matrixFreeFlag_(false),
106  noxFlag_(false),
107  noxFlagInner_(false),
108  noxFlagTransient_(false),
109  optionBlockMap_(),
110  initializeAllFlag_(false),
111  retCodes_(),
112  exprPtr_(0)
113 {}
114 
115 
116 //-----------------------------------------------------------------------------
117 // Function : Manager::~Manager
118 // Purpose : destructor
119 // Special Notes :
120 // Scope : public
121 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
122 // Creation Date : 5/01/00
123 //-----------------------------------------------------------------------------
124 
126 {
127  delete nonlinearSolver_;
128  delete nlsSensitivityPtr_;
130  delete exprPtr_;
131 }
132 
133 //-----------------------------------------------------------------------------
134 // Function : Manager::setOptions
135 // Purpose : Sets the nonlinear solver options.
136 // Special Notes :
137 // Scope : public
138 // Creator : Robert Hoekstra, SNL, Parallel Computational Sciences
139 // Creation Date : 9/29/00
140 //-----------------------------------------------------------------------------
141 bool Manager::setOptions(const Util::OptionBlock & option_block)
142 {
143  optionBlockMap_[OPTION_BLOCK_DCOP] = option_block;
144  return true;
145 }
146 
147 //-----------------------------------------------------------------------------
148 // Function : Manager::setTranOptions
149 // Purpose : Sets the nonlinear solver options.
150 // Special Notes :
151 // Scope : public
152 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
153 // Creation Date : 9/05/01
154 //-----------------------------------------------------------------------------
155 bool Manager::setTranOptions(const Util::OptionBlock & option_block)
156 {
157  optionBlockMap_[OPTION_BLOCK_TRANSIENT] = option_block;
158  return true;
159 }
160 
161 //-----------------------------------------------------------------------------
162 // Function : Manager::setNLPOptions
163 // Purpose : Sets the nonlinear solver options.
164 // Special Notes :
165 // Scope : public
166 // Creator : Eric Keiter, SNL
167 // Creation Date : 04/07/2015
168 //-----------------------------------------------------------------------------
169 bool Manager::setNLPOptions(const Util::OptionBlock & option_block)
170 {
171  optionBlockMap_[OPTION_BLOCK_NLP] = option_block;
172  return true;
173 }
174 
175 //-----------------------------------------------------------------------------
176 // Function : Manager::setHBOptions
177 // Purpose : Sets the nonlinear solver options.
178 // Special Notes :
179 // Scope : public
180 // Creator : Ting Mei, SNL
181 // Creation Date : 02/03/2009
182 //-----------------------------------------------------------------------------
183 bool Manager::setHBOptions(const Util::OptionBlock & option_block)
184 {
185  optionBlockMap_[OPTION_BLOCK_HB] = option_block;
186  return true;
187 }
188 
189 //-----------------------------------------------------------------------------
190 // Function : Manager::getHBOptions
191 // Purpose : Sets the nonlinear solver options.
192 // Special Notes :
193 // Scope : public
194 // Creator : Ting Mei, SNL
195 // Creation Date : 02/03/2009
196 //-----------------------------------------------------------------------------
197 Util::OptionBlock &
199 {
201 }
202 
203 //-----------------------------------------------------------------------------
204 // Function : Manager::setLinSolOptions
205 // Purpose :
206 // Special Notes :
207 // Scope : public
208 // Creator : Robert Hoekstra, SNL, Parallel Computational Sciences
209 // Creation Date : 11/9/00
210 //-----------------------------------------------------------------------------
211 bool Manager::setLinSolOptions(const Util::OptionBlock & option_block)
212 {
213  optionBlockMap_[OPTION_BLOCK_LINSOL] = option_block;
214  return true;
215 }
216 
217 //-----------------------------------------------------------------------------
218 // Function : Manager::setLocaOptions
219 // Purpose :
220 // Special Notes :
221 // Scope : public
222 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
223 // Creation Date : 05/02/03
224 //-----------------------------------------------------------------------------
225 bool Manager::setLocaOptions(const Util::OptionBlock & option_block)
226 {
227  optionBlockMap_[OPTION_BLOCK_LOCA] = option_block;
228  return true;
229 }
230 
231 //-----------------------------------------------------------------------------
232 // Function : Manager::setTwoLevelLocaOptions
233 // Purpose :
234 // Special Notes :
235 // Scope : public
236 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
237 // Creation Date : 05/02/03
238 //-----------------------------------------------------------------------------
239 bool Manager::setTwoLevelLocaOptions(const Util::OptionBlock & option_block)
240 {
242  return true;
243 }
244 
245 //-----------------------------------------------------------------------------
246 // Function : Manager::setTwoLevelOptions
247 // Purpose : This option setter will create a new class structure.
248 // Special Notes :
249 // Scope : public
250 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
251 // Creation Date : 10/20/02
252 //-----------------------------------------------------------------------------
253 bool Manager::setTwoLevelOptions(const Util::OptionBlock & option_block)
254 {
255  optionBlockMap_[OPTION_BLOCK_TWO_LEVEL] = option_block;
256 
257  return true;
258 }
259 
260 //-----------------------------------------------------------------------------
261 // Function : Manager::setTwoLevelTranOptions
262 // Purpose : This option setter will create a new class structure.
263 // Special Notes :
264 // Scope : public
265 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
266 // Creation Date : 10/20/02
267 //-----------------------------------------------------------------------------
268 bool Manager::setTwoLevelTranOptions(const Util::OptionBlock & option_block)
269 {
271 
272  return true;
273 }
274 
275 //-----------------------------------------------------------------------------
276 // Function : setReturnCodeOption
277 // Purpose :
278 // Special Notes :
279 // Scope : public
280 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
281 // Creation Date : 04/18/02
282 //-----------------------------------------------------------------------------
283 bool
285  const Util::Param & param)
286 {
287  if (param.uTag() == "NLNEARCONV" )
288  {
289  // nlNearConvFlag = static_cast<bool> (param.getImmutableValue<int>());
291  codes.nearConvergence = param.getImmutableValue<int>() ? 3 : -3;
292  setReturnCodes(codes);
293  }
294  else if (param.uTag() == "NLSMALLUPDATE" )
295  {
296  // nlSmallUpdateFlag = static_cast<bool> (param.getImmutableValue<int>());
298  codes.smallUpdate = param.getImmutableValue<int>() ? 4 : -4;
299  setReturnCodes(codes);
300  }
301  else
302  {
303  return false;
304  }
305 
306  return true;
307 }
308 
309 //-----------------------------------------------------------------------------
310 // Function : Manager::using Nox_
311 // Purpose : This function determines if we are using NOX or not.
312 // Special Notes :
313 // Scope : private
314 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
315 // Creation Date : 10/30/02
316 //-----------------------------------------------------------------------------
318 {
319  noxFlag_ = true;
320  noxFlagInner_ = true;
321  noxFlagTransient_ = true;
322 
323  const Util::OptionBlock &option_blockdcop = optionBlockMap_[OPTION_BLOCK_DCOP];
324  const Util::OptionBlock &option_blocktran = optionBlockMap_[OPTION_BLOCK_TRANSIENT];
325 
326  // scan for changes to the dcop values of noxFlag_
327  for (Util::ParamList::const_iterator it = option_blockdcop.begin(); it != option_blockdcop.end(); ++ it)
328  {
329  if ((*it).uTag() == "NOX")
330  {
331  noxFlag_ = (*it).getImmutableValue<int>();
333  }
334  }
335 
336  // now check for a nox flag on the .options twolevel line, if it exists.
337  OptionBlockMap::const_iterator obmIter = optionBlockMap_.find(OPTION_BLOCK_TWO_LEVEL) ;
338  if ( obmIter != optionBlockMap_.end() )
339  {
340  const Util::OptionBlock &option_blocktwoLevel = obmIter->second;
341  for (Util::ParamList::const_iterator it = option_blocktwoLevel.begin(); it != option_blocktwoLevel.end(); ++ it)
342  {
343  if ((*it).uTag() == "NOX")
344  {
345  noxFlagInner_ = (*it).getImmutableValue<int>();
346  }
347  }
348  }
349 
350 
351  // scan for changes to the transient value for noxFlagTransient_
352  for (Util::ParamList::const_iterator it = option_blocktran.begin(); it != option_blocktran.end(); ++ it)
353  {
354  if ((*it).uTag() == "NOX")
355  {
356  noxFlagTransient_ = (*it).getImmutableValue<int>();
357  }
358  }
359 
360  obmIter = optionBlockMap_.find(OPTION_BLOCK_HB) ;
361  if ( obmIter != optionBlockMap_.end() )
362  {
363  const Util::OptionBlock &option_blockhb = obmIter->second;
364  for (Util::ParamList::const_iterator it = option_blockhb.begin(); it != option_blockhb.end(); ++ it)
365  {
366  if ((*it).uTag() == "NOX")
367  {
368  noxFlag_ = (*it).getImmutableValue<int>();
370  }
371  }
372  }
373 
374  // now check if the command line has specified nox. The command line
375  // overrides the netlist.
376  if( commandLine_.getArgumentValue( "-nox" ) == "off" )
377  {
378  noxFlag_ = false;
379  noxFlagInner_ = false;
380  noxFlagTransient_ = false;
381  }
382 
383  if (DEBUG_NONLINEAR)
384  Xyce::dout() << "noxFlag is: " << (noxFlag_ ? "true" : "false") << std::endl
385  << "noxFlagTransient is: " << (noxFlagTransient_ ? "true" : "false") << std::endl;
386 }
387 
388 //-----------------------------------------------------------------------------
389 // Function : Manager::allocateSolver
390 // Purpose : This function determines which solver to allocate, and
391 // allocates it.
392 //
393 // Right now the possibilities are:
394 //
395 // DampedNewton
396 // NOXInterface
397 // TwoLevelNewton
398 //
399 // Special Notes :
400 // Scope : private
401 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
402 // Creation Date : 10/28/02
403 //-----------------------------------------------------------------------------
405  Analysis::AnalysisManager & analysis_manager,
406  Loader::NonlinearEquationLoader & nonlinear_equation_loader,
407  Linear::System & linear_system,
408  TimeIntg::DataStore & data_store,
409  Parallel::Manager & parallel_manager,
410  IO::InitialConditionsManager & initial_conditions_manager,
411  IO::OutputMgr & output_manager)
412 {
413  bool bsuccess = true;
414  bool bs1 = true;
415 
416  // determine if we are using NOX or not.
417  usingNox();
418 
419  // if ".options nonlin two-level" appeared in the netlist, then
420  // allocate the two-level solver. Otherwise allocate one of the single
421  // level solvers.
422 
423  delete nonlinearSolver_;
426  {
427  twoLevelNewtonFlag_ = true;
429  }
430  else
431  {
432  twoLevelNewtonFlag_ = false;
433  if (noxFlag_)
434  {
436  }
437  else
438  {
440  }
441  }
442 
443  // now register everything, now that the solver class is set up.
444  bs1 = nonlinearSolver_->registerLinearSystem(&linear_system); bsuccess = bsuccess && bs1;
445  bs1 = nonlinearSolver_->registerAnalysisManager(&analysis_manager); bsuccess = bsuccess && bs1;
446  bs1 = nonlinearSolver_->registerNonlinearEquationLoader(&nonlinear_equation_loader); bsuccess = bsuccess && bs1;
447  bs1 = nonlinearSolver_->registerTIADataStore(&data_store); bsuccess = bsuccess && bs1;
448 
449  if (lasPrecPtr_)
450  bs1 = nonlinearSolver_->registerPrecondFactory(lasPrecPtr_); bsuccess = bsuccess && bs1;
451 
452  OptionBlockMap::const_iterator it = optionBlockMap_.find(OPTION_BLOCK_DCOP) ;
453  if ( it != optionBlockMap_.end() )
454  {
455  const Util::OptionBlock &option_block = (*it).second;
456  bs1 = nonlinearSolver_->setOptions (option_block);
457  bsuccess = bsuccess && bs1;
458  }
459 
461  if ( it != optionBlockMap_.end() )
462  {
463  const Util::OptionBlock &option_block = (*it).second;
464  bs1 = nonlinearSolver_->setTranOptions (option_block);
465  bsuccess = bsuccess && bs1;
466  }
467 
468  it = optionBlockMap_.find(OPTION_BLOCK_NLP) ;
469  if ( it != optionBlockMap_.end() )
470  {
471  const Util::OptionBlock &option_block = (*it).second;
472  bs1 = nonlinearSolver_->setNLPOptions (option_block);
473  bsuccess = bsuccess && bs1;
474  }
475 
476  it = optionBlockMap_.find(OPTION_BLOCK_HB) ;
477  if ( it != optionBlockMap_.end() )
478  {
479  const Util::OptionBlock &option_block = (*it).second;
480  bs1 = nonlinearSolver_->setHBOptions (option_block);
481  bsuccess = bsuccess && bs1;
482  }
483 
485  if ( it != optionBlockMap_.end() )
486  {
487  const Util::OptionBlock &option_block = (*it).second;
488  bs1 = nonlinearSolver_->setLocaOptions (option_block);
489  bsuccess = bsuccess && bs1;
490  }
491 
493  if ( it != optionBlockMap_.end() )
494  {
495  const Util::OptionBlock &option_block = (*it).second;
496  bs1 = nonlinearSolver_->setTwoLevelOptions (option_block);
497  bsuccess = bsuccess && bs1;
498  }
499 
501  if ( it != optionBlockMap_.end() )
502  {
503  const Util::OptionBlock &option_block = (*it).second;
504  bs1 = nonlinearSolver_->setTwoLevelTranOptions (option_block);
505  bsuccess = bsuccess && bs1;
506  }
507 
509  if ( it != optionBlockMap_.end() )
510  {
511  const Util::OptionBlock &option_block = (*it).second;
512  bs1 = nonlinearSolver_->setTwoLevelLocaOptions (option_block);
513  bsuccess = bsuccess && bs1;
514  }
515 
517  if ( it != optionBlockMap_.end() )
518  {
519  const Util::OptionBlock &option_block = (*it).second;
520  bs1 = nonlinearSolver_->setLinsolOptions(option_block);
521  bsuccess = bsuccess && bs1;
522  }
523 
525  if ( it != optionBlockMap_.end() )
526  {
527  const Util::OptionBlock &option_block = (*it).second;
528  bs1 = nonlinearSolver_->setDCOPRestartOptions(option_block);
529  bsuccess = bsuccess && bs1;
530  }
531 
532  it = optionBlockMap_.find(OPTION_BLOCK_IC) ;
533  if ( it != optionBlockMap_.end() )
534  {
535  const Util::OptionBlock &option_block = (*it).second;
536  bs1 = nonlinearSolver_->setICOptions(option_block);
537  bsuccess = bsuccess && bs1;
538  }
539 
541  if ( it != optionBlockMap_.end() )
542  {
543  const Util::OptionBlock &option_block = (*it).second;
544  bs1 = nonlinearSolver_->setNodeSetOptions(option_block);
545  bsuccess = bsuccess && bs1;
546  }
547 
548  return bsuccess;
549 }
550 
551 //-----------------------------------------------------------------------------
552 // Function : Manager::initializeAll
553 // Purpose : This can only be called after the linear system
554 // (Linear::System) has been registered, and after all the
555 // options have been set.
556 //
557 // Special Notes : This function obtains the solution, temporary solution and
558 // rhs vectors from the LAS system class.
559 // Scope : public
560 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
561 // Creation Date : 6/12/00
562 //-----------------------------------------------------------------------------
563 bool
565  Analysis::AnalysisManager & analysis_manager,
566  Loader::NonlinearEquationLoader & nonlinear_equation_loader,
567  Linear::System & linear_system,
568  TimeIntg::DataStore & data_store,
569  Parallel::Manager & parallel_manager,
570  IO::InitialConditionsManager & initial_conditions_manager,
571  IO::OutputMgr & output_manager,
572  Topo::Topology & topology)
573 {
574  bool bsuccess = true;
575  bool bs1 = true;
576  bool bs2 = true;
577 
578  bs1 = allocateSolver(analysis_manager, nonlinear_equation_loader, linear_system, data_store, parallel_manager, initial_conditions_manager, output_manager);
579  bsuccess = bsuccess && bs1;
580 
582  nonlinearSolver_->registerParallelMgr(&parallel_manager);
583  nonlinearSolver_->registerInitialConditionsManager(&initial_conditions_manager);
584  nonlinearSolver_->registerOutputMgr(&output_manager);
585  bs2 = nonlinearSolver_->initializeAll(); bsuccess = bsuccess && bs2;
586 
588 
589  initializeAllFlag_ = true;
590 
592  {
594  }
595 
596  return bsuccess;
597 }
598 
599 //-----------------------------------------------------------------------------
600 // Function : Manager::allocateTranSolver
601 // Purpose : Allocate a different solver for transient problems if
602 // the user has requested a different one.
603 // Special Notes :
604 // Scope : public
605 // Creator : Rich Schiek, Electrical and Microsystems Modeling
606 // Creation Date : 12/22/08
607 //-----------------------------------------------------------------------------
608 void
610  Analysis::AnalysisManager & analysis_manager,
611  Loader::NonlinearEquationLoader & nonlinear_equation_loader,
612  Linear::System & linear_system,
613  TimeIntg::DataStore & data_store,
614  Parallel::Manager & parallel_manager,
615  IO::OutputMgr & output_manager,
616  Topo::Topology & topology)
617 {
618  bool bsuccess = true;
619  bool bs1 = true;
620 
621  // only do a reallocation if the the solver type is changing from dcop to transient
623  {
624  delete nonlinearSolver_;
626 
627  if (noxFlagTransient_)
628  {
630  }
631  else
632  {
634  }
635 
636  OptionBlockMap::const_iterator it = optionBlockMap_.find(OPTION_BLOCK_LINSOL) ;
637  if ( it != optionBlockMap_.end() )
638  {
639  const Util::OptionBlock &option_block = (*it).second;
640  bs1 = nonlinearSolver_->setLinsolOptions(option_block);
641  bsuccess = bsuccess && bs1;
642  }
643 
645  if (it != optionBlockMap_.end())
646  {
647  const Util::OptionBlock &option_block = (*it).second;
648  bs1 = nonlinearSolver_->setTranOptions (option_block);
649  bsuccess = bsuccess && bs1;
650  }
651 
652  // now register everything, now that the solver class is set up.
653  nonlinearSolver_->registerLinearSystem(&linear_system);
654  nonlinearSolver_->registerAnalysisManager(&analysis_manager);
655  nonlinearSolver_->registerNonlinearEquationLoader(&nonlinear_equation_loader);
657  nonlinearSolver_->registerOutputMgr(&output_manager);
658  nonlinearSolver_->registerParallelMgr(&parallel_manager);
659 
663 
664  initializeAllFlag_ = true;
665 
667  }
668 }
669 
670 //-----------------------------------------------------------------------------
671 // Function : Manager::getNonLinInfo
672 // Purpose :
673 // Special Notes :
674 // Scope : public
675 // Creator : Eric R. Keiter, Parallel Computational Sciences
676 // Creation Date : 12/05/02
677 //-----------------------------------------------------------------------------
679 {
680  NonLinInfo nlInfo;
681 
685 
686  if (nlInfo.locaFlag)
687  {
691  }
692 
693  return nlInfo;
694 }
695 
696 //-----------------------------------------------------------------------------
697 // Function : solve
698 // Purpose :
699 // Special Notes :
700 // Scope : public
701 // Creator : Tamara Kolda, SNL, CSMR
702 // Creation Date : 1/30/02
703 //-----------------------------------------------------------------------------
705 {
706  int status = 0;
707 
708  status = nonlinearSolver_->solve();
709  if (status >= 0)
710  {
711  if (!exprPtr_)
712  exprPtr_ = new Util::Expression(std::string("0"));
713 
714  exprPtr_->set_accepted_time();
715  }
716 
717  return status;
718 }
719 
720 //-----------------------------------------------------------------------------
721 // Function : setAnalysisMode
722 // Purpose :
723 // Special Notes :
724 // Scope : public
725 // Creator : Tamara Kolda, SNL, CSMR
726 // Creation Date : 1/30/02
727 //-----------------------------------------------------------------------------
729 {
731 }
732 
733 //-----------------------------------------------------------------------------
734 // Function : resetAll
735 // Purpose : like setAnalysisMode, but will also result in NOX
736 // resetting a few extra things.
737 // Special Notes :
738 // Scope : public
739 // Creator : Eric Keiter, SNL, 9233
740 // Creation Date : 1/30/02
741 //-----------------------------------------------------------------------------
743 {
744  nonlinearSolver_->resetAll (mode);
745 }
746 
747 //-----------------------------------------------------------------------------
748 // Function : Manager::setSensOptions
749 // Purpose :
750 // Special Notes :
751 // Scope : public
752 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
753 // Creation Date : 11/18/02
754 //-----------------------------------------------------------------------------
755 bool Manager::setSensOptions (const Util::OptionBlock & option_block)
756 {
757  optionBlockMap_[OPTION_BLOCK_SENS] = option_block;
758  return true;
759 }
760 
761 //-----------------------------------------------------------------------------
762 // Function : Manager::setSensitivityOptions
763 // Purpose :
764 // Special Notes :
765 // Scope : public
766 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
767 // Creation Date : 11/18/02
768 //-----------------------------------------------------------------------------
769 bool Manager::setSensitivityOptions (const Util::OptionBlock & option_block)
770 {
772  return true;
773 }
774 
775 //-----------------------------------------------------------------------------
776 // Function : Manager::enableSensitivity
777 // Purpose :
778 // Special Notes :
779 // Scope : public
780 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
781 // Creation Date : 04/30/03
782 //-----------------------------------------------------------------------------
783 bool
785  TimeIntg::DataStore & data_store,
786  Parallel::Manager & parallel_manager,
787  Topo::Topology & topology)
788 {
789  bool bsuccess = true;
790 
791  if (!nlsSensitivityPtr_)
792  {
793  Stats::StatTop _sensitivityStat("Setup");
794 
795  bool b1 = setupSensitivity(data_store, parallel_manager, topology);
796  bsuccess = bsuccess && b1;
797  }
798  return bsuccess;
799 }
800 
801 //-----------------------------------------------------------------------------
802 // Function : Manager::icSensitivity
803 // Purpose :
804 // Special Notes :
805 // Scope : public
806 // Creator : Eric R. Keiter, SNL
807 // Creation Date :
808 //-----------------------------------------------------------------------------
810  std::vector<double> & objectiveVec,
811  std::vector<double> & dOdpVec,
812  std::vector<double> & dOdpAdjVec,
813  std::vector<double> & scaled_dOdpVec,
814  std::vector<double> & scaled_dOdpAdjVec)
815 {
816  if (!nlsSensitivityPtr_)
817  {
818  Report::DevelFatal0().in("Manager::isSensitivity") << "Manager::enableSensitivity must be called first";
819  return false;
820  }
821 
822  return nlsSensitivityPtr_->icSensitivity(objectiveVec, dOdpVec, dOdpAdjVec, scaled_dOdpVec, scaled_dOdpAdjVec);
823 }
824 
825 //-----------------------------------------------------------------------------
826 // Function : Manager::calcSensitivity
827 // Purpose : This is the controller function for performing a direct
828 // sensitivity calculation. It is generally called from
829 // the time integration package, as only that package really
830 // knows when to do it... (I may change this later.)
831 // Special Notes :
832 // Scope : public
833 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
834 // Creation Date : 10/31/02
835 //-----------------------------------------------------------------------------
837 (
838  std::vector<double> & objectiveVec,
839  std::vector<double> & dOdpVec,
840  std::vector<double> & dOdpAdjVec,
841  std::vector<double> & scaled_dOdpVec,
842  std::vector<double> & scaled_dOdpAdjVec)
843 {
844  bool bsuccess = true;
845 
846  if (!nlsSensitivityPtr_)
847  {
848  Report::DevelFatal0().in("Manager::calcSensitivity") << "Manager::enableSensitivity must be called first";
849  return false;
850  }
851 
852  bsuccess = nlsSensitivityPtr_->solve(objectiveVec, dOdpVec, dOdpAdjVec, scaled_dOdpVec, scaled_dOdpAdjVec);
853 
854  return bsuccess;
855 }
856 
857 //-----------------------------------------------------------------------------
858 // Function : Manager::setupSensitivity
859 // Purpose :
860 // Special Notes :
861 // Scope : private
862 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
863 // Creation Date : 10/31/02
864 //-----------------------------------------------------------------------------
865 bool
867  TimeIntg::DataStore & data_store,
868  Parallel::Manager & parallel_manager,
869  Topo::Topology & topology)
870 {
871  if (nlsSensitivityPtr_)
872  {
873  Report::DevelFatal0().in("Manager::setupSensitivity") << "Manager::enableSensitivity may only be called once";
874  return false;
875  }
876 
877  bool bsuccess = true;
878  bool bs1 = true;
879 
881  bs1 = nlsSensitivityPtr_->registerParallelMgr(&parallel_manager); bsuccess = bsuccess && bs1;
882  bs1 = nlsSensitivityPtr_->registerTIADataStore(&data_store); bsuccess = bsuccess && bs1;
883 
884  OptionBlockMap::const_iterator it = optionBlockMap_.find(OPTION_BLOCK_SENS) ;
885  if ( it != optionBlockMap_.end() )
886  {
887  const Util::OptionBlock &option_block = it->second;
888  bs1 = nlsSensitivityPtr_->setOptions(option_block);
889  bsuccess = bsuccess && bs1;
890  }
891 
893  if ( it != optionBlockMap_.end() )
894  {
895  const Util::OptionBlock &option_block = it->second;
896  bs1 = nlsSensitivityPtr_->setSensitivityOptions(option_block);
897  bsuccess = bsuccess && bs1;
898  }
899 
900  return bsuccess;
901 }
902 
903 //-----------------------------------------------------------------------------
904 // Function : Manager::setReturnCodes
905 // Purpose :
906 // Special Notes :
907 // Scope : public
908 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
909 // Creation Date : 7/02/03
910 //-----------------------------------------------------------------------------
911 void Manager::setReturnCodes(const ReturnCodes & retCodeTmp)
912 {
913  retCodes_ = retCodeTmp;
914  if (initializeAllFlag_)
915  {
917  }
918 }
919 
920 //-----------------------------------------------------------------------------
921 // Function : Manager::getReturnCodes
922 // Purpose :
923 // Special Notes :
924 // Scope : public
925 // Creator : Rich Schiek, Electrical and MEMS Modeling
926 // Creation Date : 9/28/2009
927 //-----------------------------------------------------------------------------
929 {
930  // the ReturnCodes structure is very simple, so just
931  // return a copy of it.
932  return retCodes_;
933 }
934 
935 //-----------------------------------------------------------------------------
936 // Function : Manager::setDCOPRestartOptions
937 // Purpose :
938 // Special Notes :
939 // Scope : public
940 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
941 // Creation Date : 09/17/07
942 //-----------------------------------------------------------------------------
943 bool Manager::setDCOPRestartOptions (const Util::OptionBlock& option_block )
944 {
946  return true;
947 }
948 
949 //-----------------------------------------------------------------------------
950 // Function : Manager::setICOptions
951 // Purpose :
952 // Special Notes :
953 // Scope : public
954 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
955 // Creation Date : 09/17/07
956 //-----------------------------------------------------------------------------
957 bool Manager::setICOptions (const Util::OptionBlock& option_block )
958 {
959  optionBlockMap_[OPTION_BLOCK_IC] = option_block;
960  return true;
961 }
962 
963 //-----------------------------------------------------------------------------
964 // Function : Manager::setNodeSetOptions
965 // Purpose :
966 // Special Notes :
967 // Scope : public
968 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
969 // Creation Date : 09/25/07
970 //-----------------------------------------------------------------------------
971 bool Manager::setNodeSetOptions (const Util::OptionBlock& option_block )
972 {
973  optionBlockMap_[OPTION_BLOCK_NODESET] = option_block;
974  return true;
975 }
976 
977 namespace {
978 
979 void
980 populateMetadata(
981  IO::PkgOptionsMgr & options_manager)
982 {
983  {
984  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("NONLIN-NLP");
985 
986  parameters.insert(Util::ParamMap::value_type("NLSTRATEGY", Util::Param("NLSTRATEGY", 0)));
987  parameters.insert(Util::ParamMap::value_type("SEARCHMETHOD", Util::Param("SEARCHMETHOD", 0)));
988  parameters.insert(Util::ParamMap::value_type("NOX", Util::Param("NOX", 1)));
989  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0E-12)));
990  parameters.insert(Util::ParamMap::value_type("RELTOL", Util::Param("RELTOL", 1.0E-3)));
991  parameters.insert(Util::ParamMap::value_type("DELTAXTOL", Util::Param("DELTAXTOL", 1.0)));
992  parameters.insert(Util::ParamMap::value_type("SMALLUPDATETOL", Util::Param("SMALLUPDATETOL", 1.0e-6)));
993  parameters.insert(Util::ParamMap::value_type("RHSTOL", Util::Param("RHSTOL", 1.0E-6)));
994  parameters.insert(Util::ParamMap::value_type("MAXSTEP", Util::Param("MAXSTEP", 200)));
995  parameters.insert(Util::ParamMap::value_type("MAXSEARCHSTEP", Util::Param("MAXSEARCHSTEP", 0)));
996  parameters.insert(Util::ParamMap::value_type("NORMLVL", Util::Param("NORMLVL", 2)));
997  parameters.insert(Util::ParamMap::value_type("LINOPT", Util::Param("LINOPT", 0)));
998  parameters.insert(Util::ParamMap::value_type("CONSTRAINTBT", Util::Param("CONSTRAINTBT", 0)));
999  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMAX", Util::Param("CONSTRAINTMAX", Util::MachineDependentParams::DoubleMax())));
1000  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMIN", Util::Param("CONSTRAINTMIN", -Util::MachineDependentParams::DoubleMax())));
1001  parameters.insert(Util::ParamMap::value_type("CONSTRAINTCHANGE", Util::Param("CONSTRAINTCHANGE", 0.0)));
1002  parameters.insert(Util::ParamMap::value_type("IN_FORCING", Util::Param("IN_FORCING", 0)));
1003  parameters.insert(Util::ParamMap::value_type("AZ_TOL", Util::Param("AZ_TOL", 1.0E-12)));
1004  parameters.insert(Util::ParamMap::value_type("DLSDEBUG", Util::Param("DLSDEBUG", 0)));
1005  parameters.insert(Util::ParamMap::value_type("MATRIXMARKET", Util::Param("MATRIXMARKET", 0)));
1006  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
1007  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
1008  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 99999999)));
1009  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
1010  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 1.0E99)));
1011  parameters.insert(Util::ParamMap::value_type("SCREENOUTPUT", Util::Param("SCREENOUTPUT", 0)));
1012  parameters.insert(Util::ParamMap::value_type("USEMASKING", Util::Param("USEMASKING", 0)));
1013  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEPTYPE", Util::Param("RECOVERYSTEPTYPE", 0)));
1014  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEP", Util::Param("RECOVERYSTEP", 1.0)));
1015  parameters.insert(Util::ParamMap::value_type("MEMORY", Util::Param("MEMORY", 400)));
1016  parameters.insert(Util::ParamMap::value_type("CONTINUATION", Util::Param("CONTINUATION", 0)));
1017  parameters.insert(Util::ParamMap::value_type("ENFORCEDEVICECONV", Util::Param("ENFORCEDEVICECONV", 1)));
1018  }
1019 
1020  {
1021  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("NONLIN-TRAN");
1022 
1023  parameters.insert(Util::ParamMap::value_type("NLSTRATEGY", Util::Param("NLSTRATEGY", 0)));
1024  parameters.insert(Util::ParamMap::value_type("SEARCHMETHOD", Util::Param("SEARCHMETHOD", 0)));
1025  parameters.insert(Util::ParamMap::value_type("NOX", Util::Param("NOX", 1)));
1026  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0E-6)));
1027  parameters.insert(Util::ParamMap::value_type("RELTOL", Util::Param("RELTOL", 1.0E-2)));
1028  parameters.insert(Util::ParamMap::value_type("DELTAXTOL", Util::Param("DELTAXTOL", 0.33)));
1029  parameters.insert(Util::ParamMap::value_type("SMALLUPDATETOL", Util::Param("SMALLUPDATETOL", 1.0e-6)));
1030  parameters.insert(Util::ParamMap::value_type("RHSTOL", Util::Param("RHSTOL", 1.0E-2)));
1031  parameters.insert(Util::ParamMap::value_type("MAXSTEP", Util::Param("MAXSTEP", 20)));
1032  parameters.insert(Util::ParamMap::value_type("MAXSEARCHSTEP", Util::Param("MAXSEARCHSTEP", 2)));
1033  parameters.insert(Util::ParamMap::value_type("NORMLVL", Util::Param("NORMLVL", 2)));
1034  parameters.insert(Util::ParamMap::value_type("LINOPT", Util::Param("LINOPT", 0)));
1035  parameters.insert(Util::ParamMap::value_type("CONSTRAINTBT", Util::Param("CONSTRAINTBT", 0)));
1036  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMAX", Util::Param("CONSTRAINTMAX", Util::MachineDependentParams::DoubleMax())));
1037  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMIN", Util::Param("CONSTRAINTMIN", -Util::MachineDependentParams::DoubleMax())));
1038  parameters.insert(Util::ParamMap::value_type("CONSTRAINTCHANGE", Util::Param("CONSTRAINTCHANGE", 0.0)));
1039  parameters.insert(Util::ParamMap::value_type("IN_FORCING", Util::Param("IN_FORCING", 0)));
1040  parameters.insert(Util::ParamMap::value_type("AZ_TOL", Util::Param("AZ_TOL", 1.0E-12)));
1041  parameters.insert(Util::ParamMap::value_type("DLSDEBUG", Util::Param("DLSDEBUG", 0)));
1042  parameters.insert(Util::ParamMap::value_type("MATRIXMARKET", Util::Param("MATRIXMARKET", 0)));
1043  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
1044  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
1045  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 99999999)));
1046  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
1047  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 1.0E99)));
1048  parameters.insert(Util::ParamMap::value_type("SCREENOUTPUT", Util::Param("SCREENOUTPUT", 0)));
1049  parameters.insert(Util::ParamMap::value_type("USEMASKING", Util::Param("USEMASKING", 0)));
1050  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEPTYPE", Util::Param("RECOVERYSTEPTYPE", 0)));
1051  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEP", Util::Param("RECOVERYSTEP", 1.0)));
1052  parameters.insert(Util::ParamMap::value_type("MEMORY", Util::Param("MEMORY", 400)));
1053  parameters.insert(Util::ParamMap::value_type("CONTINUATION", Util::Param("CONTINUATION", 0)));
1054  parameters.insert(Util::ParamMap::value_type("ENFORCEDEVICECONV", Util::Param("ENFORCEDEVICECONV", 0)));
1055  }
1056 
1057  {
1058  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("NONLIN-HB");
1059 
1060  parameters.insert(Util::ParamMap::value_type("NLSTRATEGY", Util::Param("NLSTRATEGY", 0)));
1061  parameters.insert(Util::ParamMap::value_type("SEARCHMETHOD", Util::Param("SEARCHMETHOD", 0)));
1062  parameters.insert(Util::ParamMap::value_type("NOX", Util::Param("NOX", 0)));
1063  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0E-9)));
1064  parameters.insert(Util::ParamMap::value_type("RELTOL", Util::Param("RELTOL", 1.0E-2)));
1065  parameters.insert(Util::ParamMap::value_type("DELTAXTOL", Util::Param("DELTAXTOL", 0.33)));
1066  parameters.insert(Util::ParamMap::value_type("SMALLUPDATETOL", Util::Param("SMALLUPDATETOL", 1.0e-6)));
1067  parameters.insert(Util::ParamMap::value_type("RHSTOL", Util::Param("RHSTOL", 1.0E-6)));
1068  parameters.insert(Util::ParamMap::value_type("MAXSTEP", Util::Param("MAXSTEP", 200)));
1069  parameters.insert(Util::ParamMap::value_type("MAXSEARCHSTEP", Util::Param("MAXSEARCHSTEP", 2)));
1070  parameters.insert(Util::ParamMap::value_type("NORMLVL", Util::Param("NORMLVL", 2)));
1071  parameters.insert(Util::ParamMap::value_type("LINOPT", Util::Param("LINOPT", 0)));
1072  parameters.insert(Util::ParamMap::value_type("CONSTRAINTBT", Util::Param("CONSTRAINTBT", 0)));
1073  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMAX", Util::Param("CONSTRAINTMAX", Util::MachineDependentParams::DoubleMax())));
1074  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMIN", Util::Param("CONSTRAINTMIN", -Util::MachineDependentParams::DoubleMax())));
1075  parameters.insert(Util::ParamMap::value_type("CONSTRAINTCHANGE", Util::Param("CONSTRAINTCHANGE", 0.0)));
1076  parameters.insert(Util::ParamMap::value_type("IN_FORCING", Util::Param("IN_FORCING", 0)));
1077  parameters.insert(Util::ParamMap::value_type("AZ_TOL", Util::Param("AZ_TOL", 1.0E-12)));
1078  parameters.insert(Util::ParamMap::value_type("DLSDEBUG", Util::Param("DLSDEBUG", 0)));
1079  parameters.insert(Util::ParamMap::value_type("MATRIXMARKET", Util::Param("MATRIXMARKET", 0)));
1080  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
1081  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
1082  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 99999999)));
1083  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
1084  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 1.0E99)));
1085  parameters.insert(Util::ParamMap::value_type("SCREENOUTPUT", Util::Param("SCREENOUTPUT", 0)));
1086  parameters.insert(Util::ParamMap::value_type("USEMASKING", Util::Param("USEMASKING", 0)));
1087  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEPTYPE", Util::Param("RECOVERYSTEPTYPE", 0)));
1088  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEP", Util::Param("RECOVERYSTEP", 1.0)));
1089  parameters.insert(Util::ParamMap::value_type("MEMORY", Util::Param("MEMORY", 400)));
1090  parameters.insert(Util::ParamMap::value_type("CONTINUATION", Util::Param("CONTINUATION", 0)));
1091  parameters.insert(Util::ParamMap::value_type("ENFORCEDEVICECONV", Util::Param("ENFORCEDEVICECONV", 0)));
1092  }
1093 
1094  {
1095  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("NONLIN-TWOLEVEL");
1096 
1097  parameters.insert(Util::ParamMap::value_type("NLSTRATEGY", Util::Param("NLSTRATEGY", 0)));
1098  parameters.insert(Util::ParamMap::value_type("SEARCHMETHOD", Util::Param("SEARCHMETHOD", 0)));
1099  parameters.insert(Util::ParamMap::value_type("NOX", Util::Param("NOX", 1)));
1100  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0E-12)));
1101  parameters.insert(Util::ParamMap::value_type("RELTOL", Util::Param("RELTOL", 1.0E-3)));
1102  parameters.insert(Util::ParamMap::value_type("DELTAXTOL", Util::Param("DELTAXTOL", 1.0)));
1103  parameters.insert(Util::ParamMap::value_type("SMALLUPDATETOL", Util::Param("SMALLUPDATETOL", 1.0e-6)));
1104  parameters.insert(Util::ParamMap::value_type("RHSTOL", Util::Param("RHSTOL", 1.0E-6)));
1105  parameters.insert(Util::ParamMap::value_type("MAXSTEP", Util::Param("MAXSTEP", 200)));
1106  parameters.insert(Util::ParamMap::value_type("MAXSEARCHSTEP", Util::Param("MAXSEARCHSTEP", 0)));
1107  parameters.insert(Util::ParamMap::value_type("NORMLVL", Util::Param("NORMLVL", 2)));
1108  parameters.insert(Util::ParamMap::value_type("LINOPT", Util::Param("LINOPT", 0)));
1109  parameters.insert(Util::ParamMap::value_type("CONSTRAINTBT", Util::Param("CONSTRAINTBT", 0)));
1110  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMAX", Util::Param("CONSTRAINTMAX", Util::MachineDependentParams::DoubleMax())));
1111  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMIN", Util::Param("CONSTRAINTMIN", -Util::MachineDependentParams::DoubleMax())));
1112  parameters.insert(Util::ParamMap::value_type("CONSTRAINTCHANGE", Util::Param("CONSTRAINTCHANGE", 0.0)));
1113  parameters.insert(Util::ParamMap::value_type("IN_FORCING", Util::Param("IN_FORCING", 0)));
1114  parameters.insert(Util::ParamMap::value_type("AZ_TOL", Util::Param("AZ_TOL", 1.0E-12)));
1115  parameters.insert(Util::ParamMap::value_type("DLSDEBUG", Util::Param("DLSDEBUG", 0)));
1116  parameters.insert(Util::ParamMap::value_type("MATRIXMARKET", Util::Param("MATRIXMARKET", 0)));
1117  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
1118  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
1119  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 99999999)));
1120  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
1121  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 1.0E99)));
1122  parameters.insert(Util::ParamMap::value_type("SCREENOUTPUT", Util::Param("SCREENOUTPUT", 0)));
1123  parameters.insert(Util::ParamMap::value_type("USEMASKING", Util::Param("USEMASKING", 0)));
1124  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEPTYPE", Util::Param("RECOVERYSTEPTYPE", 0)));
1125  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEP", Util::Param("RECOVERYSTEP", 1.0)));
1126  parameters.insert(Util::ParamMap::value_type("MEMORY", Util::Param("MEMORY", 400)));
1127  parameters.insert(Util::ParamMap::value_type("CONTINUATION", Util::Param("CONTINUATION", 0)));
1128  parameters.insert(Util::ParamMap::value_type("ENFORCEDEVICECONV", Util::Param("ENFORCEDEVICECONV", 0)));
1129  parameters.insert(Util::ParamMap::value_type("ALGORITHM", Util::Param("ALGORITHM", 0)));
1130  parameters.insert(Util::ParamMap::value_type("MAXCONTSTEPS", Util::Param("MAXCONTSTEPS", 0)));
1131  parameters.insert(Util::ParamMap::value_type("CONTINUATIONFLAG", Util::Param("CONTINUATIONFLAG", 1)));
1132  parameters.insert(Util::ParamMap::value_type("INNERFAIL", Util::Param("INNERFAIL", 1)));
1133  parameters.insert(Util::ParamMap::value_type("EXITWITHFAILURE", Util::Param("EXITWITHFAILURE", 1)));
1134  parameters.insert(Util::ParamMap::value_type("FULLNEWTONENFORCE", Util::Param("FULLNEWTONENFORCE", 1)));
1135  parameters.insert(Util::ParamMap::value_type("CONPARAM", Util::Param("CONPARAM", "VA:V0")));
1136  parameters.insert(Util::ParamMap::value_type("VOLTLIMTOL", Util::Param("VOLTLIMTOL", 1.0e-6)));
1137  }
1138 
1139  {
1140  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("NONLIN-TWOLEVEL-TRAN");
1141 
1142  parameters.insert(Util::ParamMap::value_type("NLSTRATEGY", Util::Param("NLSTRATEGY", 0)));
1143  parameters.insert(Util::ParamMap::value_type("SEARCHMETHOD", Util::Param("SEARCHMETHOD", 0)));
1144  parameters.insert(Util::ParamMap::value_type("NOX", Util::Param("NOX", 1)));
1145  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0E-6)));
1146  parameters.insert(Util::ParamMap::value_type("RELTOL", Util::Param("RELTOL", 1.0E-2)));
1147  parameters.insert(Util::ParamMap::value_type("DELTAXTOL", Util::Param("DELTAXTOL", 0.33)));
1148  parameters.insert(Util::ParamMap::value_type("SMALLUPDATETOL", Util::Param("SMALLUPDATETOL", 1.0e-6)));
1149  parameters.insert(Util::ParamMap::value_type("RHSTOL", Util::Param("RHSTOL", 1.0E-2)));
1150  parameters.insert(Util::ParamMap::value_type("MAXSTEP", Util::Param("MAXSTEP", 20)));
1151  parameters.insert(Util::ParamMap::value_type("MAXSEARCHSTEP", Util::Param("MAXSEARCHSTEP", 2)));
1152  parameters.insert(Util::ParamMap::value_type("NORMLVL", Util::Param("NORMLVL", 2)));
1153  parameters.insert(Util::ParamMap::value_type("LINOPT", Util::Param("LINOPT", 0)));
1154  parameters.insert(Util::ParamMap::value_type("CONSTRAINTBT", Util::Param("CONSTRAINTBT", 0)));
1155  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMAX", Util::Param("CONSTRAINTMAX", Util::MachineDependentParams::DoubleMax())));
1156  parameters.insert(Util::ParamMap::value_type("CONSTRAINTMIN", Util::Param("CONSTRAINTMIN", -Util::MachineDependentParams::DoubleMax())));
1157  parameters.insert(Util::ParamMap::value_type("CONSTRAINTCHANGE", Util::Param("CONSTRAINTCHANGE", 0.0)));
1158  parameters.insert(Util::ParamMap::value_type("IN_FORCING", Util::Param("IN_FORCING", 0)));
1159  parameters.insert(Util::ParamMap::value_type("AZ_TOL", Util::Param("AZ_TOL", 1.0E-12)));
1160  parameters.insert(Util::ParamMap::value_type("DLSDEBUG", Util::Param("DLSDEBUG", 0)));
1161  parameters.insert(Util::ParamMap::value_type("MATRIXMARKET", Util::Param("MATRIXMARKET", 0)));
1162  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
1163  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
1164  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 99999999)));
1165  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
1166  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 1.0E99)));
1167  parameters.insert(Util::ParamMap::value_type("SCREENOUTPUT", Util::Param("SCREENOUTPUT", 0)));
1168  parameters.insert(Util::ParamMap::value_type("USEMASKING", Util::Param("USEMASKING", 0)));
1169  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEPTYPE", Util::Param("RECOVERYSTEPTYPE", 0)));
1170  parameters.insert(Util::ParamMap::value_type("RECOVERYSTEP", Util::Param("RECOVERYSTEP", 1.0)));
1171  parameters.insert(Util::ParamMap::value_type("MEMORY", Util::Param("MEMORY", 400)));
1172  parameters.insert(Util::ParamMap::value_type("CONTINUATION", Util::Param("CONTINUATION", 0)));
1173  parameters.insert(Util::ParamMap::value_type("ENFORCEDEVICECONV", Util::Param("ENFORCEDEVICECONV", 0)));
1174  parameters.insert(Util::ParamMap::value_type("ALGORITHM", Util::Param("ALGORITHM", 0)));
1175  parameters.insert(Util::ParamMap::value_type("MAXCONTSTEPS", Util::Param("MAXCONTSTEPS", 0)));
1176  parameters.insert(Util::ParamMap::value_type("CONTINUATIONFLAG", Util::Param("CONTINUATIONFLAG", 1)));
1177  parameters.insert(Util::ParamMap::value_type("INNERFAIL", Util::Param("INNERFAIL", 1)));
1178  parameters.insert(Util::ParamMap::value_type("EXITWITHFAILURE", Util::Param("EXITWITHFAILURE", 1)));
1179  parameters.insert(Util::ParamMap::value_type("FULLNEWTONENFORCE", Util::Param("FULLNEWTONENFORCE", 1)));
1180  parameters.insert(Util::ParamMap::value_type("CONPARAM", Util::Param("CONPARAM", "VA:V0")));
1181  parameters.insert(Util::ParamMap::value_type("VOLTLIMTOL", Util::Param("VOLTLIMTOL", 1.0e-6)));
1182  }
1183 
1184  {
1185  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("LOCA");
1186 
1187  parameters.insert(Util::ParamMap::value_type("STEPPER", Util::Param("STEPPER", "NATURAL")));
1188  parameters.insert(Util::ParamMap::value_type("PREDICTOR", Util::Param("PREDICTOR", "CONSTANT")));
1189  parameters.insert(Util::ParamMap::value_type("STEPCONTROL", Util::Param("STEPCONTROL", "CONSTANT")));
1190 
1191  parameters.insert(Util::ParamMap::value_type("CONPARAM", Util::Param("CONPARAM", "VECTOR")));
1192  parameters.insert(Util::ParamMap::value_type("INITIALVALUE", Util::Param("INITIALVALUE", "VECTOR")));
1193  parameters.insert(Util::ParamMap::value_type("MAXVALUE", Util::Param("MAXVALUE", "VECTOR")));
1194  parameters.insert(Util::ParamMap::value_type("MINVALUE", Util::Param("MINVALUE", "VECTOR")));
1195  parameters.insert(Util::ParamMap::value_type("INITIALSTEPSIZE", Util::Param("INITIALSTEPSIZE", "VECTOR")));
1196  parameters.insert(Util::ParamMap::value_type("MAXSTEPSIZE", Util::Param("MAXSTEPSIZE", "VECTOR")));
1197  parameters.insert(Util::ParamMap::value_type("MINSTEPSIZE", Util::Param("MINSTEPSIZE", "VECTOR")));
1198  parameters.insert(Util::ParamMap::value_type("AGGRESSIVENESS", Util::Param("AGGRESSIVENESS", "VECTOR")));
1199  parameters.insert(Util::ParamMap::value_type("BIFPARAM", Util::Param("BIFPARAM", "VA:V0")));
1200  parameters.insert(Util::ParamMap::value_type("MAXSTEPS", Util::Param("MAXSTEPS", 20)));
1201  parameters.insert(Util::ParamMap::value_type("MAXNLITERS", Util::Param("MAXNLITERS", 20)));
1202  parameters.insert(Util::ParamMap::value_type("PARAMLIST", Util::Param("PARAMLIST", "VECTOR")));
1203  parameters.insert(Util::ParamMap::value_type("VOLTAGELIST", Util::Param("VOLTAGELIST", "DOFS")));
1204  parameters.insert(Util::ParamMap::value_type("VOLTAGESCALEFACTOR", Util::Param("VOLTAGESCALEFACTOR", 1.0)));
1205  parameters.insert(Util::ParamMap::value_type("RESIDUALCONDUCTANCE", Util::Param("RESIDUALCONDUCTANCE", 0.0)));
1206  }
1207 
1208  {
1209  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("TWOLEVEL-LOCA");
1210 
1211  parameters.insert(Util::ParamMap::value_type("STEPPER", Util::Param("STEPPER", "NATURAL")));
1212  parameters.insert(Util::ParamMap::value_type("PREDICTOR", Util::Param("PREDICTOR", "CONSTANT")));
1213  parameters.insert(Util::ParamMap::value_type("STEPCONTROL", Util::Param("STEPCONTROL", "CONSTANT")));
1214  parameters.insert(Util::ParamMap::value_type("CONPARAM", Util::Param("CONPARAM", "VECTOR")));
1215  parameters.insert(Util::ParamMap::value_type("INITIALVALUE", Util::Param("INITIALVALUE", "VECTOR")));
1216  parameters.insert(Util::ParamMap::value_type("MAXVALUE", Util::Param("MAXVALUE", "VECTOR")));
1217  parameters.insert(Util::ParamMap::value_type("MINVALUE", Util::Param("MINVALUE", "VECTOR")));
1218  parameters.insert(Util::ParamMap::value_type("INITIALSTEPSIZE", Util::Param("INITIALSTEPSIZE", "VECTOR")));
1219  parameters.insert(Util::ParamMap::value_type("MAXSTEPSIZE", Util::Param("MAXSTEPSIZE", "VECTOR")));
1220  parameters.insert(Util::ParamMap::value_type("MINSTEPSIZE", Util::Param("MINSTEPSIZE", "VECTOR")));
1221  parameters.insert(Util::ParamMap::value_type("AGGRESSIVENESS", Util::Param("AGGRESSIVENESS", "VECTOR")));
1222  parameters.insert(Util::ParamMap::value_type("BIFPARAM", Util::Param("BIFPARAM", "VA:V0")));
1223  parameters.insert(Util::ParamMap::value_type("MAXSTEPS", Util::Param("MAXSTEPS", 20)));
1224  parameters.insert(Util::ParamMap::value_type("MAXNLITERS", Util::Param("MAXNLITERS", 20)));
1225  parameters.insert(Util::ParamMap::value_type("PARAMLIST", Util::Param("PARAMLIST", "VECTOR")));
1226  parameters.insert(Util::ParamMap::value_type("VOLTAGELIST", Util::Param("VOLTAGELIST", "DOFS")));
1227  parameters.insert(Util::ParamMap::value_type("VOLTAGESCALEFACTOR", Util::Param("VOLTAGESCALEFACTOR", 1.0)));
1228  parameters.insert(Util::ParamMap::value_type("RESIDUALCONDUCTANCE", Util::Param("RESIDUALCONDUCTANCE", 0.0)));
1229  }
1230 
1231  {
1232  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("LINSOL");
1233 
1234  parameters.insert(Util::ParamMap::value_type("AZ_max_iter", Util::Param("AZ_max_iter", 500)));
1235  parameters.insert(Util::ParamMap::value_type("AZ_precond", Util::Param("AZ_precond", 14)));
1236  parameters.insert(Util::ParamMap::value_type("AZ_solver", Util::Param("AZ_solver", 1)));
1237  parameters.insert(Util::ParamMap::value_type("AZ_conv", Util::Param("AZ_conv", 0)));
1238  parameters.insert(Util::ParamMap::value_type("AZ_pre_calc", Util::Param("AZ_pre_calc", 1)));
1239  parameters.insert(Util::ParamMap::value_type("AZ_keep_info", Util::Param("AZ_keep_info", 1)));
1240  parameters.insert(Util::ParamMap::value_type("AZ_orthog", Util::Param("AZ_orthog", 1)));
1241  parameters.insert(Util::ParamMap::value_type("AZ_subdomain_solve", Util::Param("AZ_subdomain_solve", 9)));
1242  parameters.insert(Util::ParamMap::value_type("AZ_ilut_fill", Util::Param("AZ_ilut_fill", 3.0)));
1243  parameters.insert(Util::ParamMap::value_type("AZ_drop", Util::Param("AZ_drop", 1.0E-3)));
1244  parameters.insert(Util::ParamMap::value_type("AZ_reorder", Util::Param("AZ_reorder", 0)));
1245  parameters.insert(Util::ParamMap::value_type("AZ_scaling", Util::Param("AZ_scaling", 0)));
1246  parameters.insert(Util::ParamMap::value_type("AZ_kspace", Util::Param("AZ_kspace", 500)));
1247  parameters.insert(Util::ParamMap::value_type("AZ_tol", Util::Param("AZ_tol", 1.0E-12)));
1248  parameters.insert(Util::ParamMap::value_type("AZ_output", Util::Param("AZ_output", 0)));
1249  parameters.insert(Util::ParamMap::value_type("AZ_diagnostics", Util::Param("AZ_diagnostics", 0)));
1250  parameters.insert(Util::ParamMap::value_type("AZ_overlap", Util::Param("AZ_overlap", 0)));
1251  parameters.insert(Util::ParamMap::value_type("AZ_rthresh", Util::Param("AZ_rthresh", 1.0001)));
1252  parameters.insert(Util::ParamMap::value_type("AZ_athresh", Util::Param("AZ_athresh", 1.0E-4)));
1253  parameters.insert(Util::ParamMap::value_type("AZ_filter", Util::Param("AZ_filter", 0.0)));
1254  parameters.insert(Util::ParamMap::value_type("TR_filter", Util::Param("TR_filter", 0.0)));
1255  parameters.insert(Util::ParamMap::value_type("TR_partition", Util::Param("TR_partition", 1)));
1256 #ifdef Xyce_SHYLU
1257  parameters.insert(Util::ParamMap::value_type("ShyLU_rthresh", Util::Param("ShyLU_rthresh", 1.0E-3)));
1258 #endif
1259 #ifdef Xyce_USE_ISORROPIA
1260  parameters.insert(Util::ParamMap::value_type("TR_partition_type", Util::Param("TR_partition_type", "GRAPH")));
1261 #endif
1262  parameters.insert(Util::ParamMap::value_type("TR_reindex", Util::Param("TR_reindex", 1)));
1263  parameters.insert(Util::ParamMap::value_type("TR_solvermap", Util::Param("TR_solvermap", 1)));
1264  parameters.insert(Util::ParamMap::value_type("TR_amd", Util::Param("TR_amd", 1)));
1265  parameters.insert(Util::ParamMap::value_type("TR_btf", Util::Param("TR_btf", 0)));
1266  parameters.insert(Util::ParamMap::value_type("TR_global_btf", Util::Param("TR_global_btf", 0)));
1267  parameters.insert(Util::ParamMap::value_type("TR_global_btf_droptol", Util::Param("TR_global_btf_droptol", 1.0E-16)));
1268  parameters.insert(Util::ParamMap::value_type("TR_global_btf_verbose", Util::Param("TR_global_btf_verbose", 0)));
1269 #ifdef Xyce_TRILINOS_DEV
1270  parameters.insert(Util::ParamMap::value_type("TR_global_amd", Util::Param("TR_global_amd", 0)));
1271  parameters.insert(Util::ParamMap::value_type("TR_global_amd_verbose", Util::Param("TR_global_amd_verbose", 0)));
1272 #endif
1273  parameters.insert(Util::ParamMap::value_type("TR_singleton_filter", Util::Param("TR_singleton_filter", 0)));
1274  parameters.insert(Util::ParamMap::value_type("SLU_EQUILIBRATE", Util::Param("SLU_EQUILIBRATE", 1)));
1275  parameters.insert(Util::ParamMap::value_type("SLU_REFACTOR", Util::Param("SLU_REFACTOR", 1)));
1276  parameters.insert(Util::ParamMap::value_type("SLU_PERMUTE", Util::Param("SLU_PERMUTE", 2)));
1277  parameters.insert(Util::ParamMap::value_type("SLU_PIVOT_THRESH", Util::Param("SLU_PIVOT_THRESH", -1.0)));
1278  parameters.insert(Util::ParamMap::value_type("SLU_FILL_FAC", Util::Param("SLU_FILL_FAC", -1)));
1279  parameters.insert(Util::ParamMap::value_type("BTF", Util::Param("BTF", 0)));
1280  parameters.insert(Util::ParamMap::value_type("BTF_VERBOSE", Util::Param("BTF_VERBOSE", 0)));
1281  parameters.insert(Util::ParamMap::value_type("BTF_ATHRESH", Util::Param("BTF_ATHRESH", 0.0)));
1282  parameters.insert(Util::ParamMap::value_type("BTF_RTHRESH", Util::Param("BTF_RTHRESH", 0.0)));
1283  parameters.insert(Util::ParamMap::value_type("BTF_RTHRESH_INIT", Util::Param("BTF_RTHRESH_INIT", 0.0)));
1284  parameters.insert(Util::ParamMap::value_type("BTF_INIT", Util::Param("BTF_INIT", 0)));
1285  parameters.insert(Util::ParamMap::value_type("BTF_THRESHOLDING", Util::Param("BTF_THRESHOLDING", 0)));
1286  parameters.insert(Util::ParamMap::value_type("BTF_RNTHRESHFAC", Util::Param("BTF_RNTHRESHFAC", 1.0e-3)));
1287  parameters.insert(Util::ParamMap::value_type("adaptive_solve", Util::Param("adaptive_solve", 0)));
1288  parameters.insert(Util::ParamMap::value_type("use_aztec_precond", Util::Param("use_aztec_precond", 1)));
1289  parameters.insert(Util::ParamMap::value_type("use_ifpack_factory", Util::Param("use_ifpack_factory", 0)));
1290  parameters.insert(Util::ParamMap::value_type("ifpack_type", Util::Param("ifpack_type", "Amesos")));
1291  parameters.insert(Util::ParamMap::value_type("diag_perturb", Util::Param("diag_perturb", 0.0)));
1292 #ifdef Xyce_ML
1293  parameters.insert(Util::ParamMap::value_type("ML_max_level", Util::Param("ML_max_level", 5)));
1294 #endif
1295  parameters.insert(Util::ParamMap::value_type("TR_rcm", Util::Param("TR_rcm", 0)));
1296  parameters.insert(Util::ParamMap::value_type("TR_scale", Util::Param("TR_scale", 0)));
1297  parameters.insert(Util::ParamMap::value_type("TR_scale_left", Util::Param("TR_scale_left", 0)));
1298  parameters.insert(Util::ParamMap::value_type("TR_scale_right", Util::Param("TR_scale_right", 0)));
1299  parameters.insert(Util::ParamMap::value_type("TR_scale_exp", Util::Param("TR_scale_exp", 1.0)));
1300  parameters.insert(Util::ParamMap::value_type("TR_scale_iter", Util::Param("TR_scale_iter", 0)));
1301  parameters.insert(Util::ParamMap::value_type("TYPE", Util::Param("TYPE", "DEFAULT")));
1302  parameters.insert(Util::ParamMap::value_type("PREC_TYPE", Util::Param("PREC_TYPE", "DEFAULT")));
1303 #ifdef Xyce_BELOS
1304  parameters.insert(Util::ParamMap::value_type("BELOS_SOLVER_TYPE", Util::Param("BELOS_SOLVER_TYPE", "Block GMRES")));
1305 #endif
1306  parameters.insert(Util::ParamMap::value_type("KLU_REPIVOT", Util::Param("KLU_REPIVOT", 1)));
1307  parameters.insert(Util::ParamMap::value_type("KLU_REINDEX", Util::Param("KLU_REINDEX", 0)));
1308  parameters.insert(Util::ParamMap::value_type("OUTPUT_LS", Util::Param("OUTPUT_LS", 1)));
1309  parameters.insert(Util::ParamMap::value_type("OUTPUT_BASE_LS", Util::Param("OUTPUT_BASE_LS", 1)));
1310  parameters.insert(Util::ParamMap::value_type("OUTPUT_FAILED_LS", Util::Param("OUTPUT_FAILED_LS", 1)));
1311  }
1312 }
1313 
1314 } // namespace <unnamed>
1315 
1316 //-----------------------------------------------------------------------------
1317 // Function : registerPkgOptionsMgr
1318 // Purpose :
1319 // Special Notes :
1320 // Scope : public
1321 // Creator : Rich Schiek, 1437
1322 // Creation Date : 10/21/08
1323 //-----------------------------------------------------------------------------
1324 bool registerPkgOptionsMgr(Manager &manager, IO::PkgOptionsMgr &options_manager)
1325 {
1326  populateMetadata(options_manager);
1328  Nonlinear::NLParams::populateMetadata(options_manager);
1329 
1330  options_manager.addCommandProcessor("SENS", IO::createRegistrationOptions(manager, &Manager::setSensOptions));
1331  options_manager.addCommandProcessor("IC", IO::createRegistrationOptions(manager, &Manager::setICOptions));
1332  options_manager.addCommandProcessor("NODESET", IO::createRegistrationOptions(manager, &Manager::setNodeSetOptions));
1333 
1334  options_manager.addOptionsProcessor("NONLIN", IO::createRegistrationOptions(manager, &Manager::setOptions));
1335  options_manager.addOptionsProcessor("NONLIN-TRAN", IO::createRegistrationOptions(manager, &Manager::setTranOptions));
1336  options_manager.addOptionsProcessor("NONLIN-NLP", IO::createRegistrationOptions(manager, &Manager::setNLPOptions));
1337  options_manager.addOptionsProcessor("NONLIN-HB", IO::createRegistrationOptions(manager, &Manager::setHBOptions));
1338  options_manager.addOptionsProcessor("LINSOL", IO::createRegistrationOptions(manager, &Manager::setLinSolOptions));
1339  options_manager.addOptionsProcessor("LOCA", IO::createRegistrationOptions(manager, &Manager::setLocaOptions));
1340  options_manager.addOptionsProcessor("SENSITIVITY", IO::createRegistrationOptions(manager, &Manager::setSensitivityOptions));
1341  options_manager.addOptionsProcessor("NONLIN-TWOLEVEL", IO::createRegistrationOptions(manager, &Manager::setTwoLevelOptions));
1342  options_manager.addOptionsProcessor("NONLIN-TWOLEVEL-TRAN", IO::createRegistrationOptions(manager, &Manager::setTwoLevelTranOptions));
1343  options_manager.addOptionsProcessor("DCOP", IO::createRegistrationOptions(manager, &Manager::setDCOPRestartOptions));
1344 
1345  return true;
1346 }
1347 
1348 } // namespace Nonlinear
1349 } // namespace Xyce
bool setTranOptions(const Util::OptionBlock &option_block)
bool enableSensitivity(TimeIntg::DataStore &data_store, Parallel::Manager &parallel_manager, Topo::Topology &topology)
static void populateMetadata(IO::PkgOptionsMgr &options_manager)
virtual bool isFirstContinuationParam() const =0
bool noxFlagTransient_
For 2-level newton, option for inner loop to use nox.
void setMatrixFreeFlag(bool matrixFreeFlag)
NonLinInfo getNonLinInfo() const
bool icSensitivity(std::vector< double > &objectiveVec, std::vector< double > &dOdpVec, std::vector< double > &dOdpAdjVec, std::vector< double > &scaled_dOdpVec, std::vector< double > &scaled_dOdpAdjVec)
virtual bool setTwoLevelLocaOptions(const Util::OptionBlock &OB)
virtual int getContinuationStep() const =0
bool setSensOptions(const Util::OptionBlock &option_block)
virtual int solve(NonLinearSolver *nlsTmpPtr=NULL)=0
bool setTwoLevelTranOptions(const Util::OptionBlock &option_block)
virtual bool setTranOptions(const Util::OptionBlock &OB)=0
virtual bool setTwoLevelOptions(const Util::OptionBlock &OB)
virtual bool setNodeSetOptions(const Util::OptionBlock &OB)
bool calcSensitivity(std::vector< double > &objectiveVec, std::vector< double > &dOdpVec, std::vector< double > &dOdpAdjVec, std::vector< double > &scaled_dOdpVec, std::vector< double > &scaled_dOdpAdjVec)
Pure virtual class to augment a linear system.
OptionBlockMap optionBlockMap_
Use nox in transient phase of calculation.
static void populateMetadata(IO::PkgOptionsMgr &options_manager)
virtual bool setNLPOptions(const Util::OptionBlock &OB)=0
bool registerPkgOptionsMgr(Manager &manager, IO::PkgOptionsMgr &options_manager)
virtual void setReturnCodes(const ReturnCodes &retCodesTmp)
virtual bool setICOptions(const Util::OptionBlock &OB)
bool setTwoLevelLocaOptions(const Util::OptionBlock &option_block)
bool setLocaOptions(const Util::OptionBlock &option_block)
virtual void resetAll(AnalysisMode mode)
void setAnalysisMode(AnalysisMode mode)
ConductanceExtractor * conductanceExtractorPtr_
bool allocateSolver(Analysis::AnalysisManager &analysis_manager, Loader::NonlinearEquationLoader &nonlinear_equation_loader, Linear::System &linear_system, TimeIntg::DataStore &data_store, Parallel::Manager &parallel_manager, IO::InitialConditionsManager &initial_conditions_manager, IO::OutputMgr &output_manager)
Manager(const IO::CmdParse &command_line)
Definition: N_NLS_Manager.C:98
bool setNodeSetOptions(const Util::OptionBlock &option_block)
bool setLinSolOptions(const Util::OptionBlock &option_block)
void resetAll(AnalysisMode mode)
bool setSensitivityOptions(const Util::OptionBlock &option_block)
virtual bool isFirstSolveComplete() const =0
const ReturnCodes & getReturnCodes() const
bool registerInitialConditionsManager(IO::InitialConditionsManager *outPtr)
void setReturnCodes(const ReturnCodes &retCodeTmp)
virtual TwoLevelNewtonMode getCouplingMode()
bool registerPrecondFactory(const Linear::PrecondFactory *ptr)
bool icSensitivity(std::vector< double > &objectiveVec, std::vector< double > &dOdpVec, std::vector< double > &dOdpAdjVec, std::vector< double > &scaled_dOdpVec, std::vector< double > &scaled_dOdpAdjVec)
bool noxFlagInner_
Flag to determine if NOX is the solver in use.
bool setOptions(const Util::OptionBlock &OB)
TwoLevelNewtonMode twoLevelNewtonCouplingMode
bool initializeAll(Analysis::AnalysisManager &analysis_manager, Loader::NonlinearEquationLoader &nonlinear_equation_loader, Linear::System &linear_system, TimeIntg::DataStore &data_store, Parallel::Manager &parallel_manager, IO::InitialConditionsManager &initial_conditions_manager, IO::OutputMgr &output_manager, Topo::Topology &topology)
bool setSensitivityOptions(const Util::OptionBlock &OB)
bool noxFlag_
Flag to determine if we are doing 2-level newton or not.
Util::OptionBlock & getHBOptions()
const IO::CmdParse & commandLine_
bool setICOptions(const Util::OptionBlock &option_block)
bool setHBOptions(const Util::OptionBlock &option_block)
virtual bool registerTIADataStore(TimeIntg::DataStore *ptr)
bool setOptions(const Util::OptionBlock &option_block)
bool setupSensitivity(TimeIntg::DataStore &data_store, Parallel::Manager &parallel_manager, Topo::Topology &topology)
virtual bool registerLinearSystem(Linear::System *ptr)
virtual bool setLinsolOptions(const Util::OptionBlock &OB)
NonLinearSolver * nonlinearSolver_
bool setTwoLevelOptions(const Util::OptionBlock &option_block)
const Linear::PrecondFactory * lasPrecPtr_
Util::Expression * exprPtr_
Return Codes.
virtual bool registerParallelMgr(N_PDS_Manager *ptr)
bool setNLPOptions(const Util::OptionBlock &option_block)
virtual bool registerAnalysisManager(Analysis::AnalysisManager *tmp_anaIntPtr)
void allocateTranSolver(Analysis::AnalysisManager &analysis_manager, Loader::NonlinearEquationLoader &nonlinear_equation_loader, Linear::System &linear_system, TimeIntg::DataStore &data_store, Parallel::Manager &parallel_manager, IO::OutputMgr &output_manager, Topo::Topology &topology)
virtual void setAnalysisMode(AnalysisMode mode)=0
virtual bool setHBOptions(const Util::OptionBlock &OB)=0
Sensitivity * nlsSensitivityPtr_
bool initializeAllFlag_
netlist option blocks until we know which
bool registerOutputMgr(IO::OutputMgr *outPtr)
virtual bool setDCOPRestartOptions(const Util::OptionBlock &OB)
virtual bool setOptions(const Util::OptionBlock &OB)=0
virtual int getNumIterations() const =0
virtual bool registerNonlinearEquationLoader(Loader::NonlinearEquationLoader *ptr)
virtual bool setTwoLevelTranOptions(const Util::OptionBlock &OB)
bool setDCOPRestartOptions(const Util::OptionBlock &option_block)
bool setReturnCodeOption(const Util::Param &param)
virtual bool setLocaOptions(const Util::OptionBlock &OB)