33 #include "libmesh/getpot.h"
34 #include "libmesh/mesh_base.h"
35 #include "libmesh/error_vector.h"
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 ) ),
54 _refinement_type(INVALID),
55 _mesh_refinement(NULL)
87 std::string refinement_stategy = input(
"MeshAdaptivity/refinement_strategy",
"elem_fraction" );
89 if( !input.have_variable(
"MeshAdaptivity/absolute_global_tolerance" ) )
91 std::cerr <<
"Error: Must specify absolute_global_tolerance for" << std::endl
92 <<
" adaptive refinement algorithms."
98 if( refinement_stategy == std::string(
"error_tolerance") )
103 else if( refinement_stategy == std::string(
"nelem_target") )
107 if( !input.have_variable(
"MeshAdaptivity/nelem_target") )
109 std::cerr <<
"Error: Must specify nelem_target for" << std::endl
110 <<
" for error_tolerance refinement strategy."
117 else if( refinement_stategy == std::string(
"error_fraction") )
122 else if( refinement_stategy == std::string(
"elem_fraction") )
127 else if( refinement_stategy == std::string(
"mean_std_dev") )
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;
149 const libMesh::ErrorVector& error )
const
151 bool converged =
false;
153 libMesh::Real error_estimate = 0.0;
157 error_estimate = std::accumulate( error.begin(), error.end(), 0.0 );
161 error_estimate = error.l2_norm();
164 std::cout <<
"==========================================================" << std::endl
165 <<
"Error estimate = " << error_estimate << std::endl
166 <<
"==========================================================" << std::endl;
213 std::cerr <<
"Error: Invalid refinement option!" << std::endl;
boost::scoped_ptr< libMesh::MeshRefinement > _mesh_refinement
unsigned int _node_level_mismatch_limit
libMesh::Real _coarsen_threshold
void build_mesh_refinement(libMesh::MeshBase &mesh)
unsigned int _face_level_mismatch_limit
libMesh::Real _absolute_global_tolerance
bool check_for_convergence(SolverContext &context, const libMesh::ErrorVector &error) const
bool _enforce_mismatch_limit_prior_to_refinement
void flag_elements_for_refinement(const libMesh::ErrorVector &error)
libMesh::Real _refine_fraction
unsigned int _nelem_target
RefinementFlaggingType _refinement_type
Simple class to hold objects passed to Solver::solve.
virtual ~MeshAdaptiveSolverBase()
libMesh::Real _coarsen_fraction
void set_refinement_type(const GetPot &input, RefinementFlaggingType &refinement_type)
unsigned int _edge_level_mismatch_limit