![]() |
|
Base class for tree-based refineable meshes. More...
#include <refineable_mesh.h>
Public Member Functions | |
TreeBasedRefineableMeshBase () | |
Constructor. More... | |
TreeBasedRefineableMeshBase (const TreeBasedRefineableMeshBase &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const TreeBasedRefineableMeshBase &)=delete |
Broken assignment operator. More... | |
virtual | ~TreeBasedRefineableMeshBase () |
Empty Destructor: More... | |
void | adapt (const Vector< double > &elemental_error) |
void | p_adapt (const Vector< double > &elemental_error) |
void | refine_uniformly (DocInfo &doc_info) |
Refine mesh uniformly and doc process. More... | |
void | refine_uniformly () |
Refine mesh uniformly. More... | |
void | p_refine_uniformly (DocInfo &doc_info) |
p-refine mesh uniformly and doc process More... | |
void | p_refine_uniformly () |
p-refine mesh uniformly More... | |
unsigned | unrefine_uniformly () |
void | p_unrefine_uniformly (DocInfo &doc_info) |
p-unrefine mesh uniformly More... | |
virtual void | setup_tree_forest ()=0 |
Set up the tree forest associated with the Mesh (if any) More... | |
TreeForest * | forest_pt () |
Return pointer to the Forest represenation of the mesh. More... | |
void | doc_adaptivity_targets (std::ostream &outfile) |
Doc the targets for mesh adaptation. More... | |
unsigned & | max_refinement_level () |
Access fct for max. permissible refinement level (relative to base mesh) More... | |
unsigned & | min_refinement_level () |
Access fct for min. permissible refinement level (relative to base mesh) More... | |
unsigned & | max_p_refinement_level () |
unsigned & | min_p_refinement_level () |
virtual void | adapt_mesh (DocInfo &doc_info) |
virtual void | adapt_mesh () |
void | p_adapt_mesh (DocInfo &doc_info) |
void | p_adapt_mesh () |
virtual void | refine_selected_elements (const Vector< unsigned > &elements_to_be_refined) |
virtual void | refine_selected_elements (const Vector< RefineableElement * > &elements_to_be_refined) |
void | p_refine_selected_elements (const Vector< unsigned > &elements_to_be_refined) |
p-refine mesh by refining the elements identified by their numbers. More... | |
void | p_refine_selected_elements (const Vector< PRefineableElement * > &elements_to_be_refined_pt) |
p-refine mesh by refining the elements identified by their pointers. More... | |
virtual void | refine_base_mesh_as_in_reference_mesh (TreeBasedRefineableMeshBase *const &ref_mesh_pt) |
Refine to same degree as the reference mesh. More... | |
virtual bool | refine_base_mesh_as_in_reference_mesh_minus_one (TreeBasedRefineableMeshBase *const &ref_mesh_pt) |
virtual void | refine_as_in_reference_mesh (TreeBasedRefineableMeshBase *const &ref_mesh_pt) |
virtual void | get_refinement_levels (unsigned &min_refinement_level, unsigned &max_refinement_level) |
Get max/min refinement levels in mesh. More... | |
virtual void | get_elements_at_refinement_level (unsigned &refinement_level, Vector< RefineableElement * > &level_elements) |
virtual void | get_refinement_pattern (Vector< Vector< unsigned >> &to_be_refined) |
void | refine_base_mesh (Vector< Vector< unsigned >> &to_be_refined) |
Refine base mesh according to specified refinement pattern. More... | |
virtual void | refine (std::ifstream &restart_file) |
Refine mesh according to refinement pattern in restart file. More... | |
virtual void | dump_refinement (std::ostream &outfile) |
Dump refinement pattern to allow for rebuild. More... | |
virtual void | read_refinement (std::ifstream &restart_file, Vector< Vector< unsigned >> &to_be_refined) |
Read refinement pattern to allow for rebuild. More... | |
unsigned | uniform_refinement_level_when_pruned () const |
unsigned & | uniform_refinement_level_when_pruned () |
Level to which the mesh was uniformly refined when it was pruned. More... | |
![]() | |
bool | adapt_flag () |
RefineableMeshBase () | |
RefineableMeshBase (const RefineableMeshBase &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const RefineableMeshBase &)=delete |
Broken assignment operator. More... | |
virtual | ~RefineableMeshBase () |
Empty Destructor: More... | |
unsigned | nrefined () |
Access fct for number of elements that were refined. More... | |
unsigned | nunrefined () |
Access fct for number of elements that were unrefined. More... | |
unsigned & | nrefinement_overruled () |
unsigned & | max_keep_unrefined () |
ErrorEstimator *& | spatial_error_estimator_pt () |
Access to spatial error estimator. More... | |
ErrorEstimator * | spatial_error_estimator_pt () const |
Access to spatial error estimator (const version. More... | |
double & | min_permitted_error () |
double & | max_permitted_error () |
double & | min_error () |
double & | max_error () |
DocInfo *& | doc_info_pt () |
Access fct for pointer to DocInfo. More... | |
void | enable_adaptation () |
Enable adaptation. More... | |
void | disable_adaptation () |
Disable adaptation. More... | |
void | enable_p_adaptation () |
Enable adaptation. More... | |
void | disable_p_adaptation () |
Disable adaptation. More... | |
void | enable_additional_synchronisation_of_hanging_nodes () |
Enable additional synchronisation of hanging nodes. More... | |
void | disable_additional_synchronisation_of_hanging_nodes () |
Disable additional synchronisation of hanging nodes. More... | |
bool | is_adaptation_enabled () const |
Return whether the mesh is to be adapted. More... | |
bool | is_p_adaptation_enabled () const |
Return whether the mesh is to be adapted. More... | |
bool | is_additional_synchronisation_of_hanging_nodes_disabled () const |
Return whether additional synchronisation is enabled. More... | |
DocInfo | doc_info () |
Access fct for DocInfo. More... | |
void | p_unrefine_uniformly (DocInfo &doc_info) |
p-unrefine mesh uniformly More... | |
![]() | |
Mesh () | |
Default constructor. More... | |
Mesh (const Vector< Mesh * > &sub_mesh_pt) | |
void | merge_meshes (const Vector< Mesh * > &sub_mesh_pt) |
virtual void | setup_boundary_element_info () |
virtual void | setup_boundary_element_info (std::ostream &outfile) |
virtual void | reset_boundary_element_info (Vector< unsigned > &ntmp_boundary_elements, Vector< Vector< unsigned >> &ntmp_boundary_elements_in_region, Vector< FiniteElement * > &deleted_elements) |
Virtual function to perform the reset boundary elements info rutines. More... | |
template<class BULK_ELEMENT > | |
void | doc_boundary_coordinates (const unsigned &b, std::ofstream &the_file) |
virtual void | scale_mesh (const double &factor) |
Mesh (const Mesh &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const Mesh &)=delete |
Broken assignment operator. More... | |
virtual | ~Mesh () |
Virtual Destructor to clean up all memory. More... | |
void | flush_element_and_node_storage () |
void | flush_element_storage () |
void | flush_node_storage () |
Node *& | node_pt (const unsigned long &n) |
Return pointer to global node n. More... | |
Node * | node_pt (const unsigned long &n) const |
Return pointer to global node n (const version) More... | |
GeneralisedElement *& | element_pt (const unsigned long &e) |
Return pointer to element e. More... | |
GeneralisedElement * | element_pt (const unsigned long &e) const |
Return pointer to element e (const version) More... | |
const Vector< GeneralisedElement * > & | element_pt () const |
Return reference to the Vector of elements. More... | |
Vector< GeneralisedElement * > & | element_pt () |
Return reference to the Vector of elements. More... | |
FiniteElement * | finite_element_pt (const unsigned &e) const |
Node *& | boundary_node_pt (const unsigned &b, const unsigned &n) |
Return pointer to node n on boundary b. More... | |
Node * | boundary_node_pt (const unsigned &b, const unsigned &n) const |
Return pointer to node n on boundary b. More... | |
void | set_nboundary (const unsigned &nbound) |
Set the number of boundaries in the mesh. More... | |
void | remove_boundary_nodes () |
Clear all pointers to boundary nodes. More... | |
void | remove_boundary_nodes (const unsigned &b) |
void | remove_boundary_node (const unsigned &b, Node *const &node_pt) |
Remove a node from the boundary b. More... | |
void | add_boundary_node (const unsigned &b, Node *const &node_pt) |
Add a (pointer to) a node to the b-th boundary. More... | |
void | copy_boundary_node_data_from_nodes () |
bool | boundary_coordinate_exists (const unsigned &i) const |
Indicate whether the i-th boundary has an intrinsic coordinate. More... | |
unsigned long | nelement () const |
Return number of elements in the mesh. More... | |
unsigned long | nnode () const |
Return number of nodes in the mesh. More... | |
unsigned | ndof_types () const |
Return number of dof types in mesh. More... | |
unsigned | elemental_dimension () const |
Return number of elemental dimension in mesh. More... | |
unsigned | nodal_dimension () const |
Return number of nodal dimension in mesh. More... | |
void | add_node_pt (Node *const &node_pt) |
Add a (pointer to a) node to the mesh. More... | |
void | add_element_pt (GeneralisedElement *const &element_pt) |
Add a (pointer to) an element to the mesh. More... | |
virtual void | node_update (const bool &update_all_solid_nodes=false) |
virtual void | reorder_nodes (const bool &use_old_ordering=true) |
virtual void | get_node_reordering (Vector< Node * > &reordering, const bool &use_old_ordering=true) const |
template<class BULK_ELEMENT , template< class > class FACE_ELEMENT> | |
void | build_face_mesh (const unsigned &b, Mesh *const &face_mesh_pt) |
unsigned | self_test () |
Self-test: Check elements and nodes. Return 0 for OK. More... | |
void | max_and_min_element_size (double &max_size, double &min_size) |
double | total_size () |
void | check_inverted_elements (bool &mesh_has_inverted_elements, std::ofstream &inverted_element_file) |
void | check_inverted_elements (bool &mesh_has_inverted_elements) |
unsigned | check_for_repeated_nodes (const double &epsilon=1.0e-12) |
Vector< Node * > | prune_dead_nodes () |
unsigned | nboundary () const |
Return number of boundaries. More... | |
unsigned long | nboundary_node (const unsigned &ibound) const |
Return number of nodes on a particular boundary. More... | |
FiniteElement * | boundary_element_pt (const unsigned &b, const unsigned &e) const |
Return pointer to e-th finite element on boundary b. More... | |
Node * | get_some_non_boundary_node () const |
unsigned | nboundary_element (const unsigned &b) const |
Return number of finite elements that are adjacent to boundary b. More... | |
int | face_index_at_boundary (const unsigned &b, const unsigned &e) const |
virtual void | dump (std::ofstream &dump_file, const bool &use_old_ordering=true) const |
Dump the data in the mesh into a file for restart. More... | |
void | dump (const std::string &dump_file_name, const bool &use_old_ordering=true) const |
Dump the data in the mesh into a file for restart. More... | |
virtual void | read (std::ifstream &restart_file) |
Read solution from restart file. More... | |
void | output_paraview (std::ofstream &file_out, const unsigned &nplot) const |
void | output_fct_paraview (std::ofstream &file_out, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const |
void | output_fct_paraview (std::ofstream &file_out, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) const |
void | output (std::ostream &outfile) |
Output for all elements. More... | |
void | output (std::ostream &outfile, const unsigned &n_plot) |
Output at f(n_plot) points in each element. More... | |
void | output (FILE *file_pt) |
Output for all elements (C-style output) More... | |
void | output (FILE *file_pt, const unsigned &nplot) |
Output at f(n_plot) points in each element (C-style output) More... | |
void | output (const std::string &output_filename) |
Output for all elements. More... | |
void | output (const std::string &output_filename, const unsigned &n_plot) |
Output at f(n_plot) points in each element. More... | |
void | output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt) |
Output a given Vector function at f(n_plot) points in each element. More... | |
void | output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt) |
void | output_boundaries (std::ostream &outfile) |
Output the nodes on the boundaries (into separate tecplot zones) More... | |
void | output_boundaries (const std::string &output_filename) |
void | assign_initial_values_impulsive () |
Assign initial values for an impulsive start. More... | |
void | shift_time_values () |
void | calculate_predictions () |
void | set_nodal_and_elemental_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data) |
virtual void | set_mesh_level_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data) |
void | set_consistent_pinned_values_for_continuation (ContinuationStorageScheme *const &continuation_stepper_pt) |
Set consistent values for pinned data in continuation. More... | |
bool | does_pointer_correspond_to_mesh_data (double *const ¶meter_pt) |
Does the double pointer correspond to any mesh data. More... | |
void | set_nodal_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data) |
Set the timestepper associated with the nodal data in the mesh. More... | |
void | set_elemental_internal_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data) |
virtual void | compute_norm (double &norm) |
virtual void | compute_norm (Vector< double > &norm) |
virtual void | compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm) |
virtual void | compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm) |
virtual void | compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm) |
virtual void | compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm) |
virtual void | compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm) |
virtual void | compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm) |
virtual void | compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm) |
Returns the norm of the error and that of the exact solution. More... | |
virtual void | compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm) |
bool | is_mesh_distributed () const |
Boolean to indicate if Mesh has been distributed. More... | |
OomphCommunicator * | communicator_pt () const |
void | delete_all_external_storage () |
Wipe the storage for all externally-based elements. More... | |
Protected Member Functions | |
virtual void | split_elements_if_required ()=0 |
virtual void | p_refine_elements_if_required ()=0 |
void | complete_hanging_nodes (const int &ncont_interpolated_values) |
Complete the hanging node scheme recursively. More... | |
void | complete_hanging_nodes_recursively (Node *&nod_pt, Vector< Node * > &master_nodes, Vector< double > &hang_weights, const int &ival) |
Auxiliary routine for recursive hanging node completion. More... | |
![]() | |
unsigned long | assign_global_eqn_numbers (Vector< double * > &Dof_pt) |
Assign (global) equation numbers to the nodes. More... | |
void | describe_dofs (std::ostream &out, const std::string ¤t_string) const |
void | describe_local_dofs (std::ostream &out, const std::string ¤t_string) const |
void | assign_local_eqn_numbers (const bool &store_local_dof_pt) |
Assign local equation numbers in all elements. More... | |
void | convert_to_boundary_node (Node *&node_pt, const Vector< FiniteElement * > &finite_element_pt) |
void | convert_to_boundary_node (Node *&node_pt) |
Protected Attributes | |
unsigned | Uniform_refinement_level_when_pruned |
Level to which the mesh was uniformly refined when it was pruned. More... | |
unsigned | Max_refinement_level |
Max. permissible refinement level (relative to base mesh) More... | |
unsigned | Min_refinement_level |
Min. permissible refinement level (relative to base mesh) More... | |
unsigned | Max_p_refinement_level |
Max. permissible p-refinement level (relative to base mesh) More... | |
unsigned | Min_p_refinement_level |
Min. permissible p-refinement level (relative to base mesh) More... | |
TreeForest * | Forest_pt |
Forest representation of the mesh. More... | |
![]() | |
ErrorEstimator * | Spatial_error_estimator_pt |
Pointer to spatial error estimator. More... | |
double | Max_permitted_error |
Max. error (i.e. split elements if their error is larger) More... | |
double | Min_permitted_error |
Min. error (i.e. (try to) merge elements if their error is smaller) More... | |
double | Min_error |
Min.actual error. More... | |
double | Max_error |
Max. actual error. More... | |
unsigned | Nrefined |
Stats: Number of elements that were refined. More... | |
unsigned | Nunrefined |
Stats: Number of elements that were unrefined. More... | |
bool | Adapt_flag |
Flag that requests adaptation. More... | |
bool | P_adapt_flag |
Flag that requests p-adaptation. More... | |
bool | Additional_synchronisation_of_hanging_nodes_not_required |
Flag that disables additional synchronisation of hanging nodes. More... | |
DocInfo * | Doc_info_pt |
Pointer to DocInfo. More... | |
unsigned | Max_keep_unrefined |
unsigned | Nrefinement_overruled |
![]() | |
Vector< Vector< Node * > > | Boundary_node_pt |
bool | Lookup_for_elements_next_boundary_is_setup |
Vector< Vector< FiniteElement * > > | Boundary_element_pt |
Vector< Vector< int > > | Face_index_at_boundary |
Vector< Node * > | Node_pt |
Vector of pointers to nodes. More... | |
Vector< GeneralisedElement * > | Element_pt |
Vector of pointers to generalised elements. More... | |
std::vector< bool > | Boundary_coordinate_exists |
Additional Inherited Members | |
![]() | |
typedef void(FiniteElement::* | SteadyExactSolutionFctPt) (const Vector< double > &x, Vector< double > &soln) |
typedef void(FiniteElement::* | UnsteadyExactSolutionFctPt) (const double &time, const Vector< double > &x, Vector< double > &soln) |
![]() | |
static Steady< 0 > | Default_TimeStepper |
The Steady Timestepper. More... | |
static bool | Suppress_warning_about_empty_mesh_level_time_stepper_function |
Static boolean flag to control warning about mesh level timesteppers. More... | |
Base class for tree-based refineable meshes.
///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
|
inline |
Constructor.
References oomph::RefineableMeshBase::Doc_info_pt, Forest_pt, Max_p_refinement_level, Max_refinement_level, Min_p_refinement_level, Min_refinement_level, oomph::RefineableMeshBase::Nrefined, oomph::RefineableMeshBase::Nunrefined, and Uniform_refinement_level_when_pruned.
|
delete |
Broken copy constructor.
|
inlinevirtual |
Adapt mesh: Refine elements whose error is lager than err_max and (try to) unrefine those whose error is smaller than err_min
Do adaptive refinement for mesh.
Implements oomph::RefineableMeshBase.
Reimplemented in oomph::RefineableQuadFromTriangleMesh< ELEMENT >.
References adapt_mesh(), oomph::Mesh::delete_all_external_storage(), oomph::RefineableElement::deselect_for_refinement(), oomph::RefineableElement::deselect_sons_for_unrefinement(), oomph::DocInfo::disable_doc(), oomph::RefineableMeshBase::doc_info(), oomph::RefineableMeshBase::doc_info_pt(), e(), oomph::Mesh::element_pt(), oomph::Tree::father_pt(), oomph::DocInfo::is_doc_enabled(), oomph::Tree::is_leaf(), oomph::Mesh::is_mesh_distributed(), oomph::OcTreeNames::LDB, oomph::RefineableMeshBase::max_keep_unrefined(), oomph::RefineableMeshBase::max_permitted_error(), max_refinement_level(), oomph::RefineableMeshBase::min_permitted_error(), min_refinement_level(), oomph::Mesh::nelement(), oomph::RefineableMeshBase::Nrefined, oomph::RefineableMeshBase::nrefinement_overruled(), oomph::Tree::nsons(), oomph::RefineableMeshBase::Nunrefined, oomph::Tree::object_pt(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::RefineableElement::refinement_is_enabled(), oomph::RefineableElement::refinement_level(), oomph::Mesh::reorder_nodes(), oomph::RefineableElement::select_for_refinement(), oomph::RefineableElement::select_sons_for_unrefinement(), oomph::Tree::son_pt(), oomph::Tree::son_type(), and oomph::RefineableElement::tree_pt().
Referenced by unrefine_uniformly().
|
inlinevirtual |
Perform the actual tree-based mesh adaptation. A simple wrapper to call the function without documentation.
References oomph::DocInfo::directory(), oomph::DocInfo::disable_doc(), and oomph::RefineableMeshBase::doc_info().
Referenced by adapt(), refine_base_mesh(), refine_selected_elements(), and refine_uniformly().
|
virtual |
Perform the actual tree-based mesh adaptation, documenting the progress in the directory specified in DocInfo object.
Adapt mesh, which exists in two representations, namely as:
Refinement/derefinement process is documented (in tecplot-able form) if requested.
Procedure:
After adaptation, all nodes (whether new or old) have up-to-date current and previous values.
If refinement process is being documented, the following information is documented:
can be viewed with
can be viewed with
to check the hanging node status.
and can be viewed with
Update the boundary element info – this can be a costly procedure and for this reason the mesh writer might have decided not to set up this scheme. If so, we won't change this and suppress its creation...
References b, oomph::Mesh::boundary_element_pt(), oomph::TreeForest::check_all_neighbours(), oomph::TreeForest::close_hanging_node_files(), complete_hanging_nodes(), oomph::Tree::deactivate_object(), oomph::Mesh::delete_all_external_storage(), oomph::FiniteElement::dim(), oomph::DocInfo::directory(), oomph::Global_timings::Doc_comprehensive_timings, oomph::RefineableMeshBase::doc_info(), e(), oomph::Mesh::Element_pt, Eigen::placeholders::end, oomph::Mesh::finite_element_pt(), Forest_pt, oomph::Node::get_boundaries_pt(), oomph::FiniteElement::get_x(), oomph::SolidFiniteElement::get_x_and_xi(), oomph::Node::hanging_pt(), i, oomph::DocInfo::is_doc_enabled(), oomph::Node::is_hanging(), oomph::Mesh::is_mesh_distributed(), oomph::Node::is_on_boundary(), oomph::Data::is_pinned(), j, oomph::SolidNode::lagrangian_position(), oomph::FiniteElement::local_coordinate_of_node(), oomph::Mesh::Lookup_for_elements_next_boundary_is_setup, oomph::FiniteElement::macro_elem_pt(), oomph::HangInfo::master_node_pt(), oomph::RefineableMeshBase::max_error(), oomph::RefineableElement::max_integrity_tolerance(), oomph::Tree::merge_sons_if_required(), n, oomph::Mesh::nboundary(), oomph::Mesh::nboundary_element(), oomph::Node::ndim(), oomph::Mesh::nelement(), oomph::SolidNode::nlagrangian(), oomph::HangInfo::nmaster(), oomph::FiniteElement::nnode(), oomph::Mesh::nnode(), oomph::FiniteElement::node_pt(), oomph::Mesh::node_pt(), oomph::AlgebraicNode::node_update(), oomph::TreeForest::ntree(), oomph::Data::ntstorage(), oomph::DocInfo::number(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::TreeForest::open_hanging_node_files(), oomph::Node::position(), oomph::Mesh::prune_dead_nodes(), oomph::Node::raw_value(), oomph::Mesh::reorder_nodes(), s, oomph::Node::set_non_obsolete(), oomph::Node::set_nonhanging(), oomph::Node::set_obsolete(), oomph::Data::set_value(), oomph::Mesh::setup_boundary_element_info(), size, split_elements_if_required(), oomph::TreeForest::stick_all_tree_nodes_into_vector(), oomph::TreeForest::stick_leaves_into_vector(), plotPSD::t, oomph::TimingHelpers::timer(), oomph::Tree::traverse_all(), oomph::Tree::traverse_all_but_leaves(), oomph::TreeForest::tree_pt(), oomph::SolidFiniteElement::undeformed_macro_elem_pt(), oomph::Node::value(), plotDoE::x, oomph::Node::x(), and oomph::SolidNode::xi().
|
protected |
Complete the hanging node scheme recursively.
Complete the hanging node scheme recursively. After the initial markup scheme, hanging nodes can depend on other hanging nodes —> AAAAAAAAARGH! Need to translate this into a scheme where all hanging nodes only depend on non-hanging nodes...
References complete_hanging_nodes_recursively(), boost::multiprecision::fabs(), oomph::Node::hanging_pt(), i, oomph::Node::is_hanging(), k, oomph::HangInfo::master_weight(), n, oomph::HangInfo::nmaster(), oomph::Mesh::nnode(), oomph::Mesh::node_pt(), oomph::oomph_info, oomph::Node::set_hanging_pt(), and oomph::HangInfo::set_master_node_pt().
Referenced by adapt_mesh(), and p_adapt_mesh().
|
protected |
Auxiliary routine for recursive hanging node completion.
Given a node, return a vector of pointers to master nodes and a vector of the associated weights. This is done recursively, so if a node is not hanging, the node is regarded as its own master node which has weight 1.0.
References oomph::Node::hanging_pt(), i, oomph::Node::is_hanging(), k, m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), and oomph::HangInfo::nmaster().
Referenced by complete_hanging_nodes().
|
inlinevirtual |
Doc the targets for mesh adaptation.
Reimplemented from oomph::RefineableMeshBase.
References oomph::RefineableMeshBase::Max_keep_unrefined, Max_p_refinement_level, oomph::RefineableMeshBase::Max_permitted_error, Max_refinement_level, Min_p_refinement_level, oomph::RefineableMeshBase::Min_permitted_error, and Min_refinement_level.
Referenced by FSIRingProblem::dynamic_run().
|
virtual |
Dump refinement pattern to allow for rebuild.
Dump refinement pattern to allow for rebuild
References get_refinement_pattern(), and i.
|
inline |
Return pointer to the Forest represenation of the mesh.
References Forest_pt.
Referenced by get_elements_at_refinement_level(), get_refinement_pattern(), p_adapt_mesh(), and refine_as_in_reference_mesh().
|
virtual |
Extract the elements at a particular refinement level in the refinement pattern - used in Mesh::redistribute or whatever it's going to be called (RefineableMeshBase::reduce_halo_layers or something)
Extract the elements at a particular refinement level in the refinement pattern (used in Mesh::redistribute or whatever it's going to be called (RefineableMeshBase::reduce_halo_layers or something)
References e(), forest_pt(), and oomph::TreeForest::stick_all_tree_nodes_into_vector().
|
virtual |
Get max/min refinement levels in mesh.
Get max/min refinement level.
References e(), oomph::Mesh::element_pt(), max_refinement_level(), min_refinement_level(), and oomph::Mesh::nelement().
Referenced by oomph::Problem::read(), refine_as_in_reference_mesh(), refine_base_mesh(), oomph::RefineableBrickMesh< ELEMENT >::setup_octree_forest(), and oomph::RefineableQuadMesh< ELEMENT >::setup_quadtree_forest().
|
virtual |
Extract refinement pattern: Consider the hypothetical mesh obtained by truncating the refinement of the current mesh to a given level (where level=0
is the un-refined base mesh). To advance to the next refinement level, we need to refine (split) the to_be_refined
[level].size() elements identified by the element numbers contained in vector
to_be_refined[level][...]
Get refinement pattern of mesh: Consider the hypothetical mesh obtained by truncating the refinement of the current mesh to a given level (where level=0
is the un-refined base mesh). To advance to the next refinement level, we need to refine (split) the to_be_refined
[level].size() elements identified by the element numbers contained in vector
to_be_refined[level][...]
References e(), forest_pt(), and oomph::TreeForest::stick_all_tree_nodes_into_vector().
Referenced by dump_refinement(), refine_base_mesh_as_in_reference_mesh(), and refine_base_mesh_as_in_reference_mesh_minus_one().
|
inline |
Access fct for max. permissible p-refinement level (relative to base mesh)
References Max_p_refinement_level.
Referenced by p_adapt().
|
inline |
Access fct for max. permissible refinement level (relative to base mesh)
References Max_refinement_level.
Referenced by adapt(), FSIRingProblem::dynamic_run(), and get_refinement_levels().
|
inline |
Access fct for min. permissible p-refinement level (relative to base mesh)
References Min_p_refinement_level.
|
inline |
Access fct for min. permissible refinement level (relative to base mesh)
References Min_refinement_level.
Referenced by adapt(), FSIRingProblem::dynamic_run(), and get_refinement_levels().
|
delete |
Broken assignment operator.
|
virtual |
p-adapt mesh: Refine elements whose error is lager than err_max and (try to) unrefine those whose error is smaller than err_min
///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// Do adaptive p-refinement for mesh.
/ ... otherwise mark it as having been over-ruled
Reimplemented from oomph::RefineableMeshBase.
References oomph::Mesh::delete_all_external_storage(), oomph::PRefineableElement::deselect_for_p_refinement(), oomph::PRefineableElement::deselect_for_p_unrefinement(), oomph::DocInfo::disable_doc(), oomph::RefineableMeshBase::doc_info(), oomph::RefineableMeshBase::doc_info_pt(), e(), oomph::Mesh::element_pt(), oomph::PRefineableElement::initial_p_order(), oomph::DocInfo::is_doc_enabled(), oomph::Mesh::is_mesh_distributed(), oomph::RefineableMeshBase::max_keep_unrefined(), max_p_refinement_level(), oomph::RefineableMeshBase::max_permitted_error(), oomph::RefineableMeshBase::min_permitted_error(), oomph::Mesh::nelement(), oomph::RefineableMeshBase::Nrefined, oomph::RefineableMeshBase::nrefinement_overruled(), oomph::RefineableMeshBase::Nunrefined, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, p_adapt_mesh(), oomph::PRefineableElement::p_order(), oomph::PRefineableElement::p_refinement_is_enabled(), oomph::Mesh::reorder_nodes(), oomph::PRefineableElement::select_for_p_refinement(), and oomph::PRefineableElement::select_for_p_unrefinement().
|
inline |
Perform the actual tree-based mesh p-adaptation. A simple wrapper to call the function without documentation.
References oomph::DocInfo::directory(), oomph::DocInfo::disable_doc(), and oomph::RefineableMeshBase::doc_info().
Referenced by p_adapt(), p_refine_selected_elements(), p_refine_uniformly(), and p_unrefine_uniformly().
void oomph::TreeBasedRefineableMeshBase::p_adapt_mesh | ( | DocInfo & | doc_info | ) |
Perform the actual tree-based mesh p-adaptation, documenting the progress in the directory specified in DocInfo object.
p-adapt mesh, which exists in two representations, namely as:
p-refinement/derefinement process is documented (in tecplot-able form) if requested.
Procedure:
After adaptation, all nodes (whether new or old) have up-to-date current and previous values.
If refinement process is being documented, the following information is documented:
can be viewed with
can be viewed with
to check the hanging node status.
and can be viewed with
Update the boundary element info – this can be a costly procedure and for this reason the mesh writer might have decided not to set up this scheme. If so, we won't change this and suppress its creation...
/BENFLAG: Check that all the nodes belong to their update elements
References b, oomph::Mesh::boundary_element_pt(), oomph::TreeForest::check_all_neighbours(), oomph::TreeForest::close_hanging_node_files(), complete_hanging_nodes(), oomph::Tree::deactivate_object(), oomph::Mesh::delete_all_external_storage(), oomph::PRefineableElement::deselect_for_p_refinement(), oomph::PRefineableElement::deselect_for_p_unrefinement(), oomph::FiniteElement::dim(), oomph::DocInfo::directory(), oomph::Global_timings::Doc_comprehensive_timings, oomph::RefineableMeshBase::doc_info(), e(), oomph::Mesh::element_pt(), Eigen::placeholders::end, oomph::Mesh::finite_element_pt(), forest_pt(), oomph::MacroElementNodeUpdateElementBase::geom_object_pt(), oomph::Node::get_boundaries_pt(), oomph::FiniteElement::get_x(), oomph::SolidFiniteElement::get_x_and_xi(), oomph::Node::hanging_pt(), i, oomph::DocInfo::is_doc_enabled(), oomph::Node::is_hanging(), oomph::Mesh::is_mesh_distributed(), oomph::Node::is_on_boundary(), oomph::Data::is_pinned(), j, oomph::SolidNode::lagrangian_position(), oomph::FiniteElement::local_coordinate_of_node(), oomph::Mesh::Lookup_for_elements_next_boundary_is_setup, oomph::FiniteElement::macro_elem_pt(), oomph::HangInfo::master_node_pt(), oomph::RefineableMeshBase::max_error(), oomph::RefineableElement::max_integrity_tolerance(), n, oomph::Mesh::nboundary(), oomph::Mesh::nboundary_element(), oomph::Node::ndim(), oomph::Mesh::nelement(), oomph::SolidNode::nlagrangian(), oomph::HangInfo::nmaster(), oomph::FiniteElement::nnode(), oomph::Mesh::nnode(), oomph::FiniteElement::node_pt(), oomph::Mesh::node_pt(), oomph::AlgebraicNode::node_update(), oomph::TreeForest::ntree(), oomph::Data::ntstorage(), oomph::DocInfo::number(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::TreeForest::open_hanging_node_files(), p_refine_elements_if_required(), oomph::Node::position(), oomph::Mesh::prune_dead_nodes(), oomph::Node::raw_value(), oomph::Mesh::reorder_nodes(), s, oomph::MacroElementNodeUpdateElementBase::set_node_update_info(), oomph::Node::set_non_obsolete(), oomph::Node::set_nonhanging(), oomph::Node::set_obsolete(), oomph::Data::set_value(), oomph::Mesh::setup_boundary_element_info(), size, oomph::TreeForest::stick_all_tree_nodes_into_vector(), oomph::TreeForest::stick_leaves_into_vector(), plotPSD::t, oomph::TimingHelpers::timer(), oomph::Tree::traverse_all(), oomph::TreeForest::tree_pt(), oomph::SolidFiniteElement::undeformed_macro_elem_pt(), oomph::Node::value(), plotDoE::x, oomph::Node::x(), and oomph::SolidNode::xi().
|
protectedpure virtual |
p-refine all the elements in the mesh if required. This template free interface will be overloaded in RefineableMesh<ELEMENT> so that any temporary copies of the element that are created will be of the correct type.
Implemented in oomph::TreeBasedRefineableMesh< ELEMENT >.
Referenced by p_adapt_mesh().
void oomph::TreeBasedRefineableMeshBase::p_refine_selected_elements | ( | const Vector< PRefineableElement * > & | elements_to_be_refined_pt | ) |
p-refine mesh by refining the elements identified by their pointers.
p-refine mesh by refining the elements identified by their pointers.
References e(), oomph::Mesh::is_mesh_distributed(), OOMPH_EXCEPTION_LOCATION, and p_adapt_mesh().
void oomph::TreeBasedRefineableMeshBase::p_refine_selected_elements | ( | const Vector< unsigned > & | elements_to_be_refined | ) |
p-refine mesh by refining the elements identified by their numbers.
p-refine mesh by refining the elements identified by their numbers.
References e(), oomph::Mesh::element_pt(), oomph::Mesh::is_mesh_distributed(), OOMPH_EXCEPTION_LOCATION, p_adapt_mesh(), and oomph::PRefineableElement::select_for_p_refinement().
|
inlinevirtual |
p-refine mesh uniformly
Reimplemented from oomph::RefineableMeshBase.
References oomph::RefineableMeshBase::p_refine_uniformly().
|
virtual |
p-refine mesh uniformly and doc process
p-refine mesh uniformly
Reimplemented from oomph::RefineableMeshBase.
References oomph::RefineableMeshBase::doc_info(), e(), oomph::Mesh::element_pt(), oomph::Mesh::nelement(), p_adapt_mesh(), and oomph::PRefineableElement::select_for_p_refinement().
void oomph::TreeBasedRefineableMeshBase::p_unrefine_uniformly | ( | DocInfo & | doc_info | ) |
p-unrefine mesh uniformly
p-unrefine mesh uniformly Unlike in h-refinement, we can simply p-unrefine each element in the mesh
References oomph::RefineableMeshBase::doc_info(), e(), oomph::Mesh::element_pt(), oomph::Mesh::nelement(), p_adapt_mesh(), and oomph::PRefineableElement::select_for_p_unrefinement().
|
virtual |
Read refinement pattern to allow for rebuild.
Read refinement pattern to allow for rebuild
References i, and oomph::Global_string_for_annotation::string().
Referenced by refine().
|
virtual |
Refine mesh according to refinement pattern in restart file.
Refine base mesh according to refinement pattern in restart file.
References read_refinement(), and refine_base_mesh().
|
virtual |
Refine mesh once so that its topology etc becomes that of the (finer!) reference mesh – if possible! Useful for meshes in multigrid hierarchies. If the meshes are too different and the conversion cannot be performed, the code dies (provided PARANOID is enabled).
References e(), calibrate::error, oomph::Tree::father_pt(), oomph::Mesh::finite_element_pt(), forest_pt(), get_refinement_levels(), i, oomph::Tree::is_leaf(), j, oomph::Node::ndim(), oomph::Mesh::nelement(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::Mesh::node_pt(), oomph::Tree::nsons(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::Mesh::output(), oomph::pause(), Eigen::bfloat16_impl::pow(), refine_selected_elements(), oomph::Tree::son_pt(), sqrt(), oomph::TreeForest::stick_leaves_into_vector(), and oomph::Node::x().
void oomph::TreeBasedRefineableMeshBase::refine_base_mesh | ( | Vector< Vector< unsigned >> & | to_be_refined | ) |
Refine base mesh according to specified refinement pattern.
Refine original, unrefined mesh according to specified refinement pattern (relative to original, unrefined mesh).
References adapt_mesh(), data, oomph::Mesh::element_pt(), get_refinement_levels(), i, oomph::Mesh::is_mesh_distributed(), and unrefine_uniformly().
Referenced by PolarNSProblem< ELEMENT >::output_streamfunction(), refine(), refine_base_mesh_as_in_reference_mesh(), and refine_base_mesh_as_in_reference_mesh_minus_one().
|
virtual |
Refine to same degree as the reference mesh.
Refine base mesh to same degree as reference mesh (relative to original unrefined mesh).
References get_refinement_pattern(), and refine_base_mesh().
|
virtual |
Refine base mesh to same degree as reference mesh minus one level of refinement (relative to original unrefined mesh). Useful function for multigrid solvers; allows the easy copy of a mesh to the level of refinement just below the current one
Refine to same degree as the reference mesh minus one. Useful function for multigrid solvers; allows the easy copy of a mesh to the level of refinement just below the current one. Returns a boolean variable which indicates if the reference mesh has not been refined at all
References get_refinement_pattern(), and refine_base_mesh().
Referenced by oomph::MGSolver< DIM >::setup_mg_hierarchy(), and oomph::HelmholtzMGPreconditioner< DIM >::setup_mg_hierarchy().
|
virtual |
Refine mesh by splitting the elements identified by their pointers.
Refine mesh by splitting the elements identified by their pointers
References adapt_mesh(), e(), oomph::Mesh::is_mesh_distributed(), and OOMPH_EXCEPTION_LOCATION.
|
virtual |
Refine mesh by splitting the elements identified by their numbers.
References adapt_mesh(), e(), oomph::Mesh::element_pt(), oomph::Mesh::is_mesh_distributed(), and OOMPH_EXCEPTION_LOCATION.
Referenced by FSIRingProblem::FSIRingProblem(), and refine_as_in_reference_mesh().
|
inlinevirtual |
Refine mesh uniformly.
Reimplemented from oomph::RefineableMeshBase.
Reimplemented in oomph::RefineableQuadFromTriangleMesh< ELEMENT >.
References oomph::RefineableMeshBase::refine_uniformly().
|
virtual |
Refine mesh uniformly and doc process.
Refine mesh uniformly.
Implements oomph::RefineableMeshBase.
Reimplemented in oomph::RefineableQuadFromTriangleMesh< ELEMENT >.
References adapt_mesh(), oomph::RefineableMeshBase::doc_info(), e(), oomph::Mesh::element_pt(), and oomph::Mesh::nelement().
Referenced by ExtrudedMovingCylinderProblem< TWO_D_ELEMENT, THREE_D_ELEMENT >::create_extruded_mesh(), run_navier_stokes_outflow(), and TurekProblem< FLUID_ELEMENT, SOLID_ELEMENT >::TurekProblem().
|
pure virtual |
Set up the tree forest associated with the Mesh (if any)
Implemented in oomph::RefineableQuadMesh< ELEMENT >, oomph::RefineableQuadMesh< NST_ELEMENT >, oomph::RefineableQuadMesh< AD_ELEMENT >, oomph::RefineableLineMesh< ELEMENT >, and oomph::RefineableBrickMesh< ELEMENT >.
|
protectedpure virtual |
Split all the elements in the mesh if required. This template free interface will be overloaded in RefineableMesh<ELEMENT> so that any new elements that are created will be of the correct type.
Implemented in oomph::TreeBasedRefineableMesh< ELEMENT >.
Referenced by adapt_mesh().
|
inline |
Level to which the mesh was uniformly refined when it was pruned.
References Uniform_refinement_level_when_pruned.
|
inline |
Level to which the mesh was uniformly refined when it was pruned (const version)
References Uniform_refinement_level_when_pruned.
|
virtual |
Unrefine mesh uniformly: Return 0 for success, 1 for failure (if unrefinement has reached the coarsest permitted level)
Unrefine mesh uniformly. Return 0 for success, 1 for failure (if unrefinement has reached the coarsest permitted level)
Implements oomph::RefineableMeshBase.
References adapt(), e(), calibrate::error, oomph::RefineableMeshBase::max_keep_unrefined(), oomph::RefineableMeshBase::max_permitted_error(), oomph::RefineableMeshBase::min_permitted_error(), and oomph::Mesh::nelement().
Referenced by refine_base_mesh().
|
protected |
Forest representation of the mesh.
Referenced by adapt_mesh(), oomph::ElasticRefineableQuarterPipeMesh< ELEMENT >::ElasticRefineableQuarterPipeMesh(), forest_pt(), oomph::TreeBasedRefineableMesh< ELEMENT >::p_refine_elements_if_required(), oomph::RefineableEighthSphereMesh< ELEMENT >::RefineableEighthSphereMesh(), oomph::RefineableFullCircleMesh< ELEMENT >::RefineableFullCircleMesh(), oomph::RefineableQuarterPipeMesh< ELEMENT >::RefineableQuarterPipeMesh(), oomph::RefineableQuarterTubeMesh< ELEMENT >::RefineableQuarterTubeMesh(), oomph::RefineableTubeMesh< ELEMENT >::RefineableTubeMesh(), oomph::RefineableLineMesh< ELEMENT >::setup_binary_tree_forest(), oomph::RefineableBrickMesh< ELEMENT >::setup_octree_forest(), oomph::RefineableQuadMesh< ELEMENT >::setup_quadtree_forest(), oomph::TreeBasedRefineableMesh< ELEMENT >::split_elements_if_required(), TreeBasedRefineableMeshBase(), oomph::RefineableQuarterPipeMesh< ELEMENT >::~RefineableQuarterPipeMesh(), and ~TreeBasedRefineableMeshBase().
|
protected |
Max. permissible p-refinement level (relative to base mesh)
Referenced by doc_adaptivity_targets(), max_p_refinement_level(), and TreeBasedRefineableMeshBase().
|
protected |
Max. permissible refinement level (relative to base mesh)
Referenced by doc_adaptivity_targets(), max_refinement_level(), and TreeBasedRefineableMeshBase().
|
protected |
Min. permissible p-refinement level (relative to base mesh)
Referenced by doc_adaptivity_targets(), min_p_refinement_level(), and TreeBasedRefineableMeshBase().
|
protected |
Min. permissible refinement level (relative to base mesh)
Referenced by doc_adaptivity_targets(), min_refinement_level(), and TreeBasedRefineableMeshBase().
|
protected |
Level to which the mesh was uniformly refined when it was pruned.
Referenced by TreeBasedRefineableMeshBase(), and uniform_refinement_level_when_pruned().