#include <trilinos_nox_nonlinear_solver.h>
Inherits NonlinearSolver< T >.
typedef NonlinearImplicitSystem sys_type
NoxNonlinearSolver (sys_type &system)
~NoxNonlinearSolver ()
virtual void clear ()
virtual void init ()
virtual std::pair< unsigned int, Real > solve (SparseMatrix< T > &, NumericVector< T > &, NumericVector< T > &, const double, const unsigned int)
bool initialized () const
const sys_type & system () const
sys_type & system ()
void attach_preconditioner (Preconditioner< T > *preconditioner)
static AutoPtr< NonlinearSolver< T > > build (sys_type &s, const SolverPackage solver_package=libMesh::default_solver_package())
static std::string get_info ()
static void print_info ()
static unsigned int n_objects ()
void(* residual )(const NumericVector< Number > &X, NumericVector< Number > &R)
void(* jacobian )(const NumericVector< Number > &X, SparseMatrix< Number > &J)
void(* matvec )(const NumericVector< Number > &X, NumericVector< Number > *R, SparseMatrix< Number > *J)
unsigned int max_nonlinear_iterations
unsigned int max_function_evaluations
Real absolute_residual_tolerance
Real relative_residual_tolerance
Real absolute_step_tolerance
Real relative_step_tolerance
unsigned int max_linear_iterations
Real initial_linear_tolerance
Real minimum_linear_tolerance
bool converged
typedef std::map< std::string, std::pair< unsigned int, unsigned int > > Counts
void increment_constructor_count (const std::string &name)
void increment_destructor_count (const std::string &name)
sys_type & _system
bool _is_initialized
Preconditioner< T > * _preconditioner
static Counts _counts
static Threads::atomic< unsigned int > _n_objects
static Threads::spin_mutex _mutex
NOX::Solver::Generic * _solver
Problem_Interface * _interface
Author:
Definition at line 54 of file trilinos_nox_nonlinear_solver.h.
Definition at line 105 of file reference_counter.h.
Reimplemented from NonlinearSolver< T >.
Definition at line 60 of file trilinos_nox_nonlinear_solver.h.
Definition at line 109 of file trilinos_nox_nonlinear_solver.h.
:
NonlinearSolver<T>(system)
{
}
Definition at line 118 of file trilinos_nox_nonlinear_solver.h.
{
this->clear ();
}
Definition at line 79 of file nonlinear_solver.C.
References libMesh::libMeshPrivateData::_is_initialized.
{
if(this->_is_initialized)
{
std::cerr<<'Preconditioner must be attached before the solver is initialized!'<<std::endl;
libmesh_error();
}
_preconditioner = preconditioner;
}
Definition at line 36 of file nonlinear_solver.C.
References libMeshEnums::PETSC_SOLVERS, AutoPtr< Tp >::reset(), and TRILINOS_SOLVERS.
{
AutoPtr<NonlinearSolver<T> > ap;
// Build the appropriate solver
switch (solver_package)
{
#ifdef LIBMESH_HAVE_PETSC
case PETSC_SOLVERS:
ap.reset(new PetscNonlinearSolver<T>(s));
break;
#endif
#ifdef LIBMESH_HAVE_NOX
case TRILINOS_SOLVERS:
ap.reset(new NoxNonlinearSolver<T>(s));
break;
#endif
default:
std::cerr << 'ERROR: Unrecognized solver package: '
<< solver_package
<< std::endl;
libmesh_error();
}
return ap;
}
Reimplemented from NonlinearSolver< T >.
Definition at line 138 of file trilinos_nox_nonlinear_solver.C.
{
// if (this->initialized())
// {
// this->_is_initialized = false;
// int ierr=0;
// ierr = SNESDestroy(_snes);
// CHKERRABORT(libMesh::COMM_WORLD,ierr);
// }
}
Definition at line 45 of file reference_counter.C.
References ReferenceCounter::_counts, and Quality::name().
Referenced by ReferenceCounter::print_info().
{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
std::ostringstream out;
out << '
<< ' ----------------------------------------------------------------------------
<< '| Reference count information |
<< ' ---------------------------------------------------------------------------- ;
for (Counts::iterator it = _counts.begin();
it != _counts.end(); ++it)
{
const std::string name(it->first);
const unsigned int creations = it->second.first;
const unsigned int destructions = it->second.second;
out << '| ' << name << ' reference count information:
<< '| Creations: ' << creations << '
<< '| Destructions: ' << destructions << ';
}
out << ' ---------------------------------------------------------------------------- ;
return out.str();
#else
return '';
#endif
}
Definition at line 149 of file reference_counter.h.
References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.
Referenced by ReferenceCountedObject< Value >::ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.first++;
}
Definition at line 167 of file reference_counter.h.
References ReferenceCounter::_counts, Quality::name(), and Threads::spin_mtx.
Referenced by ReferenceCountedObject< Value >::~ReferenceCountedObject().
{
Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
std::pair<unsigned int, unsigned int>& p = _counts[name];
p.second++;
}
Implements NonlinearSolver< T >.
Definition at line 152 of file trilinos_nox_nonlinear_solver.C.
References libMesh::initialized().
{
if (!this->initialized())
_interface = new Problem_Interface(this);
}
Definition at line 83 of file nonlinear_solver.h.
{ return _is_initialized; }
Definition at line 76 of file reference_counter.h.
References ReferenceCounter::_n_objects.
Referenced by System::read_serialized_blocked_dof_objects(), and System::write_serialized_blocked_dof_objects().
{ return _n_objects; }
Definition at line 83 of file reference_counter.C.
References ReferenceCounter::get_info().
{
#if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG)
std::cout << ReferenceCounter::get_info();
#endif
}
Implements NonlinearSolver< T >.
Definition at line 160 of file trilinos_nox_nonlinear_solver.C.
References libMesh::init(), and EpetraVector< T >::vec().
{
this->init ();
EpetraVector<T> * x_epetra = libmesh_cast_ptr<EpetraVector<T>*>(&x_in);
EpetraVector<T> * r_epetra = libmesh_cast_ptr<EpetraVector<T>*>(&r_in);
Teuchos::RCP<Epetra_Vector> x_t(x_epetra->vec());
Teuchos::RCP<Epetra_Vector> r_t(r_epetra->vec());
NOX::Epetra::Vector x(x_t, NOX::Epetra::Vector::CreateView);
NOX::Epetra::Vector r(r_t, NOX::Epetra::Vector::CreateView);
Teuchos::RCP<Teuchos::ParameterList> nlParamsPtr =
Teuchos::rcp(new Teuchos::ParameterList);
Teuchos::ParameterList& nlParams = *(nlParamsPtr.get());
nlParams.set('Nonlinear Solver', 'Line Search Based');
//print params
Teuchos::ParameterList& printParams = nlParams.sublist('Printing');
printParams.set('Output Precision', 3);
printParams.set('Output Processor', 0);
printParams.set('Output Information',
NOX::Utils::OuterIteration +
NOX::Utils::OuterIterationStatusTest +
NOX::Utils::InnerIteration +
NOX::Utils::LinearSolverDetails +
NOX::Utils::Parameters +
NOX::Utils::Details +
NOX::Utils::Warning);
//create linear system
Teuchos::RCP<NOX::Epetra::Interface::Required> iReq(_interface);
Teuchos::RCP<NOX::Epetra::MatrixFree> MF =
Teuchos::rcp(new NOX::Epetra::MatrixFree(printParams,
iReq,
x));
Teuchos::ParameterList& dirParams = nlParams.sublist('Direction');
dirParams.set('Method', 'Newton');
Teuchos::ParameterList& newtonParams = dirParams.sublist('Newton');
newtonParams.set('Forcing Term Method', 'Constant');
Teuchos::ParameterList& lsParams = newtonParams.sublist('Linear Solver');
lsParams.set('Aztec Solver', 'GMRES');
lsParams.set('Max Iterations', static_cast<int>(this->max_linear_iterations));
lsParams.set('Tolerance', this->initial_linear_tolerance); lsParams.set('Output Frequency', 1);
// lsParams.set('Preconditioner', 'AztecOO');
Teuchos::RCP<NOX::Epetra::Interface::Jacobian> iJac = MF;
Teuchos::RCP<NOX::Epetra::LinearSystemAztecOO> linSys =
Teuchos::rcp(new NOX::Epetra::LinearSystemAztecOO(printParams, lsParams,
iReq, iJac, MF,
x));
//create group
Teuchos::RCP<NOX::Epetra::Group> grpPtr =
Teuchos::rcp(new NOX::Epetra::Group(printParams,
iReq,
x,
linSys));
NOX::Epetra::Group& grp = *(grpPtr.get());
Teuchos::RCP<NOX::StatusTest::NormF> absresid =
Teuchos::rcp(new NOX::StatusTest::NormF(this->absolute_residual_tolerance, NOX::StatusTest::NormF::Unscaled));
Teuchos::RCP<NOX::StatusTest::NormF> relresid =
Teuchos::rcp(new NOX::StatusTest::NormF(grp, this->relative_residual_tolerance));
Teuchos::RCP<NOX::StatusTest::MaxIters> maxiters =
Teuchos::rcp(new NOX::StatusTest::MaxIters(this->max_nonlinear_iterations));
Teuchos::RCP<NOX::StatusTest::FiniteValue> finiteval =
Teuchos::rcp(new NOX::StatusTest::FiniteValue());
Teuchos::RCP<NOX::StatusTest::NormUpdate> normupdate =
Teuchos::rcp(new NOX::StatusTest::NormUpdate(this->absolute_step_tolerance));
Teuchos::RCP<NOX::StatusTest::Combo> combo =
Teuchos::rcp(new NOX::StatusTest::Combo(NOX::StatusTest::Combo::OR));
combo->addStatusTest(absresid);
combo->addStatusTest(relresid);
combo->addStatusTest(maxiters);
combo->addStatusTest(finiteval);
combo->addStatusTest(normupdate);
Teuchos::RCP<NOX::Solver::Generic> solver =
NOX::Solver::buildSolver(grpPtr, combo, nlParamsPtr);
NOX::StatusTest::StatusType status = NOX::StatusTest::Unconverged;
status = solver->solve();
const NOX::Epetra::Group& finalGroup =
dynamic_cast<const NOX::Epetra::Group&>(solver->getSolutionGroup());
const NOX::Abstract::Vector& finalSolution = finalGroup.getX();
// const Epetra_Vector& finalSolution =
// (dynamic_cast<const NOX::Epetra::Vector&>(finalGroup.getX())).getEpetraVector();
x = finalSolution;
return std::make_pair(1, 0.);
}
Definition at line 131 of file nonlinear_solver.h.
Referenced by __libmesh_petsc_snes_jacobian(), __libmesh_petsc_snes_residual(), and Problem_Interface::computeF().
{ return _system; }
Definition at line 136 of file nonlinear_solver.h.
{ return _system; }
Definition at line 110 of file reference_counter.h.
Referenced by ReferenceCounter::get_info(), ReferenceCounter::increment_constructor_count(), and ReferenceCounter::increment_destructor_count().
Definition at line 101 of file trilinos_nox_nonlinear_solver.h.
Definition at line 212 of file nonlinear_solver.h.
Referenced by NonlinearSolver< Number >::initialized().
Definition at line 123 of file reference_counter.h.
Definition at line 118 of file reference_counter.h.
Referenced by ReferenceCounter::n_objects(), ReferenceCounter::ReferenceCounter(), and ReferenceCounter::~ReferenceCounter().
Definition at line 217 of file nonlinear_solver.h.
Definition at line 96 of file trilinos_nox_nonlinear_solver.h.
Definition at line 207 of file nonlinear_solver.h.
Referenced by NonlinearSolver< Number >::system().
Users should increase any of these tolerances that they want to use for a stopping condition.
Definition at line 163 of file nonlinear_solver.h.
Users should increase any of these tolerances that they want to use for a stopping condition.
Note that not all NonlinearSolvers support relative_step_tolerance!
Definition at line 177 of file nonlinear_solver.h.
Definition at line 201 of file nonlinear_solver.h.
Definition at line 190 of file nonlinear_solver.h.
Definition at line 115 of file nonlinear_solver.h.
Referenced by __libmesh_petsc_snes_jacobian().
Definition at line 124 of file nonlinear_solver.h.
Referenced by __libmesh_petsc_snes_jacobian(), and __libmesh_petsc_snes_residual().
Definition at line 151 of file nonlinear_solver.h.
Definition at line 184 of file nonlinear_solver.h.
Definition at line 146 of file nonlinear_solver.h.
Definition at line 195 of file nonlinear_solver.h.
Definition at line 164 of file nonlinear_solver.h.
Definition at line 178 of file nonlinear_solver.h.
Definition at line 108 of file nonlinear_solver.h.
Referenced by __libmesh_petsc_snes_residual(), and Problem_Interface::computeF().
Generated automatically by Doxygen for libMesh from the source code.