GRINS-0.6.0
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
GRINS::MeshAdaptiveSolverBase Class Referenceabstract

#include <mesh_adaptive_solver_base.h>

Inheritance diagram for GRINS::MeshAdaptiveSolverBase:
Inheritance graph
[legend]
Collaboration diagram for GRINS::MeshAdaptiveSolverBase:
Collaboration graph
[legend]

Public Member Functions

 MeshAdaptiveSolverBase (const GetPot &input)
 
virtual ~MeshAdaptiveSolverBase ()
 
virtual void initialize (const GetPot &input, std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
 
virtual void solve (SolverContext &context)=0
 
virtual void adjoint_qoi_parameter_sensitivity (SolverContext &, const libMesh::QoISet &, const libMesh::ParameterVector &, libMesh::SensitivityData &) const
 
virtual void forward_qoi_parameter_sensitivity (SolverContext &, const libMesh::QoISet &, const libMesh::ParameterVector &, libMesh::SensitivityData &) const
 
void steady_adjoint_solve (SolverContext &context)
 Do steady version of adjoint solve. More...
 

Protected Types

enum  RefinementFlaggingType {
  INVALID = 0, ERROR_TOLERANCE, N_ELEM_TARGET, ERROR_FRACTION,
  ELEM_FRACTION, MEAN_STD_DEV
}
 

Protected Member Functions

void build_mesh_refinement (libMesh::MeshBase &mesh)
 
void set_refinement_type (const GetPot &input, RefinementFlaggingType &refinement_type)
 
bool check_for_convergence (SolverContext &context, const libMesh::ErrorVector &error) const
 
void flag_elements_for_refinement (const libMesh::ErrorVector &error)
 
void set_solver_options (libMesh::DiffSolver &solver)
 
virtual void init_time_solver (GRINS::MultiphysicsSystem *system)=0
 

Protected Attributes

unsigned int _max_refinement_steps
 
bool _coarsen_by_parents
 
libMesh::Real _absolute_global_tolerance
 
unsigned int _nelem_target
 
libMesh::Real _refine_fraction
 
libMesh::Real _coarsen_fraction
 
libMesh::Real _coarsen_threshold
 
bool _plot_cell_errors
 
std::string _error_plot_prefix
 
unsigned int _node_level_mismatch_limit
 
unsigned int _edge_level_mismatch_limit
 
unsigned int _face_level_mismatch_limit
 
bool _enforce_mismatch_limit_prior_to_refinement
 
RefinementFlaggingType _refinement_type
 
boost::scoped_ptr< libMesh::MeshRefinement > _mesh_refinement
 
unsigned int _max_nonlinear_iterations
 
double _relative_step_tolerance
 
double _absolute_step_tolerance
 
double _relative_residual_tolerance
 
double _absolute_residual_tolerance
 
double _initial_linear_tolerance
 
double _minimum_linear_tolerance
 
unsigned int _max_linear_iterations
 
bool _continue_after_backtrack_failure
 
bool _continue_after_max_iterations
 
bool _solver_quiet
 
bool _solver_verbose
 
std::map< std::string, GRINS::NBCContainer_neumann_bc_funcs
 

Private Member Functions

 MeshAdaptiveSolverBase ()
 

Detailed Description

Definition at line 51 of file mesh_adaptive_solver_base.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

GRINS::MeshAdaptiveSolverBase::MeshAdaptiveSolverBase ( const GetPot &  input)

Definition at line 39 of file mesh_adaptive_solver_base.C.

References _refinement_type, and set_refinement_type().

40  : Solver( input ),
41  _max_refinement_steps( input("MeshAdaptivity/max_refinement_steps", 5) ),
42  _coarsen_by_parents(true),
43  _absolute_global_tolerance( input("MeshAdaptivity/absolute_global_tolerance", 0) ),
44  _nelem_target( input("MeshAdaptivity/nelem_target", 0) ),
45  _refine_fraction( input("MeshAdaptivity/refine_percentage", 0.2) ),
46  _coarsen_fraction( input("MeshAdaptivity/coarsen_percentage", 0.2) ),
47  _coarsen_threshold( input("MeshAdaptivity/coarsen_threshold", 0) ),
48  _plot_cell_errors( input("MeshAdaptivity/plot_cell_errors", false) ),
49  _error_plot_prefix( input("MeshAdaptivity/error_plot_prefix", "cell_error") ),
50  _node_level_mismatch_limit( input("MeshAdaptivity/node_level_mismatch_limit", 0) ),
51  _edge_level_mismatch_limit( input("MeshAdaptivity/edge_level_mismatch_limit", 0 ) ),
52  _face_level_mismatch_limit( input("MeshAdaptivity/face_level_mismatch_limit", 1 ) ),
53  _enforce_mismatch_limit_prior_to_refinement( input("MeshAdaptivity/enforce_mismatch_limit_prior_to_refinement", false ) ),
55  _mesh_refinement(NULL)
56  {
57  this->set_refinement_type( input, _refinement_type );
58 
59  return;
60  }
boost::scoped_ptr< libMesh::MeshRefinement > _mesh_refinement
Solver(const GetPot &input)
Definition: grins_solver.C:44
void set_refinement_type(const GetPot &input, RefinementFlaggingType &refinement_type)
GRINS::MeshAdaptiveSolverBase::~MeshAdaptiveSolverBase ( )
virtual

Definition at line 62 of file mesh_adaptive_solver_base.C.

63  {
64  return;
65  }
GRINS::MeshAdaptiveSolverBase::MeshAdaptiveSolverBase ( )
private

Member Function Documentation

virtual void GRINS::Solver::adjoint_qoi_parameter_sensitivity ( SolverContext ,
const libMesh::QoISet &  ,
const libMesh::ParameterVector &  ,
libMesh::SensitivityData &   
) const
inlinevirtualinherited

Reimplemented in GRINS::SteadyMeshAdaptiveSolver, and GRINS::SteadySolver.

Definition at line 71 of file grins_solver.h.

76  { libmesh_not_implemented(); }
void GRINS::MeshAdaptiveSolverBase::build_mesh_refinement ( libMesh::MeshBase &  mesh)
protected

Definition at line 67 of file mesh_adaptive_solver_base.C.

References _absolute_global_tolerance, _coarsen_by_parents, _coarsen_fraction, _coarsen_threshold, _edge_level_mismatch_limit, _enforce_mismatch_limit_prior_to_refinement, _face_level_mismatch_limit, _mesh_refinement, _nelem_target, _node_level_mismatch_limit, and _refine_fraction.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

68  {
69  _mesh_refinement.reset( new libMesh::MeshRefinement( mesh ) );
70  _mesh_refinement->coarsen_by_parents() = _coarsen_by_parents;
71  _mesh_refinement->absolute_global_tolerance() = _absolute_global_tolerance;
72  _mesh_refinement->nelem_target() = _nelem_target;
73  _mesh_refinement->refine_fraction() = _refine_fraction;
74  _mesh_refinement->coarsen_fraction() = _coarsen_fraction;
75  _mesh_refinement->coarsen_threshold() = _coarsen_threshold;
76  _mesh_refinement->node_level_mismatch_limit() = _node_level_mismatch_limit;
77  _mesh_refinement->edge_level_mismatch_limit() = _edge_level_mismatch_limit;
78  _mesh_refinement->face_level_mismatch_limit() = _face_level_mismatch_limit;
79  _mesh_refinement->set_enforce_mismatch_limit_prior_to_refinement(_enforce_mismatch_limit_prior_to_refinement);
80 
81  return;
82  }
boost::scoped_ptr< libMesh::MeshRefinement > _mesh_refinement
bool GRINS::MeshAdaptiveSolverBase::check_for_convergence ( SolverContext context,
const libMesh::ErrorVector &  error 
) const
protected

Definition at line 148 of file mesh_adaptive_solver_base.C.

References _absolute_global_tolerance, and GRINS::SolverContext::do_adjoint_solve.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

150  {
151  bool converged = false;
152 
153  libMesh::Real error_estimate = 0.0;
154 
155  if( context.do_adjoint_solve )
156  {
157  error_estimate = std::accumulate( error.begin(), error.end(), 0.0 );
158  }
159  else
160  {
161  error_estimate = error.l2_norm();
162  }
163 
164  std::cout << "==========================================================" << std::endl
165  << "Error estimate = " << error_estimate << std::endl
166  << "==========================================================" << std::endl;
167 
168  // For now, we just check the norm
169  if( std::fabs(error_estimate) <= _absolute_global_tolerance )
170  {
171  converged = true;
172  }
173 
174  return converged;
175  }
void GRINS::MeshAdaptiveSolverBase::flag_elements_for_refinement ( const libMesh::ErrorVector &  error)
protected

Definition at line 177 of file mesh_adaptive_solver_base.C.

References _mesh_refinement, _refinement_type, ELEM_FRACTION, ERROR_FRACTION, ERROR_TOLERANCE, INVALID, MEAN_STD_DEV, and N_ELEM_TARGET.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

178  {
179  switch(_refinement_type)
180  {
181  case(ERROR_TOLERANCE):
182  {
183  _mesh_refinement->flag_elements_by_error_tolerance( error );
184  }
185  break;
186 
187  case(N_ELEM_TARGET):
188  {
189  _mesh_refinement->flag_elements_by_nelem_target( error );
190  }
191  break;
192 
193  case( ERROR_FRACTION ):
194  {
195  _mesh_refinement->flag_elements_by_error_fraction( error );
196  }
197  break;
198 
199  case( ELEM_FRACTION ):
200  {
201  _mesh_refinement->flag_elements_by_elem_fraction( error );
202  }
203  break;
204 
205  case( MEAN_STD_DEV ):
206  {
207  _mesh_refinement->flag_elements_by_mean_stddev( error );
208  }
209  break;
210 
211  case(INVALID):
212  {
213  std::cerr << "Error: Invalid refinement option!" << std::endl;
214  libmesh_error();
215  }
216  break;
217 
218  // Wat?!
219  default:
220  {
221  libmesh_error();
222  }
223 
224  } // switch(_refinement_type)
225 
226  return;
227  }
boost::scoped_ptr< libMesh::MeshRefinement > _mesh_refinement
virtual void GRINS::Solver::forward_qoi_parameter_sensitivity ( SolverContext ,
const libMesh::QoISet &  ,
const libMesh::ParameterVector &  ,
libMesh::SensitivityData &   
) const
inlinevirtualinherited

Reimplemented in GRINS::SteadyMeshAdaptiveSolver, and GRINS::SteadySolver.

Definition at line 79 of file grins_solver.h.

84  { libmesh_not_implemented(); }
virtual void GRINS::Solver::init_time_solver ( GRINS::MultiphysicsSystem system)
protectedpure virtualinherited
void GRINS::Solver::initialize ( const GetPot &  input,
std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system 
)
virtualinherited

Reimplemented in GRINS::DisplacementContinuationSolver.

Definition at line 67 of file grins_solver.C.

References GRINS::Solver::init_time_solver(), and GRINS::Solver::set_solver_options().

Referenced by GRINS::DisplacementContinuationSolver::initialize().

70  {
71 
72  // Defined in subclasses depending on the solver used.
73  this->init_time_solver(system);
74 
75  // Initialize the system
76  equation_system->init();
77 
78  // Get diff solver to set options
79  libMesh::DiffSolver &solver = *(system->time_solver->diff_solver().get());
80 
81  // Set linear/nonlinear solver options
82  this->set_solver_options( solver );
83 
84  return;
85  }
virtual void init_time_solver(GRINS::MultiphysicsSystem *system)=0
void set_solver_options(libMesh::DiffSolver &solver)
Definition: grins_solver.C:87
void GRINS::MeshAdaptiveSolverBase::set_refinement_type ( const GetPot &  input,
MeshAdaptiveSolverBase::RefinementFlaggingType refinement_type 
)
protected

Definition at line 84 of file mesh_adaptive_solver_base.C.

References ELEM_FRACTION, ERROR_FRACTION, ERROR_TOLERANCE, MEAN_STD_DEV, and N_ELEM_TARGET.

Referenced by MeshAdaptiveSolverBase().

86  {
87  std::string refinement_stategy = input("MeshAdaptivity/refinement_strategy", "elem_fraction" );
88 
89  if( !input.have_variable("MeshAdaptivity/absolute_global_tolerance" ) )
90  {
91  std::cerr << "Error: Must specify absolute_global_tolerance for" << std::endl
92  << " adaptive refinement algorithms."
93  << std::endl;
94 
95  libmesh_error();
96  }
97 
98  if( refinement_stategy == std::string("error_tolerance") )
99  {
100  refinement_type = ERROR_TOLERANCE;
101  }
102 
103  else if( refinement_stategy == std::string("nelem_target") )
104  {
105  refinement_type = N_ELEM_TARGET;
106 
107  if( !input.have_variable("MeshAdaptivity/nelem_target") )
108  {
109  std::cerr << "Error: Must specify nelem_target for" << std::endl
110  << " for error_tolerance refinement strategy."
111  << std::endl;
112 
113  libmesh_error();
114  }
115  }
116 
117  else if( refinement_stategy == std::string("error_fraction") )
118  {
119  refinement_type = ERROR_FRACTION;
120  }
121 
122  else if( refinement_stategy == std::string("elem_fraction") )
123  {
124  refinement_type = ELEM_FRACTION;
125  }
126 
127  else if( refinement_stategy == std::string("mean_std_dev") )
128  {
129  refinement_type = MEAN_STD_DEV;
130  }
131 
132  else
133  {
134  std::cerr << "Error: Invalid refinement strategy " << refinement_stategy << std::endl
135  << " Valid refinement strategy options are: absolute_global_tolerance" << std::endl
136  << " error_tolerance" << std::endl
137  << " nelem_target" << std::endl
138  << " error_fraction" << std::endl
139  << " elem_fraction" << std::endl
140  << " mean_std_dev" << std::endl;
141 
142  libmesh_error();
143  }
144 
145  return;
146  }
void GRINS::Solver::set_solver_options ( libMesh::DiffSolver &  solver)
protectedinherited

Definition at line 87 of file grins_solver.C.

References GRINS::Solver::_absolute_residual_tolerance, GRINS::Solver::_absolute_step_tolerance, GRINS::Solver::_continue_after_backtrack_failure, GRINS::Solver::_continue_after_max_iterations, GRINS::Solver::_initial_linear_tolerance, GRINS::Solver::_max_linear_iterations, GRINS::Solver::_max_nonlinear_iterations, GRINS::Solver::_minimum_linear_tolerance, GRINS::Solver::_relative_residual_tolerance, GRINS::Solver::_relative_step_tolerance, GRINS::Solver::_solver_quiet, and GRINS::Solver::_solver_verbose.

Referenced by GRINS::Solver::initialize().

88  {
89  solver.quiet = this->_solver_quiet;
90  solver.verbose = this->_solver_verbose;
91  solver.max_nonlinear_iterations = this->_max_nonlinear_iterations;
92  solver.relative_step_tolerance = this->_relative_step_tolerance;
93  solver.absolute_step_tolerance = this->_absolute_step_tolerance;
94  solver.relative_residual_tolerance = this->_relative_residual_tolerance;
95  solver.absolute_residual_tolerance = this->_absolute_residual_tolerance;
96  solver.max_linear_iterations = this->_max_linear_iterations;
97  solver.continue_after_backtrack_failure = this->_continue_after_backtrack_failure;
98  solver.initial_linear_tolerance = this->_initial_linear_tolerance;
99  solver.minimum_linear_tolerance = this->_minimum_linear_tolerance;
100  solver.continue_after_max_iterations = this->_continue_after_max_iterations;
101 
102  return;
103  }
double _absolute_residual_tolerance
Definition: grins_solver.h:103
bool _solver_verbose
Definition: grins_solver.h:112
double _relative_residual_tolerance
Definition: grins_solver.h:101
unsigned int _max_linear_iterations
Definition: grins_solver.h:106
double _relative_step_tolerance
Definition: grins_solver.h:95
bool _continue_after_backtrack_failure
Definition: grins_solver.h:107
double _minimum_linear_tolerance
Definition: grins_solver.h:105
double _absolute_step_tolerance
Definition: grins_solver.h:96
bool _continue_after_max_iterations
Definition: grins_solver.h:108
unsigned int _max_nonlinear_iterations
Definition: grins_solver.h:94
double _initial_linear_tolerance
Definition: grins_solver.h:104
virtual void GRINS::Solver::solve ( SolverContext context)
pure virtualinherited
void GRINS::Solver::steady_adjoint_solve ( SolverContext context)
inherited

Do steady version of adjoint solve.

We put this here since we may want to reuse this in multiple different steady solves.

Definition at line 105 of file grins_solver.C.

References GRINS::SolverContext::system.

Referenced by GRINS::SteadySolver::solve(), and GRINS::SteadyMeshAdaptiveSolver::solve().

106  {
107  libMesh::out << "==========================================================" << std::endl
108  << "Solving adjoint problem." << std::endl
109  << "==========================================================" << std::endl;
110 
111  context.system->adjoint_solve();
112  context.system->set_adjoint_already_solved(true);
113  }

Member Data Documentation

libMesh::Real GRINS::MeshAdaptiveSolverBase::_absolute_global_tolerance
protected

Definition at line 70 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement(), and check_for_convergence().

double GRINS::Solver::_absolute_residual_tolerance
protectedinherited

Definition at line 103 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

double GRINS::Solver::_absolute_step_tolerance
protectedinherited

Definition at line 96 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::MeshAdaptiveSolverBase::_coarsen_by_parents
protected

Definition at line 69 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

libMesh::Real GRINS::MeshAdaptiveSolverBase::_coarsen_fraction
protected

Definition at line 73 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

libMesh::Real GRINS::MeshAdaptiveSolverBase::_coarsen_threshold
protected

Definition at line 74 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

bool GRINS::Solver::_continue_after_backtrack_failure
protectedinherited

Definition at line 107 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_continue_after_max_iterations
protectedinherited

Definition at line 108 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::MeshAdaptiveSolverBase::_edge_level_mismatch_limit
protected

Definition at line 79 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

bool GRINS::MeshAdaptiveSolverBase::_enforce_mismatch_limit_prior_to_refinement
protected

Definition at line 81 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

std::string GRINS::MeshAdaptiveSolverBase::_error_plot_prefix
protected

Definition at line 76 of file mesh_adaptive_solver_base.h.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

unsigned int GRINS::MeshAdaptiveSolverBase::_face_level_mismatch_limit
protected

Definition at line 80 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

double GRINS::Solver::_initial_linear_tolerance
protectedinherited

Definition at line 104 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::Solver::_max_linear_iterations
protectedinherited

Definition at line 106 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::Solver::_max_nonlinear_iterations
protectedinherited

Definition at line 94 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::MeshAdaptiveSolverBase::_max_refinement_steps
protected

Definition at line 68 of file mesh_adaptive_solver_base.h.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

boost::scoped_ptr<libMesh::MeshRefinement> GRINS::MeshAdaptiveSolverBase::_mesh_refinement
protected
double GRINS::Solver::_minimum_linear_tolerance
protectedinherited

Definition at line 105 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

unsigned int GRINS::MeshAdaptiveSolverBase::_nelem_target
protected

Definition at line 71 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

std::map< std::string, GRINS::NBCContainer > GRINS::Solver::_neumann_bc_funcs
protectedinherited

Definition at line 117 of file grins_solver.h.

unsigned int GRINS::MeshAdaptiveSolverBase::_node_level_mismatch_limit
protected

Definition at line 78 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

bool GRINS::MeshAdaptiveSolverBase::_plot_cell_errors
protected

Definition at line 75 of file mesh_adaptive_solver_base.h.

Referenced by GRINS::SteadyMeshAdaptiveSolver::solve().

libMesh::Real GRINS::MeshAdaptiveSolverBase::_refine_fraction
protected

Definition at line 72 of file mesh_adaptive_solver_base.h.

Referenced by build_mesh_refinement().

RefinementFlaggingType GRINS::MeshAdaptiveSolverBase::_refinement_type
protected
double GRINS::Solver::_relative_residual_tolerance
protectedinherited

Definition at line 101 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

double GRINS::Solver::_relative_step_tolerance
protectedinherited

Definition at line 95 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_solver_quiet
protectedinherited

Definition at line 111 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().

bool GRINS::Solver::_solver_verbose
protectedinherited

Definition at line 112 of file grins_solver.h.

Referenced by GRINS::Solver::set_solver_options().


The documentation for this class was generated from the following files:

Generated on Mon Jun 22 2015 21:32:23 for GRINS-0.6.0 by  doxygen 1.8.9.1